Treat sandboxes as root gc resources and scan referenced objects
Signed-off-by: Henry Wang <henwang@amazon.com>
This commit is contained in:
parent
2be87c1a75
commit
cf46d3c6fc
@ -430,6 +430,20 @@ func (c *gcContext) scanRoots(ctx context.Context, tx *bolt.Tx, nc chan<- gc.Nod
|
||||
}
|
||||
}
|
||||
|
||||
bbkt := nbkt.Bucket(bucketKeyObjectSandboxes)
|
||||
if bbkt != nil {
|
||||
if err := bbkt.ForEach(func(k, v []byte) error {
|
||||
if v != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
sbbkt := bbkt.Bucket(k)
|
||||
return c.sendLabelRefs(ns, sbbkt, fn)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
c.active(ns, fn)
|
||||
}
|
||||
return cerr
|
||||
|
@ -101,6 +101,9 @@ func TestGCRoots(t *testing.T) {
|
||||
addLeaseContent("ns3", "l1", dgst(1)),
|
||||
addLeaseSnapshot("ns3", "l1", "overlay", "sn1"),
|
||||
addLeaseIngest("ns3", "l1", "ingest-1"),
|
||||
|
||||
addSandbox("ns3", "sandbox1", nil),
|
||||
addSandbox("ns4", "sandbox1", labelmap(string(labelGCSnapRef)+"overlay", "sn1")),
|
||||
}
|
||||
|
||||
expected := []gc.Node{
|
||||
@ -136,6 +139,7 @@ func TestGCRoots(t *testing.T) {
|
||||
gcnode(ResourceIngest, "ns3", "ingest-1"),
|
||||
gcnode(resourceContentFlat, "ns3", dgst(1).String()),
|
||||
gcnode(resourceSnapshotFlat, "ns3", "overlay/sn1"),
|
||||
gcnode(ResourceSnapshot, "ns4", "overlay/sn1"),
|
||||
}
|
||||
|
||||
if err := db.Update(func(tx *bolt.Tx) error {
|
||||
@ -760,6 +764,16 @@ func addContainer(ns, name, snapshotter, snapshot string, labels map[string]stri
|
||||
}
|
||||
}
|
||||
|
||||
func addSandbox(ns, name string, labels map[string]string) alterFunc {
|
||||
return func(bkt *bolt.Bucket) error {
|
||||
sbkt, err := createBuckets(bkt, ns, string(bucketKeyObjectSandboxes), name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return boltutil.WriteLabels(sbkt, labels)
|
||||
}
|
||||
}
|
||||
|
||||
func createBuckets(bkt *bolt.Bucket, names ...string) (*bolt.Bucket, error) {
|
||||
for _, name := range names {
|
||||
nbkt, err := bkt.CreateBucketIfNotExists([]byte(name))
|
||||
|
Loading…
Reference in New Issue
Block a user