Skip to content

Conversation

@bplatz
Copy link
Contributor

@bplatz bplatz commented Nov 3, 2025

Changes

Ledger Release

  • Added fluree.db.api/release-ledger - Removes ledger from connection cache and cleans up resources (index queues, nameservice subscriptions)
  • Release is idempotent and thread-safe (safe to call multiple times on same ledger)

Idle Timeout

  • Added :ledger-cache-idle-minutes config option (default: disabled)
  • Background loop checks for idle ledgers every minute and releases them
  • Respects active indexing operations - resets idle timer if indexing is in progress
  • Tracks last-accessed timestamp per ledger in connection state

Disconnect Improvements

  • Added :disconnecting? flag to prevent new operations during disconnect
  • Changed to release all cached ledgers in parallel using async/merge
  • Logs warnings for release errors but continues with disconnect
  • Stops idle cleanup loop before releasing ledgers

Implementation Details

  • connection.cljc: Added start-idle-cleanup-loop, touch-ledger-access, close-ledger-resources, release-ledger
  • api.cljc: Updated disconnect for parallel release, added release-ledger wrapper, updated validate-connection
  • nameservice/storage.cljc: Helper functions for indexing status tracking

Test Coverage

Added test/fluree/db/connection/disconnect_test.clj with 4 tests (8 assertions):

  • Disconnect prevents new operations after starting
  • Disconnect releases multiple ledgers in parallel
  • Idle cleanup loop is created when configured
  • Release ledger is idempotent (race condition safety)

@bplatz bplatz requested a review from a team November 3, 2025 20:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants