From 735b776edccc4bbbc578dfca121936a2c96a3f04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mustafa=20Sencer=20=C3=96zcan?= <32759850+mustafasencer@users.noreply.github.com> Date: Wed, 12 Nov 2025 15:02:36 +0100 Subject: [PATCH] fix: cleanup legacy resource if it is created in legacy during dual update (#113753) --- 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