Skip to content

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: intel#182

Signed-off-by: Amarnath Valluri <amarnath.valluri@intel.com>
  • Loading branch information
avalluri committed Mar 4, 2019
1 parent 5ea6caf commit 353557f
Showing 1 changed file with 24 additions and 20 deletions.
44 changes: 24 additions & 20 deletions pkg/pmem-csi-driver/pmem-csi-driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,9 +177,8 @@ func (pmemd *pmemDriver) Run() error {
return err
}
}
if err := pmemd.registerNodeController(); err != nil {
return err
}
go pmemd.registerNodeController()

} else /* if pmemd.cfg.Mode == Unified */ {
if err := s.Start(pmemd.cfg.Endpoint, pmemd.serverTLSConfig, ids, cs, ns); err != nil {
return err
Expand All @@ -193,34 +192,39 @@ func (pmemd *pmemDriver) Run() error {
return nil
}

func (pmemd *pmemDriver) registerNodeController() error {
fmt.Printf("Connecting to Registry at : %s\n", pmemd.cfg.RegistryEndpoint)
func (pmemd *pmemDriver) registerNodeController() {
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 {
client := registry.NewRegistryClient(conn)
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute)
defer cancel()

glog.Info("Registering controller...")
if _, err = client.RegisterController(ctx, &req); err != nil {
glog.Infof("Failed to register: %s, retrying after %v seconds...", err.Error(), retryTimeout.Seconds())
time.Sleep(retryTimeout)
} else {
break
}
}

return nil
glog.Info("Registration success!!!")
}

func newDeviceManager(dmType string) (pmdmanager.PmemDeviceManager, error) {
Expand Down

0 comments on commit 353557f

Please sign in to comment.