fix(async-io): instrumented `asyncio.wait_for` properly raises `asyncio.TimeoutError` (#2637)
This commit is contained in:
parent
529178d9ae
commit
a29242f493
|
|
@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
- `opentelemetry-instrumentation-asyncio` instrumented `asyncio.wait_for` properly raises `asyncio.TimeoutError` as expected
|
||||||
|
([#2637](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2637))
|
||||||
- `opentelemetry-instrumentation-aws-lambda` Bugfix: AWS Lambda event source key incorrect for SNS in instrumentation library.
|
- `opentelemetry-instrumentation-aws-lambda` Bugfix: AWS Lambda event source key incorrect for SNS in instrumentation library.
|
||||||
([#2612](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2612))
|
([#2612](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2612))
|
||||||
- `opentelemetry-instrumentation-system-metrics` Permit to use psutil 6.0+.
|
- `opentelemetry-instrumentation-system-metrics` Permit to use psutil 6.0+.
|
||||||
|
|
|
||||||
|
|
@ -280,8 +280,11 @@ class AsyncioInstrumentor(BaseInstrumentor):
|
||||||
# CancelledError is raised when a coroutine is cancelled
|
# CancelledError is raised when a coroutine is cancelled
|
||||||
# before it has a chance to run. We don't want to record
|
# before it has a chance to run. We don't want to record
|
||||||
# this as an error.
|
# this as an error.
|
||||||
|
# Still it needs to be raised in order for `asyncio.wait_for`
|
||||||
|
# to properly work with timeout and raise accordingly `asyncio.TimeoutError`
|
||||||
except asyncio.CancelledError:
|
except asyncio.CancelledError:
|
||||||
attr["state"] = "cancelled"
|
attr["state"] = "cancelled"
|
||||||
|
raise
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
exception = exc
|
exception = exc
|
||||||
state = determine_state(exception)
|
state = determine_state(exception)
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,19 @@ class TestAsyncioWait(TestBase):
|
||||||
spans = self.memory_exporter.get_finished_spans()
|
spans = self.memory_exporter.get_finished_spans()
|
||||||
self.assertEqual(len(spans), 2)
|
self.assertEqual(len(spans), 2)
|
||||||
|
|
||||||
|
def test_asyncio_wait_for_with_timeout(self):
|
||||||
|
expected_timeout_error = None
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
nonlocal expected_timeout_error
|
||||||
|
try:
|
||||||
|
await asyncio.wait_for(async_func(), 0.01)
|
||||||
|
except asyncio.TimeoutError as timeout_error:
|
||||||
|
expected_timeout_error = timeout_error
|
||||||
|
|
||||||
|
asyncio.run(main())
|
||||||
|
self.assertNotEqual(expected_timeout_error, None)
|
||||||
|
|
||||||
def test_asyncio_as_completed(self):
|
def test_asyncio_as_completed(self):
|
||||||
async def main():
|
async def main():
|
||||||
if sys.version_info >= (3, 11):
|
if sys.version_info >= (3, 11):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue