From d6eca75bf7e9aaf86fecae65e2f5991374c3ff66 Mon Sep 17 00:00:00 2001 From: Galen Kistler <109082771+gtk-grafana@users.noreply.github.com> Date: Wed, 13 Dec 2023 07:08:30 -0600 Subject: [PATCH] Loki: strip out invalid options for logs/metrics queries (#79409) * fix bug in split query where metric queries with maxLines of 0 would not execute --- .../datasource/loki/querySplitting.test.ts | 22 +++++++++++++++++++ .../plugins/datasource/loki/querySplitting.ts | 6 ++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/public/app/plugins/datasource/loki/querySplitting.test.ts b/public/app/plugins/datasource/loki/querySplitting.test.ts index 58f0c66e6d5..83c51e9e95a 100644 --- a/public/app/plugins/datasource/loki/querySplitting.test.ts +++ b/public/app/plugins/datasource/loki/querySplitting.test.ts @@ -42,6 +42,28 @@ describe('runSplitQuery()', () => { }); }); + test('Metric queries with maxLines of 0 will execute', async () => { + const request = getQueryOptions({ + targets: [{ expr: 'count_over_time({a="b"}[1m])', refId: 'A', maxLines: 0 }], + range, + }); + await expect(runSplitQuery(datasource, request)).toEmitValuesWith(() => { + // 3 days, 3 chunks, 3 requests. + expect(datasource.runQuery).toHaveBeenCalledTimes(3); + }); + }); + + test('Log queries with maxLines of 0 will NOT execute', async () => { + const request = getQueryOptions({ + targets: [{ expr: '{a="b"}', refId: 'A', maxLines: 0 }], + range, + }); + await expect(runSplitQuery(datasource, request)).toEmitValuesWith(() => { + // Will not request a log query with maxLines of 0 + expect(datasource.runQuery).toHaveBeenCalledTimes(0); + }); + }); + test('Returns a DataQueryResponse with the expected attributes', async () => { await expect(runSplitQuery(datasource, request)).toEmitValuesWith((response) => { expect(response[0].data).toBeDefined(); diff --git a/public/app/plugins/datasource/loki/querySplitting.ts b/public/app/plugins/datasource/loki/querySplitting.ts index 50961e8df42..74b7a14969a 100644 --- a/public/app/plugins/datasource/loki/querySplitting.ts +++ b/public/app/plugins/datasource/loki/querySplitting.ts @@ -246,8 +246,12 @@ export function runSplitQuery(datasource: LokiDatasource, request: DataQueryRequ ); for (const stepMs in stepMsPartition) { + const targets = stepMsPartition[stepMs].map((q) => { + const { maxLines, ...query } = q; + return query; + }); requests.push({ - request: { ...request, targets: stepMsPartition[stepMs] }, + request: { ...request, targets }, partition: partitionTimeRange(false, request.range, Number(stepMs), Number(chunkRangeMs)), }); }