From 3f93b5bd28f64c5257153b089d465d1f2ac09484 Mon Sep 17 00:00:00 2001 From: Cyril Tovena Date: Fri, 23 Oct 2020 14:49:00 -0400 Subject: [PATCH] Fixes a bug that would add __error__ labels incorrectly. (#2796) 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) +}