Browse Source

clientv3: only block on New() when DialTimeout > 0

Fixes #6162
Anthony Romano 9 years ago
parent
commit
429d5ab20b
2 changed files with 16 additions and 5 deletions
  1. 7 5
      clientv3/client.go
  2. 9 0
      clientv3/client_test.go

+ 7 - 5
clientv3/client.go

@@ -138,11 +138,13 @@ func (c *Client) dialTarget(endpoint string) (proto string, host string, creds *
 	return
 }
 
-// dialSetupOpts gives the dial opts prioer to any authentication
-func (c *Client) dialSetupOpts(endpoint string, dopts ...grpc.DialOption) []grpc.DialOption {
-	opts := []grpc.DialOption{
-		grpc.WithBlock(),
-		grpc.WithTimeout(c.cfg.DialTimeout),
+// dialSetupOpts gives the dial opts prior to any authentication
+func (c *Client) dialSetupOpts(endpoint string, dopts ...grpc.DialOption) (opts []grpc.DialOption) {
+	if c.cfg.DialTimeout > 0 {
+		opts = []grpc.DialOption{
+			grpc.WithTimeout(c.cfg.DialTimeout),
+			grpc.WithBlock(),
+		}
 	}
 	opts = append(opts, dopts...)
 

+ 9 - 0
clientv3/client_test.go

@@ -56,6 +56,15 @@ func TestDialTimeout(t *testing.T) {
 	}
 }
 
+func TestDialNoTimeout(t *testing.T) {
+	cfg := Config{Endpoints: []string{"127.0.0.1:12345"}}
+	c, err := New(cfg)
+	if c == nil || err != nil {
+		t.Fatalf("new client with DialNoWait should succeed, got %v", err)
+	}
+	c.Close()
+}
+
 func TestIsHaltErr(t *testing.T) {
 	if !isHaltErr(nil, fmt.Errorf("etcdserver: some etcdserver error")) {
 		t.Errorf(`error prefixed with "etcdserver: " should be Halted by default`)