diff --git a/content/local/store.go b/content/local/store.go index dd415c78d..170a84f98 100644 --- a/content/local/store.go +++ b/content/local/store.go @@ -271,7 +271,7 @@ func (s *store) Writer(ctx context.Context, ref string, total int64, expected di path, refp, data := s.ingestPaths(ref) if err := tryLock(ref); err != nil { - return nil, errors.Wrapf(err, "locking %v failed", ref) + return nil, errors.Wrapf(err, "locking ref %v failed", ref) } var ( diff --git a/metadata/content.go b/metadata/content.go index 47e841243..811a91912 100644 --- a/metadata/content.go +++ b/metadata/content.go @@ -303,18 +303,23 @@ func (cs *contentStore) Writer(ctx context.Context, ref string, size int64, expe return err } - if len(bkt.Get([]byte(ref))) > 0 { - return errors.Wrapf(errdefs.ErrUnavailable, "ref %v is currently in use", ref) - } + var ( + bref string + brefb = bkt.Get([]byte(ref)) + ) - sid, err := bkt.NextSequence() - if err != nil { - return err - } + if brefb == nil { + sid, err := bkt.NextSequence() + if err != nil { + return err + } - bref := createKey(sid, ns, ref) - if err := bkt.Put([]byte(ref), []byte(bref)); err != nil { - return err + bref = createKey(sid, ns, ref) + if err := bkt.Put([]byte(ref), []byte(bref)); err != nil { + return err + } + } else { + bref = string(brefb) } // Do not use the passed in expected value here since it was