From 18de2997ff4eacc185c44ad38a59a8483b35425c Mon Sep 17 00:00:00 2001 From: Jocelyn Collado-Kuri Date: Mon, 29 Sep 2025 11:25:03 -0700 Subject: [PATCH] Prometheus: Fix incremental querying logic for public dashboards (#111642) * also disable incremental querying when the dashboard is public * add tests for disabling incremental querying if public dashboards are being used * move public dashboard check earlier --- packages/grafana-prometheus/src/datasource.test.ts | 7 +++++++ packages/grafana-prometheus/src/datasource.ts | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/grafana-prometheus/src/datasource.test.ts b/packages/grafana-prometheus/src/datasource.test.ts index 73964477bf3..bc30a4befff 100644 --- a/packages/grafana-prometheus/src/datasource.test.ts +++ b/packages/grafana-prometheus/src/datasource.test.ts @@ -1308,6 +1308,13 @@ describe('PrometheusDatasource incremental query logic', () => { expect(mockCache.requestInfo).not.toHaveBeenCalled(); }); + it('should disable incremental query when public dashboards are being used', async () => { + config.publicDashboardAccessToken = 'token'; + const request = createDataRequest([{ expr: 'rate(up[5m])', refId: 'A' }]); + await lastValueFrom(ds.query(request)); + expect(mockCache.requestInfo).not.toHaveBeenCalled(); + }); + it('should disable incremental query when any target contains $__range', async () => { const request = createDataRequest([ { expr: 'up', refId: 'A' }, diff --git a/packages/grafana-prometheus/src/datasource.ts b/packages/grafana-prometheus/src/datasource.ts index 5c79ed398ba..9755325ff78 100644 --- a/packages/grafana-prometheus/src/datasource.ts +++ b/packages/grafana-prometheus/src/datasource.ts @@ -471,7 +471,9 @@ export class PrometheusDatasource // Use incremental query only if enabled and no instant queries or no $__range variables const shouldUseIncrementalQuery = - this.hasIncrementalQuery && !request.targets.some((target) => target.instant || target.expr.includes('$__range')); + this.hasIncrementalQuery && + !config.publicDashboardAccessToken && + !request.targets.some((target) => target.instant || target.expr?.includes('$__range')); let fullOrPartialRequest: DataQueryRequest = request; let requestInfo: CacheRequestInfo | undefined = undefined;