Skip to content

feat(trace): add concurrent-safe Reset method to SpanRecorder - #5994

Merged
pellared merged 11 commits into
open-telemetry:mainfrom
flc1125:tracetest-recorder-reset
Nov 25, 2024
Merged

pellared merged 11 commits into
open-telemetry:mainfrom
flc1125:tracetest-recorder-reset

Conversation

@flc1125

@flc1125 flc1125 commented Nov 21, 2024 •

Copy link
Copy Markdown
Member

We probably need a Reset method to reuse it for testing. Just like InMemoryExporter.

func (imsb *InMemoryExporter) Reset() {
imsb.mu.Lock()
defer imsb.mu.Unlock()
imsb.ss = nil
}

ex:

package main

import (
	"context"
	"testing"

	"github.com/stretchr/testify/assert"

	"go.opentelemetry.io/otel/sdk/trace"
	"go.opentelemetry.io/otel/sdk/trace/tracetest"
)

func TestReset(t *testing.T) {
	sr := tracetest.NewSpanRecorder()
	tp := trace.NewTracerProvider(trace.WithSpanProcessor(sr))
	ctx := context.Background()
	tracer := tp.Tracer("test")

	// test one:
	_, span := tracer.Start(ctx, "one")
	span.End()

	assert.Len(t, sr.Ended(), 1)
	t.Logf("the one span length: %d", len(sr.Ended()))

	// test two:
	sr.Reset() // <=== I don't want the result to be affected by one.
	_, span = tracer.Start(ctx, "two")
	span.End()

	assert.Len(t, sr.Ended(), 1) // <=== I don't want the result to be affected by one.
	t.Logf("the two span length: %d", len(sr.Ended()))
}

output:

=== RUN   TestReset
    main_test.go:24: the one span length: 1
    main_test.go:32: the two span length: 1
--- PASS: TestReset (0.00s)
PASS

Because it is a tool used for testing, I think such operations may occur.