Explorar o código

Merge pull request #26209 from allencloud/validate-heartbeat-in-discovery

validate heartbeat in discovery cluster opts
Brian Goff %!s(int64=9) %!d(string=hai) anos
pai
achega
94cfa2cc37
Modificáronse 2 ficheiros con 24 adicións e 0 borrados
  1. 12 0
      daemon/discovery.go
  2. 12 0
      daemon/discovery_test.go

+ 12 - 0
daemon/discovery.go

@@ -56,6 +56,12 @@ func discoveryOpts(clusterOpts map[string]string) (time.Duration, time.Duration,
 		if err != nil {
 			return time.Duration(0), time.Duration(0), err
 		}
+
+		if h <= 0 {
+			return time.Duration(0), time.Duration(0),
+				fmt.Errorf("discovery.heartbeat must be positive")
+		}
+
 		heartbeat = time.Duration(h) * time.Second
 		ttl = defaultDiscoveryTTLFactor * heartbeat
 	}
@@ -65,6 +71,12 @@ func discoveryOpts(clusterOpts map[string]string) (time.Duration, time.Duration,
 		if err != nil {
 			return time.Duration(0), time.Duration(0), err
 		}
+
+		if t <= 0 {
+			return time.Duration(0), time.Duration(0),
+				fmt.Errorf("discovery.ttl must be positive")
+		}
+
 		ttl = time.Duration(t) * time.Second
 
 		if _, ok := clusterOpts["discovery.heartbeat"]; !ok {

+ 12 - 0
daemon/discovery_test.go

@@ -18,6 +18,18 @@ func TestDiscoveryOpts(t *testing.T) {
 		t.Fatalf("discovery.ttl == discovery.heartbeat must fail")
 	}
 
+	clusterOpts = map[string]string{"discovery.heartbeat": "-10", "discovery.ttl": "10"}
+	heartbeat, ttl, err = discoveryOpts(clusterOpts)
+	if err == nil {
+		t.Fatalf("negative discovery.heartbeat must fail")
+	}
+
+	clusterOpts = map[string]string{"discovery.heartbeat": "10", "discovery.ttl": "-10"}
+	heartbeat, ttl, err = discoveryOpts(clusterOpts)
+	if err == nil {
+		t.Fatalf("negative discovery.ttl must fail")
+	}
+
 	clusterOpts = map[string]string{"discovery.heartbeat": "invalid"}
 	heartbeat, ttl, err = discoveryOpts(clusterOpts)
 	if err == nil {