mirror of
https://github.com/minio/minio.git
synced 2024-12-23 21:55:53 -05:00
Ignore faulty disks in xl-sets Storage info (#7878)
This commit is contained in:
parent
2c3b1f01d9
commit
b976521c83
@ -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…
Reference in New Issue
Block a user