From a2cdd908dcab96f4ef26beb49484ffc68ebf4af6 Mon Sep 17 00:00:00 2001 From: Anthony Romano Date: Mon, 6 Mar 2017 23:17:52 -0800 Subject: [PATCH] clientv3: permit creating client without grpc connection For creating client from etcdserver. --- clientv3/client.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/clientv3/client.go b/clientv3/client.go index ace40b454..160499fdd 100644 --- a/clientv3/client.go +++ b/clientv3/client.go @@ -77,6 +77,14 @@ func New(cfg Config) (*Client, error) { return newClient(&cfg) } +// NewCtxClient creates a client with a context but no underlying grpc +// connection. This is useful for embedded cases that override the +// service interface implementations and do not need connection management. +func NewCtxClient(ctx context.Context) *Client { + cctx, cancel := context.WithCancel(ctx) + return &Client{ctx: cctx, cancel: cancel} +} + // NewFromURL creates a new etcdv3 client from a URL. func NewFromURL(url string) (*Client, error) { return New(Config{Endpoints: []string{url}}) @@ -87,7 +95,10 @@ func (c *Client) Close() error { c.cancel() c.Watcher.Close() c.Lease.Close() - return toErr(c.ctx, c.conn.Close()) + if c.conn != nil { + return toErr(c.ctx, c.conn.Close()) + } + return c.ctx.Err() } // Ctx is a context for "out of band" messages (e.g., for sending