diff --git a/components/engine/image/fs.go b/components/engine/image/fs.go index e7d282532a..10f6dab5fc 100644 --- a/components/engine/image/fs.go +++ b/components/engine/image/fs.go @@ -10,6 +10,7 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/docker/pkg/ioutils" "github.com/opencontainers/go-digest" + "github.com/pkg/errors" ) // DigestWalkFunc is function called by StoreBackend.Walk @@ -47,10 +48,10 @@ func newFSStore(root string) (*fs, error) { root: root, } if err := os.MkdirAll(filepath.Join(root, contentDirName, string(digest.Canonical)), 0700); err != nil { - return nil, err + return nil, errors.Wrap(err, "failed to create storage backend") } if err := os.MkdirAll(filepath.Join(root, metadataDirName, string(digest.Canonical)), 0700); err != nil { - return nil, err + return nil, errors.Wrap(err, "failed to create storage backend") } return s, nil } @@ -96,7 +97,7 @@ func (s *fs) Get(dgst digest.Digest) ([]byte, error) { func (s *fs) get(dgst digest.Digest) ([]byte, error) { content, err := ioutil.ReadFile(s.contentFile(dgst)) if err != nil { - return nil, err + return nil, errors.Wrapf(err, "failed to get digest %s", dgst) } // todo: maybe optional @@ -118,7 +119,7 @@ func (s *fs) Set(data []byte) (digest.Digest, error) { dgst := digest.FromBytes(data) if err := ioutils.AtomicWriteFile(s.contentFile(dgst), data, 0600); err != nil { - return "", err + return "", errors.Wrap(err, "failed to write digest data") } return dgst, nil @@ -161,7 +162,11 @@ func (s *fs) GetMetadata(dgst digest.Digest, key string) ([]byte, error) { if _, err := s.get(dgst); err != nil { return nil, err } - return ioutil.ReadFile(filepath.Join(s.metadataDir(dgst), key)) + bytes, err := ioutil.ReadFile(filepath.Join(s.metadataDir(dgst), key)) + if err != nil { + return nil, errors.Wrap(err, "failed to read metadata") + } + return bytes, nil } // DeleteMetadata removes the metadata associated with a digest. diff --git a/components/engine/image/fs_test.go b/components/engine/image/fs_test.go index 5fded26030..76abbdcc42 100644 --- a/components/engine/image/fs_test.go +++ b/components/engine/image/fs_test.go @@ -50,7 +50,7 @@ func TestFSInvalidSet(t *testing.T) { assert.NilError(t, err) _, err = store.Set([]byte("foobar")) - assert.Error(t, err, "is a directory") + assert.Error(t, err, "failed to write digest data") } func TestFSInvalidRoot(t *testing.T) { @@ -73,11 +73,11 @@ func TestFSInvalidRoot(t *testing.T) { assert.NilError(t, err) f, err := os.Create(filePath) - defer f.Close() assert.NilError(t, err) + f.Close() _, err = NewFSStoreBackend(root) - assert.Error(t, err, "not a directory") + assert.Error(t, err, "failed to create storage backend") os.RemoveAll(root) } @@ -117,14 +117,14 @@ func TestFSMetadataGetSet(t *testing.T) { } _, err = store.GetMetadata(id2, "tkey2") - assert.Error(t, err, "no such file or directory") + assert.Error(t, err, "failed to read metadata") id3 := digest.FromBytes([]byte("baz")) err = store.SetMetadata(id3, "tkey", []byte("tval")) - assert.Error(t, err, "no such file or directory") + assert.Error(t, err, "failed to get digest") _, err = store.GetMetadata(id3, "tkey") - assert.Error(t, err, "no such file or directory") + assert.Error(t, err, "failed to get digest") } func TestFSInvalidWalker(t *testing.T) { @@ -194,7 +194,7 @@ func TestFSGetUnsetKey(t *testing.T) { for _, key := range []digest.Digest{"foobar:abc", "sha256:abc", "sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2a"} { _, err := store.Get(key) - assert.Error(t, err, "no such file or directory") + assert.Error(t, err, "failed to get digest") } } @@ -222,7 +222,7 @@ func TestFSDelete(t *testing.T) { assert.NilError(t, err) _, err = store.Get(id) - assert.Error(t, err, "no such file or directory") + assert.Error(t, err, "failed to get digest") _, err = store.Get(id2) assert.NilError(t, err) @@ -231,7 +231,7 @@ func TestFSDelete(t *testing.T) { assert.NilError(t, err) _, err = store.Get(id2) - assert.Error(t, err, "no such file or directory") + assert.Error(t, err, "failed to get digest") } func TestFSWalker(t *testing.T) { diff --git a/components/engine/image/store_test.go b/components/engine/image/store_test.go index 6bec2f157c..bc0148b03e 100644 --- a/components/engine/image/store_test.go +++ b/components/engine/image/store_test.go @@ -40,7 +40,7 @@ func TestRestore(t *testing.T) { assert.Equal(t, img2.Comment, "def") p, err := is.GetParent(ID(id1)) - assert.Error(t, err, "no such file") + assert.Error(t, err, "failed to read metadata") p, err = is.GetParent(ID(id2)) assert.NilError(t, err) @@ -90,13 +90,13 @@ func TestAddDelete(t *testing.T) { assert.NilError(t, err) _, err = is.Get(id1) - assert.Error(t, err, "no such file or directory") + assert.Error(t, err, "failed to get digest") _, err = is.Get(id2) assert.NilError(t, err) _, err = is.GetParent(id2) - assert.Error(t, err, "no such file or directory") + assert.Error(t, err, "failed to read metadata") } func TestSearchAfterDelete(t *testing.T) {