From 31e6f60847dcbc0e792606eac7710dfed44434f6 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Wed, 25 Nov 2020 01:11:22 -0800 Subject: [PATCH] fix: improve error handling in metacache (#10965) --- cmd/metacache-set.go | 51 +++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 29 deletions(-) diff --git a/cmd/metacache-set.go b/cmd/metacache-set.go index 674648734..d3822d2a1 100644 --- a/cmd/metacache-set.go +++ b/cmd/metacache-set.go @@ -426,14 +426,10 @@ func (er *erasureObjects) streamMetadataParts(ctx context.Context, o listPathOpt } } - if fi.Deleted { - return entries, errFileNotFound - } - partN, err := o.findFirstPart(fi) - switch err { - case nil: - case io.ErrUnexpectedEOF: + switch { + case err == nil: + case errors.Is(err, io.ErrUnexpectedEOF): if retries == 10 { err := o.checkMetacacheState(ctx, rpc) if err != nil { @@ -444,7 +440,7 @@ func (er *erasureObjects) streamMetadataParts(ctx context.Context, o listPathOpt retries++ time.Sleep(retryDelay) continue - case io.EOF: + case errors.Is(err, io.EOF): return entries, io.EOF } @@ -498,9 +494,6 @@ func (er *erasureObjects) streamMetadataParts(ctx context.Context, o listPathOpt return entries, io.EOF } } - if fi.Deleted { - return entries, io.ErrUnexpectedEOF - } } buf.Reset() err := er.getObjectWithFileInfo(ctx, minioMetaBucket, o.objectPath(partN), 0, fi.Size, &buf, fi, metaArr, onlineDisks) @@ -529,29 +522,29 @@ func (er *erasureObjects) streamMetadataParts(ctx context.Context, o listPathOpt entries.truncate(o.Limit) return entries, nil } - switch err { - case io.EOF: - // We finished at the end of the block. - // And should not expect any more results. - bi, err := getMetacacheBlockInfo(fi, partN) - logger.LogIf(ctx, err) - if err != nil || bi.EOS { - // We are done and there are no more parts. - return entries, io.EOF - } - if bi.endedPrefix(o.Prefix) { - // Nothing more for prefix. - return entries, io.EOF - } - partN++ - retries = 0 - case nil: + if err == nil { // We stopped within the listing, we are done for now... return entries, nil - default: + } + if !errors.Is(err, io.EOF) { logger.LogIf(ctx, err) return entries, err } + + // We finished at the end of the block. + // And should not expect any more results. + bi, err := getMetacacheBlockInfo(fi, partN) + logger.LogIf(ctx, err) + if err != nil || bi.EOS { + // We are done and there are no more parts. + return entries, io.EOF + } + if bi.endedPrefix(o.Prefix) { + // Nothing more for prefix. + return entries, io.EOF + } + partN++ + retries = 0 } } }