remove all buckets for the given node.
(ctx context.Context, tx *bolt.Tx, node gc.Node)
| 991 | |
| 992 | // remove all buckets for the given node. |
| 993 | func (c *gcContext) remove(ctx context.Context, tx *bolt.Tx, node gc.Node) (any, error) { |
| 994 | v1bkt := tx.Bucket(bucketKeyVersion) |
| 995 | if v1bkt == nil { |
| 996 | return nil, nil |
| 997 | } |
| 998 | |
| 999 | nsbkt := v1bkt.Bucket([]byte(node.Namespace)) |
| 1000 | if nsbkt == nil { |
| 1001 | // Still remove object if refenced outside the db |
| 1002 | if cc, ok := c.contexts[node.Type]; ok { |
| 1003 | cc.Remove(node) |
| 1004 | } |
| 1005 | return nil, nil |
| 1006 | } |
| 1007 | |
| 1008 | switch node.Type { |
| 1009 | case ResourceContent: |
| 1010 | cbkt := nsbkt.Bucket(bucketKeyObjectContent) |
| 1011 | if cbkt != nil { |
| 1012 | cbkt = cbkt.Bucket(bucketKeyObjectBlob) |
| 1013 | } |
| 1014 | if cbkt != nil { |
| 1015 | log.G(ctx).WithField("key", node.Key).Debug("remove content") |
| 1016 | return nil, cbkt.DeleteBucket([]byte(node.Key)) |
| 1017 | } |
| 1018 | case ResourceSnapshot: |
| 1019 | sbkt := nsbkt.Bucket(bucketKeyObjectSnapshots) |
| 1020 | if sbkt != nil { |
| 1021 | ss, key, ok := strings.Cut(node.Key, "/") |
| 1022 | if !ok { |
| 1023 | return nil, fmt.Errorf("invalid snapshot gc key %s", node.Key) |
| 1024 | } |
| 1025 | ssbkt := sbkt.Bucket([]byte(ss)) |
| 1026 | if ssbkt != nil { |
| 1027 | log.G(ctx).WithField("key", key).WithField("snapshotter", ss).Debug("remove snapshot") |
| 1028 | return &eventstypes.SnapshotRemove{ |
| 1029 | Key: key, |
| 1030 | Snapshotter: ss, |
| 1031 | }, ssbkt.DeleteBucket([]byte(key)) |
| 1032 | } |
| 1033 | } |
| 1034 | case ResourceImage: |
| 1035 | ibkt := nsbkt.Bucket(bucketKeyObjectImages) |
| 1036 | if ibkt != nil { |
| 1037 | log.G(ctx).WithField("key", node.Key).Debug("remove image") |
| 1038 | return &eventstypes.ImageDelete{ |
| 1039 | Name: node.Key, |
| 1040 | }, ibkt.DeleteBucket([]byte(node.Key)) |
| 1041 | } |
| 1042 | case ResourceLease: |
| 1043 | lbkt := nsbkt.Bucket(bucketKeyObjectLeases) |
| 1044 | if lbkt != nil { |
| 1045 | return nil, lbkt.DeleteBucket([]byte(node.Key)) |
| 1046 | } |
| 1047 | case ResourceIngest: |
| 1048 | ibkt := nsbkt.Bucket(bucketKeyObjectContent) |
| 1049 | if ibkt != nil { |
| 1050 | ibkt = ibkt.Bucket(bucketKeyObjectIngests) |