#34212: Redis cache client uses a read connection for incr operation
-------------------------------------+-------------------------------------
               Reporter:  Ilari      |          Owner:  nobody
  Sahi                               |
                   Type:  Bug        |         Status:  new
              Component:  Core       |        Version:  4.1
  (Cache system)                     |
               Severity:  Normal     |       Keywords:  redis cache incr
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  1
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 RedisCacheClient uses a read only connection for the incr operation:
 
https://github.com/django/django/blob/main/django/core/cache/backends/redis.py#L133

 However, it is a write operation, at least according to Amazon ElastiCache
 Redis server. redis-py raises a ReadOnlyError exception:

 {{{
 Traceback (most recent call last):
   File "/usr/local/lib/python3.10/site-
 packages/django/core/handlers/exception.py", line 55, in inner
     response = get_response(request)
   File "/usr/local/lib/python3.10/site-
 packages/django/core/handlers/base.py", line 197, in _get_response
     response = wrapped_callback(request, *callback_args,
 **callback_kwargs)
   File "/usr/local/lib/python3.10/site-
 packages/django/views/generic/base.py", line 103, in view
     return self.dispatch(request, *args, **kwargs)
   File "/usr/local/lib/python3.10/site-
 packages/django/utils/decorators.py", line 46, in _wrapper
     return bound_method(*args, **kwargs)
   File "/usr/local/lib/python3.10/site-packages/ratelimit/decorators.py",
 line 18, in _wrapped
     ratelimited = is_ratelimited(request=request, group=group, fn=fn,
   File "/usr/local/lib/python3.10/site-packages/ratelimit/core.py", line
 119, in is_ratelimited
     usage = get_usage(request, group, fn, key, rate, method, increment)
   File "/usr/local/lib/python3.10/site-packages/ratelimit/core.py", line
 205, in get_usage
     count = cache.incr(cache_key)
   File "/usr/local/lib/python3.10/site-
 packages/django/core/cache/backends/redis.py", line 214, in incr
     return self._cache.incr(key, delta)
   File "/usr/local/lib/python3.10/site-
 packages/django/core/cache/backends/redis.py", line 136, in incr
     return client.incr(key, delta)
   File "/usr/local/lib/python3.10/site-packages/redis/commands/core.py",
 line 1852, in incrby
     return self.execute_command("INCRBY", name, amount)
   File "/usr/local/lib/python3.10/site-packages/redis/client.py", line
 1258, in execute_command
     return conn.retry.call_with_retry(
   File "/usr/local/lib/python3.10/site-packages/redis/retry.py", line 46,
 in call_with_retry
     return do()
   File "/usr/local/lib/python3.10/site-packages/redis/client.py", line
 1259, in <lambda>
     lambda: self._send_command_parse_response(
   File "/usr/local/lib/python3.10/site-packages/redis/client.py", line
 1235, in _send_command_parse_response
     return self.parse_response(conn, command_name, **options)
   File "/usr/local/lib/python3.10/site-packages/redis/client.py", line
 1275, in parse_response
     response = connection.read_response()
   File "/usr/local/lib/python3.10/site-packages/redis/connection.py", line
 827, in read_response
     raise response

 Exception Type: ReadOnlyError at ...
 Exception Value: You can't write against a read only replica.
 }}}

 In incr-function, get_client should be called with write argument as True.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/34212>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/010701851059b4f4-70e962e2-baed-4f4b-9772-9713b680aa0b-000000%40eu-central-1.amazonses.com.

Reply via email to