Disable FailFast on client.IsServing()
User of the client should associate a proper timeout with the context instead. Signed-off-by: Kenfe-Mickael Laventure <mickael.laventure@gmail.com>
This commit is contained in:
		
							
								
								
									
										10
									
								
								client.go
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								client.go
									
									
									
									
									
								
							| @@ -104,10 +104,14 @@ type Client struct { | ||||
| 	runtime   string | ||||
| } | ||||
|  | ||||
| // IsServing returns true if the client can successfully connect to the containerd daemon | ||||
| // and the healthcheck service returns the SERVING response | ||||
| // IsServing returns true if the client can successfully connect to the | ||||
| // containerd daemon and the healthcheck service returns the SERVING | ||||
| // response. | ||||
| // This call will block if a transient error is encountered during | ||||
| // connection. A timeout can be set in the context to ensure it returns | ||||
| // early. | ||||
| func (c *Client) IsServing(ctx context.Context) (bool, error) { | ||||
| 	r, err := c.HealthService().Check(ctx, &grpc_health_v1.HealthCheckRequest{}) | ||||
| 	r, err := c.HealthService().Check(ctx, &grpc_health_v1.HealthCheckRequest{}, grpc.FailFast(false)) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
|   | ||||
| @@ -1,16 +0,0 @@ | ||||
| package containerd | ||||
|  | ||||
| import ( | ||||
| 	"net" | ||||
| 	"time" | ||||
|  | ||||
| 	winio "github.com/Microsoft/go-winio" | ||||
| ) | ||||
|  | ||||
| func Dialer(address string, timeout time.Duration) (net.Conn, error) { | ||||
| 	return winio.DialPipe(address, &timeout) | ||||
| } | ||||
|  | ||||
| func DialAddress(address string) string { | ||||
| 	return address | ||||
| } | ||||
| @@ -1,31 +1,13 @@ | ||||
| // +build !windows | ||||
| 
 | ||||
| package containerd | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"net" | ||||
| 	"os" | ||||
| 	"strings" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/pkg/errors" | ||||
| ) | ||||
| 
 | ||||
| func isNoent(err error) bool { | ||||
| 	if err != nil { | ||||
| 		if nerr, ok := err.(*net.OpError); ok { | ||||
| 			if serr, ok := nerr.Err.(*os.SyscallError); ok { | ||||
| 				if serr.Err == syscall.ENOENT { | ||||
| 					return true | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| type dialResult struct { | ||||
| 	c   net.Conn | ||||
| 	err error | ||||
| @@ -44,7 +26,7 @@ func Dialer(address string, timeout time.Duration) (net.Conn, error) { | ||||
| 			case <-stopC: | ||||
| 				return | ||||
| 			default: | ||||
| 				c, err := net.DialTimeout("unix", address, timeout) | ||||
| 				c, err := dialer(address, timeout) | ||||
| 				if isNoent(err) { | ||||
| 					<-time.After(10 * time.Millisecond) | ||||
| 					continue | ||||
| @@ -68,7 +50,3 @@ func Dialer(address string, timeout time.Duration) (net.Conn, error) { | ||||
| 		return nil, errors.Errorf("dial %s: no such file or directory", address) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func DialAddress(address string) string { | ||||
| 	return fmt.Sprintf("unix://%s", address) | ||||
| } | ||||
							
								
								
									
										32
									
								
								dialer_unix.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								dialer_unix.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| // +build !windows | ||||
|  | ||||
| package containerd | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"net" | ||||
| 	"os" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| func isNoent(err error) bool { | ||||
| 	if err != nil { | ||||
| 		if nerr, ok := err.(*net.OpError); ok { | ||||
| 			if serr, ok := nerr.Err.(*os.SyscallError); ok { | ||||
| 				if serr.Err == syscall.ENOENT { | ||||
| 					return true | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func dialer(address string, timeout time.Duration) (net.Conn, error) { | ||||
| 	return net.DialTimeout("unix", address, timeout) | ||||
| } | ||||
|  | ||||
| func DialAddress(address string) string { | ||||
| 	return fmt.Sprintf("unix://%s", address) | ||||
| } | ||||
							
								
								
									
										29
									
								
								dialer_windows.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								dialer_windows.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| package containerd | ||||
|  | ||||
| import ( | ||||
| 	"net" | ||||
| 	"os" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
|  | ||||
| 	winio "github.com/Microsoft/go-winio" | ||||
| ) | ||||
|  | ||||
| func isNoent(err error) bool { | ||||
| 	if err != nil { | ||||
| 		if oerr, ok := err.(*os.PathError); ok { | ||||
| 			if oerr.Err == syscall.ENOENT { | ||||
| 				return true | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func dialer(address string, timeout time.Duration) (net.Conn, error) { | ||||
| 	return winio.DialPipe(address, &timeout) | ||||
| } | ||||
|  | ||||
| func DialAddress(address string) string { | ||||
| 	return address | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Kenfe-Mickael Laventure
					Kenfe-Mickael Laventure