Skip to content

Commit 3283b68

Browse files
committed
Download results in batches
This makes use of the p-queue package to download our variant analysis results in batches of 3 at a time.
1 parent aaf21d3 commit 3283b68

3 files changed

Lines changed: 48 additions & 1 deletion

File tree

extensions/ql-vscode/src/extension.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -951,7 +951,14 @@ async function activateWithInstalledDistribution(
951951
variantAnalysisSummary: VariantAnalysisApiResponse,
952952
token: CancellationToken
953953
) => {
954-
await variantAnalysisManager.autoDownloadVariantAnalysisResult(scannedRepo, variantAnalysisSummary, token);
954+
955+
const input = [
956+
variantAnalysisManager.queue.add(async () => {
957+
await variantAnalysisManager.autoDownloadVariantAnalysisResult(scannedRepo, variantAnalysisSummary, token);
958+
})
959+
];
960+
961+
await Promise.all(input);
955962
})
956963
);
957964

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { VariantAnalysisResultsManager } from './variant-analysis-results-manage
2222
import { CodeQLCliServer } from '../cli';
2323
import { getControllerRepo } from './run-remote-query';
2424
import { processUpdatedVariantAnalysis } from './variant-analysis-processor';
25+
import PQueue from 'p-queue';
2526

2627
export class VariantAnalysisManager extends DisposableObject implements VariantAnalysisViewManager<VariantAnalysisView> {
2728
private readonly _onVariantAnalysisAdded = this.push(new EventEmitter<VariantAnalysis>());
@@ -31,6 +32,8 @@ export class VariantAnalysisManager extends DisposableObject implements VariantA
3132
private readonly variantAnalysisResultsManager: VariantAnalysisResultsManager;
3233
private readonly variantAnalyses = new Map<number, VariantAnalysis>();
3334
private readonly views = new Map<number, VariantAnalysisView>();
35+
private static readonly maxConcurrentTasks = 3;
36+
public queue: PQueue;
3437

3538
constructor(
3639
private readonly ctx: ExtensionContext,
@@ -44,6 +47,8 @@ export class VariantAnalysisManager extends DisposableObject implements VariantA
4447

4548
this.variantAnalysisResultsManager = this.push(new VariantAnalysisResultsManager(cliServer, storagePath, logger));
4649
this.variantAnalysisResultsManager.onResultLoaded(this.onRepoResultLoaded.bind(this));
50+
51+
this.queue = new PQueue({ concurrency: VariantAnalysisManager.maxConcurrentTasks });
4752
}
4853

4954
public async showView(variantAnalysisId: number): Promise<void> {

extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/variant-analysis-manager.test.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,41 @@ describe('Variant Analysis Manager', async function() {
149149

150150
expect(getVariantAnalysisRepoResultStub.calledOnce).to.be.true;
151151
});
152+
153+
it('should pop download tasks off the queue', async () => {
154+
const getResultsSpy = sandbox.spy(variantAnalysisManager, 'autoDownloadVariantAnalysisResult');
155+
156+
const input = [
157+
variantAnalysisManager.queue.add(async () => {
158+
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
159+
scannedRepos[0],
160+
variantAnalysis,
161+
cancellationTokenSource.token
162+
);
163+
}),
164+
variantAnalysisManager.queue.add(async () => {
165+
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
166+
scannedRepos[0],
167+
variantAnalysis,
168+
cancellationTokenSource.token
169+
);
170+
}),
171+
variantAnalysisManager.queue.add(async () => {
172+
await variantAnalysisManager.autoDownloadVariantAnalysisResult(
173+
scannedRepos[0],
174+
variantAnalysis,
175+
cancellationTokenSource.token
176+
);
177+
})
178+
];
179+
180+
expect(variantAnalysisManager.queue.pending).to.equal(3);
181+
182+
await Promise.all(input);
183+
184+
expect(variantAnalysisManager.queue.pending).to.equal(0);
185+
expect(getResultsSpy).to.have.been.calledThrice;
186+
});
152187
});
153188
});
154189
});

0 commit comments

Comments
 (0)