From e4e7e554d5ddc8291f64be897b595ec0f9aa0d15 Mon Sep 17 00:00:00 2001 From: Maksym Pavlenko Date: Fri, 4 Oct 2019 12:22:16 -0700 Subject: [PATCH] Make client's WithLease more flexible. It's sometimes useful to specify a custom lease configuration. In this case clients have to deal with LeaseManager manually to create/defer delete lease (essentially dup WithLease logic). This PR adds lease opts to WithLease, so options can be specified inline. Signed-off-by: Maksym Pavlenko --- lease.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lease.go b/lease.go index d46b79d9f..0e7619b8a 100644 --- a/lease.go +++ b/lease.go @@ -24,7 +24,7 @@ import ( ) // WithLease attaches a lease on the context -func (c *Client) WithLease(ctx context.Context) (context.Context, func(context.Context) error, error) { +func (c *Client) WithLease(ctx context.Context, opts ...leases.Opt) (context.Context, func(context.Context) error, error) { _, ok := leases.FromContext(ctx) if ok { return ctx, func(context.Context) error { @@ -34,7 +34,15 @@ func (c *Client) WithLease(ctx context.Context) (context.Context, func(context.C ls := c.LeasesService() - l, err := ls.Create(ctx, leases.WithRandomID(), leases.WithExpiration(24*time.Hour)) + if len(opts) == 0 { + // Use default lease configuration if no options provided + opts = []leases.Opt{ + leases.WithRandomID(), + leases.WithExpiration(24 * time.Hour), + } + } + + l, err := ls.Create(ctx, opts...) if err != nil { return nil, nil, err }