summaryrefslogtreecommitdiff
path: root/image
diff options
context:
space:
mode:
authorPaweł Gronowski <pawel.gronowski@docker.com>2022-12-06 12:27:39 +0100
committerPaweł Gronowski <pawel.gronowski@docker.com>2022-12-08 17:17:07 +0100
commite214503789111f76ae08af66cf71740bc6483f99 (patch)
treeb0ef063a884c66134b65711c30f8324c22399ca2 /image
parent0ff5ce825c9abea5f24db103187fa9103774efed (diff)
downloaddocker-e214503789111f76ae08af66cf71740bc6483f99.tar.gz
image/store: Use errdefs for errors
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
Diffstat (limited to 'image')
-rw-r--r--image/store.go23
-rw-r--r--image/store_test.go16
2 files changed, 27 insertions, 12 deletions
diff --git a/image/store.go b/image/store.go
index d0d4d5a3e2..291150c607 100644
--- a/image/store.go
+++ b/image/store.go
@@ -5,6 +5,7 @@ import (
"sync"
"time"
+ "github.com/docker/docker/errdefs"
"github.com/docker/docker/layer"
"github.com/docker/docker/pkg/system"
"github.com/opencontainers/go-digest"
@@ -137,12 +138,12 @@ func (is *store) Create(config []byte) (ID, error) {
}
}
if layerCounter > len(img.RootFS.DiffIDs) {
- return "", errors.New("too many non-empty layers in History section")
+ return "", errdefs.InvalidParameter(errors.New("too many non-empty layers in History section"))
}
dgst, err := is.fs.Set(config)
if err != nil {
- return "", err
+ return "", errdefs.InvalidParameter(err)
}
imageID := IDFromDigest(dgst)
@@ -158,11 +159,11 @@ func (is *store) Create(config []byte) (ID, error) {
var l layer.Layer
if layerID != "" {
if !system.IsOSSupported(img.OperatingSystem()) {
- return "", system.ErrNotSupportedOperatingSystem
+ return "", errdefs.InvalidParameter(system.ErrNotSupportedOperatingSystem)
}
l, err = is.lss.Get(layerID)
if err != nil {
- return "", errors.Wrapf(err, "failed to get layer %s", layerID)
+ return "", errdefs.InvalidParameter(errors.Wrapf(err, "failed to get layer %s", layerID))
}
}
@@ -174,7 +175,7 @@ func (is *store) Create(config []byte) (ID, error) {
is.images[imageID] = imageMeta
if err := is.digestSet.Add(imageID.Digest()); err != nil {
delete(is.images, imageID)
- return "", err
+ return "", errdefs.InvalidParameter(err)
}
return imageID, nil
@@ -204,12 +205,12 @@ func (is *store) Get(id ID) (*Image, error) {
// todo: Detect manual insertions and start using them
config, err := is.fs.Get(id.Digest())
if err != nil {
- return nil, err
+ return nil, errdefs.NotFound(err)
}
img, err := NewFromJSON(config)
if err != nil {
- return nil, err
+ return nil, errdefs.InvalidParameter(err)
}
img.computedID = id
@@ -227,11 +228,11 @@ func (is *store) Delete(id ID) ([]layer.Metadata, error) {
imageMeta := is.images[id]
if imageMeta == nil {
- return nil, fmt.Errorf("unrecognized image ID %s", id.String())
+ return nil, errdefs.NotFound(fmt.Errorf("unrecognized image ID %s", id.String()))
}
_, err := is.Get(id)
if err != nil {
- return nil, fmt.Errorf("unrecognized image %s, %v", id.String(), err)
+ return nil, errdefs.NotFound(fmt.Errorf("unrecognized image %s, %v", id.String(), err))
}
for id := range imageMeta.children {
is.fs.DeleteMetadata(id.Digest(), "parent")
@@ -257,7 +258,7 @@ func (is *store) SetParent(id, parent ID) error {
defer is.Unlock()
parentMeta := is.images[parent]
if parentMeta == nil {
- return fmt.Errorf("unknown parent image ID %s", parent.String())
+ return errdefs.NotFound(fmt.Errorf("unknown parent image ID %s", parent.String()))
}
if parent, err := is.GetParent(id); err == nil && is.images[parent] != nil {
delete(is.images[parent].children, id)
@@ -269,7 +270,7 @@ func (is *store) SetParent(id, parent ID) error {
func (is *store) GetParent(id ID) (ID, error) {
d, err := is.fs.GetMetadata(id.Digest(), "parent")
if err != nil {
- return "", err
+ return "", errdefs.NotFound(err)
}
return ID(d), nil // todo: validate?
}
diff --git a/image/store_test.go b/image/store_test.go
index 22f2618475..d5a717253c 100644
--- a/image/store_test.go
+++ b/image/store_test.go
@@ -4,6 +4,7 @@ import (
"fmt"
"testing"
+ "github.com/docker/docker/errdefs"
"github.com/docker/docker/layer"
"gotest.tools/v3/assert"
is "gotest.tools/v3/assert/cmp"
@@ -49,6 +50,7 @@ func TestRestore(t *testing.T) {
assert.Check(t, is.Equal("def", img2.Comment))
_, err = imgStore.GetParent(ID(id1))
+ assert.Check(t, is.ErrorType(err, errdefs.IsNotFound))
assert.ErrorContains(t, err, "failed to read metadata")
p, err := imgStore.GetParent(ID(id2))
@@ -70,7 +72,8 @@ func TestRestore(t *testing.T) {
invalidPattern := id1.Encoded()[1:6]
_, err = imgStore.Search(invalidPattern)
- assert.ErrorContains(t, err, "No such image")
+ assert.Check(t, is.ErrorType(err, errdefs.IsNotFound))
+ assert.Check(t, is.ErrorContains(err, invalidPattern))
}
func TestAddDelete(t *testing.T) {
@@ -99,12 +102,14 @@ func TestAddDelete(t *testing.T) {
assert.NilError(t, err)
_, err = imgStore.Get(id1)
+ assert.Check(t, is.ErrorType(err, errdefs.IsNotFound))
assert.ErrorContains(t, err, "failed to get digest")
_, err = imgStore.Get(id2)
assert.NilError(t, err)
_, err = imgStore.GetParent(id2)
+ assert.Check(t, is.ErrorType(err, errdefs.IsNotFound))
assert.ErrorContains(t, err, "failed to read metadata")
}
@@ -123,9 +128,18 @@ func TestSearchAfterDelete(t *testing.T) {
assert.NilError(t, err)
_, err = imgStore.Search(string(id)[:15])
+ assert.Check(t, is.ErrorType(err, errdefs.IsNotFound))
assert.ErrorContains(t, err, "No such image")
}
+func TestDeleteNotExisting(t *testing.T) {
+ imgStore, cleanup := defaultImageStore(t)
+ defer cleanup()
+
+ _, err := imgStore.Delete(ID("i_dont_exists"))
+ assert.Check(t, is.ErrorType(err, errdefs.IsNotFound))
+}
+
func TestParentReset(t *testing.T) {
imgStore, cleanup := defaultImageStore(t)
defer cleanup()