fix: background delete on create failure after ctx cancellation (#113442)

* fix: background delete on create failure after ctx cancellation

* fix: address comments

* chore: remove tests using mock
This commit is contained in:
Rafael Bortolon Paulovic
2025-11-06 09:21:11 +01:00
committed by GitHub
parent 35ac04bad3
commit 7281bb7069
+12 -9
View File
@@ -241,10 +241,12 @@ func (d *dualWriter) Create(ctx context.Context, in runtime.Object, createValida
if errObjectSt != nil {
log.With("object", createdCopy).Error("failed to CREATE object in unified storage", "err", errObjectSt)
// If we cannot create in unified storage, attempt to clean up legacy.
_, _, err = d.legacy.Delete(ctx, accCreated.GetName(), nil, &metav1.DeleteOptions{})
if err != nil {
log.With("name", accCreated.GetName()).Error("failed to CLEANUP object in legacy storage", "err", err)
}
go func(ctxBg context.Context, cancel context.CancelFunc) {
defer cancel()
if _, asyncDelete, err := d.legacy.Delete(ctxBg, accCreated.GetName(), nil, &metav1.DeleteOptions{}); err != nil {
log.With("name", accCreated.GetName()).Error("failed to CLEANUP object in legacy storage", "err", err, "asyncDelete", asyncDelete)
}
}(context.WithTimeout(context.WithoutCancel(ctx), backgroundReqTimeout))
return nil, errObjectSt
}
return storageObj, nil
@@ -263,12 +265,13 @@ func (d *dualWriter) Create(ctx context.Context, in runtime.Object, createValida
if d.errorIsOK {
return createdFromLegacy, nil
}
// If we cannot create in unified storage, attempt to clean up legacy.
_, _, errLegacy := d.legacy.Delete(ctx, accCreated.GetName(), nil, &metav1.DeleteOptions{})
if errLegacy != nil {
log.With("name", accCreated.GetName()).Error("failed to CLEANUP object in legacy storage", "err", errLegacy)
}
go func(ctxBg context.Context, cancel context.CancelFunc) {
defer cancel()
if _, asyncDelete, err := d.legacy.Delete(ctxBg, accCreated.GetName(), nil, &metav1.DeleteOptions{}); err != nil {
log.With("name", accCreated.GetName()).Error("failed to CLEANUP object in legacy storage", "err", err, "asyncDelete", asyncDelete)
}
}(context.WithTimeout(context.WithoutCancel(ctx), backgroundReqTimeout))
return nil, err
}
}