Skip to content

Commit

Permalink
switch atomic.Value to atomic.Pointer for spanProcessorStates (#3926)
Browse files Browse the repository at this point in the history
Co-authored-by: Chester Cheung <[email protected]>
Co-authored-by: Tyler Yahn <[email protected]>
  • Loading branch information
3 people authored Mar 27, 2023
1 parent 89e383f commit ae90c44
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 14 deletions.
18 changes: 9 additions & 9 deletions sdk/trace/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ func (cfg tracerProviderConfig) MarshalLog() interface{} {
type TracerProvider struct {
mu sync.Mutex
namedTracer map[instrumentation.Scope]*tracer
spanProcessors atomic.Value
spanProcessors atomic.Pointer[spanProcessorStates]
isShutdown bool

// These fields are not protected by the lock mu. They are assumed to be
Expand Down Expand Up @@ -123,7 +123,7 @@ func NewTracerProvider(opts ...TracerProviderOption) *TracerProvider {
for _, sp := range o.processors {
spss = append(spss, newSpanProcessorState(sp))
}
tp.spanProcessors.Store(spss)
tp.spanProcessors.Store(&spss)

return tp
}
Expand Down Expand Up @@ -168,9 +168,9 @@ func (p *TracerProvider) RegisterSpanProcessor(sp SpanProcessor) {
return
}
newSPS := spanProcessorStates{}
newSPS = append(newSPS, p.spanProcessors.Load().(spanProcessorStates)...)
newSPS = append(newSPS, *(p.spanProcessors.Load())...)
newSPS = append(newSPS, newSpanProcessorState(sp))
p.spanProcessors.Store(newSPS)
p.spanProcessors.Store(&newSPS)
}

// UnregisterSpanProcessor removes the given SpanProcessor from the list of SpanProcessors.
Expand All @@ -180,7 +180,7 @@ func (p *TracerProvider) UnregisterSpanProcessor(sp SpanProcessor) {
if p.isShutdown {
return
}
old := p.spanProcessors.Load().(spanProcessorStates)
old := *(p.spanProcessors.Load())
if len(old) == 0 {
return
}
Expand Down Expand Up @@ -209,13 +209,13 @@ func (p *TracerProvider) UnregisterSpanProcessor(sp SpanProcessor) {
spss[len(spss)-1] = nil
spss = spss[:len(spss)-1]

p.spanProcessors.Store(spss)
p.spanProcessors.Store(&spss)
}

// ForceFlush immediately exports all spans that have not yet been exported for
// all the registered span processors.
func (p *TracerProvider) ForceFlush(ctx context.Context) error {
spss := p.spanProcessors.Load().(spanProcessorStates)
spss := *(p.spanProcessors.Load())
if len(spss) == 0 {
return nil
}
Expand Down Expand Up @@ -243,7 +243,7 @@ func (p *TracerProvider) Shutdown(ctx context.Context) error {
return nil
}
p.isShutdown = true
spss := p.spanProcessors.Load().(spanProcessorStates)
spss := *(p.spanProcessors.Load())

var retErr error
for _, sps := range spss {
Expand All @@ -266,7 +266,7 @@ func (p *TracerProvider) Shutdown(ctx context.Context) error {
}
}
}
p.spanProcessors.Store(spanProcessorStates{})
p.spanProcessors.Store(&spanProcessorStates{})
return retErr
}

Expand Down
6 changes: 3 additions & 3 deletions sdk/trace/provider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ func TestRegisterAfterShutdownWithoutProcessors(t *testing.T) {

sp := &basicSpanProcessor{}
stp.RegisterSpanProcessor(sp) // no-op
assert.Empty(t, stp.spanProcessors.Load().(spanProcessorStates))
assert.Empty(t, stp.spanProcessors.Load())
}

func TestRegisterAfterShutdownWithProcessors(t *testing.T) {
Expand All @@ -146,11 +146,11 @@ func TestRegisterAfterShutdownWithProcessors(t *testing.T) {
err := stp.Shutdown(context.Background())
assert.NoError(t, err)
assert.True(t, stp.isShutdown)
assert.Empty(t, stp.spanProcessors.Load().(spanProcessorStates))
assert.Empty(t, stp.spanProcessors.Load())

sp2 := &basicSpanProcessor{}
stp.RegisterSpanProcessor(sp2) // no-op
assert.Empty(t, stp.spanProcessors.Load().(spanProcessorStates))
assert.Empty(t, stp.spanProcessors.Load())
}

func TestTracerProviderSamplerConfigFromEnv(t *testing.T) {
Expand Down
2 changes: 1 addition & 1 deletion sdk/trace/span.go
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,7 @@ func (s *recordingSpan) End(options ...trace.SpanEndOption) {
}
s.mu.Unlock()

sps := s.tracer.provider.spanProcessors.Load().(spanProcessorStates)
sps := *(s.tracer.provider.spanProcessors.Load())
if len(sps) == 0 {
return
}
Expand Down
2 changes: 1 addition & 1 deletion sdk/trace/tracer.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func (tr *tracer) Start(ctx context.Context, name string, options ...trace.SpanS

s := tr.newSpan(ctx, name, &config)
if rw, ok := s.(ReadWriteSpan); ok && s.IsRecording() {
sps := tr.provider.spanProcessors.Load().(spanProcessorStates)
sps := *(tr.provider.spanProcessors.Load())
for _, sp := range sps {
sp.sp.OnStart(ctx, rw)
}
Expand Down

0 comments on commit ae90c44

Please sign in to comment.