Add delete target to image remove
Adds atomicity to image delete when deleting from a list. Signed-off-by: Derek McGowan <derek@mcg.dev>
This commit is contained in:
@@ -266,6 +266,13 @@ func (s *imageStore) Delete(ctx context.Context, name string, opts ...images.Del
|
||||
return err
|
||||
}
|
||||
|
||||
var options images.DeleteOptions
|
||||
for _, opt := range opts {
|
||||
if err := opt(ctx, &options); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return update(ctx, s.db, func(tx *bolt.Tx) error {
|
||||
bkt := getImagesBucket(tx, namespace)
|
||||
if bkt == nil {
|
||||
@@ -276,6 +283,22 @@ func (s *imageStore) Delete(ctx context.Context, name string, opts ...images.Del
|
||||
return err
|
||||
}
|
||||
|
||||
if options.Target != nil && options.Target.Digest != "" {
|
||||
ibkt := bkt.Bucket([]byte(name))
|
||||
if ibkt == nil {
|
||||
return fmt.Errorf("image %q: %w", name, errdefs.ErrNotFound)
|
||||
}
|
||||
|
||||
var check images.Image
|
||||
if err := readImage(&check, ibkt); err != nil {
|
||||
return fmt.Errorf("image %q: %w", name, err)
|
||||
}
|
||||
|
||||
if check.Target.Digest != options.Target.Digest {
|
||||
return fmt.Errorf("image %q has target %v, not %v: %w", name, check.Target.Digest, options.Target.Digest, errdefs.ErrNotFound)
|
||||
}
|
||||
}
|
||||
|
||||
if err = bkt.DeleteBucket([]byte(name)); err != nil {
|
||||
if err == bolt.ErrBucketNotFound {
|
||||
err = fmt.Errorf("image %q: %w", name, errdefs.ErrNotFound)
|
||||
|
||||
Reference in New Issue
Block a user