Repository navigation
Conversation
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Concurrent cache hits can trigger overlapping destructive database reimports.
1 open finding
What changed in this PR
Fixes stale contextual-query results after test database reimports.
Changes:
- Invalidates provider caches when databases are removed.
- Checks for outdated test databases before returning cached results.
- Adds cache and provider tests.
| File | Description |
|---|---|
template-provider.ts |
Adds invalidation and reimport checks. |
cached-operation.ts |
Adds cache-key inspection. |
template-provider.test.ts |
Tests provider cache refresh behavior. |
cached-operation.test.ts |
Tests cache lookup and reset behavior. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| ); | ||
| const db = dbm.findDatabaseItemBySourceArchive(sourceArchiveUri); | ||
| if (db) { | ||
| await dbm.maybeReimportTestDatabase(db.databaseUri); |
Contributor
Author
There was a problem hiding this comment.
The cache is hit so seldomly, I don't imagine this ever being a problem.
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.

Fixes #3758
When an imported
.testprojtest database is reimported after runningcodeql test run --keep-databases, the old database item is removed and the updated database is copied into the same storage path (producing the samecodeql-zip-archive://source file URIs).Previously,
View CFGupdated properly becauseTemplatePrintCfgProvideronly cached the resolved query path and template parameters while re-evaluatingPrintCfg.qlon every invocation. In contrast,TemplatePrintAstProvider(as well asTemplateQueryDefinitionProviderandTemplateQueryReferenceProvider) cached evaluated results inCachedOperationkeyed byfileUri.toString():DatabaseEventKind.Remove), soView ASTcontinued returning stale AST results after refreshing a test database.provideAst/provideDefinition/provideReferencesreturned the cached entry without running a query, bypassingDatabaseManager.maybeReimportTestDatabaseand never prompting to reimport an outdated test database.Changes
CachedOperation.has()to check whether a key is currently cached.dbm.onDidChangeDatabaseItemlistener onTemplatePrintAstProvider,TemplateQueryDefinitionProvider,TemplateQueryReferenceProvider, andTemplatePrintCfgProviderto reset their caches onDatabaseEventKind.Remove.dbm.maybeReimportTestDatabasebefore serving cached results inTemplatePrintAstProvider,TemplateQueryDefinitionProvider, andTemplateQueryReferenceProvider.template-provider.test.tsandcached-operation.test.ts.