Jump to solution
Verify

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.

Jump to Verify Open PR/Commit
@@ -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,
repro.py
@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
verify
Re-run the minimal reproduction on your broken version, then apply the fix and re-run.
fix.md
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).
Production impact:
  • 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.”
@Ixiodor · 2020-06-01 · source
“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…”
@Ixiodor · 2020-06-01 · source
“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”
@Ixiodor · 2020-06-01 · source

Failure Signature (Search String)

  • Retry args change BUG
  • - [ ] I have included all related issues and possible duplicate issues
Copy-friendly signature
signature.txt
Failure Signature ----------------- Retry args change BUG - [ ] I have included all related issues and possible duplicate issues

Error Message

Signature-only (no traceback captured)
error.txt
Error Message ------------- Retry args change BUG - [ ] I have included all related issues and possible duplicate issues

Minimal Reproduction

repro.py
@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

When NOT to use: Do not use this fix if autoretry_for is intentionally set broadly for all exceptions.

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.

Get updates

We publish verified fixes weekly. No spam.

Subscribe

When NOT to Use This Fix

  • Do not use this fix if autoretry_for is intentionally set broadly for all exceptions.

Verify Fix

verify
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

VersionStatus
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.