@@ -20,6 +20,7 @@ import (
2020 "context"
2121
2222 "github.com/boltdb/bolt"
23+ "github.com/containerd/containerd/gc"
2324 "github.com/containerd/containerd/leases"
2425 "github.com/containerd/containerd/metadata"
2526 "github.com/containerd/containerd/plugin"
@@ -38,13 +39,25 @@ func init() {
3839 if err != nil {
3940 return nil , err
4041 }
41- return & local {db : m .(* metadata.DB )}, nil
42+ g , err := ic .Get (plugin .GCPlugin )
43+ if err != nil {
44+ return nil , err
45+ }
46+ return & local {
47+ db : m .(* metadata.DB ),
48+ gc : g .(gcScheduler ),
49+ }, nil
4250 },
4351 })
4452}
4553
54+ type gcScheduler interface {
55+ ScheduleAndWait (context.Context ) (gc.Stats , error )
56+ }
57+
4658type local struct {
4759 db * metadata.DB
60+ gc gcScheduler
4861}
4962
5063func (l * local ) Create (ctx context.Context , opts ... leases.Opt ) (leases.Lease , error ) {
@@ -59,10 +72,28 @@ func (l *local) Create(ctx context.Context, opts ...leases.Opt) (leases.Lease, e
5972 return lease , nil
6073}
6174
62- func (l * local ) Delete (ctx context.Context , lease leases.Lease ) error {
63- return l .db .Update (func (tx * bolt.Tx ) error {
75+ func (l * local ) Delete (ctx context.Context , lease leases.Lease , opts ... leases.DeleteOpt ) error {
76+ var do leases.DeleteOptions
77+ for _ , opt := range opts {
78+ if err := opt (ctx , & do ); err != nil {
79+ return err
80+ }
81+ }
82+
83+ if err := l .db .Update (func (tx * bolt.Tx ) error {
6484 return metadata .NewLeaseManager (tx ).Delete (ctx , lease )
65- })
85+ }); err != nil {
86+ return err
87+ }
88+
89+ if do .Synchronous {
90+ if _ , err := l .gc .ScheduleAndWait (ctx ); err != nil {
91+ return err
92+ }
93+ }
94+
95+ return nil
96+
6697}
6798
6899func (l * local ) List (ctx context.Context , filters ... string ) ([]leases.Lease , error ) {
0 commit comments