Repository navigation
fix: recover interrupted secondary indexes off-thread - #1888
Open
cbeaulieu-gt wants to merge 1 commit into
Open
cbeaulieu-gt wants to merge 1 commit into
cbeaulieu-gt wants to merge 1 commit into
Conversation
Contributor
Author
|
I noticed that maintainer draft #1919 carries the #1887 recovery fix as commit Please let me know whether you would prefer #1888 rebased as the focused integration path, or whether #1919 is intended to carry the fix forward. I’m happy to update this branch if the standalone PR is still useful.
|
Open
7 tasks
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Why
Crash recovery previously executed every missing
CREATE INDEXsynchronously insideDatabaseConnection.open(). On a large graph, one index build can block the MCP event loop long enough for the liveness watchdog to kill the process before SQLite commits any visible file progress, so the next restart repeats the same work and can be killed again.The synchronous API remains available for compatibility. Async callers now use the off-thread recovery path and receive the connection only after every required index has been restored.
Verification
npm run buildnpx vitest run __tests__/foundation.test.tsnpx vitest run __tests__/liveness-watchdog.test.tsnpx vitest run __tests__/concurrent-locking.test.tsnpx vitest run __tests__/mcp-unindexed.test.tsnpx vitest run __tests__/db-reopen-on-replace.test.tsThe watchdog regression creates a 600,000-node interrupted database under a scaled timeout. The former synchronous open is killed by the watchdog; the async recovery completes and restores the full index set.
Fixes #1887