Merge pull request #135 from rodaine/cacheOnRead-NotExistsError

CacheOnReadFS: erroneous NotExists error from MemMapFS layer
This commit is contained in:
Martin Bertschler 2017-10-03 22:45:38 +02:00 committed by GitHub
commit 8a6ade7159
2 changed files with 38 additions and 7 deletions

View File

@ -64,15 +64,10 @@ func (u *CacheOnReadFs) cacheStatus(name string) (state cacheState, fi os.FileIn
return cacheHit, lfi, nil return cacheHit, lfi, nil
} }
if err == syscall.ENOENT { if err == syscall.ENOENT || os.IsNotExist(err) {
return cacheMiss, nil, nil return cacheMiss, nil, nil
} }
var ok bool
if err, ok = err.(*os.PathError); ok {
if err == os.ErrNotExist {
return cacheMiss, nil, nil
}
}
return cacheMiss, nil, err return cacheMiss, nil, err
} }

View File

@ -1,6 +1,7 @@
package afero package afero
import ( import (
"bytes"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"os" "os"
@ -366,3 +367,38 @@ func TestUnionCacheExpire(t *testing.T) {
t.Errorf("cache time failed: <%s>", data) t.Errorf("cache time failed: <%s>", data)
} }
} }
func TestCacheOnReadFs_Open_NotInLayer(t *testing.T) {
base := NewMemMapFs()
layer := NewMemMapFs()
fs := NewCacheOnReadFs(base, layer, 0)
fh, err := base.Create("/file.txt")
if err != nil {
t.Fatal("unable to create file: ", err)
}
txt := []byte("This is a test")
fh.Write(txt)
fh.Close()
fh, err = fs.Open("/file.txt")
if err != nil {
t.Fatal("could not open file: ", err)
}
b, err := ReadAll(fh)
fh.Close()
if err != nil {
t.Fatal("could not read file: ", err)
} else if !bytes.Equal(txt, b) {
t.Fatalf("wanted file text %q, got %q", txt, b)
}
fh, err = layer.Open("/file.txt")
if err != nil {
t.Fatal("could not open file from layer: ", err)
}
fh.Close()
}