diff --git a/clientv3/client.go b/clientv3/client.go index d4a7d3410..96cfefaba 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 8eb96239a..ba09aa71b 100644 --- a/embed/etcd.go +++ b/embed/etcd.go @@ -258,19 +258,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 } @@ -304,7 +306,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()