Skip to content

Commit

Permalink
fix(async-io): instrumented asyncio.wait_for properly raises `async…
Browse files Browse the repository at this point in the history
  • Loading branch information
smoke committed Jun 26, 2024
1 parent 38146dd commit 050eb37
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 0 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## Version 1.25.0/0.46b0+asyncio-wait-for-fix (2024-06-26)

### Fixed

- `opentelemetry-instrumentation-asyncio` instrumented `asyncio.wait_for` properly raises `asyncio.TimeoutError` as expected
([#2637](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2637))

## Version 1.25.0/0.46b0 (2024-05-30)

### Breaking changes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -280,8 +280,11 @@ async def trace_coroutine(self, coro):
# CancelledError is raised when a coroutine is cancelled
# before it has a chance to run. We don't want to record
# 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:
attr["state"] = "cancelled"
raise
except Exception as exc:
exception = exc
state = determine_state(exception)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,19 @@ async def main():
spans = self.memory_exporter.get_finished_spans()
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):
async def main():
if sys.version_info >= (3, 11):
Expand Down

0 comments on commit 050eb37

Please sign in to comment.