auth/rpc: Take remote disk offline after maximum allowed attempts. (#3288)

Disks when are offline for a long period of time, we should
ignore the disk after trying Login upto 5 times.

This is to reduce the network chattiness, this also reduces
the overall time spent on `net.Dial`.

Fixes #3286
This commit is contained in:
Harshavardhana
2016-11-20 16:57:12 -08:00
committed by GitHub
parent ffbee70e04
commit 0b9f0d14a1
11 changed files with 136 additions and 81 deletions

View File

@@ -32,6 +32,14 @@ import (
"github.com/minio/minio/pkg/objcache"
)
// list all errors which can be ignored in object operations.
var objectOpIgnoredErrs = []error{
errDiskNotFound,
errDiskAccessDenied,
errFaultyDisk,
errFaultyRemoteDisk,
}
/// Object Operations
// GetObject - reads an object erasured coded across multiple
@@ -71,11 +79,7 @@ func (xl xlObjects) GetObject(bucket, object string, startOffset int64, length i
return traceError(InsufficientReadQuorum{}, errs...)
}
if reducedErr := reduceErrs(errs, []error{
errDiskNotFound,
errFaultyDisk,
errDiskAccessDenied,
}); reducedErr != nil {
if reducedErr := reduceErrs(errs, objectOpIgnoredErrs); reducedErr != nil {
return toObjectErr(reducedErr, bucket, object)
}
@@ -333,11 +337,7 @@ func rename(disks []StorageAPI, srcBucket, srcEntry, dstBucket, dstEntry string,
return traceError(errXLWriteQuorum)
}
// Return on first error, also undo any partially successful rename operations.
return reduceErrs(errs, []error{
errDiskNotFound,
errDiskAccessDenied,
errFaultyDisk,
})
return reduceErrs(errs, objectOpIgnoredErrs)
}
// renamePart - renames a part of the source object to the destination