@@ -28,6 +28,7 @@ import (
28
28
"github.com/fsnotify/fsnotify"
29
29
"github.com/pkg/errors"
30
30
"google.golang.org/grpc"
31
+ "google.golang.org/grpc/connectivity"
31
32
"google.golang.org/grpc/credentials/insecure"
32
33
33
34
"k8s.io/klog/v2"
@@ -371,15 +372,9 @@ func watchFile(file string) error {
371
372
}
372
373
373
374
func (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 ()))
381
376
if err != nil {
382
- return errors .Wrap (err , "Cannot connect to kubelet service " )
377
+ return errors .Wrap (err , "Cannot create a gRPC client " )
383
378
}
384
379
385
380
defer conn .Close ()
@@ -392,7 +387,7 @@ func (srv *server) registerWithKubelet(kubeletSocket, pluginEndPoint, resourceNa
392
387
Options : srv .getDevicePluginOptions (),
393
388
}
394
389
395
- _ , err = client .Register (ctx , reqt )
390
+ _ , err = client .Register (context . Background () , reqt )
396
391
if err != nil {
397
392
return errors .Wrap (err , "Cannot register to kubelet service" )
398
393
}
@@ -403,20 +398,33 @@ func (srv *server) registerWithKubelet(kubeletSocket, pluginEndPoint, resourceNa
403
398
// waitForServer checks if grpc server is alive
404
399
// by making grpc blocking connection to the server socket.
405
400
func 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
+
406
408
ctx , cancel := context .WithTimeout (context .Background (), timeout )
407
409
408
410
defer cancel ()
409
411
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
+ }
420
424
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
+ }
422
430
}
0 commit comments