fix: use meta.Erasure.Index for GetObject() to reconstruct object (#10764)

This commit is contained in:
Krishna Srinivas
2020-10-26 16:19:42 -07:00
committed by GitHub
parent 46275c6547
commit c49a80db41
4 changed files with 32 additions and 3 deletions

View File

@@ -153,6 +153,30 @@ func readVersionFromDisks(ctx context.Context, disks []StorageAPI, bucket, objec
return metadataArray, g.Wait()
}
// Return disks ordered by the meta.Erasure.Index information.
func shuffleDisksByIndex(disks []StorageAPI, metaArr []FileInfo) (shuffledDisks []StorageAPI) {
shuffledDisks = make([]StorageAPI, len(disks))
for i, meta := range metaArr {
if disks[i] == nil {
continue
}
shuffledDisks[meta.Erasure.Index-1] = disks[i]
}
return shuffledDisks
}
// Return FileInfo slice ordered by the meta.Erasure.Index information.
func shufflePartsMetadataByIndex(disks []StorageAPI, metaArr []FileInfo) []FileInfo {
newMetaArr := make([]FileInfo, len(disks))
for i, meta := range metaArr {
if disks[i] == nil {
continue
}
newMetaArr[meta.Erasure.Index-1] = metaArr[i]
}
return newMetaArr
}
// Return shuffled partsMetadata depending on distribution.
func shufflePartsMetadata(partsMetadata []FileInfo, distribution []int) (shuffledPartsMetadata []FileInfo) {
if distribution == nil {