Skip to content

IndexError when use elastic-apm #1100

Description

@aryadovoy
  • asyncpg version: 0.29.0
  • PostgreSQL version: 14
  • Do you use a PostgreSQL SaaS? If so, which? Can you reproduce
    the issue with a local PostgreSQL install?
    : Yes
  • Python version: 3.11.6
  • Platform: Linux, 6.0.12-100.fc35.x86_64
  • Do you use pgbouncer?: No
  • Did you install asyncpg with pip?: Yes
  • If you built asyncpg locally, which version of Cython did you use?: −
  • Can the issue be reproduced under both asyncio and
    uvloop?
    : Don't know

It was OK on 0.28.0, but now I have this error. Think, it's regarding to #1043.
There is no args, so it cannot get query.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv/lib/python3.11/site-packages/httpx/_client.py:1848: in post
return await self.request(
.venv/lib/python3.11/site-packages/httpx/_client.py:1530: in request
return await self.send(request, auth=auth, follow_redirects=follow_redirects)
.venv/lib/python3.11/site-packages/httpx/_client.py:1617: in send
response = await self._send_handling_auth(
.venv/lib/python3.11/site-packages/httpx/_client.py:1645: in _send_handling_auth
response = await self._send_handling_redirects(
.venv/lib/python3.11/site-packages/httpx/_client.py:1682: in _send_handling_redirects
response = await self._send_single_request(request)
.venv/lib/python3.11/site-packages/httpx/_client.py:1719: in _send_single_request
response = await transport.handle_async_request(request)
.venv/lib/python3.11/site-packages/httpx/_transports/asgi.py:162: in handle_async_request
await self.app(scope, receive, send)
.venv/lib/python3.11/site-packages/fastapi/applications.py:292: in __call__
await super().__call__(scope, receive, send)
.venv/lib/python3.11/site-packages/starlette/applications.py:122: in __call__
await self.middleware_stack(scope, receive, send)
.venv/lib/python3.11/site-packages/elasticapm/instrumentation/packages/asyncio/starlette.py:48: in call
return await wrapped(*args, **kwargs)
.venv/lib/python3.11/site-packages/starlette/middleware/errors.py:184: in __call__
raise exc
.venv/lib/python3.11/site-packages/starlette/middleware/errors.py:162: in __call__
await self.app(scope, receive, _send)
.venv/lib/python3.11/site-packages/elasticapm/contrib/starlette/__init__.py:193: in __call__
await self.app(scope, _request_receive or receive, wrapped_send)
.venv/lib/python3.11/site-packages/starlette/middleware/sessions.py:86: in __call__
await self.app(scope, receive, send_wrapper)
.venv/lib/python3.11/site-packages/starlette/middleware/cors.py:83: in __call__
await self.app(scope, receive, send)
.venv/lib/python3.11/site-packages/starlette/middleware/exceptions.py:79: in __call__
raise exc
.venv/lib/python3.11/site-packages/starlette/middleware/exceptions.py:68: in __call__
await self.app(scope, receive, sender)
.venv/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py:20: in __call__
raise e
.venv/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py:17: in __call__
await self.app(scope, receive, send)
.venv/lib/python3.11/site-packages/starlette/routing.py:718: in __call__
await route.handle(scope, receive, send)
.venv/lib/python3.11/site-packages/starlette/routing.py:276: in handle
await self.app(scope, receive, send)
.venv/lib/python3.11/site-packages/starlette/routing.py:66: in app
response = await func(request)
.venv/lib/python3.11/site-packages/fastapi/routing.py:273: in app
raw_response = await run_endpoint_function(
.venv/lib/python3.11/site-packages/fastapi/routing.py:190: in run_endpoint_function
return await dependant.call(**values)
src/app/presentation/api/consumers.py:39: in send_otp
consumer, is_new = await ConsumerService.send_otp(uow=uow, data=data)
src/app/core/services/consumers.py:29: in send_otp
consumer := await uow.consumers.get_by_phone(
src/app/infrastructure/db/dao/consumers.py:24: in get_by_phone
query = await self.session.execute(
.venv/lib/python3.11/site-packages/sqlalchemy/ext/asyncio/session.py:454: in execute
result = await greenlet_spawn(
.venv/lib/python3.11/site-packages/sqlalchemy/util/_concurrency_py3k.py:190: in greenlet_spawn
result = context.throw(*sys.exc_info())
.venv/lib/python3.11/site-packages/sqlalchemy/orm/session.py:2262: in execute
return self._execute_internal(
.venv/lib/python3.11/site-packages/sqlalchemy/orm/session.py:2134: in _execute_internal
conn = self._connection_for_bind(bind)
.venv/lib/python3.11/site-packages/sqlalchemy/orm/session.py:2001: in _connection_for_bind
return trans._connection_for_bind(engine, execution_options)
<string>:2: in _connection_for_bind
???
.venv/lib/python3.11/site-packages/sqlalchemy/orm/state_changes.py:139: in _go
ret_value = fn(self, *arg, **kw)
.venv/lib/python3.11/site-packages/sqlalchemy/orm/session.py:1126: in _connection_for_bind
conn = bind.connect()
.venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py:3264: in connect
return self._connection_cls(self)
.venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py:145: in __init__
self._dbapi_connection = engine.raw_connection()
.venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py:3288: in raw_connection
returnself.pool.connect()
.venv/lib/python3.11/site-packages/sqlalchemy/pool/base.py:452: in connect
return _ConnectionFairy._checkout(self)
.venv/lib/python3.11/site-packages/sqlalchemy/pool/base.py:1267: in _checkout
fairy = _ConnectionRecord.checkout(pool)
.venv/lib/python3.11/site-packages/sqlalchemy/pool/base.py:716: in checkout
rec = pool._do_get()
.venv/lib/python3.11/site-packages/sqlalchemy/pool/impl.py:169: in _do_get
with util.safe_reraise():
.venv/lib/python3.11/site-packages/sqlalchemy/util/langhelpers.py:146: in __exit__
raise exc_value.with_traceback(exc_tb)
.venv/lib/python3.11/site-packages/sqlalchemy/pool/impl.py:167: in _do_get
returnself._create_connection()
.venv/lib/python3.11/site-packages/sqlalchemy/pool/base.py:393: in _create_connection
return _ConnectionRecord(self)
.venv/lib/python3.11/site-packages/sqlalchemy/pool/base.py:678: in __init__
self.__connect()
.venv/lib/python3.11/site-packages/sqlalchemy/pool/base.py:916: in __connect
)._exec_w_sync_on_first_run(self.dbapi_connection, self)
.venv/lib/python3.11/site-packages/sqlalchemy/event/attr.py:473: in _exec_w_sync_on_first_run
self(*args, **kw)
.venv/lib/python3.11/site-packages/sqlalchemy/event/attr.py:487: in __call__
fn(*args, **kw)
.venv/lib/python3.11/site-packages/sqlalchemy/engine/create.py:704: in on_connect
do_on_connect(dbapi_connection)
.venv/lib/python3.11/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:1240: in connect
conn.await_(self.setup_asyncpg_json_codec(conn))
.venv/lib/python3.11/site-packages/sqlalchemy/util/_concurrency_py3k.py:125: in await_only
return current.driver.switch(awaitable) # type: ignore[no-any-return]
.venv/lib/python3.11/site-packages/sqlalchemy/util/_concurrency_py3k.py:185: in greenlet_spawn
value = await result
.venv/lib/python3.11/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py:1166: in setup_asyncpg_json_codec
await asyncpg_connection.set_type_codec(
.venv/lib/python3.11/site-packages/asyncpg/connection.py:1339: in set_type_codec
typeinfo = await self._introspect_type(typename, schema)
.venv/lib/python3.11/site-packages/asyncpg/connection.py:543: in _introspect_type
rows = await self._execute(
.venv/lib/python3.11/site-packages/asyncpg/connection.py:1794: in _execute
result, _ = await self.__execute(
.venv/lib/python3.11/site-packages/asyncpg/connection.py:1892: in __execute
result, stmt = await self._do_execute(
.venv/lib/python3.11/site-packages/asyncpg/connection.py:1945: in _do_execute
result = await executor(stmt, None)
.venv/lib/python3.11/site-packages/elasticapm/instrumentation/packages/asyncio/asyncpg.py:65: in call
query = self.get_query(method, args)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <elasticapm.instrumentation.packages.asyncio.asyncpg.AsyncPGInstrumentation object at 0x7fd19d5e4b90>, method = 'Protocol.bind_execute', args = ()
def get_query(self, method, args):
if method in ["Protocol.query", "Protocol.copy_in", "Protocol.copy_out"]:
return args[0]
else:
>return args[0].query
E IndexError: tuple index out of range
.venv/lib/python3.11/site-packages/elasticapm/instrumentation/packages/asyncio/asyncpg.py:62: IndexError

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions