diff --git a/glide.lock b/glide.lock index a6d7cfd5..8eb290ca 100644 --- a/glide.lock +++ b/glide.lock @@ -6,7 +6,7 @@ imports: subpackages: - lib/go/thrift - name: github.com/opentracing/opentracing-go - version: b228439c64c2c323dec3ebd9d445f168d4fae60c + version: d5b9be1fcf7d467664d3b8f9cb4f3c8c5ac0a753 subpackages: - ext - name: github.com/stretchr/testify diff --git a/glide.yaml b/glide.yaml index 89db3fad..8624efd7 100644 --- a/glide.yaml +++ b/glide.yaml @@ -5,7 +5,7 @@ import: subpackages: - lib/go/thrift - package: github.com/opentracing/opentracing-go - version: 01498abd158dfdbe8e251856bc7d14cb0f046fa3 + version: d5b9be1fcf7d467664d3b8f9cb4f3c8c5ac0a753 subpackages: - ext - package: golang.org/x/net diff --git a/span.go b/span.go index 0c86cb6f..1c1476ea 100644 --- a/span.go +++ b/span.go @@ -172,11 +172,13 @@ func (s *span) BaggageItem(key string) string { return s.baggage[key] } -func (s *span) ForeachBaggageItem(handler func(k, v string)) { +func (s *span) ForeachBaggageItem(handler func(k, v string) bool) { s.RLock() defer s.RUnlock() for k, v := range s.baggage { - handler(k, v) + if !handler(k, v) { + break + } } } diff --git a/span_test.go b/span_test.go index 05681f69..efa2a026 100644 --- a/span_test.go +++ b/span_test.go @@ -14,8 +14,16 @@ func TestBaggageIterator(t *testing.T) { sp1.SetBaggageItem("Some-other-key", "42") b := make(map[string]string) - sp1.ForeachBaggageItem(func(k, v string) { + sp1.ForeachBaggageItem(func(k, v string) bool { b[k] = v + return true }) assert.Equal(t, map[string]string{"some-key": "12345", "some-other-key": "42"}, b) + + b = make(map[string]string) + sp1.ForeachBaggageItem(func(k, v string) bool { + b[k] = v + return false // break out early + }) + assert.Equal(t, 1, len(b), "only one baggage item should be extracted") }