Ignore faulty disks in xl-sets Storage info (#7878)

master
Praveen raj Mani 5 years ago committed by kannappanr
parent 2c3b1f01d9
commit b976521c83
  1. 16
      cmd/format-xl.go
  2. 24
      cmd/xl-sets.go

@ -698,6 +698,22 @@ func initStorageDisks(endpoints EndpointList) ([]StorageAPI, error) {
return storageDisks, nil
}
// Runs through the faulty disks and record their errors.
func initDisksWithErrors(endpoints EndpointList) ([]StorageAPI, []error) {
storageDisks := make([]StorageAPI, len(endpoints))
var dErrs = make([]error, len(storageDisks))
for index, endpoint := range endpoints {
storage, err := newStorageAPI(endpoint)
if err != nil {
logger.LogIf(context.Background(), err)
dErrs[index] = err
continue
}
storageDisks[index] = storage
}
return storageDisks, dErrs
}
// formatXLV3ThisEmpty - find out if '.This' field is empty
// in any of the input `formats`, if yes return true.
func formatXLV3ThisEmpty(formats []*formatXLV3) bool {

@ -327,15 +327,22 @@ func (s *xlSets) StorageInfo(ctx context.Context) StorageInfo {
storageInfo.Backend.Sets[i] = make([]madmin.DriveInfo, s.drivesPerSet)
}
storageDisks, err := initStorageDisks(s.endpoints)
if err != nil {
return storageInfo
}
storageDisks, dErrs := initDisksWithErrors(s.endpoints)
defer closeStorageDisks(storageDisks)
formats, sErrs := loadFormatXLAll(storageDisks)
drivesInfo := formatsToDrivesInfo(s.endpoints, formats, sErrs)
combineStorageErrors := func(diskErrs []error, storageErrs []error) []error {
for index, err := range diskErrs {
if err != nil {
storageErrs[index] = err
}
}
return storageErrs
}
errs := combineStorageErrors(dErrs, sErrs)
drivesInfo := formatsToDrivesInfo(s.endpoints, formats, errs)
refFormat, err := getFormatXLInQuorum(formats)
if err != nil {
// Ignore errors here, since this call cannot do anything at
@ -356,7 +363,6 @@ func (s *xlSets) StorageInfo(ctx context.Context) StorageInfo {
}
}
}
// fill all the offline, missing endpoints as well.
for _, drive := range drivesInfo {
if drive.UUID == "" {
@ -1250,17 +1256,17 @@ func formatsToDrivesInfo(endpoints EndpointList, formats []*formatXLV3, sErrs []
Endpoint: drive,
State: madmin.DriveStateMissing,
})
case sErrs[i] == errCorruptedFormat:
case sErrs[i] == errDiskNotFound:
beforeDrives = append(beforeDrives, madmin.DriveInfo{
UUID: "",
Endpoint: drive,
State: madmin.DriveStateCorrupt,
State: madmin.DriveStateOffline,
})
default:
beforeDrives = append(beforeDrives, madmin.DriveInfo{
UUID: "",
Endpoint: drive,
State: madmin.DriveStateOffline,
State: madmin.DriveStateCorrupt,
})
}
}

Loading…
Cancel
Save