diff --git a/builder/builder-next/adapters/snapshot/leasemanager.go b/builder/builder-next/adapters/snapshot/leasemanager.go index ed6039eb25..713af013a1 100644 --- a/builder/builder-next/adapters/snapshot/leasemanager.go +++ b/builder/builder-next/adapters/snapshot/leasemanager.go @@ -6,6 +6,7 @@ import ( "github.com/containerd/containerd/leases" "github.com/sirupsen/logrus" + bolt "go.etcd.io/bbolt" ) type sLM struct { @@ -99,6 +100,15 @@ func (l *sLM) addRef(lID, sID string) { if load { l.s.getLayer(sID, true) + if _, ok := l.s.chainID(sID); ok { + l.s.db.Update(func(tx *bolt.Tx) error { + b, err := tx.CreateBucketIfNotExists([]byte(lID)) + if err != nil { + return err + } + return b.Put(keyChainID, []byte(sID)) + }) + } } } diff --git a/builder/builder-next/adapters/snapshot/snapshot.go b/builder/builder-next/adapters/snapshot/snapshot.go index e043357859..4433984bbc 100644 --- a/builder/builder-next/adapters/snapshot/snapshot.go +++ b/builder/builder-next/adapters/snapshot/snapshot.go @@ -167,10 +167,11 @@ func (s *snapshotter) getLayer(key string, withCommitted bool) (layer.Layer, err s.mu.Unlock() return nil, errors.WithStack(err) } + s.mu.Unlock() if id == "" { - s.mu.Unlock() return nil, nil } + return s.getLayer(string(id), withCommitted) } var err error l, err = s.opt.LayerStore.Get(id)