Skip to content

Commit f9820f3

Browse files
committed
refactor: log error instead of reject in MultiSpanProcessor#forceFlush
1 parent 9890c3b commit f9820f3

File tree

2 files changed

+39
-4
lines changed

2 files changed

+39
-4
lines changed

packages/opentelemetry-tracing/src/MultiSpanProcessor.ts

+12-4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17+
import { globalErrorHandler } from '@opentelemetry/core';
1718
import { SpanProcessor } from './SpanProcessor';
1819
import { ReadableSpan } from './export/ReadableSpan';
1920

@@ -30,10 +31,17 @@ export class MultiSpanProcessor implements SpanProcessor {
3031
for (const spanProcessor of this._spanProcessors) {
3132
promises.push(spanProcessor.forceFlush());
3233
}
33-
return new Promise((resolve, reject) => {
34-
Promise.all(promises).then(() => {
35-
resolve();
36-
}, reject);
34+
return new Promise(resolve => {
35+
Promise.all(promises)
36+
.then(() => {
37+
resolve();
38+
})
39+
.catch(error => {
40+
globalErrorHandler(
41+
error || new Error('MultiSpanProcessor: forceFlush failed')
42+
);
43+
resolve();
44+
});
3745
});
3846
}
3947

packages/opentelemetry-tracing/test/MultiSpanProcessor.test.ts

+27
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ import {
2323
Span,
2424
SpanProcessor,
2525
} from '../src';
26+
import {
27+
setGlobalErrorHandler,
28+
loggingErrorHandler,
29+
} from '@opentelemetry/core';
2630
import { MultiSpanProcessor } from '../src/MultiSpanProcessor';
2731

2832
class TestProcessor implements SpanProcessor {
@@ -179,4 +183,27 @@ describe('MultiSpanProcessor', () => {
179183
done();
180184
});
181185
});
186+
187+
it('should call globalErrorHandler in forceFlush', async () => {
188+
const expectedError = new Error('whoops');
189+
const testProcessor = new TestProcessor();
190+
const forceFlush = Sinon.stub(testProcessor, 'forceFlush');
191+
forceFlush.rejects(expectedError);
192+
193+
const multiSpanProcessor = new MultiSpanProcessor([testProcessor]);
194+
const errorHandlerSpy = Sinon.spy();
195+
196+
setGlobalErrorHandler(errorHandlerSpy);
197+
198+
await multiSpanProcessor.forceFlush();
199+
200+
forceFlush.restore();
201+
const [[error]] = errorHandlerSpy.args;
202+
203+
assert.strictEqual(error, expectedError);
204+
assert.strictEqual(errorHandlerSpy.callCount, 1);
205+
206+
//reset global error handler
207+
setGlobalErrorHandler(loggingErrorHandler());
208+
});
182209
});

0 commit comments

Comments
 (0)