From 216a471bbb00b9fed76d80917ee35d23caa895df Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Fri, 31 Mar 2023 08:15:41 -0700 Subject: [PATCH] on quorum DeleteObject() errors attempt an MRF (#16932) --- cmd/erasure-object.go | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/cmd/erasure-object.go b/cmd/erasure-object.go index 9134e75ce..fac8be291 100644 --- a/cmd/erasure-object.go +++ b/cmd/erasure-object.go @@ -1478,8 +1478,11 @@ func (er erasureObjects) DeleteObjects(ctx context.Context, bucket string, objec // Check failed deletes across multiple objects for i, dobj := range dobjects { - // This object errored, no need to attempt a heal. - if errs[i] != nil { + // This object errored, we should attempt a heal just in case. + if errs[i] != nil && !isErrVersionNotFound(errs[i]) && !isErrObjectNotFound(errs[i]) { + // all other direct versionId references we should + // ensure no dangling file is left over. + er.addPartial(bucket, dobj.ObjectName, dobj.VersionID, -1) continue } @@ -1648,6 +1651,18 @@ func (er erasureObjects) DeleteObject(ctx context.Context, bucket, object string } fvID := mustGetUUID() + defer func() { + // attempt a heal before returning if there are offline disks + // for both del marker and permanent delete situations. + for _, disk := range storageDisks { + if disk != nil && disk.IsOnline() { + continue + } + er.addPartial(bucket, object, opts.VersionID, -1) + break + } + }() + if markDelete && (opts.Versioned || opts.VersionSuspended) { if !deleteMarker { // versioning suspended means we add `null` version as @@ -1695,14 +1710,6 @@ func (er erasureObjects) DeleteObject(ctx context.Context, bucket, object string return objInfo, toObjectErr(err, bucket, object) } - for _, disk := range storageDisks { - if disk != nil && disk.IsOnline() { - continue - } - er.addPartial(bucket, object, opts.VersionID, -1) - break - } - return dfi.ToObjectInfo(bucket, object, opts.Versioned || opts.VersionSuspended), nil }