metacache: Ask all disks when drive count is 4 (#11087)

This commit is contained in:
Anis Elleuch 2020-12-12 02:54:31 +01:00 committed by GitHub
parent db7890660e
commit c4f29d24da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 15 additions and 3 deletions

View File

@ -549,6 +549,10 @@ func (er *erasureObjects) streamMetadataParts(ctx context.Context, o listPathOpt
}
}
func (er erasureObjects) SetDriveCount() int {
return er.setDriveCount
}
// Will return io.EOF if continuing would not yield more results.
func (er *erasureObjects) listPath(ctx context.Context, o listPathOptions) (entries metaCacheEntriesSorted, err error) {
const debugPrint = false
@ -612,6 +616,14 @@ func (er *erasureObjects) listPath(ctx context.Context, o listPathOptions) (entr
askDisks = getReadQuorum(er.SetDriveCount())
}
listingQuorum := askDisks - 1
// Special case: ask all disks if the drive count is 4
if er.SetDriveCount() == 4 {
askDisks = len(disks)
listingQuorum = 2
}
if len(disks) < askDisks {
err = InsufficientReadQuorum{}
logger.LogIf(ctx, fmt.Errorf("listPath: Insufficient disks, %d of %d needed are available", len(disks), askDisks))
@ -715,8 +727,8 @@ func (er *erasureObjects) listPath(ctx context.Context, o listPathOptions) (entr
// How to resolve results.
resolver := metadataResolutionParams{
dirQuorum: askDisks - 1,
objQuorum: askDisks - 1,
dirQuorum: listingQuorum,
objQuorum: listingQuorum,
bucket: o.Bucket,
}
@ -726,7 +738,7 @@ func (er *erasureObjects) listPath(ctx context.Context, o listPathOptions) (entr
path: o.BaseDir,
recursive: o.Recursive,
filterPrefix: o.FilterPrefix,
minDisks: askDisks - 1,
minDisks: listingQuorum,
agreed: func(entry metaCacheEntry) {
cacheCh <- entry
filterCh <- entry