From 70dc0e13b2c6cc07f8d1bfe50d2e98e312bb871b Mon Sep 17 00:00:00 2001 From: Allen Kim Date: Fri, 26 Apr 2024 09:26:25 +0900 Subject: [PATCH 01/18] Calling the exception() method when future is in the cancelled state is causing a CancelledError Calling the exception() method when future is in the cancelled state is causing a CancelledError. we should check the cancelled state first and call f.exception() only if it's not cancelled. --- .../src/opentelemetry/instrumentation/asyncio/__init__.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py b/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py index 68e3d0839f..a648dccd57 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py @@ -307,13 +307,11 @@ def trace_future(self, future): ) def callback(f): - exception = f.exception() attr = { "type": "future", + "state": "cancelled" if f.cancelled() else determine_state(f.exception()) } - state = determine_state(exception) - attr["state"] = state - self.record_process(start, attr, span, exception) + self.record_process(start, attr, span, None if f.cancelled() else f.exception()) future.add_done_callback(callback) return future From 17c776b0a2c098d994b5c7983d77b83659c61665 Mon Sep 17 00:00:00 2001 From: Allen Kim Date: Fri, 26 Apr 2024 09:59:01 +0900 Subject: [PATCH 02/18] modify lint --- .../opentelemetry/instrumentation/asyncio/__init__.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py b/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py index a648dccd57..b14601c0a0 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py @@ -309,9 +309,15 @@ def trace_future(self, future): def callback(f): attr = { "type": "future", - "state": "cancelled" if f.cancelled() else determine_state(f.exception()) + "state": ( + "cancelled" + if f.cancelled() + else determine_state(f.exception()) + ), } - self.record_process(start, attr, span, None if f.cancelled() else f.exception()) + self.record_process( + start, attr, span, None if f.cancelled() else f.exception() + ) future.add_done_callback(callback) return future From 514e51447cc5073347b1b68e51f92dcc978fe16d Mon Sep 17 00:00:00 2001 From: Allen Kim Date: Fri, 26 Apr 2024 10:13:51 +0900 Subject: [PATCH 03/18] modify lint --- .../src/opentelemetry/instrumentation/asyncio/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py b/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py index b14601c0a0..1b22ce9649 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py @@ -310,8 +310,8 @@ def callback(f): attr = { "type": "future", "state": ( - "cancelled" - if f.cancelled() + "cancelled" + if f.cancelled() else determine_state(f.exception()) ), } From 5d65a73ef298b740deeb96aaedbfa348fc23b663 Mon Sep 17 00:00:00 2001 From: Allen Kim Date: Fri, 26 Apr 2024 10:49:52 +0900 Subject: [PATCH 04/18] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ceb97433f1..7ca01a3831 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#2418](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2418)) - Use sqlalchemy version in sqlalchemy commenter instead of opentelemetry library version ([#2404](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2404)) +- `opentelemetry-instrumentation-asyncio` Check for cancelledException in the future + ([#2461](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2461)) ## Version 1.24.0/0.45b0 (2024-03-28) From f2f7843a1c0769e056c94f8a69d21fba523a4166 Mon Sep 17 00:00:00 2001 From: "allen.k1m" Date: Sat, 27 Apr 2024 00:32:29 +0900 Subject: [PATCH 05/18] remove init() --- .../instrumentation/asyncio/__init__.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py b/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py index 1b22ce9649..5fd0a92e39 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py @@ -116,17 +116,6 @@ class AsyncioInstrumentor(BaseInstrumentor): "run_coroutine_threadsafe", ] - def __init__(self): - super().__init__() - self.process_duration_histogram = None - self.process_created_counter = None - - self._tracer = None - self._meter = None - self._coros_name_to_trace: set = set() - self._to_thread_name_to_trace: set = set() - self._future_active_enabled: bool = False - def instrumentation_dependencies(self) -> Collection[str]: return _instruments @@ -307,6 +296,7 @@ def trace_future(self, future): ) def callback(f): + print("qlwkdnlqkwdnlqkwndlkqwndlknqw") attr = { "type": "future", "state": ( From a26f0af1d6c0114fcc54993b67a633772f5ef230 Mon Sep 17 00:00:00 2001 From: "allen.k1m" Date: Sat, 27 Apr 2024 00:40:08 +0900 Subject: [PATCH 06/18] add future cancelled test code --- .../instrumentation/asyncio/__init__.py | 1 - .../tests/test_asyncio_future_cancellation.py | 28 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py b/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py index 5fd0a92e39..7f7a818427 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py @@ -296,7 +296,6 @@ def trace_future(self, future): ) def callback(f): - print("qlwkdnlqkwdnlqkwndlkqwndlknqw") attr = { "type": "future", "state": ( diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py new file mode 100644 index 0000000000..83b1775dfc --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py @@ -0,0 +1,28 @@ +import asyncio + +import pytest +from opentelemetry.test.test_base import TestBase + + +class TestTraceFuture(TestBase): + + @pytest.mark.asyncio + def test_trace_future_cancelled(self): + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + + future = asyncio.Future() + future.cancel() + + def callback(f): + state = "cancelled" if f.cancelled() else "done" + self.assertEqual(state, "cancelled") + + future.add_done_callback(callback) + + try: + loop.run_until_complete(future) + except asyncio.CancelledError as e: + self.assertEqual( + isinstance(e, asyncio.CancelledError), True + ) From bab0b57d768668980021e6ffc6233e346017ebff Mon Sep 17 00:00:00 2001 From: "allen.k1m" Date: Sat, 27 Apr 2024 00:52:22 +0900 Subject: [PATCH 07/18] add future cancelled test code --- .../tests/test_asyncio_future_cancellation.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py index 83b1775dfc..b4196db7da 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py @@ -23,6 +23,4 @@ def callback(f): try: loop.run_until_complete(future) except asyncio.CancelledError as e: - self.assertEqual( - isinstance(e, asyncio.CancelledError), True - ) + self.assertEqual(isinstance(e, asyncio.CancelledError), True) From f09597b6b2900f137da8e67674d08cf8245b4b43 Mon Sep 17 00:00:00 2001 From: "allen.k1m" Date: Sat, 27 Apr 2024 02:13:15 +0900 Subject: [PATCH 08/18] add future cancelled test code --- .../tests/test_asyncio_future_cancellation.py | 53 ++++++++++++++----- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py index b4196db7da..e9f9f4cec0 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py @@ -1,26 +1,53 @@ import asyncio +from unittest.mock import patch import pytest from opentelemetry.test.test_base import TestBase +from opentelemetry.trace import get_tracer + +from opentelemetry.instrumentation.asyncio import AsyncioInstrumentor +from opentelemetry.instrumentation.asyncio.environment_variables import OTEL_PYTHON_ASYNCIO_FUTURE_TRACE_ENABLED class TestTraceFuture(TestBase): + @patch.dict( + "os.environ", {OTEL_PYTHON_ASYNCIO_FUTURE_TRACE_ENABLED: "true"} + ) + def setUp(self): + super().setUp() + self._tracer = get_tracer( + __name__, + ) + self.loop = asyncio.new_event_loop() + asyncio.set_event_loop(self.loop) + self.instrumentor = AsyncioInstrumentor() + self.instrumentor.instrument() @pytest.mark.asyncio def test_trace_future_cancelled(self): - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - - future = asyncio.Future() - future.cancel() - - def callback(f): - state = "cancelled" if f.cancelled() else "done" - self.assertEqual(state, "cancelled") - - future.add_done_callback(callback) - + with self._tracer.start_as_current_span("root"): + future = asyncio.Future() + future = self.instrumentor.trace_future(future) + future.cancel() try: - loop.run_until_complete(future) + self.loop.run_until_complete(future) except asyncio.CancelledError as e: self.assertEqual(isinstance(e, asyncio.CancelledError), True) + self.loop.close() + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 2) + self.assertEqual(spans[0].name, "root") + self.assertEqual(spans[1].name, "asyncio future") + for metric in ( + self.memory_metrics_reader.get_metrics_data() + .resource_metrics[0] + .scope_metrics[0] + .metrics + ): + if metric.name == "asyncio.process.duration": + for point in metric.data.data_points: + self.assertEqual(point.attributes["type"], "future") + if metric.name == "asyncio.process.created": + for point in metric.data.data_points: + self.assertEqual(point.attributes["type"], "future") + self.assertEqual(point.attributes["state"], "cancelled") From 4e797c496c38932c764e368ee254c8c206fd403f Mon Sep 17 00:00:00 2001 From: "allen.k1m" Date: Sat, 27 Apr 2024 02:13:34 +0900 Subject: [PATCH 09/18] add future cancelled test code --- .../tests/test_asyncio_future_cancellation.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py index e9f9f4cec0..10ed5c5ece 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py @@ -39,10 +39,10 @@ def test_trace_future_cancelled(self): self.assertEqual(spans[0].name, "root") self.assertEqual(spans[1].name, "asyncio future") for metric in ( - self.memory_metrics_reader.get_metrics_data() - .resource_metrics[0] - .scope_metrics[0] - .metrics + self.memory_metrics_reader.get_metrics_data() + .resource_metrics[0] + .scope_metrics[0] + .metrics ): if metric.name == "asyncio.process.duration": for point in metric.data.data_points: From 49fec30586154172839969601245d6f0488f1c43 Mon Sep 17 00:00:00 2001 From: "allen.k1m" Date: Sat, 27 Apr 2024 02:16:43 +0900 Subject: [PATCH 10/18] add future cancelled test code --- .../tests/test_asyncio_future_cancellation.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py index 10ed5c5ece..9e5884d49a 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py @@ -23,6 +23,11 @@ def setUp(self): self.instrumentor = AsyncioInstrumentor() self.instrumentor.instrument() + def tearDown(self): + super().tearDown() + self.instrumentor.uninstrument() + self.loop.close() + @pytest.mark.asyncio def test_trace_future_cancelled(self): with self._tracer.start_as_current_span("root"): @@ -33,7 +38,6 @@ def test_trace_future_cancelled(self): self.loop.run_until_complete(future) except asyncio.CancelledError as e: self.assertEqual(isinstance(e, asyncio.CancelledError), True) - self.loop.close() spans = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans), 2) self.assertEqual(spans[0].name, "root") From f94c7dab17f5c9ab93cefcbac8f82cdd3666a167 Mon Sep 17 00:00:00 2001 From: "allen.k1m" Date: Sat, 27 Apr 2024 07:37:49 +0900 Subject: [PATCH 11/18] add future cancelled test code --- .../tests/test_asyncio_future_cancellation.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py index 9e5884d49a..4fe44ccb47 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py @@ -6,7 +6,9 @@ from opentelemetry.trace import get_tracer from opentelemetry.instrumentation.asyncio import AsyncioInstrumentor -from opentelemetry.instrumentation.asyncio.environment_variables import OTEL_PYTHON_ASYNCIO_FUTURE_TRACE_ENABLED +from opentelemetry.instrumentation.asyncio.environment_variables import ( + OTEL_PYTHON_ASYNCIO_FUTURE_TRACE_ENABLED, +) class TestTraceFuture(TestBase): From 5c0724380e9052ff462866409940169566ccb071 Mon Sep 17 00:00:00 2001 From: "allen.k1m" Date: Sat, 27 Apr 2024 08:22:16 +0900 Subject: [PATCH 12/18] lint --- .../tests/test_asyncio_future_cancellation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py index 4fe44ccb47..1bdf1e91f3 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py @@ -2,13 +2,13 @@ from unittest.mock import patch import pytest -from opentelemetry.test.test_base import TestBase -from opentelemetry.trace import get_tracer from opentelemetry.instrumentation.asyncio import AsyncioInstrumentor from opentelemetry.instrumentation.asyncio.environment_variables import ( OTEL_PYTHON_ASYNCIO_FUTURE_TRACE_ENABLED, ) +from opentelemetry.test.test_base import TestBase +from opentelemetry.trace import get_tracer class TestTraceFuture(TestBase): From 0892214c3db296c8d2affbac356924dfa4dfe3f8 Mon Sep 17 00:00:00 2001 From: "allen.k1m" Date: Sat, 27 Apr 2024 08:43:50 +0900 Subject: [PATCH 13/18] lint --- .../tests/test_asyncio_future_cancellation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py index 1bdf1e91f3..451bdbe4de 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py @@ -38,8 +38,8 @@ def test_trace_future_cancelled(self): future.cancel() try: self.loop.run_until_complete(future) - except asyncio.CancelledError as e: - self.assertEqual(isinstance(e, asyncio.CancelledError), True) + except asyncio.CancelledError as exc: + self.assertEqual(isinstance(exc, asyncio.CancelledError), True) spans = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans), 2) self.assertEqual(spans[0].name, "root") From 9e1059127911419cfeb4ba16769f4948ea933e5f Mon Sep 17 00:00:00 2001 From: "allen.k1m" Date: Tue, 30 Apr 2024 00:08:42 +0900 Subject: [PATCH 14/18] remove if condition --- .../tests/test_asyncio_future_cancellation.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py index 451bdbe4de..02e3f27de2 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py @@ -50,10 +50,6 @@ def test_trace_future_cancelled(self): .scope_metrics[0] .metrics ): - if metric.name == "asyncio.process.duration": - for point in metric.data.data_points: - self.assertEqual(point.attributes["type"], "future") - if metric.name == "asyncio.process.created": - for point in metric.data.data_points: - self.assertEqual(point.attributes["type"], "future") - self.assertEqual(point.attributes["state"], "cancelled") + for point in metric.data.data_points: + self.assertEqual(point.attributes["type"], "future") + self.assertEqual(point.attributes["state"], "cancelled") From 1a7cd3defe9753218839590d186d2ea6606ee2a6 Mon Sep 17 00:00:00 2001 From: "allen.k1m" Date: Wed, 1 May 2024 14:02:22 +0900 Subject: [PATCH 15/18] modify test code --- .../tests/test_asyncio_future_cancellation.py | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py index 02e3f27de2..d4686be430 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py @@ -20,36 +20,34 @@ def setUp(self): self._tracer = get_tracer( __name__, ) - self.loop = asyncio.new_event_loop() - asyncio.set_event_loop(self.loop) self.instrumentor = AsyncioInstrumentor() self.instrumentor.instrument() def tearDown(self): super().tearDown() self.instrumentor.uninstrument() - self.loop.close() @pytest.mark.asyncio def test_trace_future_cancelled(self): - with self._tracer.start_as_current_span("root"): - future = asyncio.Future() - future = self.instrumentor.trace_future(future) - future.cancel() + async def future_cancelled(): + with self._tracer.start_as_current_span("root"): + future = asyncio.Future() + future = self.instrumentor.trace_future(future) + future.cancel() try: - self.loop.run_until_complete(future) + asyncio.run(future_cancelled()) except asyncio.CancelledError as exc: self.assertEqual(isinstance(exc, asyncio.CancelledError), True) spans = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans), 2) self.assertEqual(spans[0].name, "root") self.assertEqual(spans[1].name, "asyncio future") - for metric in ( - self.memory_metrics_reader.get_metrics_data() - .resource_metrics[0] - .scope_metrics[0] - .metrics - ): - for point in metric.data.data_points: - self.assertEqual(point.attributes["type"], "future") - self.assertEqual(point.attributes["state"], "cancelled") + + metrics = self.memory_metrics_reader.get_metrics_data().resource_metrics[0].scope_metrics[0].metrics + self.assertEqual(len(metrics), 2) + + self.assertEqual(metrics[0].name, "asyncio.process.duration") + self.assertEqual(metrics[0].data.data_points[0].attributes["state"], "cancelled") + + self.assertEqual(metrics[1].name, "asyncio.process.created") + self.assertEqual(metrics[1].data.data_points[0].attributes["state"], "cancelled") From dfe74de1bfa5b31807f6acafae3c8aef4b663f51 Mon Sep 17 00:00:00 2001 From: "allen.k1m" Date: Wed, 1 May 2024 14:08:50 +0900 Subject: [PATCH 16/18] lint --- .../tests/test_asyncio_future_cancellation.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py index d4686be430..a8931a2251 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py @@ -34,6 +34,7 @@ async def future_cancelled(): future = asyncio.Future() future = self.instrumentor.trace_future(future) future.cancel() + try: asyncio.run(future_cancelled()) except asyncio.CancelledError as exc: @@ -43,11 +44,20 @@ async def future_cancelled(): self.assertEqual(spans[0].name, "root") self.assertEqual(spans[1].name, "asyncio future") - metrics = self.memory_metrics_reader.get_metrics_data().resource_metrics[0].scope_metrics[0].metrics + metrics = ( + self.memory_metrics_reader.get_metrics_data() + .resource_metrics[0] + .scope_metrics[0] + .metrics + ) self.assertEqual(len(metrics), 2) self.assertEqual(metrics[0].name, "asyncio.process.duration") - self.assertEqual(metrics[0].data.data_points[0].attributes["state"], "cancelled") + self.assertEqual( + metrics[0].data.data_points[0].attributes["state"], "cancelled" + ) self.assertEqual(metrics[1].name, "asyncio.process.created") - self.assertEqual(metrics[1].data.data_points[0].attributes["state"], "cancelled") + self.assertEqual( + metrics[1].data.data_points[0].attributes["state"], "cancelled" + ) From b4a5f0c7f63815ce5ec1e1a474ca4b6e6510d71c Mon Sep 17 00:00:00 2001 From: "allen.k1m" Date: Wed, 1 May 2024 14:15:54 +0900 Subject: [PATCH 17/18] lint --- .../src/opentelemetry/instrumentation/asyncio/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py b/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py index 7f7a818427..72aa5fd2aa 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/src/opentelemetry/instrumentation/asyncio/__init__.py @@ -120,6 +120,7 @@ def instrumentation_dependencies(self) -> Collection[str]: return _instruments def _instrument(self, **kwargs): + # pylint: disable=attribute-defined-outside-init self._tracer = get_tracer( __name__, __version__, kwargs.get("tracer_provider") ) From e1454b0e020f19644bd7779f0231b201b7407d96 Mon Sep 17 00:00:00 2001 From: "allen.k1m" Date: Fri, 3 May 2024 09:47:57 +0900 Subject: [PATCH 18/18] remove pytest --- .../tests/test_asyncio_future_cancellation.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py index a8931a2251..f8f4e5f230 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py +++ b/instrumentation/opentelemetry-instrumentation-asyncio/tests/test_asyncio_future_cancellation.py @@ -1,8 +1,6 @@ import asyncio from unittest.mock import patch -import pytest - from opentelemetry.instrumentation.asyncio import AsyncioInstrumentor from opentelemetry.instrumentation.asyncio.environment_variables import ( OTEL_PYTHON_ASYNCIO_FUTURE_TRACE_ENABLED, @@ -27,7 +25,6 @@ def tearDown(self): super().tearDown() self.instrumentor.uninstrument() - @pytest.mark.asyncio def test_trace_future_cancelled(self): async def future_cancelled(): with self._tracer.start_as_current_span("root"):