diff --git a/public/app/plugins/datasource/loki/queryUtils.test.ts b/public/app/plugins/datasource/loki/queryUtils.test.ts index 3fb0d985699..047e1c97a6b 100644 --- a/public/app/plugins/datasource/loki/queryUtils.test.ts +++ b/public/app/plugins/datasource/loki/queryUtils.test.ts @@ -13,6 +13,7 @@ import { obfuscate, combineResponses, cloneQueryResponse, + requestSupportsPartitioning, } from './queryUtils'; import { LokiQuery, LokiQueryType } from './types'; @@ -526,3 +527,47 @@ describe('combineResponses', () => { }); }); }); + +describe('requestSupportsPartitioning', () => { + it('hidden requests are not partitioned', () => { + const requests: LokiQuery[] = [ + { + expr: '{a="b"}', + refId: 'A', + hide: true, + }, + ]; + expect(requestSupportsPartitioning(requests)).toBe(false); + }); + it('special requests are not partitioned', () => { + const requests: LokiQuery[] = [ + { + expr: '{a="b"}', + refId: 'do-not-chunk', + }, + ]; + expect(requestSupportsPartitioning(requests)).toBe(false); + }); + it('empty requests are not partitioned', () => { + const requests: LokiQuery[] = [ + { + expr: '', + refId: 'A', + }, + ]; + expect(requestSupportsPartitioning(requests)).toBe(false); + }); + it('all other requests are partitioned', () => { + const requests: LokiQuery[] = [ + { + expr: '{a="b"}', + refId: 'A', + }, + { + expr: 'count_over_time({a="b"}[1h])', + refId: 'B', + }, + ]; + expect(requestSupportsPartitioning(requests)).toBe(true); + }); +}); diff --git a/public/app/plugins/datasource/loki/queryUtils.ts b/public/app/plugins/datasource/loki/queryUtils.ts index 5e5f2da7c45..a4c2733e0b0 100644 --- a/public/app/plugins/datasource/loki/queryUtils.ts +++ b/public/app/plugins/datasource/loki/queryUtils.ts @@ -305,7 +305,10 @@ export function getStreamSelectorsFromQuery(query: string): string[] { } export function requestSupportsPartitioning(allQueries: LokiQuery[]) { - const queries = allQueries.filter((query) => !query.hide).filter((query) => !query.refId.includes('do-not-chunk')); + const queries = allQueries + .filter((query) => !query.hide) + .filter((query) => !query.refId.includes('do-not-chunk')) + .filter((query) => query.expr); const instantQueries = queries.some((query) => query.queryType === LokiQueryType.Instant); if (instantQueries) {