Skip to content

Commit 0977f8a

Browse files
committed
graceful shutdown for meter provider in unit tests
1 parent 82e9b7f commit 0977f8a

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_aws_opentelementry_configurator.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
5151
from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter as OTLPHttpOTLPMetricExporter
5252
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
53+
from opentelemetry.metrics import get_meter_provider
5354
from opentelemetry.processor.baggage import BaggageSpanProcessor
5455
from opentelemetry.sdk.environment_variables import OTEL_TRACES_SAMPLER, OTEL_TRACES_SAMPLER_ARG
5556
from opentelemetry.sdk.metrics._internal.export import PeriodicExportingMetricReader
@@ -87,6 +88,20 @@ def setUpClass(cls):
8788
aws_otel_configurator.configure()
8889
cls.tracer_provider: TracerProvider = get_tracer_provider()
8990

91+
@classmethod
92+
def tearDownClass(cls):
93+
# Explicitly shut down meter provider to avoid I/O errors on Python 3.9 with gevent
94+
# This ensures ConsoleMetricExporter is properly closed before Python cleanup
95+
try:
96+
meter_provider = get_meter_provider()
97+
if hasattr(meter_provider, "force_flush"):
98+
meter_provider.force_flush()
99+
if hasattr(meter_provider, "shutdown"):
100+
meter_provider.shutdown()
101+
except Exception:
102+
# Ignore any errors during cleanup
103+
pass
104+
90105
def tearDown(self):
91106
os.environ.pop("OTEL_AWS_APPLICATION_SIGNALS_ENABLED", None)
92107
os.environ.pop("OTEL_AWS_APPLICATION_SIGNALS_RUNTIME_ENABLED", None)

0 commit comments

Comments
 (0)