diff --git a/public/app/plugins/datasource/prometheus/datasource.ts b/public/app/plugins/datasource/prometheus/datasource.ts index 13f52b48ad2..1e6a3a43ba0 100644 --- a/public/app/plugins/datasource/prometheus/datasource.ts +++ b/public/app/plugins/datasource/prometheus/datasource.ts @@ -41,6 +41,7 @@ export interface PromDataQueryResponse { result?: DataQueryResponseData[]; }; }; + cancelled?: boolean; } export class PrometheusDatasource extends DataSourceApi { @@ -528,6 +529,9 @@ export class PrometheusDatasource extends DataSourceApi const eventList: AnnotationEvent[] = []; tagKeys = tagKeys.split(','); + if (results.cancelled) { + return []; + } _.each(results.data.data.result, series => { const tags = _.chain(series.metric) .filter((v, k) => { diff --git a/public/app/plugins/datasource/prometheus/specs/datasource.test.ts b/public/app/plugins/datasource/prometheus/specs/datasource.test.ts index 37ac091f5a9..1ad026bd349 100644 --- a/public/app/plugins/datasource/prometheus/specs/datasource.test.ts +++ b/public/app/plugins/datasource/prometheus/specs/datasource.test.ts @@ -667,6 +667,19 @@ describe('PrometheusDatasource', () => { }, }; + describe('when time series query is cancelled', () => { + it('should return empty results', async () => { + backendSrv.datasourceRequest = jest.fn(() => Promise.resolve({ cancelled: true })); + ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv as any, timeSrv as any); + + await ctx.ds.annotationQuery(options).then((data: any) => { + results = data; + }); + + expect(results).toEqual([]); + }); + }); + describe('not use useValueForTime', () => { beforeEach(async () => { options.annotation.useValueForTime = false;