From 7f60c0538e067d62bcbea22e8076d03e3147af56 Mon Sep 17 00:00:00 2001 From: maicon Date: Wed, 12 Nov 2025 17:32:53 -0300 Subject: [PATCH] Patch Steady Channel with: fix: cleanup legacy resource if it is created in legacy during dual update (#113753) (#113789) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix: cleanup legacy resource if it is created in legacy during dual update (#113753) Co-authored-by: Mustafa Sencer Özcan <32759850+mustafasencer@users.noreply.github.com> --- pkg/storage/legacysql/dualwrite/dualwriter.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkg/storage/legacysql/dualwrite/dualwriter.go b/pkg/storage/legacysql/dualwrite/dualwriter.go index 8aed81d7200..ba4e757742e 100644 --- a/pkg/storage/legacysql/dualwrite/dualwriter.go +++ b/pkg/storage/legacysql/dualwrite/dualwriter.go @@ -419,6 +419,15 @@ func (d *dualWriter) Update(ctx context.Context, name string, objInfo rest.Updat // If we want to check unified errors just run it in foreground. if _, _, err := d.unified.Update(ctx, name, unifiedInfo, createValidation, updateValidation, unifiedForceCreate, options); err != nil { log.With("objectInfo", objectInfo(objFromLegacy)).Error("failed to UPDATE in unified storage", "err", err) + // cleanup the legacy object if we created it there + if createdLegacy { + go func(ctxBg context.Context, cancel context.CancelFunc) { + defer cancel() + if _, asyncDelete, err := d.legacy.Delete(ctxBg, name, nil, &metav1.DeleteOptions{}); err != nil { + log.With("name", name).Error("failed to CLEANUP object in legacy storage after unified storage update failure", "err", err, "asyncDelete", asyncDelete) + } + }(context.WithTimeout(context.WithoutCancel(ctx), backgroundReqTimeout)) + } return nil, false, err } return objFromLegacy, createdLegacy, nil