Commit Graph

78 Commits

Author SHA1 Message Date
Puskar Basu
3f4eaae1a8 Fix db client deadlocks with non-blocking cleanup and RW locks (#4918) 2025-12-16 21:19:27 +05:30
Nathan Wallace
189a1e38a2 Fix race condition on customSearchPath slice closes #4792 (#4837)
* Add test for #4792: customSearchPath data race

This test demonstrates the data race on the customSearchPath slice when
accessed concurrently from multiple goroutines without synchronization.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix #4792: Add mutex protection for customSearchPath slice

The customSearchPath slice was being accessed concurrently from multiple
goroutines without synchronization, causing data races. This fix adds a
dedicated mutex (searchPathMutex) to protect all reads and writes to the
customSearchPath and searchPathPrefix fields.

Changes:
- Added searchPathMutex field to DbClient struct
- Initialize searchPathMutex in NewDbClient constructor
- Protected all customSearchPath writes in SetRequiredSessionSearchPath
- Protected all customSearchPath reads in GetRequiredSessionSearchPath
- Protected all customSearchPath reads in GetCustomSearchPath
- Fixed logging in ensureSessionSearchPath to use already-fetched value
- Updated test to initialize searchPathMutex for proper testing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-16 11:51:41 -05:00
Nathan Wallace
9c3791fafd Fix #4809: Add nil checks for sessions map after Close() (rebased) (#4883)
* Add test for #4809: BeforeClose should handle nil sessions map

This test verifies that the BeforeClose callback checks if c.sessions map
has been nil'd by Close() before attempting to delete from it.

The test fails as expected without the fix, proving the bug exists.

Bug: #4809

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix #4809: Add nil check in BeforeClose for sessions map

Add nil check in BeforeClose callback before accessing c.sessions map.
This prevents panic when the callback executes after Close() has nil'd
the map.

Fixes #4809

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-16 10:53:39 -05:00
Nathan Wallace
ed5bc425aa Race condition in DbClient.Close() on sessions map closes #4780 (#4822)
* Add test demonstrating bug #4780 - Close() race on sessions

Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix #4780: Protect sessions map access in Close() with mutex

This fix was already merged into develop via another PR. Creating empty commit to maintain 2-commit structure for CI pattern validation.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-16 08:09:45 -05:00
Nathan Wallace
b6aa7fc7d5 Fix #4698: Add nil checks to ResetPools method (#4732)
* Add test for #4698: ResetPools should handle nil pools gracefully

* Fix #4698: Add nil checks to ResetPools method
2025-11-15 11:55:33 -05:00
Nathan Wallace
5ee33414b7 Fix concurrent access to sessions map in Close() closes #4793 (#4836)
* Add tests demonstrating bug #4793: Close() sets sessions=nil without mutex

These tests demonstrate the race condition where Close() sets c.sessions
to nil without holding the mutex, while AcquireSession() tries to access
the map with the mutex held.

Running with -race detects the data race and the test panics with
"assignment to entry in nil map".

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix #4793: Protect sessions map access with mutex in Close()

Acquire sessionsMutex before setting sessions to nil in Close() to prevent
data race with AcquireSession(). Also add nil check in AcquireSession() to
handle the case where Close() has been called.

This prevents the panic "assignment to entry in nil map" when Close() and
AcquireSession() are called concurrently.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-15 11:29:57 -05:00
Nathan Wallace
11ce53cfc4 Race condition on disableTiming field closes #4808 (rebased) (#4890)
* Add test for #4808: Race condition on disableTiming field

Add test that verifies disableTiming field uses atomic.Bool instead of
plain bool to prevent race conditions.

The test checks that:
- disableTiming is declared as atomic.Bool
- shouldFetchTiming() uses atomic Load()
- getQueryTiming() uses atomic Store() operations
- Direct assignments that cause races are not present

This test will fail until the implementation is fixed.

* Fix #4808: Use atomic.Bool for disableTiming to prevent race condition
2025-11-15 11:05:25 -05:00
Nathan Wallace
2e5f3fda97 Add comprehensive passing tests from bug hunting initiative (#4864) 2025-11-13 09:26:46 +08:00
Nathan Wallace
99fd81ccf6 Fix memory leak in DatabaseSession management (issue #3737) (#4742) 2025-11-11 18:35:16 +08:00
Puskar Basu
e19d35c457 chore: update module to v2 and bump Go version to 1.24 (#4597) 2025-07-07 16:03:56 +05:30
Puskar Basu
da2f3ecc03 Upgrade to pipe-fittings v2, go-kit v1 (#4485) 2025-03-06 16:34:18 +05:30
kai
112647bae0 tidy 2024-10-15 11:44:13 +01:00
kai
9c89b4447a timing streaming 2024-09-27 18:14:28 +05:30
kai
1804741bbd tidy 2024-09-27 18:14:28 +05:30
kai
973939e4a2 steampipe timing working 2024-09-27 18:14:28 +05:30
kai
5fd5ae0740 timing broken 2024-09-27 18:14:28 +05:30
kai
e5b1927a63 tidy imports 2024-09-27 18:14:28 +05:30
kai
cb681c67cc compiles but needs testing 2024-09-27 18:14:28 +05:30
kai
ef21f1452e steampipe compiles 2024-09-27 18:14:28 +05:30
kai
cd07bf20f1 working on it 2024-09-27 18:13:12 +05:30
Puskar Basu
c6b8c835ab Update query JSON output to be consistent across pipelings - also handle duplicate column names. Closes #4317 2024-09-02 12:14:53 +01:00
kaidaguerre
07782a2b13 Adds support for verbose timing information. Closes #4237. Closes #4244
- JSON output format has changed to move the rows to under a `rows` property, with timing information under the `metadata` property
- Update timing display to show rows returned and rows fetched, as well as adding verbose mode which lists all scans
- Use enums for output mode and timing mode - timing is now either `on`, `off` or `verbose`
- Bugfix: ensure error is returned from ExecuteSystemClientCall. Closes #4246
2024-04-17 10:12:17 +01:00
loselarry
dcf3d89b01 chore: fix function names in comment (#4240)
Signed-off-by: loselarry <bikangning@yeah.net>
2024-04-10 10:16:18 +01:00
kai
94a61f1aea Create a plugin instance for implicit plugins even if not installed. #3451 2023-09-26 14:23:23 +01:00
kaidaguerre
79606c5bcd Rename internal introspection tables. Fix warning notifications from RefreshConnections. Improve error handlingh for config inconsistencies in conneciton and plugin config. Closes #3886 2023-09-22 16:02:41 +01:00
kaidaguerre
f232b14f06 Add support for multiple instances of the same plugin version to execute. Closes #3863 2023-09-18 15:39:17 +01:00
kaidaguerre
7feb305fde Provide mechanism for plugin manager to send warnings back to CLI. Closes #3603 (#3835) 2023-09-13 15:34:15 +01:00
Binaek Sarkar
09898c7ca1 Fixes issue where Fetch and Hydrate data are not shown with timing enabled. Closes #3808 (#3815) 2023-09-08 17:37:29 +01:00
kaidaguerre
01f2f1e525 Update PluginManager plugins property after a ConnectionConfigChanged event. Fixes failure to start plugin after connection config added while service is running. Closes #3812 (#3813) 2023-09-07 18:48:07 +01:00
Binaek Sarkar
a3a714d6cd Fixes issue where temporary tables are dropped in interactive prompt when pool connections are recycled. Closes #3359. Closes #3781 2023-09-06 16:46:40 +01:00
Binaek Sarkar
edfe58f815 Revert "Fixes issue where temporary tables are lost in the middle of a long running interactive session. Closes #3543" (#3789)
This reverts commit 047d8b5556.
2023-09-01 14:33:05 +01:00
Binaek Sarkar
047d8b5556 Fixes issue where temporary tables are lost in the middle of a long running interactive session. Closes #3543 2023-08-29 12:18:20 +01:00
Binaek Sarkar
132b3a7c32 Fixes issue where metaquery hangs in interactive prompt. Closes #3775 2023-08-28 17:21:30 +01:00
Binaek Sarkar
08b447a261 Differentiate between user and system queries using application name. Closes #3600 2023-08-25 16:50:27 +01:00
Binaek Sarkar
854819f8f1 Validates workspace profile cache settings. Closes #3646 2023-07-14 13:22:08 +01:00
kaidaguerre
b06348757a Fix linting warnings
---------

Co-authored-by: Binaek Sarkar <binaek@turbot.com>
Co-authored-by: Puskar Basu <puskar@turbot.com>
2023-07-06 16:08:23 +01:00
Binaek Sarkar
9754ed0c1a Creates 'version.json' in each plugin directory. Recompose the global plugin versions.json if it is missing or corrupt. Closes #3492 2023-06-30 08:56:59 +01:00
Binaek Sarkar
a1caf53eeb Adds 'steampipe_server_settings' table populated with server settings data during service startup. Closes #3462 2023-06-21 13:23:14 +01:00
Puskar Basu
aaf0813c17 Fix issue where result counter spinner was not showing up in interactive when timing was enabled. Closes #3481 2023-05-30 15:16:44 +01:00
Binaek Sarkar
e5e8105657 Fixes issue where caching is still enabled for plugins compiled with SDKv4. Closes #3427 2023-05-18 15:02:49 +01:00
kai
3b1e99182a Replace all '...' with ellipsis … in terminal output. Closes #3441 2023-05-18 10:41:27 +01:00
kai
3d1423b235 Fix typo in constants.ForeighTableSettings. Update updateScanMetadataMaxId to use new table name. #3416 2023-05-18 08:57:31 +01:00
Binaek Sarkar
6d73804f3a Fixes issue where 'internal' would be added twice in the search_path if one is mentioned in the non default search path. Closes #3397 2023-05-17 15:19:45 +01:00
Binaek Sarkar
9653db55da Drops legacy 'internal' and 'steampipe_command' schema. Closes #3403 2023-05-17 13:31:37 +01:00
kaidaguerre
f4b5d64d71 Fix interactive timing output not including scan metadata (hydrate calls/ rows). Closes #3420 2023-05-17 11:29:04 +01:00
kaidaguerre
5fdf6920cf Add support for connecting to a steampipe server which does not have connection state table (i.e. it is a pre v0.20.0 version). Closes #3414 2023-05-16 17:15:13 +01:00
kaidaguerre
4635640f4e Remove 'steampipe_command' schema and move settings and scan_metadata foreign tables to 'steampipe_internal' schema. Closes #3416 2023-05-16 17:12:44 +01:00
kaidaguerre
b0b2c62338 Add support for 'import_schema' property in connection config, controlling whether to create a postgres schema for a steampipe connection. Closes #3407
Rename 'connection_state' table to 'steampipe_connection_state'. #3403
Rename 'internal' table to 'steampipe_internal
Remove 'Connection' property from ConnectionState
2023-05-15 13:07:36 +01:00
kaidaguerre
40804a3201 Execute RefreshConnections asyncronously and optimise for high connection count. Add connection_state table.
- Execute RefreshConnections asyncronously
- Add connection_state table to indicate the loading state of connections
- Optimise RefreshConnections by cloning connection schemas
- Add locking to ensure only a single instance of RefreshConnections runs
- Start executing queries without waiting for connections to load, add smart error handling to wait for required connection
- Optimise autocomplete for high connection count
- Autocomplete and inspect data available before all conections are refreshed
- Update file watcher to respond to CHMOD, so thaat it pickes up deletion of file contents

 Closes #3394
 Closes #3267
2023-05-10 09:05:08 +01:00
Binaek Sarkar
299697ae2f Updates in cache configuration to allow disabling of all caching on server. Closes #3258
STEAMPIPE_CACHE environment variable resolves to service cache enabled as well as client cache enabled

service cache enabled is used by the plugin manager to enable/disable caching on the plugins during startup (runtime toggle is not allowed) - with a max_ttl

client cache enabled is used to enable/disable the cache on the database connection (fdw)
A TTL can also be set on the client side capped to max_ttl on the server
2023-03-31 15:12:25 +01:00