From d6ac89ce864bd4bc11ea0c5599fc4b9bd5c5b2bf Mon Sep 17 00:00:00 2001 From: zhucan Date: Fri, 12 Jul 2019 14:42:56 +0800 Subject: [PATCH 1/2] bugfix-222 Driver should check socket parent directory before trying to bind it --- pkg/gce-pd-csi-driver/server.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkg/gce-pd-csi-driver/server.go b/pkg/gce-pd-csi-driver/server.go index 22570af0f..a045748d4 100644 --- a/pkg/gce-pd-csi-driver/server.go +++ b/pkg/gce-pd-csi-driver/server.go @@ -18,6 +18,7 @@ import ( "net" "net/url" "os" + "path/filepath" "sync" "google.golang.org/grpc" @@ -92,6 +93,13 @@ func (s *nonBlockingGRPCServer) serve(endpoint string, ids csi.IdentityServer, c klog.Fatalf("%v endpoint scheme not supported", u.Scheme) } + if u.Scheme == "unix" { + listenDir, _ := filepath.Split(addr) + if _, err := os.Stat(listenDir); err != nil { + klog.Fatalf("Failed to stat %s, error: %s", listenDir, err.Error()) + } + } + klog.V(4).Infof("Start listening with scheme %v, addr %v", u.Scheme, addr) listener, err := net.Listen(u.Scheme, addr) if err != nil { From 8abacc4768d2774c1a91d021406e3e90f4d748a1 Mon Sep 17 00:00:00 2001 From: zhucan Date: Sat, 13 Jul 2019 15:00:44 +0800 Subject: [PATCH 2/2] Driver should check socket parent directory before trying to bind it --- pkg/gce-pd-csi-driver/server.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/pkg/gce-pd-csi-driver/server.go b/pkg/gce-pd-csi-driver/server.go index a045748d4..573fa8005 100644 --- a/pkg/gce-pd-csi-driver/server.go +++ b/pkg/gce-pd-csi-driver/server.go @@ -87,19 +87,22 @@ func (s *nonBlockingGRPCServer) serve(endpoint string, ids csi.IdentityServer, c if err := os.Remove(addr); err != nil && !os.IsNotExist(err) { klog.Fatalf("Failed to remove %s, error: %s", addr, err.Error()) } + + listenDir := filepath.Dir(addr) + if _, err := os.Stat(listenDir); err != nil { + if os.IsNotExist(err) { + klog.Fatalf("Expected Kubelet plugin watcher to create parent dir %s but did not find such a dir", listenDir) + } else { + klog.Fatalf("Failed to stat %s, error: %s", listenDir, err.Error()) + } + } + } else if u.Scheme == "tcp" { addr = u.Host } else { klog.Fatalf("%v endpoint scheme not supported", u.Scheme) } - if u.Scheme == "unix" { - listenDir, _ := filepath.Split(addr) - if _, err := os.Stat(listenDir); err != nil { - klog.Fatalf("Failed to stat %s, error: %s", listenDir, err.Error()) - } - } - klog.V(4).Infof("Start listening with scheme %v, addr %v", u.Scheme, addr) listener, err := net.Listen(u.Scheme, addr) if err != nil {