The Fix
pip install celery==4.4.4
Based on closed celery/celery issue #6135 · PR/commit linked
Production note: This usually shows up under retries/timeouts. Treat it as a side-effect risk until you can verify behavior with a canary + real traffic.
@@ -23,7 +23,7 @@
connect_on_app_finalize, get_current_app,
get_current_worker_task, set_default_app)
-from celery.exceptions import AlwaysEagerIgnored, ImproperlyConfigured, Ignore
+from celery.exceptions import AlwaysEagerIgnored, ImproperlyConfigured, Ignore, Retry
from celery.five import (UserDict, bytes_if_py2, python_2_unicode_compatible,
@app_cluster.task(bind=True, autoretry_for=(Exception,), max_retries=3,
default_retry_delay=10)
def execute(self, param_a, param_b=None, **kwargs):
print("started")
if param_b is None:
param_b = "filled"
print("retry")
self.retry(exc=Exception("i have filled now"), args=[param_a, param_b], kwargs=kwargs)
print("ended")
def test_celery(self):
sig = execute.si("something")
t = sig.delay()
t = 0
Re-run the minimal reproduction on your broken version, then apply the fix and re-run.
Option A — Upgrade to fixed release\npip install celery==4.4.4\nWhen NOT to use: Do not use this fix if autoretry_for is intentionally set broadly for all exceptions.\n\n
Why This Fix Works in Production
- Trigger: Retry args change BUG
- Mechanism: The autoretry_for setting was too broad, causing retries to lose new arguments
- Why the fix works: Fixes an issue with autoretry_for when set too broadly on Exception, ensuring that retries do not lose new arguments. (first fixed release: 4.4.4).
- If left unfixed, retry loops can amplify load and turn a small outage into a cascade (thundering herd).
Why This Breaks in Prod
- Triggered by an upgrade/regression window: 08.303091–57.716321 breaks; 4.4.4 is the first fixed release.
- Shows up under Python 3.7 in real deployments (not just unit tests).
- The autoretry_for setting was too broad, causing retries to lose new arguments
- Production symptom (often without a traceback): Retry args change BUG
Proof / Evidence
- GitHub issue: #6135
- Fix PR: https://github.com/celery/celery/pull/6138
- First fixed release: 4.4.4
- Affected versions: 08.303091–57.716321
- Reproduced locally: No (not executed)
- Last verified: 2026-02-09
- Confidence: 0.85
- Did this fix it?: Yes (upstream fix exists)
- Own content ratio: 0.59
Discussion
High-signal excerpts from the issue thread (symptoms, repros, edge-cases).
“Ok, i fixed it. 2 Main error and exception overlap when in eager. Fix in minutes.”
“I saw in master got changed removing "S.apply()". I can't run the master branch but...works? Cause in my "4.4.2" this one run the task in…”
“I tried to fix that by myself but code part is pretty weird...a function get called and never return jumping in another code part”
Failure Signature (Search String)
- Retry args change BUG
- - [ ] I have included all related issues and possible duplicate issues
Copy-friendly signature
Failure Signature
-----------------
Retry args change BUG
- [ ] I have included all related issues and possible duplicate issues
Error Message
Signature-only (no traceback captured)
Error Message
-------------
Retry args change BUG
- [ ] I have included all related issues and possible duplicate issues
Minimal Reproduction
@app_cluster.task(bind=True, autoretry_for=(Exception,), max_retries=3,
default_retry_delay=10)
def execute(self, param_a, param_b=None, **kwargs):
print("started")
if param_b is None:
param_b = "filled"
print("retry")
self.retry(exc=Exception("i have filled now"), args=[param_a, param_b], kwargs=kwargs)
print("ended")
def test_celery(self):
sig = execute.si("something")
t = sig.delay()
t = 0
Environment
- Python: 3.7
What Broke
Retries may fail to execute with updated arguments, leading to incorrect task behavior.
Why It Broke
The autoretry_for setting was too broad, causing retries to lose new arguments
Fix Options (Details)
Option A — Upgrade to fixed release Safe default (recommended)
pip install celery==4.4.4
Use when you can deploy the upstream fix. It is usually lower-risk than long-lived workarounds.
Fix reference: https://github.com/celery/celery/pull/6138
First fixed release: 4.4.4
Last verified: 2026-02-09. Validate in your environment.
When NOT to Use This Fix
- Do not use this fix if autoretry_for is intentionally set broadly for all exceptions.
Verify Fix
Re-run the minimal reproduction on your broken version, then apply the fix and re-run.
Did This Fix Work in Your Case?
Quick signal helps us prioritize which fixes to verify and improve.
Prevention
- Track RSS + object counts after deployments; alert on monotonic growth and GC pressure.
- Add a long-running test that repeats the failing call path and asserts stable memory.
- Make timeouts explicit and test them (unit + integration) to avoid silent behavior changes.
- Instrument retries (attempt count + reason) and alert on spikes to catch dependency slowdowns.
Version Compatibility Table
| Version | Status |
|---|---|
| 08.303091 | Broken |
| 08.306141 | Broken |
| 18.873799 | Broken |
| 18.877550 | Broken |
| 57.692348 | Broken |
| 57.716321 | Broken |
| 4.4.4 | Fixed |
Related Issues
No related fixes found.
Sources
We don’t republish the full GitHub discussion text. Use the links above for context.