Merge pull request #1804 from github/koesie10/stop-monitor-after-remove

Stop variant analysis monitor after removing the variant analysis from the query history
This commit is contained in:
Koen Vlaswinkel
2022-12-01 09:38:23 +01:00
committed by GitHub
4 changed files with 49 additions and 4 deletions

View File

@@ -94,7 +94,12 @@ export class VariantAnalysisManager
private readonly variantAnalysisResultsManager: VariantAnalysisResultsManager,
) {
super();
this.variantAnalysisMonitor = this.push(new VariantAnalysisMonitor(ctx));
this.variantAnalysisMonitor = this.push(
new VariantAnalysisMonitor(
ctx,
this.shouldCancelMonitorVariantAnalysis.bind(this),
),
);
this.variantAnalysisMonitor.onVariantAnalysisChange(
this.onVariantAnalysisUpdated.bind(this),
);
@@ -319,6 +324,12 @@ export class VariantAnalysisManager
return await fs.pathExists(filePath);
}
private async shouldCancelMonitorVariantAnalysis(
variantAnalysisId: number,
): Promise<boolean> {
return !this.variantAnalyses.has(variantAnalysisId);
}
public async onVariantAnalysisUpdated(
variantAnalysis: VariantAnalysis | undefined,
): Promise<void> {
@@ -326,6 +337,10 @@ export class VariantAnalysisManager
return;
}
if (!this.variantAnalyses.has(variantAnalysis.id)) {
return;
}
await this.setVariantAnalysis(variantAnalysis);
this._onVariantAnalysisStatusUpdated.fire(variantAnalysis);
}

View File

@@ -28,7 +28,12 @@ export class VariantAnalysisMonitor extends DisposableObject {
);
readonly onVariantAnalysisChange = this._onVariantAnalysisChange.event;
constructor(private readonly extensionContext: ExtensionContext) {
constructor(
private readonly extensionContext: ExtensionContext,
private readonly shouldCancelMonitor: (
variantAnalysisId: number,
) => Promise<boolean>,
) {
super();
}
@@ -51,6 +56,10 @@ export class VariantAnalysisMonitor extends DisposableObject {
return;
}
if (await this.shouldCancelMonitor(variantAnalysis.id)) {
return;
}
const variantAnalysisSummary = await ghApiClient.getVariantAnalysis(
credentials,
variantAnalysis.controllerRepo.id,

View File

@@ -748,9 +748,13 @@ describe("Variant Analysis Manager", () => {
});
it("should remove variant analysis", async () => {
await variantAnalysisManager.onVariantAnalysisUpdated(
pathExistsStub.mockImplementation(() => true);
await variantAnalysisManager.rehydrateVariantAnalysis(
dummyVariantAnalysis,
);
expect(pathExistsStub).toBeCalledWith(
path.join(storagePath, dummyVariantAnalysis.id.toString()),
);
expect(variantAnalysisManager.variantAnalysesSize).toBe(1);
await variantAnalysisManager.removeVariantAnalysis(

View File

@@ -36,6 +36,7 @@ describe("Variant Analysis Monitor", () => {
>;
let cancellationTokenSource: CancellationTokenSource;
let variantAnalysisMonitor: VariantAnalysisMonitor;
let shouldCancelMonitor: jest.Mock<Promise<boolean>, [number]>;
let variantAnalysis: VariantAnalysis;
let variantAnalysisManager: VariantAnalysisManager;
let mockGetDownloadResult: jest.SpiedFunction<
@@ -53,12 +54,17 @@ describe("Variant Analysis Monitor", () => {
variantAnalysis = createMockVariantAnalysis({});
shouldCancelMonitor = jest.fn();
extension = await extensions
.getExtension<CodeQLExtensionInterface | Record<string, never>>(
"GitHub.vscode-codeql",
)!
.activate();
variantAnalysisMonitor = new VariantAnalysisMonitor(extension.ctx);
variantAnalysisMonitor = new VariantAnalysisMonitor(
extension.ctx,
shouldCancelMonitor,
);
variantAnalysisMonitor.onVariantAnalysisChange(onVariantAnalysisChangeSpy);
variantAnalysisManager = extension.variantAnalysisManager;
@@ -114,6 +120,17 @@ describe("Variant Analysis Monitor", () => {
expect(onVariantAnalysisChangeSpy).not.toHaveBeenCalled();
});
it("should return early if variant analysis should be cancelled", async () => {
shouldCancelMonitor.mockResolvedValue(true);
await variantAnalysisMonitor.monitorVariantAnalysis(
variantAnalysis,
cancellationTokenSource.token,
);
expect(onVariantAnalysisChangeSpy).not.toHaveBeenCalled();
});
describe("when the variant analysis fails", () => {
let mockFailedApiResponse: VariantAnalysisApiResponse;