Merge pull request #2493 from dmcgowan/sync-lease-removal

Add sync option to lease removal
This commit is contained in:
Phil Estes
2018-07-31 11:31:55 -04:00
committed by GitHub
10 changed files with 196 additions and 60 deletions

View File

@@ -20,6 +20,7 @@ import (
"context"
"github.com/boltdb/bolt"
"github.com/containerd/containerd/gc"
"github.com/containerd/containerd/leases"
"github.com/containerd/containerd/metadata"
"github.com/containerd/containerd/plugin"
@@ -38,13 +39,25 @@ func init() {
if err != nil {
return nil, err
}
return &local{db: m.(*metadata.DB)}, nil
g, err := ic.Get(plugin.GCPlugin)
if err != nil {
return nil, err
}
return &local{
db: m.(*metadata.DB),
gc: g.(gcScheduler),
}, nil
},
})
}
type gcScheduler interface {
ScheduleAndWait(context.Context) (gc.Stats, error)
}
type local struct {
db *metadata.DB
gc gcScheduler
}
func (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
return lease, nil
}
func (l *local) Delete(ctx context.Context, lease leases.Lease) error {
return l.db.Update(func(tx *bolt.Tx) error {
func (l *local) Delete(ctx context.Context, lease leases.Lease, opts ...leases.DeleteOpt) error {
var do leases.DeleteOptions
for _, opt := range opts {
if err := opt(ctx, &do); err != nil {
return err
}
}
if err := l.db.Update(func(tx *bolt.Tx) error {
return metadata.NewLeaseManager(tx).Delete(ctx, lease)
})
}); err != nil {
return err
}
if do.Synchronous {
if _, err := l.gc.ScheduleAndWait(ctx); err != nil {
return err
}
}
return nil
}
func (l *local) List(ctx context.Context, filters ...string) ([]leases.Lease, error) {

View File

@@ -22,6 +22,7 @@ import (
"google.golang.org/grpc"
api "github.com/containerd/containerd/api/services/leases/v1"
"github.com/containerd/containerd/errdefs"
"github.com/containerd/containerd/leases"
"github.com/containerd/containerd/plugin"
"github.com/containerd/containerd/services"
@@ -75,7 +76,7 @@ func (s *service) Create(ctx context.Context, r *api.CreateRequest) (*api.Create
l, err := s.lm.Create(ctx, opts...)
if err != nil {
return nil, err
return nil, errdefs.ToGRPC(err)
}
return &api.CreateResponse{
@@ -84,10 +85,14 @@ func (s *service) Create(ctx context.Context, r *api.CreateRequest) (*api.Create
}
func (s *service) Delete(ctx context.Context, r *api.DeleteRequest) (*ptypes.Empty, error) {
var opts []leases.DeleteOpt
if r.Sync {
opts = append(opts, leases.SynchronousDelete)
}
if err := s.lm.Delete(ctx, leases.Lease{
ID: r.ID,
}); err != nil {
return nil, err
}, opts...); err != nil {
return nil, errdefs.ToGRPC(err)
}
return &ptypes.Empty{}, nil
}
@@ -95,7 +100,7 @@ func (s *service) Delete(ctx context.Context, r *api.DeleteRequest) (*ptypes.Emp
func (s *service) List(ctx context.Context, r *api.ListRequest) (*api.ListResponse, error) {
l, err := s.lm.List(ctx, r.Filters...)
if err != nil {
return nil, err
return nil, errdefs.ToGRPC(err)
}
apileases := make([]*api.Lease, len(l))