Fix commit already exists not leasing

Signed-off-by: Derek McGowan <derek@mcgstyle.net>
This commit is contained in:
Derek McGowan 2018-10-02 14:16:57 -07:00
parent b6107dca86
commit 440c7ed249
No known key found for this signature in database
GPG Key ID: F58C5D0A4405ACDB

View File

@ -553,7 +553,9 @@ func (nw *namespacedWriter) Commit(ctx context.Context, size int64, expected dig
nw.l.RLock() nw.l.RLock()
defer nw.l.RUnlock() defer nw.l.RUnlock()
return update(ctx, nw.db, func(tx *bolt.Tx) error { var innerErr error
if err := update(ctx, nw.db, func(tx *bolt.Tx) error {
bkt := getIngestsBucket(tx, nw.namespace) bkt := getIngestsBucket(tx, nw.namespace)
if bkt != nil { if bkt != nil {
if err := bkt.DeleteBucket([]byte(nw.ref)); err != nil && err != bolt.ErrBucketNotFound { if err := bkt.DeleteBucket([]byte(nw.ref)); err != nil && err != bolt.ErrBucketNotFound {
@ -562,13 +564,20 @@ func (nw *namespacedWriter) Commit(ctx context.Context, size int64, expected dig
} }
dgst, err := nw.commit(ctx, tx, size, expected, opts...) dgst, err := nw.commit(ctx, tx, size, expected, opts...)
if err != nil { if err != nil {
return err if !errdefs.IsAlreadyExists(err) {
return err
}
innerErr = err
} }
if err := removeIngestLease(ctx, tx, nw.ref); err != nil { if err := removeIngestLease(ctx, tx, nw.ref); err != nil {
return err return err
} }
return addContentLease(ctx, tx, dgst) return addContentLease(ctx, tx, dgst)
}) }); err != nil {
return err
}
return innerErr
} }
func (nw *namespacedWriter) commit(ctx context.Context, tx *bolt.Tx, size int64, expected digest.Digest, opts ...content.Opt) (digest.Digest, error) { func (nw *namespacedWriter) commit(ctx context.Context, tx *bolt.Tx, size int64, expected digest.Digest, opts ...content.Opt) (digest.Digest, error) {
@ -611,7 +620,7 @@ func (nw *namespacedWriter) commit(ctx context.Context, tx *bolt.Tx, size int64,
bkt, err := createBlobBucket(tx, nw.namespace, actual) bkt, err := createBlobBucket(tx, nw.namespace, actual)
if err != nil { if err != nil {
if err == bolt.ErrBucketExists { if err == bolt.ErrBucketExists {
return "", errors.Wrapf(errdefs.ErrAlreadyExists, "content %v", actual) return actual, errors.Wrapf(errdefs.ErrAlreadyExists, "content %v", actual)
} }
return "", err return "", err
} }