From 4f27981c46d6d4eb42c803ecc97e7fcdf9e8c2d5 Mon Sep 17 00:00:00 2001 From: andelf Date: Sat, 1 Apr 2017 22:30:41 +0800 Subject: [PATCH] *: fix a bug in handling unix socket urls Now use url.Host + url.Path as unix socket path Fixes #7644 --- clientv3/client.go | 1 + e2e/etcd_test.go | 2 +- embed/etcd.go | 8 +++++--- pkg/transport/unix_listener.go | 4 ++-- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/clientv3/client.go b/clientv3/client.go index 160499fdd..1acc380b3 100644 --- a/clientv3/client.go +++ b/clientv3/client.go @@ -184,6 +184,7 @@ func parseEndpoint(endpoint string) (proto string, host string, scheme string) { case "http", "https": case "unix": proto = "unix" + host = url.Host + url.Path default: proto, host = "", "" } diff --git a/e2e/etcd_test.go b/e2e/etcd_test.go index 713162bea..c4efb3f8c 100644 --- a/e2e/etcd_test.go +++ b/e2e/etcd_test.go @@ -465,7 +465,7 @@ func (ep *etcdProcess) Stop() error { <-ep.donec if ep.cfg.purl.Scheme == "unix" || ep.cfg.purl.Scheme == "unixs" { - os.RemoveAll(ep.cfg.purl.Host) + os.Remove(ep.cfg.purl.Host + ep.cfg.purl.Path) } return nil } diff --git a/embed/etcd.go b/embed/etcd.go index 43be1a3bd..b5d5073f3 100644 --- a/embed/etcd.go +++ b/embed/etcd.go @@ -257,19 +257,21 @@ func startClientListeners(cfg *Config) (sctxs map[string]*serveCtx, err error) { } proto := "tcp" + addr := u.Host if u.Scheme == "unix" || u.Scheme == "unixs" { proto = "unix" + addr = u.Host + u.Path } sctx.secure = u.Scheme == "https" || u.Scheme == "unixs" sctx.insecure = !sctx.secure - if oldctx := sctxs[u.Host]; oldctx != nil { + if oldctx := sctxs[addr]; oldctx != nil { oldctx.secure = oldctx.secure || sctx.secure oldctx.insecure = oldctx.insecure || sctx.insecure continue } - if sctx.l, err = net.Listen(proto, u.Host); err != nil { + if sctx.l, err = net.Listen(proto, addr); err != nil { return nil, err } @@ -303,7 +305,7 @@ func startClientListeners(cfg *Config) (sctxs map[string]*serveCtx, err error) { if cfg.Debug { sctx.registerTrace() } - sctxs[u.Host] = sctx + sctxs[addr] = sctx } return sctxs, nil } diff --git a/pkg/transport/unix_listener.go b/pkg/transport/unix_listener.go index c126b6f7f..123e2036f 100644 --- a/pkg/transport/unix_listener.go +++ b/pkg/transport/unix_listener.go @@ -22,7 +22,7 @@ import ( type unixListener struct{ net.Listener } func NewUnixListener(addr string) (net.Listener, error) { - if err := os.RemoveAll(addr); err != nil { + if err := os.Remove(addr); err != nil && !os.IsNotExist(err) { return nil, err } l, err := net.Listen("unix", addr) @@ -33,7 +33,7 @@ func NewUnixListener(addr string) (net.Listener, error) { } func (ul *unixListener) Close() error { - if err := os.RemoveAll(ul.Addr().String()); err != nil { + if err := os.Remove(ul.Addr().String()); err != nil && !os.IsNotExist(err) { return err } return ul.Listener.Close()