[Collections] CLI 'remove' results in "database is locked" error #3225
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.
Motivation:
Using the
package-collection
CLI, theremove
command results in "database is locked" error even though the collection is removed successfully. This is because aSQLitePackageCollectionsStorage
is created at the beginning of each command run, and in the initializer the time-consumingpopulateTargetTrie
is called. When the command finishes running, it triggersSQLitePackageCollectionsStorage
to be closed, which in turn closes the SQLite connection, but this is done whilepopulateTargetTrie
is still running and thus causes the "database is locked" error.Modifications:
PackageCollections
can be expensive and should only be done once in a commandisShuttingDown
flag whenSQLitePackageCollectionsStorage.close
is called sopopulateTargetTrie
knows that it should stop.db.close
in a second attempt after allowing time for database operations to react toisShuttingDown
flagpopulateTargetTrie
should memoize its resultResult:
No "database is locked" error.