diff --git a/public/app/features/annotations/annotations_srv.ts b/public/app/features/annotations/annotations_srv.ts index f9820fe566d..19850da52d9 100644 --- a/public/app/features/annotations/annotations_srv.ts +++ b/public/app/features/annotations/annotations_srv.ts @@ -8,6 +8,7 @@ import { makeRegions, dedupAnnotations } from './events_processing'; export class AnnotationsSrv { globalAnnotationsPromise: any; alertStatesPromise: any; + datasourcePromises: any; /** @ngInject */ constructor(private $rootScope, private $q, private datasourceSrv, private backendSrv, private timeSrv) { @@ -18,6 +19,7 @@ export class AnnotationsSrv { clearCache() { this.globalAnnotationsPromise = null; this.alertStatesPromise = null; + this.datasourcePromises = null; } getAnnotations(options) { @@ -90,6 +92,7 @@ export class AnnotationsSrv { const range = this.timeSrv.timeRange(); const promises = []; + const dsPromises = []; for (const annotation of dashboard.annotations.list) { if (!annotation.enable) { @@ -99,10 +102,10 @@ export class AnnotationsSrv { if (annotation.snapshotData) { return this.translateQueryResult(annotation, annotation.snapshotData); } - + const datasourcePromise = this.datasourceSrv.get(annotation.datasource); + dsPromises.push(datasourcePromise); promises.push( - this.datasourceSrv - .get(annotation.datasource) + datasourcePromise .then(datasource => { // issue query against data source return datasource.annotationQuery({ @@ -122,7 +125,7 @@ export class AnnotationsSrv { }) ); } - + this.datasourcePromises = this.$q.all(dsPromises); this.globalAnnotationsPromise = this.$q.all(promises); return this.globalAnnotationsPromise; } diff --git a/public/app/plugins/panel/graph/module.ts b/public/app/plugins/panel/graph/module.ts index f0751ddd816..bc0d0c0c630 100644 --- a/public/app/plugins/panel/graph/module.ts +++ b/public/app/plugins/panel/graph/module.ts @@ -156,7 +156,16 @@ class GraphCtrl extends MetricsPanelCtrl { panel: this.panel, range: this.range, }); - return super.issueQueries(datasource); + + /* Wait for annotationSrv requests to get datasources to + * resolve before issuing queries. This allows the annotations + * service to fire annotations queries before graph queries + * (but not wait for completion). This resolves + * issue 11806. + */ + return this.annotationsSrv.datasourcePromises.then(r => { + return super.issueQueries(datasource); + }); } zoomOut(evt) {