From 34c6f838097044735c0ad095f6398b77544f8b58 Mon Sep 17 00:00:00 2001 From: Cyril Tovena Date: Fri, 23 Oct 2020 20:33:31 +0200 Subject: [PATCH] Fixes a bug that would add __error__ labels incorrectly. Wrong usage of slices would add error label to the original set of labels. Signed-off-by: Cyril Tovena --- pkg/logql/log/labels.go | 2 +- pkg/logql/log/labels_test.go | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pkg/logql/log/labels.go b/pkg/logql/log/labels.go index 327c202c6df9..f087d2298327 100644 --- a/pkg/logql/log/labels.go +++ b/pkg/logql/log/labels.go @@ -105,7 +105,7 @@ func (b *LabelsBuilder) Labels() labels.Labels { if b.err == "" { return b.base } - res := append(b.base, labels.Label{Name: ErrorLabel, Value: b.err}) + res := append(b.base.Copy(), labels.Label{Name: ErrorLabel, Value: b.err}) sort.Sort(res) return res } diff --git a/pkg/logql/log/labels_test.go b/pkg/logql/log/labels_test.go index cabc1a363a00..544499601a88 100644 --- a/pkg/logql/log/labels_test.go +++ b/pkg/logql/log/labels_test.go @@ -28,3 +28,21 @@ func TestLabelsBuilder_Get(t *testing.T) { _, ok = b.Get("already") require.False(t, ok) } + +func TestLabelsBuilder_LabelsError(t *testing.T) { + lbs := labels.Labels{labels.Label{Name: "already", Value: "in"}} + b := NewLabelsBuilder() + b.Reset(lbs) + b.SetErr("err") + lbsWithErr := b.Labels() + require.Equal( + t, + labels.Labels{ + labels.Label{Name: ErrorLabel, Value: "err"}, + labels.Label{Name: "already", Value: "in"}, + }, + lbsWithErr, + ) + // make sure the original labels is unchanged. + require.Equal(t, labels.Labels{labels.Label{Name: "already", Value: "in"}}, lbs) +}