From f450d71a256934e95897ba5f472a739e0e9ec885 Mon Sep 17 00:00:00 2001 From: Raj Kamal Singh <1133322+rkssisodiya@users.noreply.github.com> Date: Thu, 7 Sep 2023 17:47:09 +0530 Subject: [PATCH] fix: avoid pipeline builder panic when first op is disabled (#3500) * fix: avoid pipeline builder panic if first op is disabled * chore: use pipeline builder test to trigger getOperator panic --------- Co-authored-by: Nityananda Gohain --- .../app/logparsingpipeline/pipelineBuilder.go | 2 +- .../pipelineBuilder_test.go | 23 +++++++++++++++++++ .../integration/logparsingpipeline_test.go | 4 ++-- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/pkg/query-service/app/logparsingpipeline/pipelineBuilder.go b/pkg/query-service/app/logparsingpipeline/pipelineBuilder.go index 93b60c37cc..568cbe20ce 100644 --- a/pkg/query-service/app/logparsingpipeline/pipelineBuilder.go +++ b/pkg/query-service/app/logparsingpipeline/pipelineBuilder.go @@ -58,7 +58,7 @@ func getOperators(ops []model.PipelineOperator) []model.PipelineOperator { filteredOp := []model.PipelineOperator{} for i, operator := range ops { if operator.Enabled { - if i > 0 { + if len(filteredOp) > 0 { filteredOp[len(filteredOp)-1].Output = operator.ID } filteredOp = append(filteredOp, operator) diff --git a/pkg/query-service/app/logparsingpipeline/pipelineBuilder_test.go b/pkg/query-service/app/logparsingpipeline/pipelineBuilder_test.go index 4973467d1b..a8017ac439 100644 --- a/pkg/query-service/app/logparsingpipeline/pipelineBuilder_test.go +++ b/pkg/query-service/app/logparsingpipeline/pipelineBuilder_test.go @@ -163,6 +163,29 @@ var prepareProcessorTestData = []struct { }, }, }, + { + Name: "first op disabled", + Operators: []model.PipelineOperator{ + { + ID: "move_filename", + Output: "move_function", + Enabled: false, + Name: "move_filename", + }, + { + ID: "move_function", + Enabled: true, + Name: "move_function", + }, + }, + Output: []model.PipelineOperator{ + { + ID: "move_function", + Enabled: true, + Name: "move_function", + }, + }, + }, } func TestPreparePipelineProcessor(t *testing.T) { diff --git a/pkg/query-service/tests/integration/logparsingpipeline_test.go b/pkg/query-service/tests/integration/logparsingpipeline_test.go index d2f1b60910..a268714294 100644 --- a/pkg/query-service/tests/integration/logparsingpipeline_test.go +++ b/pkg/query-service/tests/integration/logparsingpipeline_test.go @@ -231,8 +231,8 @@ func (tb *LogPipelinesTestBed) PostPipelinesToQSExpectingStatusCode( if response.StatusCode != expectedStatusCode { tb.t.Fatalf( - "Received response status %d after posting log pipelines. Expected: %d", - response.StatusCode, expectedStatusCode, + "Received response status %d after posting log pipelines. Expected: %d\nResponse body:%s\n", + response.StatusCode, expectedStatusCode, string(responseBody), ) }