Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion util/tracing/detect/delegated/delegated.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package jaeger
package delegated

import (
"context"
Expand Down
18 changes: 18 additions & 0 deletions util/tracing/detect/delegated/delegated_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package delegated_test

import (
"testing"

"github.com/moby/buildkit/client"
"github.com/moby/buildkit/util/tracing/detect"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func TestDetectPreservesDelegateInterface(t *testing.T) {
exp, err := detect.Exporter()
require.NoError(t, err)

_, ok := exp.(client.TracerDelegate)
assert.True(t, ok, "delegated tracer expected to fulfill client.TracerDelegate interface")
}
6 changes: 0 additions & 6 deletions util/tracing/detect/detect.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,6 @@ func getExporter() (sdktrace.SpanExporter, error) {
return nil, err
}

if exp != nil {
exp = &threadSafeExporterWrapper{
exporter: exp,
}
}

if Recorder != nil {
Recorder.SpanExporter = exp
exp = Recorder
Expand Down
30 changes: 29 additions & 1 deletion util/tracing/detect/jaeger/jaeger.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package jaeger

import (
"context"
"net"
"os"
"strings"
"sync"

"github.com/moby/buildkit/util/tracing/detect"
"go.opentelemetry.io/otel/exporters/jaeger"
Expand Down Expand Up @@ -48,7 +50,14 @@ func jaegerExporter() (sdktrace.SpanExporter, error) {
epo = jaeger.WithAgentEndpoint(jaeger.WithAgentHost(host), jaeger.WithAgentPort(port))
}

return jaeger.New(epo)
exp, err := jaeger.New(epo)
if err != nil {
return nil, err
}

return &threadSafeExporterWrapper{
exporter: exp,
}, nil
}

func envOr(key, defaultValue string) string {
Expand All @@ -57,3 +66,22 @@ func envOr(key, defaultValue string) string {
}
return defaultValue
}

// We've received reports that the Jaeger exporter is not thread-safe,
// so wrap it in a mutex.
type threadSafeExporterWrapper struct {
mu sync.Mutex
exporter sdktrace.SpanExporter
}

func (tse *threadSafeExporterWrapper) ExportSpans(ctx context.Context, spans []sdktrace.ReadOnlySpan) error {
tse.mu.Lock()
defer tse.mu.Unlock()
return tse.exporter.ExportSpans(ctx, spans)
}

func (tse *threadSafeExporterWrapper) Shutdown(ctx context.Context) error {
tse.mu.Lock()
defer tse.mu.Unlock()
return tse.exporter.Shutdown(ctx)
}
26 changes: 0 additions & 26 deletions util/tracing/detect/threadsafe.go

This file was deleted.