Skip to content
This repository has been archived by the owner on Oct 22, 2024. It is now read-only.

Commit

Permalink
Keep retry registering node controller with RegistryServer
Browse files Browse the repository at this point in the history
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 <amarnath.valluri@intel.com>
  • Loading branch information
avalluri committed Mar 7, 2019
1 parent 3419b09 commit 15ccdc6
Showing 1 changed file with 23 additions and 12 deletions.
35 changes: 23 additions & 12 deletions pkg/pmem-csi-driver/pmem-csi-driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand Down Expand Up @@ -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
}
Expand Down

0 comments on commit 15ccdc6

Please sign in to comment.