Grokzen / redis-py-cluster

Python cluster client for the official redis cluster. Redis 3.0+.
https://redis-py-cluster.readthedocs.io/
MIT License
1.1k stars 316 forks source link

RuntimeError: dictionary changed size during iteration #438

Closed lu911 closed 3 years ago

lu911 commented 3 years ago

Error

IndexError: pop from empty list
  File "rediscluster/connection.py", line 323, in get_connection_by_node
    connection = self._available_connections.get(node["name"], []).pop()

RuntimeError: dictionary changed size during iteration
  File "proj_code/authentications.py", line 121, in authenticate
    payload = cache.get(key)
  File "ddtrace/contrib/trace_utils.py", line 48, in wrapper
    return func(mod, pin, wrapped, instance, args, kwargs)
  File "ddtrace/contrib/django/patch.py", line 138, in traced_cache
    return func(*args, **kwargs)
  File "django_redis/cache.py", line 87, in get
    value = self._get(key, default, version, client)
  File "django_redis/cache.py", line 27, in _decorator
    return method(self, *args, **kwargs)
  File "django_redis/cache.py", line 94, in _get
    return self.client.get(key, default=default, version=version, client=client)
  File "django_redis/client/default.py", line 220, in get
    value = client.get(key)
  File "redis/client.py", line 1207, in get
    return self.execute_command('GET', name)
  File "ddtrace/contrib/redis/patch.py", line 82, in traced_execute_command
    return func(*args, **kwargs)
  File "rediscluster/utils.py", line 101, in inner
    return func(*args, **kwargs)
  File "rediscluster/client.py", line 395, in execute_command
    r = self.connection_pool.get_connection_by_node(node)
  File "rediscluster/connection.py", line 325, in get_connection_by_node
    connection = self.make_connection(node)
  File "rediscluster/connection.py", line 224, in make_connection
    if self.count_all_num_connections(node) >= self.max_connections:
  File "rediscluster/connection.py", line 279, in count_all_num_connections
    return sum([i for i in self._created_connections_per_node.values()])
  File "rediscluster/connection.py", line 279, in <listcomp>
    return sum([i for i in self._created_connections_per_node.values()])

ENV

django-redis==4.12.1
redis==3.0.1
redis-py-cluster==2.0.0

Runtime

CPython 3.7.7
lu911 commented 3 years ago

It was fixed on redis-py-cluster==2.1.0