storage/filestore: Ignore IsNotExist error walking files

A file piece could be deleted in between walking the list of files read
from a directory and before we actually perform any operation on such
file. When that happens, we don't want to return an error, we want to
just ignore it and carry on.

Change-Id: I8f6986070e5883599a08fccf8b125c075b30fe1b
This commit is contained in:
Ivan Fraixedes 2020-06-19 13:30:34 +02:00 committed by Yingrong Zhao
parent 3b4b5f45c7
commit ed9816fd30

View File

@ -701,12 +701,17 @@ func walkNamespaceWithPrefix(ctx context.Context, log *zap.Logger, namespace []b
for _, name := range names { for _, name := range names {
info, err := os.Lstat(keyDir + "/" + name) info, err := os.Lstat(keyDir + "/" + name)
if err != nil { if err != nil {
if pErr, ok := err.(*os.PathError); ok { if os.IsNotExist(err) {
if pErr.Err.Error() == "lstat" { continue
}
// convert to lowercase the perr.Op because Go reports inconsistently
// "lstat" in Linux and "Lstat" in Windows
if perr, ok := err.(*os.PathError); ok && strings.ToLower(perr.Op) == "lstat" {
log.Error("Unable to read the disk, please verify the disk is not corrupt") log.Error("Unable to read the disk, please verify the disk is not corrupt")
} }
}
return err return errs.Wrap(err)
} }
if info.Mode().IsDir() { if info.Mode().IsDir() {
continue continue