File tree 2 files changed +39
-4
lines changed
packages/opentelemetry-tracing
2 files changed +39
-4
lines changed Original file line number Diff line number Diff line change 14
14
* limitations under the License.
15
15
*/
16
16
17
+ import { globalErrorHandler } from '@opentelemetry/core' ;
17
18
import { SpanProcessor } from './SpanProcessor' ;
18
19
import { ReadableSpan } from './export/ReadableSpan' ;
19
20
@@ -30,10 +31,17 @@ export class MultiSpanProcessor implements SpanProcessor {
30
31
for ( const spanProcessor of this . _spanProcessors ) {
31
32
promises . push ( spanProcessor . forceFlush ( ) ) ;
32
33
}
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
+ } ) ;
37
45
} ) ;
38
46
}
39
47
Original file line number Diff line number Diff line change @@ -23,6 +23,10 @@ import {
23
23
Span ,
24
24
SpanProcessor ,
25
25
} from '../src' ;
26
+ import {
27
+ setGlobalErrorHandler ,
28
+ loggingErrorHandler ,
29
+ } from '@opentelemetry/core' ;
26
30
import { MultiSpanProcessor } from '../src/MultiSpanProcessor' ;
27
31
28
32
class TestProcessor implements SpanProcessor {
@@ -179,4 +183,27 @@ describe('MultiSpanProcessor', () => {
179
183
done ( ) ;
180
184
} ) ;
181
185
} ) ;
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
+ } ) ;
182
209
} ) ;
You can’t perform that action at this time.
0 commit comments