Skip to content

Commit 7486431

Browse files
committed
Use options instead of separate method for skipping cache store
This adds a new options argument to the `loadResults` method which allows the caller to specify that the results should not be saved to the cache. This exposes a smaller API surface and makes it harder to misuse the methods.
1 parent 922d212 commit 7486431

File tree

3 files changed

+21
-39
lines changed

3 files changed

+21
-39
lines changed

extensions/ql-vscode/src/remote-queries/export-results.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -126,13 +126,9 @@ export async function exportVariantAnalysisResults(
126126
continue;
127127
}
128128

129-
let result: VariantAnalysisScannedRepositoryResult;
130-
131-
if (!variantAnalysisManager.areResultsLoaded(variantAnalysis.id, repo.repository.fullName)) {
132-
result = await variantAnalysisManager.loadResultsFromStorage(variantAnalysis.id, repo.repository.fullName);
133-
} else {
134-
result = await variantAnalysisManager.loadResults(variantAnalysis.id, repo.repository.fullName);
135-
}
129+
const result = await variantAnalysisManager.loadResults(variantAnalysis.id, repo.repository.fullName, {
130+
skipCacheStore: true,
131+
});
136132

137133
yield [repo, result];
138134
}

extensions/ql-vscode/src/remote-queries/variant-analysis-manager.ts

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {
1818
import { getErrorMessage } from '../pure/helpers-pure';
1919
import { VariantAnalysisView } from './variant-analysis-view';
2020
import { VariantAnalysisViewManager } from './variant-analysis-view-manager';
21-
import { VariantAnalysisResultsManager } from './variant-analysis-results-manager';
21+
import { LoadResultsOptions, VariantAnalysisResultsManager } from './variant-analysis-results-manager';
2222
import { getControllerRepo, getQueryName, prepareRemoteQueryRun } from './run-remote-query';
2323
import {
2424
processUpdatedVariantAnalysis,
@@ -209,34 +209,13 @@ export class VariantAnalysisManager extends DisposableObject implements VariantA
209209
return this.variantAnalyses.size;
210210
}
211211

212-
public async loadResults(variantAnalysisId: number, repositoryFullName: string): Promise<VariantAnalysisScannedRepositoryResult> {
212+
public async loadResults(variantAnalysisId: number, repositoryFullName: string, options?: LoadResultsOptions): Promise<VariantAnalysisScannedRepositoryResult> {
213213
const variantAnalysis = this.variantAnalyses.get(variantAnalysisId);
214214
if (!variantAnalysis) {
215215
throw new Error(`No variant analysis with id: ${variantAnalysisId}`);
216216
}
217217

218-
return this.variantAnalysisResultsManager.loadResults(variantAnalysisId, this.getVariantAnalysisStorageLocation(variantAnalysisId), repositoryFullName);
219-
}
220-
221-
public areResultsLoaded(variantAnalysisId: number, repositoryFullName: string): boolean {
222-
if (!this.variantAnalyses.has(variantAnalysisId)) {
223-
return false;
224-
}
225-
226-
return this.variantAnalysisResultsManager.areResultsLoaded(variantAnalysisId, repositoryFullName);
227-
}
228-
229-
/**
230-
* This method should only be used to temporarily get the results for a variant analysis. In general, loadResults should
231-
* be preferred.
232-
*/
233-
public async loadResultsFromStorage(variantAnalysisId: number, repositoryFullName: string): Promise<VariantAnalysisScannedRepositoryResult> {
234-
const variantAnalysis = this.variantAnalyses.get(variantAnalysisId);
235-
if (!variantAnalysis) {
236-
throw new Error(`No variant analysis with id: ${variantAnalysisId}`);
237-
}
238-
239-
return this.variantAnalysisResultsManager.loadResultsFromStorage(variantAnalysisId, this.getVariantAnalysisStorageLocation(variantAnalysisId), repositoryFullName);
218+
return this.variantAnalysisResultsManager.loadResults(variantAnalysisId, this.getVariantAnalysisStorageLocation(variantAnalysisId), repositoryFullName, options);
240219
}
241220

242221
private async variantAnalysisRecordExists(variantAnalysisId: number): Promise<boolean> {

extensions/ql-vscode/src/remote-queries/variant-analysis-results-manager.ts

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ export type ResultDownloadedEvent = {
2828
repoTask: VariantAnalysisRepositoryTask;
2929
}
3030

31+
export type LoadResultsOptions = {
32+
// If true, when results are loaded from storage, they will not be stored in the cache. This reduces memory usage if
33+
// results are only needed temporarily (e.g. for exporting results to a different format).
34+
skipCacheStore?: boolean;
35+
}
36+
3137
export class VariantAnalysisResultsManager extends DisposableObject {
3238
private static readonly REPO_TASK_FILENAME = 'repo_task.json';
3339
private static readonly RESULTS_DIRECTORY = 'results';
@@ -86,18 +92,19 @@ export class VariantAnalysisResultsManager extends DisposableObject {
8692
public async loadResults(
8793
variantAnalysisId: number,
8894
variantAnalysisStoragePath: string,
89-
repositoryFullName: string
95+
repositoryFullName: string,
96+
options?: LoadResultsOptions,
9097
): Promise<VariantAnalysisScannedRepositoryResult> {
9198
const result = this.cachedResults.get(createCacheKey(variantAnalysisId, repositoryFullName));
99+
if (result) {
100+
return result;
101+
}
92102

93-
return result ?? await this.loadResultsIntoMemory(variantAnalysisId, variantAnalysisStoragePath, repositoryFullName);
94-
}
103+
if (options?.skipCacheStore) {
104+
return this.loadResultsFromStorage(variantAnalysisId, variantAnalysisStoragePath, repositoryFullName);
105+
}
95106

96-
public areResultsLoaded(
97-
variantAnalysisId: number,
98-
repositoryFullName: string
99-
): boolean {
100-
return this.cachedResults.has(createCacheKey(variantAnalysisId, repositoryFullName));
107+
return this.loadResultsIntoMemory(variantAnalysisId, variantAnalysisStoragePath, repositoryFullName);
101108
}
102109

103110
private async loadResultsIntoMemory(

0 commit comments

Comments
 (0)