From 01fe26e0c43cdc3c1a4afc56b94363613c80aacb Mon Sep 17 00:00:00 2001 From: Sidartha Gracias Date: Wed, 29 Jun 2022 12:40:20 -0700 Subject: [PATCH 01/20] feat(opentelemetry-sdk-trace-base): Add optional forceFlush property to SpanExporter interface Signed-off-by: Sidartha Gracias --- CHANGELOG.md | 2 ++ .../opentelemetry-sdk-trace-base/src/export/SpanExporter.ts | 3 +++ 2 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f381cad8913..adb26f079ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ All notable changes to this project will be documented in this file. ### :rocket: (Enhancement) +* feat(SpanExpoter): Add optional forceFlush to SpanExporter interface #3067 @sgracias1 + ### :bug: (Bug Fix) * fix(resources): fix browser compatibility for host and os detectors [#3004](https://github.com/open-telemetry/opentelemetry-js/pull/3004) @legendecas diff --git a/packages/opentelemetry-sdk-trace-base/src/export/SpanExporter.ts b/packages/opentelemetry-sdk-trace-base/src/export/SpanExporter.ts index b3b89d4aa61..c9ca9c0c897 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/SpanExporter.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/SpanExporter.ts @@ -36,4 +36,7 @@ export interface SpanExporter { /** Stops the exporter. */ shutdown(): Promise; + + /** Immediately export all spans */ + forceFlush?(): Promise; } From 9073b2ce3915ef6399a177a1859d7ae1128652c5 Mon Sep 17 00:00:00 2001 From: Sidartha Gracias Date: Wed, 29 Jun 2022 12:58:53 -0700 Subject: [PATCH 02/20] feat(opentelemetry-sdk-trace-base): fixup changelog Signed-off-by: Sidartha Gracias --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index adb26f079ec..a8979cc5a2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ All notable changes to this project will be documented in this file. ### :rocket: (Enhancement) -* feat(SpanExpoter): Add optional forceFlush to SpanExporter interface #3067 @sgracias1 +* feat(SpanExpoter): Add optional forceFlush to SpanExporter interface #[3067] @sgracias1 ### :bug: (Bug Fix) From a8bc10dac357501b684048d0d3783d6cbaf93eb3 Mon Sep 17 00:00:00 2001 From: Sidartha Gracias Date: Wed, 29 Jun 2022 13:09:09 -0700 Subject: [PATCH 03/20] feat(opentelemetry-sdk-trace-base): fixup changelog Signed-off-by: Sidartha Gracias --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8979cc5a2f..ab53b108b35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ All notable changes to this project will be documented in this file. ### :rocket: (Enhancement) -* feat(SpanExpoter): Add optional forceFlush to SpanExporter interface #[3067] @sgracias1 +* feat(SpanExpoter): Add optional forceFlush to SpanExporter interface [#3067] @sgracias1 ### :bug: (Bug Fix) From c2af065fcf643d8f01b9f80924370069c03a66be Mon Sep 17 00:00:00 2001 From: Sidartha Gracias Date: Wed, 27 Jul 2022 12:29:23 -0700 Subject: [PATCH 04/20] feat(opentelemetry-sdk-trace-base): add exporter forceflush functions Signed-off-by: Sidartha Gracias --- .../src/export/ConsoleSpanExporter.ts | 8 ++++++++ .../src/export/InMemorySpanExporter.ts | 8 ++++++++ .../src/export/SimpleSpanProcessor.ts | 3 +-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/opentelemetry-sdk-trace-base/src/export/ConsoleSpanExporter.ts b/packages/opentelemetry-sdk-trace-base/src/export/ConsoleSpanExporter.ts index 57baa62d3a1..d9c895e1d56 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/ConsoleSpanExporter.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/ConsoleSpanExporter.ts @@ -45,6 +45,14 @@ export class ConsoleSpanExporter implements SpanExporter { * Shutdown the exporter. */ shutdown(): Promise { + return this._flush(); + } + + forceFlush(): Promise { + return this._flush(); + } + + private _flush() : Promise { this._sendSpans([]); return Promise.resolve(); } diff --git a/packages/opentelemetry-sdk-trace-base/src/export/InMemorySpanExporter.ts b/packages/opentelemetry-sdk-trace-base/src/export/InMemorySpanExporter.ts index c7c17d80c16..ae4bc1dfa66 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/InMemorySpanExporter.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/InMemorySpanExporter.ts @@ -47,6 +47,14 @@ export class InMemorySpanExporter implements SpanExporter { shutdown(): Promise { this._stopped = true; + return this._flush(); + } + + forceFlush(): Promise { + return this._flush(); + } + + private _flush(): Promise { this._finishedSpans = []; return Promise.resolve(); } diff --git a/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts b/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts index c775bdf6d4c..953d283c059 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts @@ -40,8 +40,7 @@ export class SimpleSpanProcessor implements SpanProcessor { } forceFlush(): Promise { - // do nothing as all spans are being exported without waiting - return Promise.resolve(); + return this._exporter.forceFlush(); } // does nothing. From 55c5c362243997d654148ed654c9000904f48ff5 Mon Sep 17 00:00:00 2001 From: Sidartha Gracias Date: Wed, 27 Jul 2022 14:31:03 -0700 Subject: [PATCH 05/20] feat(opentelemetry-sdk-trace-base): add tests, add empty implemtation for downstream exporters Signed-off-by: Sidartha Gracias --- .../test/fetch.test.ts | 5 +++++ .../test/xhr.test.ts | 4 ++++ .../otlp-exporter-base/src/OTLPExporterBase.ts | 4 ++++ packages/opentelemetry-exporter-jaeger/src/jaeger.ts | 4 ++++ packages/opentelemetry-exporter-zipkin/src/zipkin.ts | 4 ++++ .../src/export/SpanExporter.ts | 2 +- .../test/common/export/ConsoleSpanExporter.test.ts | 11 +++++++++++ .../test/common/export/InMemorySpanExporter.test.ts | 5 +++++ .../test/common/export/SimpleSpanProcessor.test.ts | 8 ++++++++ 9 files changed, 46 insertions(+), 1 deletion(-) diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts b/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts index e4ce4f9f5a4..0547206b839 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts +++ b/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts @@ -49,6 +49,11 @@ class DummySpanExporter implements tracing.SpanExporter { shutdown() { return Promise.resolve(); } + + forceFlush(): Promise { + return Promise.resolve(); + } + } const getData = (url: string, method?: string) => { diff --git a/experimental/packages/opentelemetry-instrumentation-xml-http-request/test/xhr.test.ts b/experimental/packages/opentelemetry-instrumentation-xml-http-request/test/xhr.test.ts index 0ce5a01ee0f..d33e6566f9b 100644 --- a/experimental/packages/opentelemetry-instrumentation-xml-http-request/test/xhr.test.ts +++ b/experimental/packages/opentelemetry-instrumentation-xml-http-request/test/xhr.test.ts @@ -47,6 +47,10 @@ class DummySpanExporter implements tracing.SpanExporter { shutdown() { return Promise.resolve(); } + + forceFlush(): Promise { + return Promise.resolve(); + } } const XHR_TIMEOUT = 2000; diff --git a/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts b/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts index 013879dd250..4e5c76378e5 100644 --- a/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts +++ b/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts @@ -110,6 +110,10 @@ export abstract class OTLPExporterBase< return this._shutdownOnce.call(); } + forceFlush(): Promise { + return Promise.resolve(); + } + /** * Called by _shutdownOnce with BindOnceFuture */ diff --git a/packages/opentelemetry-exporter-jaeger/src/jaeger.ts b/packages/opentelemetry-exporter-jaeger/src/jaeger.ts index 0ba979db046..6582062a15f 100644 --- a/packages/opentelemetry-exporter-jaeger/src/jaeger.ts +++ b/packages/opentelemetry-exporter-jaeger/src/jaeger.ts @@ -82,6 +82,10 @@ export class JaegerExporter implements SpanExporter { return this._shutdownOnce.call(); } + forceFlush(): Promise { + return Promise.resolve(); + } + private _shutdown(): Promise { return Promise.race([ new Promise((_resolve, reject) => { diff --git a/packages/opentelemetry-exporter-zipkin/src/zipkin.ts b/packages/opentelemetry-exporter-zipkin/src/zipkin.ts index 3b228b30073..3d232a6ac75 100644 --- a/packages/opentelemetry-exporter-zipkin/src/zipkin.ts +++ b/packages/opentelemetry-exporter-zipkin/src/zipkin.ts @@ -109,6 +109,10 @@ export class ZipkinExporter implements SpanExporter { }); } + forceFlush(): Promise { + return Promise.resolve(); + } + /** * if user defines getExportRequestHeaders in config then this will be called * everytime before send, otherwise it will be replaced with noop in diff --git a/packages/opentelemetry-sdk-trace-base/src/export/SpanExporter.ts b/packages/opentelemetry-sdk-trace-base/src/export/SpanExporter.ts index c9ca9c0c897..f0e8c79ce04 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/SpanExporter.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/SpanExporter.ts @@ -38,5 +38,5 @@ export interface SpanExporter { shutdown(): Promise; /** Immediately export all spans */ - forceFlush?(): Promise; + forceFlush(): Promise; } diff --git a/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts index 0a66b13fc2a..5742cc7a4ac 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts @@ -99,4 +99,15 @@ describe('ConsoleSpanExporter', () => { }); }); }); + + describe('force flush', () => { + describe('when flushing complete', () => { + it('should call an async callback', done => { + consoleExporter = new ConsoleSpanExporter(); + consoleExporter.forceFlush().then(() => { + done(); + }); + }); + }); + }); }); diff --git a/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts index 66514155f0c..01911c3b39a 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts @@ -80,6 +80,11 @@ describe('InMemorySpanExporter', () => { assert.strictEqual(memoryExporter.getFinishedSpans().length, 0); }); + it('forceFlush should discard inmemory spans', () => { + memoryExporter.forceFlush(); + assert.strictEqual(memoryExporter.getFinishedSpans().length, 0); + }); + it('should return the success result', () => { const exorter = new InMemorySpanExporter(); exorter.export([], (result: ExportResult) => { diff --git a/packages/opentelemetry-sdk-trace-base/test/common/export/SimpleSpanProcessor.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/export/SimpleSpanProcessor.test.ts index b127502ad8a..2beeab50b65 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/export/SimpleSpanProcessor.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/export/SimpleSpanProcessor.test.ts @@ -149,6 +149,14 @@ describe('SimpleSpanProcessor', () => { }); describe('force flush', () => { + it('should call forceflush on exporter', () => { + const spyflush = sinon.spy(exporter, 'forceFlush'); + const processor = new SimpleSpanProcessor(exporter); + processor.forceFlush().then(() => { + }); + assert.ok(spyflush.calledOnce); + }); + describe('when flushing complete', () => { it('should call an async callback', done => { const processor = new SimpleSpanProcessor(exporter); From 18e90f542c5cee2578327e1c760bc881339b0000 Mon Sep 17 00:00:00 2001 From: Sidartha Gracias Date: Mon, 1 Aug 2022 12:23:10 -0700 Subject: [PATCH 06/20] feat(opentelemetry-sdk-trace-base): add implementation for forceflush for zipkin, jaeger, otlp --- .../otlp-exporter-base/src/OTLPExporterBase.ts | 13 ++++++++----- .../otlp-exporter-base/test/node/util.test.ts | 11 +++++++++++ .../opentelemetry-exporter-jaeger/src/jaeger.ts | 5 ++++- .../test/jaeger.test.ts | 12 ++++++++++++ .../opentelemetry-exporter-zipkin/src/zipkin.ts | 11 +++++++---- .../test/node/zipkin.test.ts | 11 +++++++++++ .../src/export/BatchSpanProcessorBase.ts | 2 +- .../src/export/ConsoleSpanExporter.ts | 11 +++++------ .../src/export/InMemorySpanExporter.ts | 11 +++++------ .../test/common/export/InMemorySpanExporter.test.ts | 12 +++++++++--- 10 files changed, 73 insertions(+), 26 deletions(-) diff --git a/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts b/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts index 4e5c76378e5..fb56e8c5852 100644 --- a/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts +++ b/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts @@ -110,8 +110,14 @@ export abstract class OTLPExporterBase< return this._shutdownOnce.call(); } + /** + * Exports any pending spans in the exporter + */ forceFlush(): Promise { - return Promise.resolve(); + return Promise.all(this._sendingPromises) + .then(() => { + /** ignore resolved values */ + }); } /** @@ -120,10 +126,7 @@ export abstract class OTLPExporterBase< private _shutdown(): Promise { diag.debug('shutdown started'); this.onShutdown(); - return Promise.all(this._sendingPromises) - .then(() => { - /** ignore resolved values */ - }); + return this.forceFlush(); } abstract onShutdown(): void; diff --git a/experimental/packages/otlp-exporter-base/test/node/util.test.ts b/experimental/packages/otlp-exporter-base/test/node/util.test.ts index 56dc66f2ee6..c3e5bdfb1a4 100644 --- a/experimental/packages/otlp-exporter-base/test/node/util.test.ts +++ b/experimental/packages/otlp-exporter-base/test/node/util.test.ts @@ -60,6 +60,17 @@ class Exporter extends OTLPExporterNodeBase { } } +describe('force flush', () => { + describe('when flushing complete', () => { + it('should call an async callback', done => { + let exporter = new Exporter({}); + exporter.forceFlush().then(() => { + done(); + }); + }); + }); +}); + describe('configureExporterTimeout', () => { const envSource = process.env; it('should use timeoutMillis parameter as export timeout value', () => { diff --git a/packages/opentelemetry-exporter-jaeger/src/jaeger.ts b/packages/opentelemetry-exporter-jaeger/src/jaeger.ts index 6582062a15f..6b346f14a3c 100644 --- a/packages/opentelemetry-exporter-jaeger/src/jaeger.ts +++ b/packages/opentelemetry-exporter-jaeger/src/jaeger.ts @@ -82,8 +82,11 @@ export class JaegerExporter implements SpanExporter { return this._shutdownOnce.call(); } + /** + * Exports any pending spans in exporter + */ forceFlush(): Promise { - return Promise.resolve(); + return this._flush(); } private _shutdown(): Promise { diff --git a/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts b/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts index 738f9b9ce7e..21f669d32fb 100644 --- a/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts +++ b/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts @@ -166,6 +166,18 @@ describe('JaegerExporter', () => { }); }); + describe('force flush', () => { + let exporter: JaegerExporter; + describe('when flushing complete', () => { + it('should call an async callback', done => { + exporter = new JaegerExporter(); + exporter.forceFlush().then(() => { + done(); + }); + }); + }); + }); + describe('export', () => { let exporter: JaegerExporter; diff --git a/packages/opentelemetry-exporter-zipkin/src/zipkin.ts b/packages/opentelemetry-exporter-zipkin/src/zipkin.ts index 3d232a6ac75..6e9c4d1bb71 100644 --- a/packages/opentelemetry-exporter-zipkin/src/zipkin.ts +++ b/packages/opentelemetry-exporter-zipkin/src/zipkin.ts @@ -102,6 +102,13 @@ export class ZipkinExporter implements SpanExporter { shutdown(): Promise { diag.debug('Zipkin exporter shutdown'); this._isShutdown = true; + return this.forceFlush(); + } + + /** + * Exports any pending spans in exporter + */ + forceFlush(): Promise { return new Promise((resolve, reject) => { Promise.all(this._sendingPromises).then(() => { resolve(); @@ -109,10 +116,6 @@ export class ZipkinExporter implements SpanExporter { }); } - forceFlush(): Promise { - return Promise.resolve(); - } - /** * if user defines getExportRequestHeaders in config then this will be called * everytime before send, otherwise it will be replaced with noop in diff --git a/packages/opentelemetry-exporter-zipkin/test/node/zipkin.test.ts b/packages/opentelemetry-exporter-zipkin/test/node/zipkin.test.ts index 1b6465a656e..3a65ae2a8ae 100644 --- a/packages/opentelemetry-exporter-zipkin/test/node/zipkin.test.ts +++ b/packages/opentelemetry-exporter-zipkin/test/node/zipkin.test.ts @@ -509,6 +509,17 @@ describe('Zipkin Exporter - node', () => { }); }); + describe('force flush', () => { + describe('when flushing complete', () => { + it('should call an async callback', done => { + const exporter = new ZipkinExporter({}); + exporter.forceFlush().then(() => { + done(); + }); + }); + }); + }); + describe('when env.OTEL_EXPORTER_ZIPKIN_ENDPOINT is set', () => { before(() => { process.env.OTEL_EXPORTER_ZIPKIN_ENDPOINT = 'http://localhost:9412'; diff --git a/packages/opentelemetry-sdk-trace-base/src/export/BatchSpanProcessorBase.ts b/packages/opentelemetry-sdk-trace-base/src/export/BatchSpanProcessorBase.ts index e6417d84afc..27c1e627fff 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/BatchSpanProcessorBase.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/BatchSpanProcessorBase.ts @@ -137,7 +137,7 @@ export abstract class BatchSpanProcessorBase implements }); } - private _flushOneBatch(): Promise { + private async _flushOneBatch(): Promise { this._clearTimer(); if (this._finishedSpans.length === 0) { return Promise.resolve(); diff --git a/packages/opentelemetry-sdk-trace-base/src/export/ConsoleSpanExporter.ts b/packages/opentelemetry-sdk-trace-base/src/export/ConsoleSpanExporter.ts index d9c895e1d56..c21e7cb116b 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/ConsoleSpanExporter.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/ConsoleSpanExporter.ts @@ -45,15 +45,14 @@ export class ConsoleSpanExporter implements SpanExporter { * Shutdown the exporter. */ shutdown(): Promise { - return this._flush(); + this._sendSpans([]); + return this.forceFlush(); } + /** + * Exports any pending spans in exporter + */ forceFlush(): Promise { - return this._flush(); - } - - private _flush() : Promise { - this._sendSpans([]); return Promise.resolve(); } diff --git a/packages/opentelemetry-sdk-trace-base/src/export/InMemorySpanExporter.ts b/packages/opentelemetry-sdk-trace-base/src/export/InMemorySpanExporter.ts index ae4bc1dfa66..4a755ea8cd9 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/InMemorySpanExporter.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/InMemorySpanExporter.ts @@ -47,15 +47,14 @@ export class InMemorySpanExporter implements SpanExporter { shutdown(): Promise { this._stopped = true; - return this._flush(); + this._finishedSpans = []; + return this.forceFlush(); } + /** + * Exports any pending spans in the exporter + */ forceFlush(): Promise { - return this._flush(); - } - - private _flush(): Promise { - this._finishedSpans = []; return Promise.resolve(); } diff --git a/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts index 01911c3b39a..0034c03e22d 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts @@ -80,9 +80,15 @@ describe('InMemorySpanExporter', () => { assert.strictEqual(memoryExporter.getFinishedSpans().length, 0); }); - it('forceFlush should discard inmemory spans', () => { - memoryExporter.forceFlush(); - assert.strictEqual(memoryExporter.getFinishedSpans().length, 0); + describe('force flush', () => { + describe('when flushing complete', () => { + it('should call an async callback', done => { + memoryExporter = new InMemorySpanExporter(); + memoryExporter.forceFlush().then(() => { + done(); + }); + }); + }); }); it('should return the success result', () => { From 8058f452d9fee87a06588070df00540208a818d8 Mon Sep 17 00:00:00 2001 From: Sidartha Gracias Date: Thu, 4 Aug 2022 12:32:22 -0700 Subject: [PATCH 07/20] feat(opentelemetry-sdk-trace-base): fix lint, minor review change --- .../packages/otlp-exporter-base/src/OTLPExporterBase.ts | 9 +++++---- .../packages/otlp-exporter-base/test/node/util.test.ts | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts b/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts index fb56e8c5852..4706b7946dd 100644 --- a/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts +++ b/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts @@ -114,10 +114,11 @@ export abstract class OTLPExporterBase< * Exports any pending spans in the exporter */ forceFlush(): Promise { - return Promise.all(this._sendingPromises) - .then(() => { - /** ignore resolved values */ - }); + return new Promise((resolve, reject) => { + Promise.all(this._sendingPromises).then(() => { + resolve(); + }, reject); + }); } /** diff --git a/experimental/packages/otlp-exporter-base/test/node/util.test.ts b/experimental/packages/otlp-exporter-base/test/node/util.test.ts index c3e5bdfb1a4..7c40120f5ed 100644 --- a/experimental/packages/otlp-exporter-base/test/node/util.test.ts +++ b/experimental/packages/otlp-exporter-base/test/node/util.test.ts @@ -63,7 +63,7 @@ class Exporter extends OTLPExporterNodeBase { describe('force flush', () => { describe('when flushing complete', () => { it('should call an async callback', done => { - let exporter = new Exporter({}); + const exporter = new Exporter({}); exporter.forceFlush().then(() => { done(); }); From 39160d70fa57d43d9caca809575d94a988b939ab Mon Sep 17 00:00:00 2001 From: Sidartha Gracias Date: Thu, 11 Aug 2022 09:39:18 -0700 Subject: [PATCH 08/20] feat(opentelemetry-sdk-trace-base): minor review change --- .../otlp-exporter-base/test/node/util.test.ts | 10 +++------- .../test/jaeger.test.ts | 10 +++------- .../test/node/zipkin.test.ts | 10 +++------- .../src/export/BatchSpanProcessorBase.ts | 2 +- .../test/common/export/ConsoleSpanExporter.test.ts | 12 ++++-------- .../test/common/export/InMemorySpanExporter.test.ts | 8 ++------ 6 files changed, 16 insertions(+), 36 deletions(-) diff --git a/experimental/packages/otlp-exporter-base/test/node/util.test.ts b/experimental/packages/otlp-exporter-base/test/node/util.test.ts index 7c40120f5ed..0d000d7229e 100644 --- a/experimental/packages/otlp-exporter-base/test/node/util.test.ts +++ b/experimental/packages/otlp-exporter-base/test/node/util.test.ts @@ -61,13 +61,9 @@ class Exporter extends OTLPExporterNodeBase { } describe('force flush', () => { - describe('when flushing complete', () => { - it('should call an async callback', done => { - const exporter = new Exporter({}); - exporter.forceFlush().then(() => { - done(); - }); - }); + it('forceFlush should flush spans and return', async () => { + const exporter = new Exporter({}); + await exporter.forceFlush(); }); }); diff --git a/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts b/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts index 21f669d32fb..d76af157f16 100644 --- a/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts +++ b/packages/opentelemetry-exporter-jaeger/test/jaeger.test.ts @@ -168,13 +168,9 @@ describe('JaegerExporter', () => { describe('force flush', () => { let exporter: JaegerExporter; - describe('when flushing complete', () => { - it('should call an async callback', done => { - exporter = new JaegerExporter(); - exporter.forceFlush().then(() => { - done(); - }); - }); + it('forceFlush should flush spans and return', async () => { + exporter = new JaegerExporter(); + await exporter.forceFlush(); }); }); diff --git a/packages/opentelemetry-exporter-zipkin/test/node/zipkin.test.ts b/packages/opentelemetry-exporter-zipkin/test/node/zipkin.test.ts index 3a65ae2a8ae..559fcbc3ea4 100644 --- a/packages/opentelemetry-exporter-zipkin/test/node/zipkin.test.ts +++ b/packages/opentelemetry-exporter-zipkin/test/node/zipkin.test.ts @@ -510,13 +510,9 @@ describe('Zipkin Exporter - node', () => { }); describe('force flush', () => { - describe('when flushing complete', () => { - it('should call an async callback', done => { - const exporter = new ZipkinExporter({}); - exporter.forceFlush().then(() => { - done(); - }); - }); + it('forceFlush should flush spans and return', async () => { + const exporter = new ZipkinExporter({}); + await exporter.forceFlush(); }); }); diff --git a/packages/opentelemetry-sdk-trace-base/src/export/BatchSpanProcessorBase.ts b/packages/opentelemetry-sdk-trace-base/src/export/BatchSpanProcessorBase.ts index 27c1e627fff..e6417d84afc 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/BatchSpanProcessorBase.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/BatchSpanProcessorBase.ts @@ -137,7 +137,7 @@ export abstract class BatchSpanProcessorBase implements }); } - private async _flushOneBatch(): Promise { + private _flushOneBatch(): Promise { this._clearTimer(); if (this._finishedSpans.length === 0) { return Promise.resolve(); diff --git a/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts index cb6b8530769..8a67f50b3ef 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts @@ -101,13 +101,9 @@ describe('ConsoleSpanExporter', () => { }); describe('force flush', () => { - describe('when flushing complete', () => { - it('should call an async callback', done => { - consoleExporter = new ConsoleSpanExporter(); - consoleExporter.forceFlush().then(() => { - done(); - }); - }); + it('forceFlush should flush spans and return', async () => { + consoleExporter = new ConsoleSpanExporter(); + await consoleExporter.forceFlush(); }); }); -}); +}); \ No newline at end of file diff --git a/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts index 0034c03e22d..6dcb85774c9 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts @@ -81,14 +81,10 @@ describe('InMemorySpanExporter', () => { }); describe('force flush', () => { - describe('when flushing complete', () => { - it('should call an async callback', done => { + it('forceFlush should flush spans and return', async () => { memoryExporter = new InMemorySpanExporter(); - memoryExporter.forceFlush().then(() => { - done(); - }); + await memoryExporter.forceFlush(); }); - }); }); it('should return the success result', () => { From 3490194467c6d3fbc1e832c26c7bd97a4768e5f0 Mon Sep 17 00:00:00 2001 From: Sidartha Gracias Date: Fri, 12 Aug 2022 08:58:02 -0700 Subject: [PATCH 09/20] feat(opentelemetry-sdk-trace-base): fix lint --- .../test/common/export/ConsoleSpanExporter.test.ts | 2 +- .../test/common/export/InMemorySpanExporter.test.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts index 8a67f50b3ef..09619de777f 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/export/ConsoleSpanExporter.test.ts @@ -106,4 +106,4 @@ describe('ConsoleSpanExporter', () => { await consoleExporter.forceFlush(); }); }); -}); \ No newline at end of file +}); diff --git a/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts index 6dcb85774c9..228ecfd5651 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/export/InMemorySpanExporter.test.ts @@ -81,10 +81,10 @@ describe('InMemorySpanExporter', () => { }); describe('force flush', () => { - it('forceFlush should flush spans and return', async () => { - memoryExporter = new InMemorySpanExporter(); - await memoryExporter.forceFlush(); - }); + it('forceFlush should flush spans and return', async () => { + memoryExporter = new InMemorySpanExporter(); + await memoryExporter.forceFlush(); + }); }); it('should return the success result', () => { From 5a81e5fb30095f39f136fe5cbc89f1388b947fd3 Mon Sep 17 00:00:00 2001 From: Sidartha Gracias Date: Thu, 18 Aug 2022 09:47:11 -0700 Subject: [PATCH 10/20] feat(opentelemetry-sdk-trace-base): minor change --- .../packages/otlp-exporter-base/src/OTLPExporterBase.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts b/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts index 4706b7946dd..b51ca4acc83 100644 --- a/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts +++ b/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts @@ -114,11 +114,7 @@ export abstract class OTLPExporterBase< * Exports any pending spans in the exporter */ forceFlush(): Promise { - return new Promise((resolve, reject) => { - Promise.all(this._sendingPromises).then(() => { - resolve(); - }, reject); - }); + return Promise.all(this._sendingPromises).then(() => {}); } /** From b8e1bd8129a8f95796d275278633d7ae97719a9c Mon Sep 17 00:00:00 2001 From: Jackson Weber Date: Mon, 24 Apr 2023 16:02:04 -0700 Subject: [PATCH 11/20] Fix lint. --- .../opentelemetry-instrumentation-fetch/test/fetch.test.ts | 1 - .../test/common/export/SimpleSpanProcessor.test.ts | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts b/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts index 0d9bee41c1e..318e0f98c3e 100644 --- a/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts +++ b/experimental/packages/opentelemetry-instrumentation-fetch/test/fetch.test.ts @@ -53,7 +53,6 @@ class DummySpanExporter implements tracing.SpanExporter { forceFlush(): Promise { return Promise.resolve(); } - } const getData = (url: string, method?: string) => { diff --git a/packages/opentelemetry-sdk-trace-base/test/common/export/SimpleSpanProcessor.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/export/SimpleSpanProcessor.test.ts index 42c79aee1df..13ba2296275 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/export/SimpleSpanProcessor.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/export/SimpleSpanProcessor.test.ts @@ -155,8 +155,7 @@ describe('SimpleSpanProcessor', () => { it('should call forceflush on exporter', () => { const spyflush = sinon.spy(exporter, 'forceFlush'); const processor = new SimpleSpanProcessor(exporter); - processor.forceFlush().then(() => { - }); + processor.forceFlush().then(() => {}); assert.ok(spyflush.calledOnce); }); From 128a0bb588268a925abd1c091118f4037fda8e90 Mon Sep 17 00:00:00 2001 From: Jackson Weber Date: Mon, 24 Apr 2023 17:16:10 -0700 Subject: [PATCH 12/20] Have the SimpleSpanProcessor handle force flush. --- .../src/export/SimpleSpanProcessor.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts b/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts index c6ed8d19745..171be7b5a22 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts @@ -44,7 +44,8 @@ export class SimpleSpanProcessor implements SpanProcessor { } async forceFlush(): Promise { - return this._exporter.forceFlush(); + // await unresolved resources before resolving. + await Promise.all(Array.from(this._unresolvedExports)); } onStart(_span: Span, _parentContext: Context): void {} From 4160c987400a84e1b364c16ced1908c9cf9d2ba0 Mon Sep 17 00:00:00 2001 From: Jackson Weber Date: Tue, 25 Apr 2023 12:22:24 -0700 Subject: [PATCH 13/20] Update changelog. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8970a8f4d89..a2ff8592ec2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :rocket: (Enhancement) -* feat(SpanExpoter): Add optional forceFlush to SpanExporter interface [#3067] @sgracias1 +* feat(SpanExpoter): Add mandatory forceFlush to SpanExporter interface [#3753] @sgracias1 @JacksonWeber ### :bug: (Bug Fix) From c288545348b874c71360e82992420784b318ae10 Mon Sep 17 00:00:00 2001 From: Jackson Weber Date: Tue, 25 Apr 2023 13:26:18 -0700 Subject: [PATCH 14/20] Update the span processor to call forceFlush in the exporter. --- .../src/export/SimpleSpanProcessor.ts | 1 + .../test/common/export/SimpleSpanProcessor.test.ts | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts b/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts index 171be7b5a22..86a0778699c 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts @@ -46,6 +46,7 @@ export class SimpleSpanProcessor implements SpanProcessor { async forceFlush(): Promise { // await unresolved resources before resolving. await Promise.all(Array.from(this._unresolvedExports)); + this._exporter.forceFlush(); } onStart(_span: Span, _parentContext: Context): void {} diff --git a/packages/opentelemetry-sdk-trace-base/test/common/export/SimpleSpanProcessor.test.ts b/packages/opentelemetry-sdk-trace-base/test/common/export/SimpleSpanProcessor.test.ts index 13ba2296275..94e86eeed7f 100644 --- a/packages/opentelemetry-sdk-trace-base/test/common/export/SimpleSpanProcessor.test.ts +++ b/packages/opentelemetry-sdk-trace-base/test/common/export/SimpleSpanProcessor.test.ts @@ -155,8 +155,9 @@ describe('SimpleSpanProcessor', () => { it('should call forceflush on exporter', () => { const spyflush = sinon.spy(exporter, 'forceFlush'); const processor = new SimpleSpanProcessor(exporter); - processor.forceFlush().then(() => {}); - assert.ok(spyflush.calledOnce); + processor.forceFlush().then(() => { + assert.ok(spyflush.calledOnce); + }); }); it('should await unresolved resources', async () => { From c5afa1dbc866ca5766ab64109db752ccae9fb79e Mon Sep 17 00:00:00 2001 From: Jackson Weber Date: Tue, 25 Apr 2023 13:41:38 -0700 Subject: [PATCH 15/20] Fix lint. --- .../src/export/SimpleSpanProcessor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts b/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts index 86a0778699c..8d50422377b 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts @@ -46,7 +46,7 @@ export class SimpleSpanProcessor implements SpanProcessor { async forceFlush(): Promise { // await unresolved resources before resolving. await Promise.all(Array.from(this._unresolvedExports)); - this._exporter.forceFlush(); + await this._exporter.forceFlush(); } onStart(_span: Span, _parentContext: Context): void {} From 23eceda471c691a0935e0100cf3169f47035ab5b Mon Sep 17 00:00:00 2001 From: Jackson Weber Date: Wed, 10 May 2023 23:52:20 -0700 Subject: [PATCH 16/20] Make the forceFlush method optional. --- .../src/export/SimpleSpanProcessor.ts | 4 +++- .../opentelemetry-sdk-trace-base/src/export/SpanExporter.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts b/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts index 8d50422377b..44e1f4570c6 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts @@ -46,7 +46,9 @@ export class SimpleSpanProcessor implements SpanProcessor { async forceFlush(): Promise { // await unresolved resources before resolving. await Promise.all(Array.from(this._unresolvedExports)); - await this._exporter.forceFlush(); + if (this._exporter.forceFlush) { + await this._exporter.forceFlush(); + } } onStart(_span: Span, _parentContext: Context): void {} diff --git a/packages/opentelemetry-sdk-trace-base/src/export/SpanExporter.ts b/packages/opentelemetry-sdk-trace-base/src/export/SpanExporter.ts index f0e8c79ce04..c9ca9c0c897 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/SpanExporter.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/SpanExporter.ts @@ -38,5 +38,5 @@ export interface SpanExporter { shutdown(): Promise; /** Immediately export all spans */ - forceFlush(): Promise; + forceFlush?(): Promise; } From 7ea430ec63cb11e4c989f05b4444e97ae5f9d2c7 Mon Sep 17 00:00:00 2001 From: Marc Pichler Date: Thu, 11 May 2023 10:18:27 +0200 Subject: [PATCH 17/20] fix(changelog): replace mandatory -> optional --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc275ec664a..35140aa5116 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :rocket: (Enhancement) -* feat(SpanExpoter): Add mandatory forceFlush to SpanExporter interface [#3753](https://github.com/open-telemetry/opentelemetry-js/pull/3753/) @sgracias1 @JacksonWeber +* feat(SpanExpoter): Add optional forceFlush to SpanExporter interface [#3753](https://github.com/open-telemetry/opentelemetry-js/pull/3753/) @sgracias1 @JacksonWeber * feat(core): add environment variables for OTLP log exporters. [#3712](https://github.com/open-telemetry/opentelemetry-js/pull/3712/) @llc1123 ### :bug: (Bug Fix) From 352369c00b0bea39ce603624d2399263d81bf90c Mon Sep 17 00:00:00 2001 From: Jackson Weber <47067795+JacksonWeber@users.noreply.github.com> Date: Tue, 16 May 2023 11:13:22 -0700 Subject: [PATCH 18/20] Add or update the Azure App Service build and deployment workflow config --- .../issue_3067_jacksonweber-test-github.yml | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .github/workflows/issue_3067_jacksonweber-test-github.yml diff --git a/.github/workflows/issue_3067_jacksonweber-test-github.yml b/.github/workflows/issue_3067_jacksonweber-test-github.yml new file mode 100644 index 00000000000..54eea5aa854 --- /dev/null +++ b/.github/workflows/issue_3067_jacksonweber-test-github.yml @@ -0,0 +1,56 @@ +# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy +# More GitHub Actions for Azure: https://github.com/Azure/actions + +name: Build and deploy Node.js app to Azure Web App - jacksonweber-test-github + +on: + push: + branches: + - Issue_3067 + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Set up Node.js version + uses: actions/setup-node@v1 + with: + node-version: '16.x' + + - name: npm install, build, and test + run: | + npm install + npm run build --if-present + npm run test --if-present + + - name: Upload artifact for deployment job + uses: actions/upload-artifact@v2 + with: + name: node-app + path: . + + deploy: + runs-on: ubuntu-latest + needs: build + environment: + name: 'Production' + url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} + + steps: + - name: Download artifact from build job + uses: actions/download-artifact@v2 + with: + name: node-app + + - name: 'Deploy to Azure Web App' + id: deploy-to-webapp + uses: azure/webapps-deploy@v2 + with: + app-name: 'jacksonweber-test-github' + slot-name: 'Production' + publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_0AFF3221CC5E49E5915C8C5D89C620EC }} + package: . From d9f8201858465502bd08dcee5f51ad239d9cf9ef Mon Sep 17 00:00:00 2001 From: Jackson Weber <47067795+JacksonWeber@users.noreply.github.com> Date: Wed, 17 May 2023 08:51:16 -0700 Subject: [PATCH 19/20] Delete issue_3067_jacksonweber-test-github.yml --- .../issue_3067_jacksonweber-test-github.yml | 56 ------------------- 1 file changed, 56 deletions(-) delete mode 100644 .github/workflows/issue_3067_jacksonweber-test-github.yml diff --git a/.github/workflows/issue_3067_jacksonweber-test-github.yml b/.github/workflows/issue_3067_jacksonweber-test-github.yml deleted file mode 100644 index 54eea5aa854..00000000000 --- a/.github/workflows/issue_3067_jacksonweber-test-github.yml +++ /dev/null @@ -1,56 +0,0 @@ -# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy -# More GitHub Actions for Azure: https://github.com/Azure/actions - -name: Build and deploy Node.js app to Azure Web App - jacksonweber-test-github - -on: - push: - branches: - - Issue_3067 - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: Set up Node.js version - uses: actions/setup-node@v1 - with: - node-version: '16.x' - - - name: npm install, build, and test - run: | - npm install - npm run build --if-present - npm run test --if-present - - - name: Upload artifact for deployment job - uses: actions/upload-artifact@v2 - with: - name: node-app - path: . - - deploy: - runs-on: ubuntu-latest - needs: build - environment: - name: 'Production' - url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} - - steps: - - name: Download artifact from build job - uses: actions/download-artifact@v2 - with: - name: node-app - - - name: 'Deploy to Azure Web App' - id: deploy-to-webapp - uses: azure/webapps-deploy@v2 - with: - app-name: 'jacksonweber-test-github' - slot-name: 'Production' - publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_0AFF3221CC5E49E5915C8C5D89C620EC }} - package: . From 6914c20f55d91557e7105f2417a069a47e55e129 Mon Sep 17 00:00:00 2001 From: Jackson Weber Date: Wed, 17 May 2023 12:41:58 -0700 Subject: [PATCH 20/20] Add comment for ignoring resolved values. --- .../packages/otlp-exporter-base/src/OTLPExporterBase.ts | 4 +++- .../src/export/SimpleSpanProcessor.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts b/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts index ac2f5e6e280..c9603057830 100644 --- a/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts +++ b/experimental/packages/otlp-exporter-base/src/OTLPExporterBase.ts @@ -121,7 +121,9 @@ export abstract class OTLPExporterBase< * Exports any pending spans in the exporter */ forceFlush(): Promise { - return Promise.all(this._sendingPromises).then(() => {}); + return Promise.all(this._sendingPromises).then(() => { + /** ignore resolved values */ + }); } /** diff --git a/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts b/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts index 44e1f4570c6..463e8376bde 100644 --- a/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts +++ b/packages/opentelemetry-sdk-trace-base/src/export/SimpleSpanProcessor.ts @@ -44,7 +44,7 @@ export class SimpleSpanProcessor implements SpanProcessor { } async forceFlush(): Promise { - // await unresolved resources before resolving. + // await unresolved resources before resolving await Promise.all(Array.from(this._unresolvedExports)); if (this._exporter.forceFlush) { await this._exporter.forceFlush();