Skip to content

Commit 9947c9d

Browse files
committed
construct qsForWarmingOverlayBaseCache lazily
1 parent 038deff commit 9947c9d

File tree

4 files changed

+64
-35
lines changed

4 files changed

+64
-35
lines changed

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,18 @@ export const extLogger = new OutputChannelLogger("CodeQL Extension Log");
1111
export const queryServerLogger = new OutputChannelLogger("CodeQL Query Server");
1212

1313
// 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");
14+
let queryServerForWarmingOverlayBaseCacheLogger:
15+
| OutputChannelLogger
16+
| undefined;
17+
18+
// construct queryServerForWarmingOverlayBaseCacheLogger lazily, as most users don't need it
19+
export function getQueryServerForWarmingOverlayBaseCacheLogger(): OutputChannelLogger {
20+
if (!queryServerForWarmingOverlayBaseCacheLogger)
21+
queryServerForWarmingOverlayBaseCacheLogger = new OutputChannelLogger(
22+
"CodeQL Query Server for warming overlay-base cache",
23+
);
24+
return queryServerForWarmingOverlayBaseCacheLogger;
25+
}
1626

1727
// Logger for messages from the language server.
1828
export const languageServerLogger = new OutputChannelLogger(

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ 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,
122121
private readonly cli: CodeQLCliServer,
123122
private readonly languageContext: LanguageContextStore,
124123
public logger: Logger,
@@ -740,19 +739,20 @@ export class DatabaseManager extends DisposableObject {
740739
}
741740
}
742741

