@@ -20,96 +20,27 @@ import (
2020 "context"
2121 "time"
2222
23- leasesapi "github.com/containerd/containerd/api/services/leases/v1"
2423 "github.com/containerd/containerd/leases"
2524)
2625
27- // Lease is used to hold a reference to active resources which have not been
28- // referenced by a root resource. This is useful for preventing garbage
29- // collection of resources while they are actively being updated.
30- type Lease struct {
31- id string
32- createdAt time.Time
33-
34- client * Client
35- }
36-
37- // CreateLease creates a new lease
38- // TODO: Add variadic lease opt
39- func (c * Client ) CreateLease (ctx context.Context ) (Lease , error ) {
40- lapi := c .LeasesService ()
41- labels := map [string ]string {
42- "containerd.io/gc.expire" : time .Now ().Add (24 * 3600 * time .Second ).Format (time .RFC3339 ),
43- }
44- resp , err := lapi .Create (ctx , & leasesapi.CreateRequest {labels })
45- if err != nil {
46- return Lease {}, err
47- }
48-
49- return Lease {
50- id : resp .Lease .ID ,
51- createdAt : resp .Lease .CreatedAt ,
52- labels : labels ,
53- client : c ,
54- }, nil
55- }
56-
57- // ListLeases lists active leases
58- func (c * Client ) ListLeases (ctx context.Context ) ([]Lease , error ) {
59- lapi := c .LeasesService ()
60- resp , err := lapi .List (ctx , & leasesapi.ListRequest {})
61- if err != nil {
62- return nil , err
63- }
64- leases := make ([]Lease , len (resp .Leases ))
65- for i := range resp .Leases {
66- leases [i ] = Lease {
67- id : resp .Leases [i ].ID ,
68- createdAt : resp .Leases [i ].CreatedAt ,
69- labels : resp .Leases [i ].Labels ,
70- client : c ,
71- }
72- }
73-
74- return leases , nil
75- }
76-
7726// WithLease attaches a lease on the context
7827func (c * Client ) WithLease (ctx context.Context ) (context.Context , func (context.Context ) error , error ) {
79- _ , ok := leases .Lease (ctx )
28+ _ , ok := leases .FromContext (ctx )
8029 if ok {
8130 return ctx , func (context.Context ) error {
8231 return nil
8332 }, nil
8433 }
8534
86- l , err := c .CreateLease (ctx )
35+ ls := c .LeasesService ()
36+
37+ l , err := ls .Create (ctx , leases .WithRandomID (), leases .WithExpiration (24 * 3600 * time .Second ))
8738 if err != nil {
8839 return nil , nil , err
8940 }
9041
91- ctx = leases .WithLease (ctx , l .ID () )
42+ ctx = leases .WithLease (ctx , l .ID )
9243 return ctx , func (ctx context.Context ) error {
93- return l .Delete (ctx )
44+ return ls .Delete (ctx , l )
9445 }, nil
9546}
96-
97- // ID returns the lease ID
98- func (l Lease ) ID () string {
99- return l .id
100- }
101-
102- // CreatedAt returns the time at which the lease was created
103- func (l Lease ) CreatedAt () time.Time {
104- return l .createdAt
105- }
106-
107- // Delete deletes the lease, removing the reference to all resources created
108- // during the lease.
109- func (l Lease ) Delete (ctx context.Context ) error {
110- lapi := l .client .LeasesService ()
111- _ , err := lapi .Delete (ctx , & leasesapi.DeleteRequest {
112- ID : l .id ,
113- })
114- return err
115- }
0 commit comments