From 2b14af35d804c32cdf01c30bfbea564fe06bd266 Mon Sep 17 00:00:00 2001 From: legendecas Date: Thu, 7 May 2020 01:42:02 +0800 Subject: [PATCH] fix: multi span processor should flush child span processors (#1024) --- .../src/MultiSpanProcessor.ts | 4 +++- .../test/MultiSpanProcessor.test.ts | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/opentelemetry-tracing/src/MultiSpanProcessor.ts b/packages/opentelemetry-tracing/src/MultiSpanProcessor.ts index b4d4c9d3fa3..343da23af25 100644 --- a/packages/opentelemetry-tracing/src/MultiSpanProcessor.ts +++ b/packages/opentelemetry-tracing/src/MultiSpanProcessor.ts @@ -25,7 +25,9 @@ export class MultiSpanProcessor implements SpanProcessor { constructor(private readonly _spanProcessors: SpanProcessor[]) {} forceFlush(): void { - // do nothing as all spans are being exported without waiting + for (const spanProcessor of this._spanProcessors) { + spanProcessor.forceFlush(); + } } onStart(span: Span): void { diff --git a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts index 62b33fe224a..8b95d68aafd 100644 --- a/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts +++ b/packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts @@ -65,4 +65,19 @@ describe('MultiSpanProcessor', () => { assert.strictEqual(processor1.spans.length, 0); assert.strictEqual(processor1.spans.length, processor2.spans.length); }); + + it('should force span processors to flush', () => { + let flushed = false; + const processor: SpanProcessor = { + forceFlush: () => { + flushed = true; + }, + onStart: span => {}, + onEnd: span => {}, + shutdown: () => {}, + }; + const multiSpanProcessor = new MultiSpanProcessor([processor]); + multiSpanProcessor.forceFlush(); + assert.ok(flushed); + }); });