From f966fbc4a32fe37e5b964126cc23fe04a2773522 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Wed, 31 Mar 2021 21:14:08 -0700 Subject: [PATCH] make sure to preserve checksumInfo to lookup older hash (#11940) upgrading from 2yr old releases is expected to work, the issue was we were missing checksum info to be passed down to newBitrotReader() for whole bitrot calculation --- cmd/erasure-healing.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmd/erasure-healing.go b/cmd/erasure-healing.go index 8ecc8e500..96291b8ea 100644 --- a/cmd/erasure-healing.go +++ b/cmd/erasure-healing.go @@ -367,10 +367,12 @@ func (er erasureObjects) healObject(ctx context.Context, bucket string, object s tmpID := mustGetUUID() migrateDataDir := mustGetUUID() + copyPartsMetadata := make([]FileInfo, len(partsMetadata)) for i := range outDatedDisks { if outDatedDisks[i] == nil { continue } + copyPartsMetadata[i] = partsMetadata[i] partsMetadata[i] = cleanFileInfo(latestMeta) } @@ -392,6 +394,7 @@ func (er erasureObjects) healObject(ctx context.Context, bucket string, object s latestDisks = shuffleDisks(availableDisks, latestMeta.Erasure.Distribution) outDatedDisks = shuffleDisks(outDatedDisks, latestMeta.Erasure.Distribution) partsMetadata = shufflePartsMetadata(partsMetadata, latestMeta.Erasure.Distribution) + copyPartsMetadata = shufflePartsMetadata(copyPartsMetadata, latestMeta.Erasure.Distribution) // Heal each part. erasureHealFile() will write the healed // part to .minio/tmp/uuid/ which needs to be renamed later to @@ -415,7 +418,7 @@ func (er erasureObjects) healObject(ctx context.Context, bucket string, object s if disk == OfflineDisk { continue } - checksumInfo := partsMetadata[i].Erasure.GetChecksumInfo(partNumber) + checksumInfo := copyPartsMetadata[i].Erasure.GetChecksumInfo(partNumber) partPath := pathJoin(object, dataDir, fmt.Sprintf("part.%d", partNumber)) if latestMeta.XLV1 { partPath = pathJoin(object, fmt.Sprintf("part.%d", partNumber))