Skip to content
English
  • There are no suggestions because the search field is empty.

Argo CD Application Stuck in Terminating State Due to Oversized status.history Exceeding the gRPC Message Limit

Why syncs and terminate-op both fail with a ResourceExhausted gRPC error when an Application's revision history grows too large, and how to recover

If an Argo CD Application is stuck with an operation state of Terminating, or syncs are rejected with "another operation is already in progress", check the application-controller logs for an error like the following.

error patching application with operation state: rpc error: code = ResourceExhausted desc = trying to send message larger than max (2139765 vs. 2097152)

This means the Application object itself has grown past the ~2 MiB gRPC message size limit, so the controller can no longer patch it to record any state change — including clearing the stuck operation.

How to confirm:

The usual cause is status.history. By default Argo CD keeps up to 10 revisions, and each entry stores a full copy of the rendered Helm values. If those values are large — for example, verbose metric-drop regex lists in an OpenTelemetry Collector config — status.history alone can grow into the 1–2 MiB range.

This creates a catch-22:

  1. Lowering revisionHistoryLimit (for example, to 3) doesn't take effect on its own, because the controller can't write the trimmed history to an object that's already too large to patch.
  2. argocd app terminate-op fails for the same reason — it's still a patch, and the object is still oversized.

How to fix:

  1. Set revisionHistoryLimit lower (for example, 3) in the Application spec so the object stays smaller going forward.
  2. Because the controller can't self-heal an Application that is already over the limit, open a support request asking Akuity to clear status.history and the operation field on the affected Application. This step is support-assisted by design: clearing those fields requires direct access to the Kubernetes control plane hosting the Argo CD instance, which isn't exposed to customers through the CLI, API, or UI.
  3. Once cleared, re-sync. The lower revisionHistoryLimit then keeps the object safely under the limit and prevents recurrence.

⚠️ Note: ServerSideApply: true does not help here — the message is still too large to send regardless of apply strategy — and etcd has its own object size ceilings below the 2 MiB gRPC limit as well.

For a related "stuck application" symptom with a different root cause, see Application Stuck Without a Terminate Button Due to an OOMKilled Application Controller.