Skip to content

Commit c53691e

Browse files
committed
refactor: log error instead of reject in MultiSpanProcessor#forceFlush
1 parent 8f1e1e0 commit c53691e

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-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

+25
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import {
2626
import {
2727
notifyOnGlobalShutdown,
2828
_invokeGlobalShutdown,
29+
setGlobalErrorHandler,
30+
loggingErrorHandler,
2931
} from '@opentelemetry/core';
3032
import { MultiSpanProcessor } from '../src/MultiSpanProcessor';
3133

@@ -229,4 +231,27 @@ describe('MultiSpanProcessor', () => {
229231
done();
230232
});
231233
});
234+
235+
it('should call globalErrorHandler in forceFlush', async () => {
236+
const expectedError = new Error('whoops');
237+
const testProcessor = new TestProcessor();
238+
const forceFlush = Sinon.stub(testProcessor, 'forceFlush');
239+
forceFlush.rejects(expectedError);
240+
241+
const multiSpanProcessor = new MultiSpanProcessor([testProcessor]);
242+
const errorHandlerSpy = Sinon.spy();
243+
244+
setGlobalErrorHandler(errorHandlerSpy);
245+
246+
await multiSpanProcessor.forceFlush();
247+
248+
forceFlush.restore();
249+
const [[error]] = errorHandlerSpy.args;
250+
251+
assert.strictEqual(error, expectedError);
252+
assert.strictEqual(errorHandlerSpy.callCount, 1);
253+
254+
//reset global error handler
255+
setGlobalErrorHandler(loggingErrorHandler());
256+
});
232257
});

0 commit comments

Comments
 (0)