@@ -16,7 +16,7 @@ use opentelemetry::{otel_debug, otel_error};
1616use crate :: runtime:: { to_interval_stream, Runtime } ;
1717use crate :: {
1818 error:: { OTelSdkError , OTelSdkResult } ,
19- metrics:: { exporter:: PushMetricExporter , reader:: SdkProducer , MetricError , MetricResult } ,
19+ metrics:: { exporter:: PushMetricExporter , reader:: SdkProducer } ,
2020 Resource ,
2121} ;
2222
@@ -351,10 +351,14 @@ impl<E: PushMetricExporter> MetricReader for PeriodicReader<E> {
351351 worker ( self ) ;
352352 }
353353
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+
356360 if inner. is_shutdown {
357- return Err ( MetricError :: Other ( "reader is shut down" . into ( ) ) ) ;
361+ return Err ( OTelSdkError :: AlreadyShutdown ) ;
358362 }
359363
360364 if let Some ( producer) = match & inner. sdk_producer_or_worker {
@@ -363,7 +367,9 @@ impl<E: PushMetricExporter> MetricReader for PeriodicReader<E> {
363367 } {
364368 producer. produce ( rm) ?;
365369 } else {
366- return Err ( MetricError :: Other ( "reader is not registered" . into ( ) ) ) ;
370+ return Err ( OTelSdkError :: InternalFailure (
371+ "reader is not registered" . into ( ) ,
372+ ) ) ;
367373 }
368374
369375 Ok ( ( ) )
@@ -434,8 +440,8 @@ impl<E: PushMetricExporter> MetricReader for PeriodicReader<E> {
434440#[ cfg( all( test, feature = "testing" ) ) ]
435441mod tests {
436442 use super :: PeriodicReader ;
443+ use crate :: error:: OTelSdkError ;
437444 use crate :: metrics:: reader:: MetricReader ;
438- use crate :: metrics:: MetricError ;
439445 use crate :: {
440446 metrics:: data:: ResourceMetrics , metrics:: InMemoryMetricExporter , metrics:: SdkMeterProvider ,
441447 runtime, Resource ,
@@ -496,7 +502,7 @@ mod tests {
496502
497503 // Assert
498504 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" )
500506 ) ;
501507 }
502508
0 commit comments