Blogs Engineering

Stopping Kratix From Endlessly Requeuing Failed Delete Pipelines

Engelstalig artikel. A failed delete pipeline in Kratix was requeued on every reconcile but never rerun. The merged fix records the failure and stops reconciling.

Gosyntasso/kratixKubernetescontrollersplatform engineering

An error return that turned a terminal failure into a busy loop.

Kort antwoord

When a delete pipeline for a Kratix Promise or resource request failed, the controller returned an error on every reconcile. Controller-runtime requeues on error, so the object was reconciled over and over without the pipeline ever rerunning. The fix treats a failed delete pipeline as settled: it still records the failure condition and event, logs it, and returns without an error. Recovery happens through a manual reconciliation, a pipeline change, or the existing retryAfter mechanism. It was merged as PR #968 and closed issue #102.

The problem

Kratix is an open-source framework for building internal platforms on Kubernetes. Issue #102, opened in April 2024, flagged the loop and its cost: "if many pipelines fail at once on the same cluster: the continual requeuing may end up using a chunk of the resources." The issue was framed as an open question: "It's unclear what the right behaviour is here (since returning an error will also requeue), so this ticket is a placeholder/RFC!"

The fix

The same pattern in both the Promise and dynamic resource-request controllers:

if errors.Is(err, workflow.ErrDeletePipelineFailed) {
    logging.Info(o.logger, "resource delete workflow failed; waiting for a manual reconciliation")
    return ctrl.Result{}, nil
}

Existing tests that expected the error were updated, and new cases assert that a further reconcile neither errors nor requeues.

By the numbers

  • Repository: syntasso/kratix, 785 stars (Nov 3, 2026), Go, Apache-2.0
  • Files changed: 4
  • Lines: +24 / -5
  • Commits: 4 (1 from the PR author, 3 maintainer merges of main)
  • Opened: Oct 10, 2026. Merged: Oct 20, 2026. Time to merge: 10 days, 1 hour
  • Review: merged by a maintainer after the CLA was signed

How the review went

The maintainer wrote "Thanks for your contribution @Roshan931! If you could sign the CLA, we can get this merged!" Once it was signed, they merged it with "Thank you!"

Veelgestelde vragen

How do I retry a failed delete pipeline now?

Per the PR description, through a manual reconciliation or a pipeline change, which restarts the workflow, or through the existing retryAfter workflow control.

Where can I read more?

See the pull request and the original issue.

Het doel

In a controller, returning an error means "try again". When trying again can't help, record the failure and wait for a signal that something changed.

Voer de loop uit

Zet productiesignalen om in gereviewde fixes.

Start een gratis proefperiode en zie hoe Prilog echte incidenten koppelt aan pull requests op codeniveau.