X Tutup
Skip to content

Commit b760cee

Browse files
committed
Update lease service errors
Ensure delete returns a typed error on not found Signed-off-by: Derek McGowan <derek@mcgstyle.net>
1 parent 94e132f commit b760cee

File tree

4 files changed

+29
-17
lines changed

4 files changed

+29
-17
lines changed

leases/proxy/manager.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"context"
2121

2222
leasesapi "github.com/containerd/containerd/api/services/leases/v1"
23+
"github.com/containerd/containerd/errdefs"
2324
"github.com/containerd/containerd/leases"
2425
)
2526

@@ -47,7 +48,7 @@ func (pm *proxyManager) Create(ctx context.Context, opts ...leases.Opt) (leases.
4748
Labels: l.Labels,
4849
})
4950
if err != nil {
50-
return leases.Lease{}, err
51+
return leases.Lease{}, errdefs.FromGRPC(err)
5152
}
5253

5354
return leases.Lease{
@@ -69,15 +70,15 @@ func (pm *proxyManager) Delete(ctx context.Context, l leases.Lease, opts ...leas
6970
ID: l.ID,
7071
Sync: do.Synchronous,
7172
})
72-
return err
73+
return errdefs.FromGRPC(err)
7374
}
7475

7576
func (pm *proxyManager) List(ctx context.Context, filters ...string) ([]leases.Lease, error) {
7677
resp, err := pm.client.List(ctx, &leasesapi.ListRequest{
7778
Filters: filters,
7879
})
7980
if err != nil {
80-
return nil, err
81+
return nil, errdefs.FromGRPC(err)
8182
}
8283
l := make([]leases.Lease, len(resp.Leases))
8384
for i := range resp.Leases {

metadata/leases.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,12 @@ func (lm *LeaseManager) Delete(ctx context.Context, lease leases.Lease, _ ...lea
102102

103103
topbkt := getBucket(lm.tx, bucketKeyVersion, []byte(namespace), bucketKeyObjectLeases)
104104
if topbkt == nil {
105-
return nil
105+
return errors.Wrapf(errdefs.ErrNotFound, "lease %q", lease.ID)
106106
}
107-
if err := topbkt.DeleteBucket([]byte(lease.ID)); err != nil && err != bolt.ErrBucketNotFound {
107+
if err := topbkt.DeleteBucket([]byte(lease.ID)); err != nil {
108+
if err == bolt.ErrBucketNotFound {
109+
err = errors.Wrapf(errdefs.ErrNotFound, "lease %q", lease.ID)
110+
}
108111
return err
109112
}
110113
return nil

metadata/leases_test.go

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,17 @@ func TestLeases(t *testing.T) {
3030
defer cancel()
3131

3232
testCases := []struct {
33-
ID string
34-
Cause error
33+
ID string
34+
CreateErr error
35+
DeleteErr error
3536
}{
3637
{
3738
ID: "tx1",
3839
},
3940
{
40-
ID: "tx1",
41-
Cause: errdefs.ErrAlreadyExists,
41+
ID: "tx1",
42+
CreateErr: errdefs.ErrAlreadyExists,
43+
DeleteErr: errdefs.ErrNotFound,
4244
},
4345
{
4446
ID: "tx2",
@@ -51,7 +53,7 @@ func TestLeases(t *testing.T) {
5153
if err := db.Update(func(tx *bolt.Tx) error {
5254
lease, err := NewLeaseManager(tx).Create(ctx, leases.WithID(tc.ID))
5355
if err != nil {
54-
if tc.Cause != nil && errors.Cause(err) == tc.Cause {
56+
if tc.CreateErr != nil && errors.Cause(err) == tc.CreateErr {
5557
return nil
5658
}
5759
return err
@@ -91,7 +93,10 @@ func TestLeases(t *testing.T) {
9193
ID: tc.ID,
9294
})
9395
}); err != nil {
94-
t.Fatal(err)
96+
if tc.DeleteErr == nil && errors.Cause(err) != tc.DeleteErr {
97+
t.Fatal(err)
98+
}
99+
95100
}
96101
}
97102

@@ -248,12 +253,14 @@ func TestLeasesList(t *testing.T) {
248253
t.Fatal(err)
249254
}
250255

251-
// try it again, get nil
256+
// try it again, get not found
252257
if err := db.Update(func(tx *bolt.Tx) error {
253258
lm := NewLeaseManager(tx)
254259
return lm.Delete(ctx, lease)
255-
}); err != nil {
256-
t.Fatalf("unexpected error %v", err)
260+
}); err == nil {
261+
t.Fatalf("expected error deleting non-existent lease")
262+
} else if !errdefs.IsNotFound(err) {
263+
t.Fatalf("unexpected error: %s", err)
257264
}
258265
}
259266
}

services/leases/service.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"google.golang.org/grpc"
2323

2424
api "github.com/containerd/containerd/api/services/leases/v1"
25+
"github.com/containerd/containerd/errdefs"
2526
"github.com/containerd/containerd/leases"
2627
"github.com/containerd/containerd/plugin"
2728
"github.com/containerd/containerd/services"
@@ -75,7 +76,7 @@ func (s *service) Create(ctx context.Context, r *api.CreateRequest) (*api.Create
7576

7677
l, err := s.lm.Create(ctx, opts...)
7778
if err != nil {
78-
return nil, err
79+
return nil, errdefs.ToGRPC(err)
7980
}
8081

8182
return &api.CreateResponse{
@@ -91,15 +92,15 @@ func (s *service) Delete(ctx context.Context, r *api.DeleteRequest) (*ptypes.Emp
9192
if err := s.lm.Delete(ctx, leases.Lease{
9293
ID: r.ID,
9394
}, opts...); err != nil {
94-
return nil, err
95+
return nil, errdefs.ToGRPC(err)
9596
}
9697
return &ptypes.Empty{}, nil
9798
}
9899

99100
func (s *service) List(ctx context.Context, r *api.ListRequest) (*api.ListResponse, error) {
100101
l, err := s.lm.List(ctx, r.Filters...)
101102
if err != nil {
102-
return nil, err
103+
return nil, errdefs.ToGRPC(err)
103104
}
104105

105106
apileases := make([]*api.Lease, len(l))

0 commit comments

Comments
 (0)
X Tutup