Skip to content

Commit 8477ab7

Browse files
committed
Fix bug with parsing labels from baggage
Previously we would still try set profiler labels even if incoming baggage had no k6 metadata. This skips setting profiler labels with no k6 metadata.
1 parent 293e09f commit 8477ab7

File tree

2 files changed

+61
-4
lines changed

2 files changed

+61
-4
lines changed

x/k6/baggage.go

+8-4
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,11 @@ func getBaggageLabelsFromContext(ctx context.Context) *pyroscope.LabelSet {
114114
return nil
115115
}
116116

117-
labels := baggageToLabels(b)
118-
return &labels
117+
return baggageToLabels(b)
119118
}
120119

121120
// baggageToLabels converts request baggage to a LabelSet.
122-
func baggageToLabels(b baggage.Baggage) pyroscope.LabelSet {
121+
func baggageToLabels(b baggage.Baggage) *pyroscope.LabelSet {
123122
labelPairs := make([]string, 0, len(b.Members())*2)
124123
for _, m := range b.Members() {
125124
if !strings.HasPrefix(m.Key(), "k6.") {
@@ -134,5 +133,10 @@ func baggageToLabels(b baggage.Baggage) pyroscope.LabelSet {
134133
labelPairs = append(labelPairs, key, m.Value())
135134
}
136135

137-
return pyroscope.Labels(labelPairs...)
136+
if len(labelPairs) == 0 {
137+
return nil
138+
}
139+
140+
labels := pyroscope.Labels(labelPairs...)
141+
return &labels
138142
}

x/k6/baggage_test.go

+53
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,41 @@ func Test_getBaggageLabels(t *testing.T) {
131131
})
132132
}
133133

134+
func Test_baggageToLabels(t *testing.T) {
135+
t.Run("with_k6_baggage", func(t *testing.T) {
136+
b := testMustNewBaggage(t,
137+
"k6.test_run_id", "123",
138+
"not_k6.some_other_key", "value",
139+
)
140+
141+
labelSet := baggageToLabels(b)
142+
require.NotNil(t, labelSet)
143+
144+
gotLabels := testPprofLabelsToMap(t, *labelSet)
145+
expectedLabels := map[string]string{
146+
"k6_test_run_id": "123",
147+
}
148+
149+
require.Equal(t, expectedLabels, gotLabels)
150+
})
151+
152+
t.Run("with_empty_baggage", func(t *testing.T) {
153+
b := testMustNewBaggage(t)
154+
155+
labelSet := baggageToLabels(b)
156+
require.Nil(t, labelSet)
157+
})
158+
159+
t.Run("with_no_k6_baggage", func(t *testing.T) {
160+
b := testMustNewBaggage(t,
161+
"not_k6.some_other_key", "value",
162+
)
163+
164+
labelSet := baggageToLabels(b)
165+
require.Nil(t, labelSet)
166+
})
167+
}
168+
134169
func testAddBaggageToRequest(t *testing.T, req *http.Request, kvPairs ...string) *http.Request {
135170
t.Helper()
136171

@@ -157,6 +192,24 @@ func testAddBaggageToRequest(t *testing.T, req *http.Request, kvPairs ...string)
157192
return req
158193
}
159194

195+
func testMustNewBaggage(t *testing.T, kvPairs ...string) baggage.Baggage {
196+
t.Helper()
197+
198+
require.Equal(t, 0, len(kvPairs)%2, "kvPairs must be a multiple of 2")
199+
200+
members := make([]baggage.Member, 0, len(kvPairs)/2)
201+
for i := 0; i < len(kvPairs); i += 2 {
202+
key := kvPairs[i]
203+
value := kvPairs[i+1]
204+
members = append(members, testMustNewMember(t, key, value))
205+
}
206+
207+
b, err := baggage.New(members...)
208+
require.NoError(t, err)
209+
210+
return b
211+
}
212+
160213
func testMustNewMember(t *testing.T, key string, value string) baggage.Member {
161214
t.Helper()
162215

0 commit comments

Comments
 (0)