From 15ccdc639b60fe62204f279587cf0cddd13656a7 Mon Sep 17 00:00:00 2001 From: Amarnath Valluri Date: Mon, 4 Mar 2019 15:17:04 +0200 Subject: [PATCH] Keep retry registering node controller with RegistryServer Instead of exiting with error, driver has to wait and retry 'node controller' registration till the registry server up and registration get succeed. FIXES: #182 Signed-off-by: Amarnath Valluri --- pkg/pmem-csi-driver/pmem-csi-driver.go | 35 +++++++++++++++++--------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/pkg/pmem-csi-driver/pmem-csi-driver.go b/pkg/pmem-csi-driver/pmem-csi-driver.go index eceee980fd..847928ae3e 100644 --- a/pkg/pmem-csi-driver/pmem-csi-driver.go +++ b/pkg/pmem-csi-driver/pmem-csi-driver.go @@ -17,6 +17,8 @@ import ( pmemgrpc "github.com/intel/pmem-csi/pkg/pmem-grpc" registry "github.com/intel/pmem-csi/pkg/pmem-registry" "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" "k8s.io/klog/glog" ) @@ -194,31 +196,40 @@ func (pmemd *pmemDriver) Run() error { } func (pmemd *pmemDriver) registerNodeController() error { - fmt.Printf("Connecting to Registry at : %s\n", pmemd.cfg.RegistryEndpoint) var err error var conn *grpc.ClientConn + req := registry.RegisterControllerRequest{ + NodeId: pmemd.cfg.NodeID, + Endpoint: pmemd.cfg.ControllerEndpoint, + } + for { + glog.Infof("Connecting to registry server at: %s\n", pmemd.cfg.RegistryEndpoint) conn, err = pmemgrpc.Connect(pmemd.cfg.RegistryEndpoint, pmemd.clientTLSConfig, connectionTimeout) if err == nil { - glog.Info("Connected to RegistryServer!!!") break } - /* TODO: Retry loop */ - glog.Infof("Failed to connect RegistryServer : %s, retrying after 10 seconds...", err.Error()) - time.Sleep(10 * time.Second) + glog.Infof("Failed to connect registry server: %s, retrying after %v seconds...", err.Error(), retryTimeout.Seconds()) + time.Sleep(retryTimeout) } + client := registry.NewRegistryClient(conn) - req := registry.RegisterControllerRequest{ - NodeId: pmemd.cfg.NodeID, - Endpoint: pmemd.cfg.ControllerEndpoint, - } ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute) defer cancel() - - if _, err = client.RegisterController(ctx, &req); err != nil { - return fmt.Errorf("Fail to register with server at '%s' : %s", pmemd.cfg.RegistryEndpoint, err.Error()) + for { + glog.Info("Registering controller...") + if _, err = client.RegisterController(ctx, &req); err != nil { + if s, ok := status.FromError(err); ok && s.Code() == codes.InvalidArgument { + return fmt.Errorf("Registration failed: %s", s.Message()) + } + glog.Infof("Failed to register: %s, retrying after %v seconds...", err.Error(), retryTimeout.Seconds()) + time.Sleep(retryTimeout) + } else { + break + } } + glog.Info("Registration success!!!") return nil }