diff --git a/daemon/discovery.go b/daemon/discovery.go index ca3020eb01..ee4ea875b7 100644 --- a/daemon/discovery.go +++ b/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 { diff --git a/daemon/discovery_test.go b/daemon/discovery_test.go index 65511b90f6..336973c516 100644 --- a/daemon/discovery_test.go +++ b/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 {