psycopg connection context manager drops X-Ray tracing wrapper, so cursor execute calls are not traced
- 主要言語
- Python
- スター
- 338
- フォーク
- 147
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
I am seeing a gap in the psycopg integration for aws-xray-sdk.
When patching psycopg succeeds, `psycopg.connect()` returns an `XRayTracedConn` proxy as expected. However, if the connection is used as a context manager with `with conn as c:`, the object returned from enter is the raw psycopg `Connection`, not the X-Ray wrapper. As a result, `c.cursor(...)` returns a raw psycopg Cursor, and `execute()` calls do not produce X-Ray subsegments.
### Observed behavior
`patch(("psycopg",), raise_errors=True) `succeeds
`psycopg.connect()` returns `aws_xray_sdk.ext.dbapi2.XRayTracedConn`
entering the connection context manager unwraps the proxy
`cursor()` on that entered object returns `psycopg.Cursor`
`execute()` on the cursor is not traced
if I create an explicit subsegment manually, that subsegment appears in X-Ray, which confirms the request has a valid segment and the DB code path is running
### Expected behavior
The psycopg X-Ray wrapper should preserve tracing across the connection context manager
`with conn as c:` should still return a wrapped connection, or otherwise ensure cursors created from the entered object are still traced
`execute()` should generate the native DB subsegment without needing manual instrumentation
### Reproduction
Install aws-xray-sdk 2.15.0
Install psycopg 3.3.4 and psycopg-pool 3.2.7
Call patch(("psycopg",), raise_errors=True)
Call psycopg.connect(...)
Use the connection in a with block
Create a cursor and execute a query
Observe that the cursor is raw psycopg.Cursor and no DB subsegment is emitted
### Environment details
aws-xray-sdk 2.15.0
psycopg 3.3.4
psycopg-pool 3.2.7
Python 3.12
Running in AWS Lambda
コントリビューションガイド
調査の方向性
Start with the psycopg integration around patch() and XRayTracedConn, then reproduce the with conn as c: flow described in the issue. Done means the entered connection remains wrapped, its cursor is traced, and execute() produces the native database subsegment without manual instrumentation.
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- aws, python
- 領域
- observability
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 活発
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 68/100