@@ -28,6 +28,7 @@ import (
2828 "github.com/fsnotify/fsnotify"
2929 "github.com/pkg/errors"
3030 "google.golang.org/grpc"
31+ "google.golang.org/grpc/connectivity"
3132 "google.golang.org/grpc/credentials/insecure"
3233
3334 "k8s.io/klog/v2"
@@ -371,15 +372,9 @@ func watchFile(file string) error {
371372}
372373
373374func (srv * server ) registerWithKubelet (kubeletSocket , pluginEndPoint , resourceName string ) error {
374- ctx := context .Background ()
375-
376- conn , err := grpc .DialContext (ctx , kubeletSocket ,
377- grpc .WithTransportCredentials (insecure .NewCredentials ()),
378- grpc .WithContextDialer (func (ctx context.Context , addr string ) (net.Conn , error ) {
379- return (& net.Dialer {}).DialContext (ctx , "unix" , addr )
380- }))
375+ conn , err := grpc .NewClient (filepath .Join ("unix://" , kubeletSocket ), grpc .WithTransportCredentials (insecure .NewCredentials ()))
381376 if err != nil {
382- return errors .Wrap (err , "Cannot connect to kubelet service " )
377+ return errors .Wrap (err , "Cannot create a gRPC client " )
383378 }
384379
385380 defer conn .Close ()
@@ -392,7 +387,7 @@ func (srv *server) registerWithKubelet(kubeletSocket, pluginEndPoint, resourceNa
392387 Options : srv .getDevicePluginOptions (),
393388 }
394389
395- _ , err = client .Register (ctx , reqt )
390+ _ , err = client .Register (context . Background () , reqt )
396391 if err != nil {
397392 return errors .Wrap (err , "Cannot register to kubelet service" )
398393 }
@@ -403,20 +398,33 @@ func (srv *server) registerWithKubelet(kubeletSocket, pluginEndPoint, resourceNa
403398// waitForServer checks if grpc server is alive
404399// by making grpc blocking connection to the server socket.
405400func waitForServer (socket string , timeout time.Duration ) error {
401+ conn , err := grpc .NewClient (filepath .Join ("unix://" , socket ), grpc .WithTransportCredentials (insecure .NewCredentials ()))
402+ if err != nil {
403+ return errors .Wrap (err , "Cannot create a gRPC client" )
404+ }
405+
406+ defer conn .Close ()
407+
406408 ctx , cancel := context .WithTimeout (context .Background (), timeout )
407409
408410 defer cancel ()
409411
410- conn , err := grpc .DialContext (ctx , socket ,
411- grpc .WithTransportCredentials (insecure .NewCredentials ()),
412- grpc .WithBlock (),
413- grpc .WithContextDialer (func (ctx context.Context , addr string ) (net.Conn , error ) {
414- return (& net.Dialer {}).DialContext (ctx , "unix" , addr )
415- }),
416- )
417- if conn != nil {
418- _ = conn .Close ()
419- }
412+ // A blocking dial blocks until the clientConn is ready. Based
413+ // on grpc-go's DialContext() that moved to use NewClient() but
414+ // marked DialContext() deprecated.
415+ for {
416+ state := conn .GetState ()
417+ if state == connectivity .Idle {
418+ conn .Connect ()
419+ }
420+
421+ if state == connectivity .Ready {
422+ return nil
423+ }
420424
421- return errors .Wrapf (err , "Failed dial context at %s" , socket )
425+ if ! conn .WaitForStateChange (ctx , state ) {
426+ // ctx got timeout or canceled.
427+ return errors .Wrapf (ctx .Err (), "Failed dial context at %s" , socket )
428+ }
429+ }
422430}
0 commit comments