diff --git a/cmd/test-utils_test.go b/cmd/test-utils_test.go index b77bf9e36..3eee1596f 100644 --- a/cmd/test-utils_test.go +++ b/cmd/test-utils_test.go @@ -174,7 +174,7 @@ func prepareFS() (ObjectLayer, string, error) { return obj, fsDirs[0], nil } -func prepareXL32() (ObjectLayer, []string, error) { +func prepareXLSets32() (ObjectLayer, []string, error) { fsDirs1, err := getRandomDisks(16) if err != nil { return nil, nil, err @@ -1704,7 +1704,7 @@ func prepareTestBackend(instanceType string) (ObjectLayer, []string, error) { switch instanceType { // Total number of disks for XL sets backend is set to 32. case XLSetsTestStr: - return prepareXL32() + return prepareXLSets32() // Total number of disks for XL backend is set to 16. case XLTestStr: return prepareXL16() @@ -1986,7 +1986,7 @@ func ExecObjectLayerTest(t TestErrHandler, objTest objTestType) { // Executing the object layer tests for single node setup. objTest(objLayer, FSTestStr, t) - objLayer, fsDirs, err := prepareXL16() + objLayer, fsDirs, err := prepareXLSets32() if err != nil { t.Fatalf("Initialization of object layer failed for XL setup: %s", err) } diff --git a/cmd/xl-sets.go b/cmd/xl-sets.go index c79e453c6..e3b7ed203 100644 --- a/cmd/xl-sets.go +++ b/cmd/xl-sets.go @@ -858,10 +858,21 @@ func leastEntry(entriesCh []FileInfoCh, readQuorum int) (FileInfo, bool) { // mergeEntriesCh - merges FileInfo channel to entries upto maxKeys. func mergeEntriesCh(entriesCh []FileInfoCh, maxKeys int, readQuorum int) (entries FilesInfo) { - for i := 0; i < maxKeys; { - var fi FileInfo - fi, entries.IsTruncated = leastEntry(entriesCh, readQuorum) - if !entries.IsTruncated { + var i = 0 + for { + fi, valid := leastEntry(entriesCh, readQuorum) + if !valid { + break + } + if i == maxKeys { + entries.IsTruncated = true + // Re-insert the last entry so it can be + // listed in the next listing iteration. + for j := range entriesCh { + if !entriesCh[j].Valid { + entriesCh[j].Push(fi) + } + } break } entries.Files = append(entries.Files, fi)