Treat sandboxes as root gc resources and scan referenced objects
Signed-off-by: Henry Wang <henwang@amazon.com>
This commit is contained in:
		| @@ -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) | 		c.active(ns, fn) | ||||||
| 	} | 	} | ||||||
| 	return cerr | 	return cerr | ||||||
|   | |||||||
| @@ -101,6 +101,9 @@ func TestGCRoots(t *testing.T) { | |||||||
| 		addLeaseContent("ns3", "l1", dgst(1)), | 		addLeaseContent("ns3", "l1", dgst(1)), | ||||||
| 		addLeaseSnapshot("ns3", "l1", "overlay", "sn1"), | 		addLeaseSnapshot("ns3", "l1", "overlay", "sn1"), | ||||||
| 		addLeaseIngest("ns3", "l1", "ingest-1"), | 		addLeaseIngest("ns3", "l1", "ingest-1"), | ||||||
|  |  | ||||||
|  | 		addSandbox("ns3", "sandbox1", nil), | ||||||
|  | 		addSandbox("ns4", "sandbox1", labelmap(string(labelGCSnapRef)+"overlay", "sn1")), | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	expected := []gc.Node{ | 	expected := []gc.Node{ | ||||||
| @@ -136,6 +139,7 @@ func TestGCRoots(t *testing.T) { | |||||||
| 		gcnode(ResourceIngest, "ns3", "ingest-1"), | 		gcnode(ResourceIngest, "ns3", "ingest-1"), | ||||||
| 		gcnode(resourceContentFlat, "ns3", dgst(1).String()), | 		gcnode(resourceContentFlat, "ns3", dgst(1).String()), | ||||||
| 		gcnode(resourceSnapshotFlat, "ns3", "overlay/sn1"), | 		gcnode(resourceSnapshotFlat, "ns3", "overlay/sn1"), | ||||||
|  | 		gcnode(ResourceSnapshot, "ns4", "overlay/sn1"), | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if err := db.Update(func(tx *bolt.Tx) error { | 	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) { | func createBuckets(bkt *bolt.Bucket, names ...string) (*bolt.Bucket, error) { | ||||||
| 	for _, name := range names { | 	for _, name := range names { | ||||||
| 		nbkt, err := bkt.CreateBucketIfNotExists([]byte(name)) | 		nbkt, err := bkt.CreateBucketIfNotExists([]byte(name)) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Henry Wang
					Henry Wang