-
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