743-
public async withDatabaseInQsForWarmingOverlayBaseCache(
742+
public async runWithDatabaseInSeparateQueryRunner(
743+
queryRunner: QueryRunner,
744744
whatToDo: () => Promise<void>,
745745
) {
746746
try {
747747
if (this._currentDatabaseItem) {
748748
const dbItem = this._currentDatabaseItem;
749749
await this.qs.deregisterDatabase(dbItem);
750-
await this.qsForWarmingOverlayBaseCache.registerDatabase(dbItem);
750+
await queryRunner.registerDatabase(dbItem);
751751
}
752752
await whatToDo();
753753
if (this._currentDatabaseItem) {
754754
const dbItem = this._currentDatabaseItem;
755-
await this.qsForWarmingOverlayBaseCache.deregisterDatabase(dbItem);
755+
await queryRunner.deregisterDatabase(dbItem);
756756
await this.qs.registerDatabase(dbItem);
757757
}
758758
} catch (e) {

extensions/ql-vscode/src/extension.ts

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ import {
8686
extLogger,
8787
languageServerLogger,
8888
queryServerLogger,
89-
queryServerForWarmingOverlayBaseCacheLogger,
89+
getQueryServerForWarmingOverlayBaseCacheLogger,
9090
} from "./common/logging/vscode";
9191
import { QueryHistoryManager } from "./query-history/query-history-manager";
9292
import type { CompletedLocalQueryInfo } from "./query-results";
@@ -173,7 +173,7 @@ function getCommands(
173173
app: App,
174174
cliServer: CodeQLCliServer,
175175
queryRunner: QueryRunner,
176-
queryRunnerForWarmingOverlayBaseCache: QueryRunner,
176+
queryRunnerForWarmingOverlayBaseCache: QueryRunner | undefined,
177177
languageClient: LanguageClient,
178178
): BaseCommands {
179179
const getCliVersion = async () => {
@@ -191,7 +191,9 @@ function getCommands(
191191
cliServer.restartCliServer();
192192
await Promise.all([
193193
queryRunner.restartQueryServer(progress),
194-
queryRunnerForWarmingOverlayBaseCache.restartQueryServer(progress),
194+
queryRunnerForWarmingOverlayBaseCache
195+
? queryRunnerForWarmingOverlayBaseCache.restartQueryServer(progress)
196+
: {},
195197
async () => {
196198
if (languageClient.isRunning()) {
197199
await languageClient.restart();
@@ -204,10 +206,12 @@ function getCommands(
204206
queryServerLogger,
205207
"CodeQL Query Server restarted.",
206208
);
207-
void showAndLogErrorMessage(
208-
queryServerForWarmingOverlayBaseCacheLogger,
209-
"CodeQL Query Server for warming overlay-base cache restarted.",
210-
);
209+
if (queryRunnerForWarmingOverlayBaseCache) {
210+
void showAndLogErrorMessage(
211+
getQueryServerForWarmingOverlayBaseCacheLogger(),
212+
"CodeQL Query Server for warming overlay-base cache restarted.",
213+
);
214+
}
211215
},
212216
{
213217
title: "Restarting Query Server",
@@ -288,7 +292,7 @@ export interface CodeQLExtensionInterface {
288292
readonly ctx: ExtensionContext;
289293
readonly cliServer: CodeQLCliServer;
290294
readonly qs: QueryRunner;
291-
readonly qsForWarmingOverlayBaseCache: QueryRunner;
295+
readonly qsForWarmingOverlayBaseCache: QueryRunner | undefined;
292296
readonly distributionManager: DistributionManager;
293297
readonly databaseManager: DatabaseManager;
294298
readonly databaseUI: DatabaseUI;
@@ -806,14 +810,24 @@ async function activateWithInstalledDistribution(
806810
false,
807811
);
808812

809-
void extLogger.log("Initializing base cache warming query server client.");
810-
const qsForWarmingOverlayBaseCache = await createQueryServer(
811-
app,
812-
qlConfigurationListener,
813-
cliServer,
814-
ctx,
815-
true,
816-
);
813+
let qsForWarmingOverlayBaseCache: QueryRunner | undefined;
814+
815+
// construct qsForWarmingOverlayBaseCache lazily, as most users don't need it
816+
async function getQsForWarmingOverlayBaseCache(): Promise<QueryRunner> {
817+
if (!qsForWarmingOverlayBaseCache) {
818+
void extLogger.log(
819+
"Initializing base cache warming query server client.",
820+
);
821+
qsForWarmingOverlayBaseCache = await createQueryServer(
822+
app,
823+
qlConfigurationListener,
824+
cliServer,
825+
ctx,
826+
true,
827+
);
828+
}
829+
return qsForWarmingOverlayBaseCache;
830+
}
817831

818832
for (const glob of CLEAR_PACK_CACHE_ON_EDIT_GLOBS) {
819833
const fsWatcher = workspace.createFileSystemWatcher(glob);
@@ -840,7 +854,6 @@ async function activateWithInstalledDistribution(
840854
ctx,
841855
app,
842856
qs,
843-
qsForWarmingOverlayBaseCache,
844857
cliServer,
845858
languageContext,
846859
extLogger,
@@ -1017,7 +1030,7 @@ async function activateWithInstalledDistribution(
10171030
const localQueries = new LocalQueries(
10181031
app,
10191032
qs,
1020-
qsForWarmingOverlayBaseCache,
1033+
getQsForWarmingOverlayBaseCache,
10211034
qhm,
10221035
dbm,
10231036
databaseFetcher,
@@ -1309,7 +1322,7 @@ async function createQueryServer(
13091322
): Promise<QueryRunner> {
13101323
const qsOpts = {
13111324
logger: warmOverlayBaseCache
1312-
? queryServerForWarmingOverlayBaseCacheLogger
1325+
? getQueryServerForWarmingOverlayBaseCacheLogger()
13131326
: queryServerLogger,
13141327
contextStoragePath: getContextStoragePath(ctx),
13151328
};

extensions/ql-vscode/src/local-queries/local-queries.ts

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export class LocalQueries extends DisposableObject {
7474
public constructor(
7575
private readonly app: ExtensionApp,
7676
private readonly queryRunner: QueryRunner,
77-
private readonly queryRunnerForWarmingOverlayBaseCache: QueryRunner,
77+
private readonly getQueryRunnerForWarmingOverlayBaseCache: () => Promise<QueryRunner>,
7878
private readonly queryHistoryManager: QueryHistoryManager,
7979
private readonly databaseManager: DatabaseManager,
8080
private readonly databaseFetcher: DatabaseFetcher,
@@ -167,8 +167,10 @@ export class LocalQueries extends DisposableObject {
167167
private async runWarmOverlayBaseCacheForQuery(
168168
uri: Uri | undefined,
169169
): Promise<void> {
170-
await this.databaseManager.withDatabaseInQsForWarmingOverlayBaseCache(() =>
171-
this.runQueryInternal(uri, true),
170+
const queryRunner = await this.getQueryRunnerForWarmingOverlayBaseCache();
171+
await this.databaseManager.runWithDatabaseInSeparateQueryRunner(
172+
queryRunner,
173+
() => this.runQueryInternal(uri, true),
172174
);
173175
}
174176

@@ -216,8 +218,10 @@ export class LocalQueries extends DisposableObject {
216218
private async runWarmOverlayBaseCacheForQueries(
217219
fileURIs: Uri[],
218220
): Promise<void> {
219-
await this.databaseManager.withDatabaseInQsForWarmingOverlayBaseCache(() =>
220-
this.runQueriesInternal(fileURIs, true),
221+
const queryRunner = await this.getQueryRunnerForWarmingOverlayBaseCache();
222+
await this.databaseManager.runWithDatabaseInSeparateQueryRunner(
223+
queryRunner,
224+
() => this.runQueriesInternal(fileURIs, true),
221225
);
222226
}
223227

@@ -298,8 +302,10 @@ export class LocalQueries extends DisposableObject {
298302
private async runWarmOverlayBaseCacheForQuerySuite(
299303
fileUri: Uri,
300304
): Promise<void> {
301-
await this.databaseManager.withDatabaseInQsForWarmingOverlayBaseCache(() =>
302-
this.runQuerySuiteInternal(fileUri, true),
305+
const queryRunner = await this.getQueryRunnerForWarmingOverlayBaseCache();
306+
await this.databaseManager.runWithDatabaseInSeparateQueryRunner(
307+
queryRunner,
308+
() => this.runQuerySuiteInternal(fileUri, true),
303309
);
304310
}
305311

@@ -341,7 +347,7 @@ export class LocalQueries extends DisposableObject {
341347
});
342348
});
343349
const queryRunner = warmOverlayBaseCache
344-
? this.queryRunnerForWarmingOverlayBaseCache
350+
? await this.getQueryRunnerForWarmingOverlayBaseCache()
345351
: this.queryRunner;
346352
const coreQueryRun = queryRunner.createQueryRun(
347353
databaseItem.databaseUri.fsPath,
@@ -523,7 +529,7 @@ export class LocalQueries extends DisposableObject {
523529
await createTimestampFile(outputDir.querySaveDir);
524530

525531
const queryRunner = warmOverlayBaseCache
526-
? this.queryRunnerForWarmingOverlayBaseCache
532+
? await this.getQueryRunnerForWarmingOverlayBaseCache()
527533
: this.queryRunner;
528534

529535
if (queryRunner.customLogDirectory) {
@@ -625,7 +631,7 @@ export class LocalQueries extends DisposableObject {
625631
const extensionPacks = await this.getDefaultExtensionPacks(additionalPacks);
626632

627633
const queryRunner = warmOverlayBaseCache
628-
? this.queryRunnerForWarmingOverlayBaseCache
634+
? await this.getQueryRunnerForWarmingOverlayBaseCache()
629635
: this.queryRunner;
630636
const coreQueryRun = queryRunner.createQueryRun(
631637
databaseItem.databaseUri.fsPath,

0 commit comments

Comments
 (0)