Skip to content

Commit 5c2b07a

Browse files
committed
fix(flask): add regression test for active_requests gauge leak on error
Signed-off-by: alliasgher <alliasgher123@gmail.com>
1 parent 9018dc2 commit 5c2b07a

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

instrumentation/opentelemetry-instrumentation-flask/tests/test_programmatic.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -836,6 +836,36 @@ def test_duration_histogram_new_record_with_context_new_semconv(self):
836836
span_arg.context.span_id, finished_span.context.span_id
837837
)
838838

839+
def test_active_requests_counter_decremented_on_error(self):
840+
"""Regression test for https://github.com/open-telemetry/opentelemetry-python-contrib/issues/4431.
841+
http.server.active_requests must be decremented even when the view
842+
raises an exception, so it does not permanently leak.
843+
"""
844+
self.client.get("/hello/123")
845+
846+
resp = self.client.get("/hello/500")
847+
self.assertEqual(500, resp.status_code)
848+
849+
metrics_list = self.memory_metrics_reader.get_metrics_data()
850+
active_requests_value = None
851+
for resource_metric in metrics_list.resource_metrics:
852+
for scope_metric in resource_metric.scope_metrics:
853+
for metric in scope_metric.metrics:
854+
if metric.name == "http.server.active_requests":
855+
for point in metric.data.data_points:
856+
if isinstance(point, NumberDataPoint):
857+
active_requests_value = point.value
858+
859+
self.assertIsNotNone(
860+
active_requests_value,
861+
"http.server.active_requests metric not found",
862+
)
863+
self.assertEqual(
864+
0,
865+
active_requests_value,
866+
f"active_requests counter leaked: expected 0 but got {active_requests_value}",
867+
)
868+
839869

840870
class TestProgrammaticHooks(InstrumentationTest, WsgiTestBase):
841871
def setUp(self):

0 commit comments

Comments
 (0)