Skip to content

aioredis instrumentation: AttributeError: 'str' object has no attribute 'decode' #1307

@Tayum

Description

@Tayum

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions