mirror of
https://github.com/minio/minio.git
synced 2025-04-01 10:13:42 -04:00
XL/GetObject: pick the xl.json with highest version for metadata information. (#1914)
fixes #1913
This commit is contained in:
parent
365f80efa3
commit
d31b38aac8
@ -54,27 +54,25 @@ func (xl xlObjects) GetObject(bucket, object string, startOffset int64, length i
|
|||||||
defer nsMutex.RUnlock(bucket, object)
|
defer nsMutex.RUnlock(bucket, object)
|
||||||
|
|
||||||
// Read metadata associated with the object from all disks.
|
// Read metadata associated with the object from all disks.
|
||||||
partsMetadata, errs := xl.readAllXLMetadata(bucket, object)
|
metaArr, errs := xl.readAllXLMetadata(bucket, object)
|
||||||
if err := reduceError(errs, xl.readQuorum); err != nil {
|
if err := reduceError(errs, xl.readQuorum); err != nil {
|
||||||
return toObjectErr(err, bucket, object)
|
return toObjectErr(err, bucket, object)
|
||||||
}
|
}
|
||||||
|
|
||||||
// List all online disks.
|
// List all online disks.
|
||||||
onlineDisks, _, err := xl.listOnlineDisks(partsMetadata, errs)
|
onlineDisks, highestVersion, err := xl.listOnlineDisks(metaArr, errs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return toObjectErr(err, bucket, object)
|
return toObjectErr(err, bucket, object)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pick one from the first valid metadata.
|
// Pick latest valid metadata.
|
||||||
xlMeta := partsMetadata[0]
|
var xlMeta xlMetaV1
|
||||||
if !xlMeta.IsValid() {
|
for _, meta := range metaArr {
|
||||||
for _, partMetadata := range partsMetadata {
|
if meta.IsValid() && meta.Stat.Version == highestVersion {
|
||||||
if partMetadata.IsValid() {
|
xlMeta = meta
|
||||||
xlMeta = partMetadata
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Get part index offset.
|
// Get part index offset.
|
||||||
partIndex, partOffset, err := xlMeta.ObjectToPartOffset(startOffset)
|
partIndex, partOffset, err := xlMeta.ObjectToPartOffset(startOffset)
|
||||||
@ -85,7 +83,7 @@ func (xl xlObjects) GetObject(bucket, object string, startOffset int64, length i
|
|||||||
// Collect all the previous erasure infos across the disk.
|
// Collect all the previous erasure infos across the disk.
|
||||||
var eInfos []erasureInfo
|
var eInfos []erasureInfo
|
||||||
for index := range onlineDisks {
|
for index := range onlineDisks {
|
||||||
eInfos = append(eInfos, partsMetadata[index].Erasure)
|
eInfos = append(eInfos, metaArr[index].Erasure)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read from all parts.
|
// Read from all parts.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user