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

master
Anis Elleuch 4 years ago committed by GitHub
parent db7890660e
commit c4f29d24da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      cmd/metacache-set.go

@ -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. // Will return io.EOF if continuing would not yield more results.
func (er *erasureObjects) listPath(ctx context.Context, o listPathOptions) (entries metaCacheEntriesSorted, err error) { func (er *erasureObjects) listPath(ctx context.Context, o listPathOptions) (entries metaCacheEntriesSorted, err error) {
const debugPrint = false const debugPrint = false
@ -612,6 +616,14 @@ func (er *erasureObjects) listPath(ctx context.Context, o listPathOptions) (entr
askDisks = getReadQuorum(er.SetDriveCount()) 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 { if len(disks) < askDisks {
err = InsufficientReadQuorum{} err = InsufficientReadQuorum{}
logger.LogIf(ctx, fmt.Errorf("listPath: Insufficient disks, %d of %d needed are available", len(disks), askDisks)) 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. // How to resolve results.
resolver := metadataResolutionParams{ resolver := metadataResolutionParams{
dirQuorum: askDisks - 1, dirQuorum: listingQuorum,
objQuorum: askDisks - 1, objQuorum: listingQuorum,
bucket: o.Bucket, bucket: o.Bucket,
} }
@ -726,7 +738,7 @@ func (er *erasureObjects) listPath(ctx context.Context, o listPathOptions) (entr
path: o.BaseDir, path: o.BaseDir,
recursive: o.Recursive, recursive: o.Recursive,
filterPrefix: o.FilterPrefix, filterPrefix: o.FilterPrefix,
minDisks: askDisks - 1, minDisks: listingQuorum,
agreed: func(entry metaCacheEntry) { agreed: func(entry metaCacheEntry) {
cacheCh <- entry cacheCh <- entry
filterCh <- entry filterCh <- entry

Loading…
Cancel
Save