@@ -553,7 +553,9 @@ func (nw *namespacedWriter) Commit(ctx context.Context, size int64, expected dig
553553 nw .l .RLock ()
554554 defer nw .l .RUnlock ()
555555
556- return update (ctx , nw .db , func (tx * bolt.Tx ) error {
556+ var innerErr error
557+
558+ if err := update (ctx , nw .db , func (tx * bolt.Tx ) error {
557559 bkt := getIngestsBucket (tx , nw .namespace )
558560 if bkt != nil {
559561 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
562564 }
563565 dgst , err := nw .commit (ctx , tx , size , expected , opts ... )
564566 if err != nil {
565- return err
567+ if ! errdefs .IsAlreadyExists (err ) {
568+ return err
569+ }
570+ innerErr = err
566571 }
567572 if err := removeIngestLease (ctx , tx , nw .ref ); err != nil {
568573 return err
569574 }
570575 return addContentLease (ctx , tx , dgst )
571- })
576+ }); err != nil {
577+ return err
578+ }
579+
580+ return innerErr
572581}
573582
574583func (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,
611620 bkt , err := createBlobBucket (tx , nw .namespace , actual )
612621 if err != nil {
613622 if err == bolt .ErrBucketExists {
614- return "" , errors .Wrapf (errdefs .ErrAlreadyExists , "content %v" , actual )
623+ return actual , errors .Wrapf (errdefs .ErrAlreadyExists , "content %v" , actual )
615624 }
616625 return "" , err
617626 }
0 commit comments