Signed-off-by: Daniel Nephin <dnephin@docker.com>
| ... | ... |
@@ -10,6 +10,7 @@ import ( |
| 10 | 10 |
"github.com/Sirupsen/logrus" |
| 11 | 11 |
"github.com/docker/docker/pkg/ioutils" |
| 12 | 12 |
"github.com/opencontainers/go-digest" |
| 13 |
+ "github.com/pkg/errors" |
|
| 13 | 14 |
) |
| 14 | 15 |
|
| 15 | 16 |
// DigestWalkFunc is function called by StoreBackend.Walk |
| ... | ... |
@@ -47,10 +48,10 @@ func newFSStore(root string) (*fs, error) {
|
| 47 | 47 |
root: root, |
| 48 | 48 |
} |
| 49 | 49 |
if err := os.MkdirAll(filepath.Join(root, contentDirName, string(digest.Canonical)), 0700); err != nil {
|
| 50 |
- return nil, err |
|
| 50 |
+ return nil, errors.Wrap(err, "failed to create storage backend") |
|
| 51 | 51 |
} |
| 52 | 52 |
if err := os.MkdirAll(filepath.Join(root, metadataDirName, string(digest.Canonical)), 0700); err != nil {
|
| 53 |
- return nil, err |
|
| 53 |
+ return nil, errors.Wrap(err, "failed to create storage backend") |
|
| 54 | 54 |
} |
| 55 | 55 |
return s, nil |
| 56 | 56 |
} |
| ... | ... |
@@ -96,7 +97,7 @@ func (s *fs) Get(dgst digest.Digest) ([]byte, error) {
|
| 96 | 96 |
func (s *fs) get(dgst digest.Digest) ([]byte, error) {
|
| 97 | 97 |
content, err := ioutil.ReadFile(s.contentFile(dgst)) |
| 98 | 98 |
if err != nil {
|
| 99 |
- return nil, err |
|
| 99 |
+ return nil, errors.Wrapf(err, "failed to get digest %s", dgst) |
|
| 100 | 100 |
} |
| 101 | 101 |
|
| 102 | 102 |
// todo: maybe optional |
| ... | ... |
@@ -118,7 +119,7 @@ func (s *fs) Set(data []byte) (digest.Digest, error) {
|
| 118 | 118 |
|
| 119 | 119 |
dgst := digest.FromBytes(data) |
| 120 | 120 |
if err := ioutils.AtomicWriteFile(s.contentFile(dgst), data, 0600); err != nil {
|
| 121 |
- return "", err |
|
| 121 |
+ return "", errors.Wrap(err, "failed to write digest data") |
|
| 122 | 122 |
} |
| 123 | 123 |
|
| 124 | 124 |
return dgst, nil |
| ... | ... |
@@ -161,7 +162,11 @@ func (s *fs) GetMetadata(dgst digest.Digest, key string) ([]byte, error) {
|
| 161 | 161 |
if _, err := s.get(dgst); err != nil {
|
| 162 | 162 |
return nil, err |
| 163 | 163 |
} |
| 164 |
- return ioutil.ReadFile(filepath.Join(s.metadataDir(dgst), key)) |
|
| 164 |
+ bytes, err := ioutil.ReadFile(filepath.Join(s.metadataDir(dgst), key)) |
|
| 165 |
+ if err != nil {
|
|
| 166 |
+ return nil, errors.Wrap(err, "failed to read metadata") |
|
| 167 |
+ } |
|
| 168 |
+ return bytes, nil |
|
| 165 | 169 |
} |
| 166 | 170 |
|
| 167 | 171 |
// DeleteMetadata removes the metadata associated with a digest. |
| ... | ... |
@@ -50,7 +50,7 @@ func TestFSInvalidSet(t *testing.T) {
|
| 50 | 50 |
assert.NilError(t, err) |
| 51 | 51 |
|
| 52 | 52 |
_, err = store.Set([]byte("foobar"))
|
| 53 |
- assert.Error(t, err, "is a directory") |
|
| 53 |
+ assert.Error(t, err, "failed to write digest data") |
|
| 54 | 54 |
} |
| 55 | 55 |
|
| 56 | 56 |
func TestFSInvalidRoot(t *testing.T) {
|
| ... | ... |
@@ -73,11 +73,11 @@ func TestFSInvalidRoot(t *testing.T) {
|
| 73 | 73 |
assert.NilError(t, err) |
| 74 | 74 |
|
| 75 | 75 |
f, err := os.Create(filePath) |
| 76 |
- defer f.Close() |
|
| 77 | 76 |
assert.NilError(t, err) |
| 77 |
+ f.Close() |
|
| 78 | 78 |
|
| 79 | 79 |
_, err = NewFSStoreBackend(root) |
| 80 |
- assert.Error(t, err, "not a directory") |
|
| 80 |
+ assert.Error(t, err, "failed to create storage backend") |
|
| 81 | 81 |
|
| 82 | 82 |
os.RemoveAll(root) |
| 83 | 83 |
} |
| ... | ... |
@@ -117,14 +117,14 @@ func TestFSMetadataGetSet(t *testing.T) {
|
| 117 | 117 |
} |
| 118 | 118 |
|
| 119 | 119 |
_, err = store.GetMetadata(id2, "tkey2") |
| 120 |
- assert.Error(t, err, "no such file or directory") |
|
| 120 |
+ assert.Error(t, err, "failed to read metadata") |
|
| 121 | 121 |
|
| 122 | 122 |
id3 := digest.FromBytes([]byte("baz"))
|
| 123 | 123 |
err = store.SetMetadata(id3, "tkey", []byte("tval"))
|
| 124 |
- assert.Error(t, err, "no such file or directory") |
|
| 124 |
+ assert.Error(t, err, "failed to get digest") |
|
| 125 | 125 |
|
| 126 | 126 |
_, err = store.GetMetadata(id3, "tkey") |
| 127 |
- assert.Error(t, err, "no such file or directory") |
|
| 127 |
+ assert.Error(t, err, "failed to get digest") |
|
| 128 | 128 |
} |
| 129 | 129 |
|
| 130 | 130 |
func TestFSInvalidWalker(t *testing.T) {
|
| ... | ... |
@@ -194,7 +194,7 @@ func TestFSGetUnsetKey(t *testing.T) {
|
| 194 | 194 |
|
| 195 | 195 |
for _, key := range []digest.Digest{"foobar:abc", "sha256:abc", "sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2a"} {
|
| 196 | 196 |
_, err := store.Get(key) |
| 197 |
- assert.Error(t, err, "no such file or directory") |
|
| 197 |
+ assert.Error(t, err, "failed to get digest") |
|
| 198 | 198 |
} |
| 199 | 199 |
} |
| 200 | 200 |
|
| ... | ... |
@@ -222,7 +222,7 @@ func TestFSDelete(t *testing.T) {
|
| 222 | 222 |
assert.NilError(t, err) |
| 223 | 223 |
|
| 224 | 224 |
_, err = store.Get(id) |
| 225 |
- assert.Error(t, err, "no such file or directory") |
|
| 225 |
+ assert.Error(t, err, "failed to get digest") |
|
| 226 | 226 |
|
| 227 | 227 |
_, err = store.Get(id2) |
| 228 | 228 |
assert.NilError(t, err) |
| ... | ... |
@@ -231,7 +231,7 @@ func TestFSDelete(t *testing.T) {
|
| 231 | 231 |
assert.NilError(t, err) |
| 232 | 232 |
|
| 233 | 233 |
_, err = store.Get(id2) |
| 234 |
- assert.Error(t, err, "no such file or directory") |
|
| 234 |
+ assert.Error(t, err, "failed to get digest") |
|
| 235 | 235 |
} |
| 236 | 236 |
|
| 237 | 237 |
func TestFSWalker(t *testing.T) {
|
| ... | ... |
@@ -40,7 +40,7 @@ func TestRestore(t *testing.T) {
|
| 40 | 40 |
assert.Equal(t, img2.Comment, "def") |
| 41 | 41 |
|
| 42 | 42 |
p, err := is.GetParent(ID(id1)) |
| 43 |
- assert.Error(t, err, "no such file") |
|
| 43 |
+ assert.Error(t, err, "failed to read metadata") |
|
| 44 | 44 |
|
| 45 | 45 |
p, err = is.GetParent(ID(id2)) |
| 46 | 46 |
assert.NilError(t, err) |
| ... | ... |
@@ -90,13 +90,13 @@ func TestAddDelete(t *testing.T) {
|
| 90 | 90 |
assert.NilError(t, err) |
| 91 | 91 |
|
| 92 | 92 |
_, err = is.Get(id1) |
| 93 |
- assert.Error(t, err, "no such file or directory") |
|
| 93 |
+ assert.Error(t, err, "failed to get digest") |
|
| 94 | 94 |
|
| 95 | 95 |
_, err = is.Get(id2) |
| 96 | 96 |
assert.NilError(t, err) |
| 97 | 97 |
|
| 98 | 98 |
_, err = is.GetParent(id2) |
| 99 |
- assert.Error(t, err, "no such file or directory") |
|
| 99 |
+ assert.Error(t, err, "failed to read metadata") |
|
| 100 | 100 |
} |
| 101 | 101 |
|
| 102 | 102 |
func TestSearchAfterDelete(t *testing.T) {
|