Skip to content

Commit d83409d

Browse files
committed
add commands for warming the overlay-base cache
1 parent e0a17ca commit d83409d

File tree

14 files changed

+238
-18
lines changed

14 files changed

+238
-18
lines changed

extensions/.DS_Store

6 KB
Binary file not shown.

extensions/ql-vscode/.DS_Store

8 KB
Binary file not shown.

extensions/ql-vscode/package.json

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -515,6 +515,14 @@
515515
"command": "codeQL.runQueryContextEditor",
516516
"title": "CodeQL: Run Query on Selected Database"
517517
},
518+
{
519+
"command": "codeQL.runWarmOverlayBaseCacheQuery",
520+
"title": "CodeQL: Warm Overlay-Base Cache for Query"
521+
},
522+
{
523+
"command": "codeQL.runWarmOverlayBaseCacheQueryContextEditor",
524+
"title": "CodeQL: Warm Overlay-Base Cache for Query"
525+
},
518526
{
519527
"command": "codeQL.debugQuery",
520528
"title": "CodeQL: Debug Query"
@@ -571,10 +579,18 @@
571579
"command": "codeQL.runQueries",
572580
"title": "CodeQL: Run Queries in Selected Files"
573581
},
582+
{
583+
"command": "codeQL.runWarmOverlayBaseCacheQueries",
584+
"title": "CodeQL: Warm Overlay-Base Cache for Queries in Selected Files"
585+
},
574586
{
575587
"command": "codeQL.runQuerySuite",
576588
"title": "CodeQL: Run Selected Query Suite"
577589
},
590+
{
591+
"command": "codeQL.runWarmOverlayBaseCacheQuerySuite",
592+
"title": "CodeQL: Warm Overlay-Base Cache for Query Suite"
593+
},
578594
{
579595
"command": "codeQL.quickEval",
580596
"title": "CodeQL: Quick Evaluation"
@@ -1378,11 +1394,21 @@
13781394
"group": "9_qlCommands",
13791395
"when": "resourceScheme != codeql-zip-archive"
13801396
},
1397+
{
1398+
"command": "codeQL.runWarmOverlayBaseCacheQueries",
1399+
"group": "9_qlCommands",
1400+
"when": "resourceScheme != codeql-zip-archive"
1401+
},
13811402
{
13821403
"command": "codeQL.runQuerySuite",
13831404
"group": "9_qlCommands",
13841405
"when": "resourceScheme != codeql-zip-archive && resourceExtname == .qls && !explorerResourceIsFolder && !listMultiSelection && config.codeQL.canary"
13851406
},
1407+
{
1408+
"command": "codeQL.runWarmOverlayBaseCacheQuerySuite",
1409+
"group": "9_qlCommands",
1410+
"when": "resourceScheme != codeql-zip-archive && resourceExtname == .qls && !explorerResourceIsFolder && !listMultiSelection && config.codeQL.canary"
1411+
},
13861412
{
13871413
"command": "codeQL.runVariantAnalysisContextExplorer",
13881414
"group": "9_qlCommands",
@@ -1408,6 +1434,10 @@
14081434
"command": "codeQL.runQuery",
14091435
"when": "resourceLangId == ql && resourceExtname == .ql"
14101436
},
1437+
{
1438+
"command": "codeQL.runWarmOverlayBaseCacheQuery",
1439+
"when": "resourceLangId == ql && resourceExtname == .ql"
1440+
},
14111441
{
14121442
"command": "codeQLQueries.runLocalQueryFromQueriesPanel",
14131443
"when": "false"
@@ -1428,6 +1458,10 @@
14281458
"command": "codeQL.runQueryContextEditor",
14291459
"when": "false"
14301460
},
1461+
{
1462+
"command": "codeQL.runWarmOverlayBaseCacheQueryContextEditor",
1463+
"when": "false"
1464+
},
14311465
{
14321466
"command": "codeQL.debugQuery",
14331467
"when": "config.codeQL.canary && editorLangId == ql && resourceExtname == .ql && !inDebugMode"
@@ -1480,10 +1514,18 @@
14801514
"command": "codeQL.runQueries",
14811515
"when": "false"
14821516
},
1517+
{
1518+
"command": "codeQL.runWarmOverlayBaseCacheQueries",
1519+
"when": "false"
1520+
},
14831521
{
14841522
"command": "codeQL.runQuerySuite",
14851523
"when": "false"
14861524
},
1525+
{
1526+
"command": "codeQL.runWarmOverlayBaseCacheQuerySuite",
1527+
"when": "false"
1528+
},
14871529
{
14881530
"command": "codeQL.quickEval",
14891531
"when": "editorLangId == ql"
@@ -1832,6 +1874,10 @@
18321874
"command": "codeQL.runQueryContextEditor",
18331875
"when": "editorLangId == ql && resourceExtname == .ql && !inDebugMode"
18341876
},
1877+
{
1878+
"command": "codeQL.runWarmOverlayBaseCacheQueryContextEditor",
1879+
"when": "editorLangId == ql && resourceExtname == .ql && !inDebugMode"
1880+
},
18351881
{
18361882
"command": "codeQL.runQueryOnMultipleDatabasesContextEditor",
18371883
"when": "editorLangId == ql && resourceExtname == .ql"

extensions/ql-vscode/src/common/commands.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,11 @@ export type QueryEditorCommands = {
126126
// Commands used for running local queries
127127
export type LocalQueryCommands = {
128128
"codeQL.runQuery": (uri?: Uri) => Promise<void>;
129+
"codeQL.runWarmOverlayBaseCacheQuery": (uri?: Uri) => Promise<void>;
129130
"codeQL.runQueryContextEditor": (uri?: Uri) => Promise<void>;
131+
"codeQL.runWarmOverlayBaseCacheQueryContextEditor": (
132+
uri?: Uri,
133+
) => Promise<void>;
130134
"codeQL.runQueryOnMultipleDatabases": (uri?: Uri) => Promise<void>;
131135
"codeQL.runQueryOnMultipleDatabasesContextEditor": (
132136
uri?: Uri,
@@ -138,7 +142,9 @@ export type LocalQueryCommands = {
138142
"codeQLQueries.createQuery": () => Promise<void>;
139143
"codeQL.runLocalQueryFromFileTab": (uri: Uri) => Promise<void>;
140144
"codeQL.runQueries": ExplorerSelectionCommandFunction<Uri>;
145+
"codeQL.runWarmOverlayBaseCacheQueries": ExplorerSelectionCommandFunction<Uri>;
141146
"codeQL.runQuerySuite": ExplorerSelectionCommandFunction<Uri>;
147+
"codeQL.runWarmOverlayBaseCacheQuerySuite": ExplorerSelectionCommandFunction<Uri>;
142148
"codeQL.quickEval": (uri: Uri) => Promise<void>;
143149
"codeQL.quickEvalCount": (uri: Uri) => Promise<void>;
144150
"codeQL.quickEvalContextEditor": (uri: Uri) => Promise<void>;

extensions/ql-vscode/src/common/logging/vscode/loggers.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ export const extLogger = new OutputChannelLogger("CodeQL Extension Log");
1010
// Logger for messages from the query server.
1111
export const queryServerLogger = new OutputChannelLogger("CodeQL Query Server");
1212

13+
// Logger for messages from the query server for warming overlay-base cache.
14+
export const queryServerForWarmingOverlayBaseCacheLogger =
15+
new OutputChannelLogger("CodeQL Query Server for warming overlay-base cache");
16+
1317
// Logger for messages from the language server.
1418
export const languageServerLogger = new OutputChannelLogger(
1519
"CodeQL Language Server",

extensions/ql-vscode/src/databases/local-databases/database-manager.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ export class DatabaseManager extends DisposableObject {
118118
private readonly ctx: ExtensionContext,
119119
private readonly app: App,
120120
private readonly qs: QueryRunner,
121+
private readonly qsForWarmingOverlayBaseCache: QueryRunner,
121122
private readonly cli: CodeQLCliServer,
122123
private readonly languageContext: LanguageContextStore,
123124
public logger: Logger,
@@ -739,6 +740,31 @@ export class DatabaseManager extends DisposableObject {
739740
}
740741
}
741742

743+
public async withDatabaseInQsForWarmingOverlayBaseCache(
744+
whatToDo: () => Promise<void>,
745+
) {
746+
try {
747+
if (this._currentDatabaseItem) {
748+
const dbItem = this._currentDatabaseItem;
749+
await this.qs.deregisterDatabase(dbItem);
750+
await this.qsForWarmingOverlayBaseCache.registerDatabase(dbItem);
751+
await whatToDo();
752+
await this.qsForWarmingOverlayBaseCache.deregisterDatabase(dbItem);
753+
await this.qs.registerDatabase(dbItem);
754+
} else await whatToDo();
755+
} catch (e) {
756+
const message = getErrorMessage(e);
757+
if (message === "Connection is disposed.") {
758+
// This is expected if the query server is not running.
759+
void extLogger.log(
760+
`Could not use database for warming overlay-base cache because query server is not running.`,
761+
);
762+
return;
763+
}
764+
throw e;
765+
}
766+
}
767+
742768
private async deregisterDatabase(dbItem: DatabaseItem) {
743769
try {
744770
await this.qs.deregisterDatabase(dbItem);

extensions/ql-vscode/src/debugger/debugger-ui.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ class QLDebugAdapterTracker
141141
[this.configuration.query, results],
142142
]),
143143
},
144+
false,
144145
(_) => {},
145146
);
146147
this.localQueryRun = undefined;

extensions/ql-vscode/src/extension.ts

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ import {
8686
extLogger,
8787
languageServerLogger,
8888
queryServerLogger,
89+
queryServerForWarmingOverlayBaseCacheLogger,
8990
} from "./common/logging/vscode";
9091
import { QueryHistoryManager } from "./query-history/query-history-manager";
9192
import type { CompletedLocalQueryInfo } from "./query-results";
@@ -172,6 +173,7 @@ function getCommands(
172173
app: App,
173174
cliServer: CodeQLCliServer,
174175
queryRunner: QueryRunner,
176+
queryRunnerForWarmingOverlayBaseCache: QueryRunner,
175177
languageClient: LanguageClient,
176178
): BaseCommands {
177179
const getCliVersion = async () => {
@@ -189,6 +191,7 @@ function getCommands(
189191
cliServer.restartCliServer();
190192
await Promise.all([
191193
queryRunner.restartQueryServer(progress),
194+
queryRunnerForWarmingOverlayBaseCache.restartQueryServer(progress),
192195
async () => {
193196
if (languageClient.isRunning()) {
194197
await languageClient.restart();
@@ -201,6 +204,10 @@ function getCommands(
201204
queryServerLogger,
202205
"CodeQL Query Server restarted.",
203206
);
207+
void showAndLogErrorMessage(
208+
queryServerForWarmingOverlayBaseCacheLogger,
209+
"CodeQL Query Server for warming underlay caches restarted.",
210+
);
204211
},
205212
{
206213
title: "Restarting Query Server",
@@ -281,6 +288,7 @@ export interface CodeQLExtensionInterface {
281288
readonly ctx: ExtensionContext;
282289
readonly cliServer: CodeQLCliServer;
283290
readonly qs: QueryRunner;
291+
readonly WarmOverlayBaseCacheQs: QueryRunner;
284292
readonly distributionManager: DistributionManager;
285293
readonly databaseManager: DatabaseManager;
286294
readonly databaseUI: DatabaseUI;
@@ -795,6 +803,16 @@ async function activateWithInstalledDistribution(
795803
qlConfigurationListener,
796804
cliServer,
797805
ctx,
806+
false,
807+
);
808+
809+
void extLogger.log("Initializing base cache warming query server client.");
810+
const WarmOverlayBaseCacheQs = await createQueryServer(
811+
app,
812+
qlConfigurationListener,
813+
cliServer,
814+
ctx,
815+
true,
798816
);
799817

800818
for (const glob of CLEAR_PACK_CACHE_ON_EDIT_GLOBS) {
@@ -822,6 +840,7 @@ async function activateWithInstalledDistribution(
822840
ctx,
823841
app,
824842
qs,
843+
WarmOverlayBaseCacheQs,
825844
cliServer,
826845
languageContext,
827846
extLogger,
@@ -998,6 +1017,7 @@ async function activateWithInstalledDistribution(
9981017
const localQueries = new LocalQueries(
9991018
app,
10001019
qs,
1020+
WarmOverlayBaseCacheQs,
10011021
qhm,
10021022
dbm,
10031023
databaseFetcher,
@@ -1062,7 +1082,7 @@ async function activateWithInstalledDistribution(
10621082
void extLogger.log("Registering top-level command palette commands.");
10631083

10641084
const allCommands: AllExtensionCommands = {
1065-
...getCommands(app, cliServer, qs, languageClient),
1085+
...getCommands(app, cliServer, qs, WarmOverlayBaseCacheQs, languageClient),
10661086
...getQueryEditorCommands({
10671087
commandManager: app.commands,
10681088
queryRunner: qs,
@@ -1165,6 +1185,7 @@ async function activateWithInstalledDistribution(
11651185
cliServer,
11661186
localQueries,
11671187
qs,
1188+
WarmOverlayBaseCacheQs,
11681189
distributionManager,
11691190
databaseManager: dbm,
11701191
databaseUI,
@@ -1278,9 +1299,12 @@ async function createQueryServer(
12781299
qlConfigurationListener: QueryServerConfigListener,
12791300
cliServer: CodeQLCliServer,
12801301
ctx: ExtensionContext,
1302+
warmOverlayBaseCache: boolean,
12811303
): Promise<QueryRunner> {
12821304
const qsOpts = {
1283-
logger: queryServerLogger,
1305+
logger: warmOverlayBaseCache
1306+
? queryServerForWarmingOverlayBaseCacheLogger
1307+
: queryServerLogger,
12841308
contextStoragePath: getContextStoragePath(ctx),
12851309
};
12861310
const progressCallback = (
@@ -1290,13 +1314,19 @@ async function createQueryServer(
12901314
) => Thenable<void>,
12911315
) =>
12921316
Window.withProgress(
1293-
{ title: "CodeQL query server", location: ProgressLocation.Window },
1317+
{
1318+
title: warmOverlayBaseCache
1319+
? "CodeQL query server for warming underlay caches"
1320+
: "CodeQL query server",
1321+
location: ProgressLocation.Window,
1322+
},
12941323
task,
12951324
);
12961325

12971326
const qs = new QueryServerClient(
12981327
app,
12991328
qlConfigurationListener,
1329+
warmOverlayBaseCache,
13001330
cliServer,
13011331
qsOpts,
13021332
progressCallback,

extensions/ql-vscode/src/language-support/ast-viewer/ast-cfg-commands.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ export function getAstCfgCommands({
5959
progress,
6060
token,
6161
undefined,
62+
false,
6263
undefined,
6364
res[1],
6465
);

0 commit comments

Comments
 (0)