AAP-57817 Add Redis connection retry using redis-py 7.0+ built-in (#16176)

* AAP-57817 Add Redis connection retry using redis-py 7.0+ built-in mechanism

* Refactor Redis client helpers to use settings and eliminate code duplication

* Create awx/main/utils/redis.py and move Redis client functions to avoid circular imports

* Fix subsystem_metrics to share Redis connection pool between
  client and pipeline

* Cache Redis clients in RelayConsumer and RelayWebsocketStatsManager to avoid creating new connection pools on every call

* Add cap and base config

* Add Redis retry logic with exponential backoff to handle connection failures during long-running operations

* Add REDIS_BACKOFF_CAP and REDIS_BACKOFF_BASE settings to allow
  adjustment of retry timing in worst-case scenarios without code changes

* Simplify Redis retry tests by removing unnecessary reload logic
This commit is contained in:
Lila Yasin
2025-12-01 09:08:47 -05:00
committed by GitHub
parent 0d86874d5d
commit 4f41b50a09
17 changed files with 264 additions and 24 deletions

View File

@@ -56,7 +56,7 @@ pyyaml>=6.0.2 # require packing fix for cython 3 or higher
pyzstd # otel collector log file compression library
receptorctl
sqlparse>=0.4.4 # Required by django https://github.com/ansible/awx/security/dependabot/96
redis[hiredis]
redis[hiredis]>=7.0 # requires 7.0+ for retry functionality on connection errors
requests
slack-sdk
twilio

View File

@@ -433,7 +433,7 @@ pyzstd==0.18.0
# via -r /awx_devel/requirements/requirements.in
receptorctl==1.6.0
# via -r /awx_devel/requirements/requirements.in
redis[hiredis]==6.4.0
redis[hiredis]==7.0.1
# via
# -r /awx_devel/requirements/requirements.in
# channels-redis