@@ -317,7 +317,13 @@ impl PeriodicReaderInner {
317
317
. produce ( rm) ?;
318
318
Ok ( ( ) )
319
319
} else {
320
- Err ( MetricError :: Other ( "pipeline is not registered" . into ( ) ) )
320
+ otel_warn ! (
321
+ name: "PeriodReader.MeterProviderNotRegistered" ,
322
+ message = "PeriodicReader is not registered with MeterProvider. Metrics will not be collected. \
323
+ This occurs when a periodic reader is created but not associated with a MeterProvider \
324
+ by calling `.with_reader(reader)` on MeterProviderBuilder."
325
+ ) ;
326
+ Err ( MetricError :: Other ( "MeterProvider is not registered" . into ( ) ) )
321
327
}
322
328
}
323
329
@@ -472,7 +478,7 @@ impl MetricReader for PeriodicReader {
472
478
mod tests {
473
479
use super :: PeriodicReader ;
474
480
use crate :: {
475
- error:: ShutdownResult ,
481
+ error:: { ShutdownError , ShutdownResult } ,
476
482
metrics:: {
477
483
data:: ResourceMetrics , exporter:: PushMetricExporter , reader:: MetricReader ,
478
484
InMemoryMetricExporter , MetricError , MetricResult , SdkMeterProvider , Temporality ,
@@ -594,11 +600,8 @@ mod tests {
594
600
#[ test]
595
601
fn shutdown_repeat ( ) {
596
602
// Arrange
597
- let interval = std:: time:: Duration :: from_millis ( 1 ) ;
598
603
let exporter = InMemoryMetricExporter :: default ( ) ;
599
- let reader = PeriodicReader :: builder ( exporter. clone ( ) )
600
- . with_interval ( interval)
601
- . build ( ) ;
604
+ let reader = PeriodicReader :: builder ( exporter. clone ( ) ) . build ( ) ;
602
605
603
606
let meter_provider = SdkMeterProvider :: builder ( ) . with_reader ( reader) . build ( ) ;
604
607
let result = meter_provider. shutdown ( ) ;
@@ -607,20 +610,19 @@ mod tests {
607
610
// calling shutdown again should return Err
608
611
let result = meter_provider. shutdown ( ) ;
609
612
assert ! ( result. is_err( ) ) ;
613
+ assert ! ( matches!( result, Err ( ShutdownError :: AlreadyShutdown ) ) ) ;
610
614
611
615
// calling shutdown again should return Err
612
616
let result = meter_provider. shutdown ( ) ;
613
617
assert ! ( result. is_err( ) ) ;
618
+ assert ! ( matches!( result, Err ( ShutdownError :: AlreadyShutdown ) ) ) ;
614
619
}
615
620
616
621
#[ test]
617
622
fn flush_after_shutdown ( ) {
618
623
// Arrange
619
- let interval = std:: time:: Duration :: from_millis ( 1 ) ;
620
624
let exporter = InMemoryMetricExporter :: default ( ) ;
621
- let reader = PeriodicReader :: builder ( exporter. clone ( ) )
622
- . with_interval ( interval)
623
- . build ( ) ;
625
+ let reader = PeriodicReader :: builder ( exporter. clone ( ) ) . build ( ) ;
624
626
625
627
let meter_provider = SdkMeterProvider :: builder ( ) . with_reader ( reader) . build ( ) ;
626
628
let result = meter_provider. force_flush ( ) ;
@@ -637,11 +639,8 @@ mod tests {
637
639
#[ test]
638
640
fn flush_repeat ( ) {
639
641
// Arrange
640
- let interval = std:: time:: Duration :: from_millis ( 1 ) ;
641
642
let exporter = InMemoryMetricExporter :: default ( ) ;
642
- let reader = PeriodicReader :: builder ( exporter. clone ( ) )
643
- . with_interval ( interval)
644
- . build ( ) ;
643
+ let reader = PeriodicReader :: builder ( exporter. clone ( ) ) . build ( ) ;
645
644
646
645
let meter_provider = SdkMeterProvider :: builder ( ) . with_reader ( reader) . build ( ) ;
647
646
let result = meter_provider. force_flush ( ) ;
@@ -655,11 +654,8 @@ mod tests {
655
654
#[ test]
656
655
fn periodic_reader_without_pipeline ( ) {
657
656
// Arrange
658
- let interval = std:: time:: Duration :: from_millis ( 1 ) ;
659
657
let exporter = InMemoryMetricExporter :: default ( ) ;
660
- let reader = PeriodicReader :: builder ( exporter. clone ( ) )
661
- . with_interval ( interval)
662
- . build ( ) ;
658
+ let reader = PeriodicReader :: builder ( exporter. clone ( ) ) . build ( ) ;
663
659
664
660
let rm = & mut ResourceMetrics {
665
661
resource : Resource :: empty ( ) ,
@@ -801,11 +797,8 @@ mod tests {
801
797
802
798
fn collection_helper ( trigger : fn ( SdkMeterProvider ) ) {
803
799
// Arrange
804
- let interval = std:: time:: Duration :: from_millis ( 10 ) ;
805
800
let exporter = InMemoryMetricExporter :: default ( ) ;
806
- let reader = PeriodicReader :: builder ( exporter. clone ( ) )
807
- . with_interval ( interval)
808
- . build ( ) ;
801
+ let reader = PeriodicReader :: builder ( exporter. clone ( ) ) . build ( ) ;
809
802
let ( sender, receiver) = mpsc:: channel ( ) ;
810
803
811
804
let meter_provider = SdkMeterProvider :: builder ( ) . with_reader ( reader) . build ( ) ;
@@ -919,11 +912,8 @@ mod tests {
919
912
}
920
913
921
914
fn tokio_async_inside_observable_callback_helper ( use_current_tokio_runtime : bool ) {
922
- let interval = std:: time:: Duration :: from_millis ( 10 ) ;
923
915
let exporter = InMemoryMetricExporter :: default ( ) ;
924
- let reader = PeriodicReader :: builder ( exporter. clone ( ) )
925
- . with_interval ( interval)
926
- . build ( ) ;
916
+ let reader = PeriodicReader :: builder ( exporter. clone ( ) ) . build ( ) ;
927
917
928
918
let meter_provider = SdkMeterProvider :: builder ( ) . with_reader ( reader) . build ( ) ;
929
919
let meter = meter_provider. meter ( "test" ) ;
0 commit comments