diff --git a/cmd/erasure-object.go b/cmd/erasure-object.go index b8f71b44d..c70a8d1ac 100644 --- a/cmd/erasure-object.go +++ b/cmd/erasure-object.go @@ -773,7 +773,10 @@ func renameData(ctx context.Context, disks []StorageAPI, srcBucket, srcEntry str err := reduceWriteQuorumErrs(ctx, errs, objectOpIgnoredErrs, writeQuorum) if err == nil { versions := reduceCommonVersions(diskVersions, writeQuorum) - for _, dversions := range diskVersions { + for index, dversions := range diskVersions { + if errs[index] != nil { + continue + } if versions != dversions { versionsDisparity = true break @@ -961,7 +964,7 @@ func healObjectVersionsDisparity(bucket string, entry metaCacheEntry) error { fivs, err := entry.fileInfoVersions(bucket) if err != nil { - healObject(bucket, entry.name, "", madmin.HealNormalScan) + go healObject(bucket, entry.name, "", madmin.HealNormalScan) return err } @@ -971,7 +974,7 @@ func healObjectVersionsDisparity(bucket string, entry metaCacheEntry) error { } for _, version := range fivs.Versions { - healObject(bucket, entry.name, version.VersionID, madmin.HealNormalScan) + go healObject(bucket, entry.name, version.VersionID, madmin.HealNormalScan) } return nil diff --git a/cmd/global-heal.go b/cmd/global-heal.go index a47fe7efd..29daa7c2c 100644 --- a/cmd/global-heal.go +++ b/cmd/global-heal.go @@ -437,7 +437,8 @@ func (er *erasureObjects) healErasureSet(ctx context.Context, buckets []string, return retErr } -// healObject heals given object path in deep to fix bitrot. +// healObject sends the given object/version to the background healing workers +// and only returns when healing of the object is done. func healObject(bucket, object, versionID string, scan madmin.HealScanMode) { // Get background heal sequence to send elements to heal globalHealStateLK.Lock()