@@ -16,7 +16,7 @@ use opentelemetry::{otel_debug, otel_error};
16
16
use crate :: runtime:: { to_interval_stream, Runtime } ;
17
17
use crate :: {
18
18
error:: { OTelSdkError , OTelSdkResult } ,
19
- metrics:: { exporter:: PushMetricExporter , reader:: SdkProducer , MetricError , MetricResult } ,
19
+ metrics:: { exporter:: PushMetricExporter , reader:: SdkProducer } ,
20
20
Resource ,
21
21
} ;
22
22
@@ -351,10 +351,14 @@ impl<E: PushMetricExporter> MetricReader for PeriodicReader<E> {
351
351
worker ( self ) ;
352
352
}
353
353
354
- fn collect ( & self , rm : & mut ResourceMetrics ) -> MetricResult < ( ) > {
355
- let inner = self . inner . lock ( ) ?;
354
+ fn collect ( & self , rm : & mut ResourceMetrics ) -> OTelSdkResult {
355
+ let inner = self
356
+ . inner
357
+ . lock ( )
358
+ . map_err ( |_| OTelSdkError :: InternalFailure ( "Failed to lock pipeline" . into ( ) ) ) ?;
359
+
356
360
if inner. is_shutdown {
357
- return Err ( MetricError :: Other ( "reader is shut down" . into ( ) ) ) ;
361
+ return Err ( OTelSdkError :: AlreadyShutdown ) ;
358
362
}
359
363
360
364
if let Some ( producer) = match & inner. sdk_producer_or_worker {
@@ -363,7 +367,9 @@ impl<E: PushMetricExporter> MetricReader for PeriodicReader<E> {
363
367
} {
364
368
producer. produce ( rm) ?;
365
369
} else {
366
- return Err ( MetricError :: Other ( "reader is not registered" . into ( ) ) ) ;
370
+ return Err ( OTelSdkError :: InternalFailure (
371
+ "reader is not registered" . into ( ) ,
372
+ ) ) ;
367
373
}
368
374
369
375
Ok ( ( ) )
@@ -390,7 +396,7 @@ impl<E: PushMetricExporter> MetricReader for PeriodicReader<E> {
390
396
. and_then ( |res| res)
391
397
}
392
398
393
- fn shutdown ( & self ) -> OTelSdkResult {
399
+ fn shutdown_with_timeout ( & self , _timeout : Duration ) -> OTelSdkResult {
394
400
let mut inner = self
395
401
. inner
396
402
. lock ( )
@@ -434,8 +440,8 @@ impl<E: PushMetricExporter> MetricReader for PeriodicReader<E> {
434
440
#[ cfg( all( test, feature = "testing" ) ) ]
435
441
mod tests {
436
442
use super :: PeriodicReader ;
443
+ use crate :: error:: OTelSdkError ;
437
444
use crate :: metrics:: reader:: MetricReader ;
438
- use crate :: metrics:: MetricError ;
439
445
use crate :: {
440
446
metrics:: data:: ResourceMetrics , metrics:: InMemoryMetricExporter , metrics:: SdkMeterProvider ,
441
447
runtime, Resource ,
@@ -496,7 +502,7 @@ mod tests {
496
502
497
503
// Assert
498
504
assert ! (
499
- matches!( result. unwrap_err( ) , MetricError :: Other ( err) if err == "reader is not registered" )
505
+ matches!( result. unwrap_err( ) , OTelSdkError :: InternalFailure ( err) if err == "reader is not registered" )
500
506
) ;
501
507
}
502
508
0 commit comments