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

This commit is contained in:
Praveen raj Mani 2019-08-03 00:47:26 +05:30 committed by kannappanr
parent 2c3b1f01d9
commit b976521c83
2 changed files with 31 additions and 9 deletions

View File

@ -698,6 +698,22 @@ func initStorageDisks(endpoints EndpointList) ([]StorageAPI, error) {
return storageDisks, nil 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 // formatXLV3ThisEmpty - find out if '.This' field is empty
// in any of the input `formats`, if yes return true. // in any of the input `formats`, if yes return true.
func formatXLV3ThisEmpty(formats []*formatXLV3) bool { func formatXLV3ThisEmpty(formats []*formatXLV3) bool {

View File

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