You've already forked opentelemetry-go
mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-06-25 00:16:49 +02:00
drop failed to exporter batches and return error when forcing flush a span processor (#1860)
* drop failed to exporter batches and return error when forcing flush a span processor * changelog * changelog * change should export condition * cleanup
This commit is contained in:
committed by
GitHub
parent
f6a9279a86
commit
e399d355cb
@ -37,6 +37,9 @@ type testBatchExporter struct {
|
||||
batchCount int
|
||||
shutdownCount int
|
||||
delay time.Duration
|
||||
errors []error
|
||||
droppedCount int
|
||||
idx int
|
||||
err error
|
||||
}
|
||||
|
||||
@ -44,6 +47,13 @@ func (t *testBatchExporter) ExportSpans(ctx context.Context, ss []*sdktrace.Span
|
||||
t.mu.Lock()
|
||||
defer t.mu.Unlock()
|
||||
|
||||
if t.idx < len(t.errors) {
|
||||
t.droppedCount += len(ss)
|
||||
err := t.errors[t.idx]
|
||||
t.idx++
|
||||
return err
|
||||
}
|
||||
|
||||
time.Sleep(t.delay)
|
||||
|
||||
select {
|
||||
@ -338,12 +348,8 @@ func TestBatchSpanProcessorForceFlushSucceeds(t *testing.T) {
|
||||
// Force flush any held span batches
|
||||
err := ssp.ForceFlush(context.Background())
|
||||
|
||||
gotNumOfSpans := te.len()
|
||||
spanDifference := option.wantNumSpans - gotNumOfSpans
|
||||
if spanDifference > 10 || spanDifference < 0 {
|
||||
t.Errorf("number of exported span not equal to or within 10 less than: got %+v, want %+v\n",
|
||||
gotNumOfSpans, option.wantNumSpans)
|
||||
}
|
||||
assertMaxSpanDiff(t, te.len(), option.wantNumSpans, 10)
|
||||
|
||||
gotBatchCount := te.getBatchCount()
|
||||
if gotBatchCount < option.wantBatchCount {
|
||||
t.Errorf("number batches: got %+v, want >= %+v\n",
|
||||
@ -353,6 +359,65 @@ func TestBatchSpanProcessorForceFlushSucceeds(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestBatchSpanProcessorDropBatchIfFailed(t *testing.T) {
|
||||
te := testBatchExporter{
|
||||
errors: []error{errors.New("fail to export")},
|
||||
}
|
||||
tp := basicTracerProvider(t)
|
||||
option := testOption{
|
||||
o: []sdktrace.BatchSpanProcessorOption{
|
||||
sdktrace.WithMaxQueueSize(0),
|
||||
sdktrace.WithMaxExportBatchSize(2000),
|
||||
},
|
||||
wantNumSpans: 1000,
|
||||
wantBatchCount: 1,
|
||||
genNumSpans: 1000,
|
||||
}
|
||||
ssp := createAndRegisterBatchSP(option, &te)
|
||||
if ssp == nil {
|
||||
t.Fatalf("%s: Error creating new instance of BatchSpanProcessor\n", option.name)
|
||||
}
|
||||
tp.RegisterSpanProcessor(ssp)
|
||||
tr := tp.Tracer("BatchSpanProcessorWithOption")
|
||||
generateSpan(t, option.parallel, tr, option)
|
||||
|
||||
// Force flush any held span batches
|
||||
err := ssp.ForceFlush(context.Background())
|
||||
assert.Error(t, err)
|
||||
assert.EqualError(t, err, "fail to export")
|
||||
|
||||
// First flush will fail, nothing should be exported.
|
||||
assertMaxSpanDiff(t, te.droppedCount, option.wantNumSpans, 10)
|
||||
assert.Equal(t, 0, te.len())
|
||||
assert.Equal(t, 0, te.getBatchCount())
|
||||
|
||||
// Generate a new batch, this will succeed
|
||||
generateSpan(t, option.parallel, tr, option)
|
||||
|
||||
// Force flush any held span batches
|
||||
err = ssp.ForceFlush(context.Background())
|
||||
assert.NoError(t, err)
|
||||
|
||||
assertMaxSpanDiff(t, te.len(), option.wantNumSpans, 10)
|
||||
gotBatchCount := te.getBatchCount()
|
||||
if gotBatchCount < option.wantBatchCount {
|
||||
t.Errorf("number batches: got %+v, want >= %+v\n",
|
||||
gotBatchCount, option.wantBatchCount)
|
||||
t.Errorf("Batches %v\n", te.sizes)
|
||||
}
|
||||
}
|
||||
|
||||
func assertMaxSpanDiff(t *testing.T, want, got, maxDif int) {
|
||||
spanDifference := want - got
|
||||
if spanDifference < 0 {
|
||||
spanDifference = spanDifference * -1
|
||||
}
|
||||
if spanDifference > maxDif {
|
||||
t.Errorf("number of exported span not equal to or within %d less than: got %+v, want %+v\n",
|
||||
maxDif, got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBatchSpanProcessorForceFlushTimeout(t *testing.T) {
|
||||
var bp testBatchExporter
|
||||
bsp := sdktrace.NewBatchSpanProcessor(&bp)
|
||||
|
Reference in New Issue
Block a user