List only objects that need healing (#2546)

master
Anis Elleuch 8 years ago committed by Harshavardhana
parent e1b0985b5b
commit 200d327737
  1. 2
      cmd/xl-v1-healing.go
  2. 18
      cmd/xl-v1-list-objects-heal.go

@ -134,7 +134,7 @@ func xlLatestMetadata(partsMetadata []xlMetaV1, errs []error) (latestMeta xlMeta
func xlShouldHeal(partsMetadata []xlMetaV1, errs []error) bool { func xlShouldHeal(partsMetadata []xlMetaV1, errs []error) bool {
modTime := commonTime(listObjectModtimes(partsMetadata, errs)) modTime := commonTime(listObjectModtimes(partsMetadata, errs))
for index := range partsMetadata { for index := range partsMetadata {
if errs[index] == errFileNotFound { if errs[index] == errDiskNotFound {
return true return true
} }
if errs[index] != nil { if errs[index] != nil {

@ -137,12 +137,18 @@ func (xl xlObjects) listObjectsHeal(bucket, prefix, marker, delimiter string, ma
result.Prefixes = append(result.Prefixes, objInfo.Name) result.Prefixes = append(result.Prefixes, objInfo.Name)
continue continue
} }
result.Objects = append(result.Objects, ObjectInfo{ // Check if the current object needs healing
Name: objInfo.Name, nsMutex.RLock(bucket, objInfo.Name)
ModTime: objInfo.ModTime, partsMetadata, errs := readAllXLMetadata(xl.storageDisks, bucket, objInfo.Name)
Size: objInfo.Size, if xlShouldHeal(partsMetadata, errs) {
IsDir: false, result.Objects = append(result.Objects, ObjectInfo{
}) Name: objInfo.Name,
ModTime: objInfo.ModTime,
Size: objInfo.Size,
IsDir: false,
})
}
nsMutex.RUnlock(bucket, objInfo.Name)
} }
return result, nil return result, nil
} }

Loading…
Cancel
Save