- Notifications
You must be signed in to change notification settings - Fork 231
Closed
Labels
Description
Describe the bug
In some cases aioredis
passes str
commands to its aioredis.Redis.execute()
method rather than bytes
commands, like e.g. when executing aioredis.Redis.ping()
, which is unacceptable by elastic-apm
.
Current workaround
Disable aioredis
instrumenting (set environment variable SKIP_INSTRUMENT_AIOREDIS="true"
) prior elasticapm.instrument()
is called.
To Reproduce
import asyncio import aioredis import elasticapm REDIS_URL = "redis://localhost:6379" async def main(): elasticapm.instrument() client = await aioredis.create_redis_pool(REDIS_URL) elastic_apm_client = elasticapm.Client() elastic_apm_client.begin_transaction("redis-ping") try: assert await client.ping() == b"PONG" finally: client.close() await client.wait_closed() elastic_apm_client.end_transaction("redis-ping") if __name__ == "__main__": asyncio.run(main())
Expected result
No exception is raised.
Actual result
Traceback (most recent call last): File "<...>/test.py", line 24, in <module> asyncio.run(main()) File "/usr/local/lib/python3.8/asyncio/runners.py", line 44, in run return loop.run_until_complete(main) File "/usr/local/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete return future.result() File "<...>/test.py", line 17, in main assert await client.ping() == b"PONG" File "<...>/venv/lib/python3.8/site-packages/aioredis/commands/__init__.py", line 114, in ping return self.execute('PING', *args, encoding=encoding) File "<...>/venv/lib/python3.8/site-packages/aioredis/commands/__init__.py", line 51, in execute return self._pool_or_conn.execute(command, *args, **kwargs) File "<...>/venv/lib/python3.8/site-packages/elasticapm/instrumentation/packages/base.py", line 210, in call_if_sampling return self.call(module, method, wrapped, instance, args, kwargs) File "<...>/venv/lib/python3.8/site-packages/elasticapm/instrumentation/packages/asyncio/aioredis.py", line 46, in call wrapped_name = args[0].decode() AttributeError: 'str' object has no attribute 'decode'
Environment
- OS: Ubuntu 18.04.5 LTS
- Python version: 3.8.9
- Framework and version:
aioredis==1.3.1
- APM Server version: --
- Agent version:
elasticapm==6.3.3