RetryInterval should be a time.Duration

This commit is contained in:
Chelsea Holland Komlo
2018-05-25 17:12:13 -04:00
committed by Alex Dadgar
parent 02a64d0760
commit fa1d2de5df
6 changed files with 32 additions and 90 deletions

View File

@@ -267,6 +267,14 @@ func (c *Command) readConfig() *Config {
}
}
// COMPAT: Remove in 0.10. Parse the RetryInterval
dur, err := time.ParseDuration(config.Server.RetryInterval)
if err != nil {
c.Ui.Error(fmt.Sprintf("Error parsing retry interval: %s", err))
return nil
}
config.Server.retryInterval = dur
// Check that the server is running in at least one mode.
if !(config.Server.Enabled || config.Client.Enabled) {
c.Ui.Error("Must specify either server, client or dev mode for the agent.")
@@ -560,7 +568,7 @@ func (c *Command) Run(args []string) int {
RetryJoin: config.Server.RetryJoin,
StartJoin: config.Server.StartJoin,
RetryMaxAttempts: config.Server.RetryMaxAttempts,
RetryInterval: config.Server.RetryInterval,
RetryInterval: config.Server.retryInterval,
}
go joiner.RetryJoin(serverJoinInfo)
}

View File

@@ -377,8 +377,7 @@ type ServerJoin struct {
// RetryInterval specifies the amount of time to wait in between join
// attempts on agent start. The minimum allowed value is 1 second and
// the default is 30s.
RetryInterval string `mapstructure:"retry_interval"`
retryInterval time.Duration `mapstructure:"-"`
RetryInterval time.Duration `mapstructure:"retry_interval"`
}
func (s *ServerJoin) Merge(b *ServerJoin) {
@@ -391,7 +390,7 @@ func (s *ServerJoin) Merge(b *ServerJoin) {
if b.RetryMaxAttempts != 0 {
s.RetryMaxAttempts = b.RetryMaxAttempts
}
if b.RetryInterval != "" {
if b.RetryInterval != 0 {
s.RetryInterval = b.RetryInterval
}
}

View File

@@ -49,7 +49,7 @@ func TestConfig_Parse(t *testing.T) {
NodeClass: "linux-medium-64bit",
ServerJoin: &ServerJoin{
RetryJoin: []string{"1.1.1.1", "2.2.2.2"},
RetryInterval: "15s",
RetryInterval: time.Duration(15) * time.Second,
RetryMaxAttempts: 3,
},
Meta: map[string]string{
@@ -114,7 +114,7 @@ func TestConfig_Parse(t *testing.T) {
ServerJoin: &ServerJoin{
RetryJoin: []string{"1.1.1.1", "2.2.2.2"},
StartJoin: []string{"1.1.1.1", "2.2.2.2"},
RetryInterval: "15s",
RetryInterval: time.Duration(15) * time.Second,
RetryMaxAttempts: 3,
},
},

View File

@@ -916,13 +916,13 @@ func TestMergeServerJoin(t *testing.T) {
retryJoin := []string{"127.0.0.1", "127.0.0.2"}
startJoin := []string{"127.0.0.1", "127.0.0.2"}
retryMaxAttempts := 1
retryInterval := "1"
retryInterval := time.Duration(0)
a := &ServerJoin{
RetryJoin: retryJoin,
StartJoin: startJoin,
RetryMaxAttempts: retryMaxAttempts,
RetryInterval: retryInterval,
RetryInterval: time.Duration(retryInterval),
}
b := &ServerJoin{}
@@ -936,14 +936,14 @@ func TestMergeServerJoin(t *testing.T) {
retryJoin := []string{"127.0.0.1", "127.0.0.2"}
startJoin := []string{"127.0.0.1", "127.0.0.2"}
retryMaxAttempts := 1
retryInterval := "1"
retryInterval := time.Duration(0)
a := &ServerJoin{}
b := &ServerJoin{
RetryJoin: retryJoin,
StartJoin: startJoin,
RetryMaxAttempts: retryMaxAttempts,
RetryInterval: retryInterval,
RetryInterval: time.Duration(retryInterval),
}
a.Merge(b)
@@ -956,7 +956,7 @@ func TestMergeServerJoin(t *testing.T) {
retryJoin := []string{"127.0.0.1", "127.0.0.2"}
startJoin := []string{"127.0.0.1", "127.0.0.2"}
retryMaxAttempts := 1
retryInterval := "1"
retryInterval := time.Duration(0)
a := &ServerJoin{
RetryJoin: retryJoin,
@@ -964,7 +964,7 @@ func TestMergeServerJoin(t *testing.T) {
}
b := &ServerJoin{
RetryMaxAttempts: retryMaxAttempts,
RetryInterval: retryInterval,
RetryInterval: time.Duration(retryInterval),
}
a.Merge(b)

View File

@@ -82,33 +82,6 @@ func (r *retryJoiner) Validate(config *Config) error {
}
}
if config.Server != nil {
dur, err := time.ParseDuration(config.Server.RetryInterval)
if err != nil {
return fmt.Errorf("Error parsing server retry interval: %s", err)
} else {
config.Server.retryInterval = dur
}
if config.Server.ServerJoin != nil {
dur, err := time.ParseDuration(config.Server.RetryInterval)
if err != nil {
return fmt.Errorf("Error parsing server retry interval: %s", err)
} else {
config.Server.ServerJoin.retryInterval = dur
}
}
}
if config.Client != nil && config.Client.ServerJoin != nil {
dur, err := time.ParseDuration(config.Client.ServerJoin.RetryInterval)
if err != nil {
return fmt.Errorf("Error parsing retry interval: %s", err)
} else {
config.Client.ServerJoin.retryInterval = dur
}
}
return nil
}
@@ -170,6 +143,6 @@ func (r *retryJoiner) RetryJoin(serverJoin *ServerJoin) {
r.logger.Printf("[WARN] agent: Join failed: %v, retrying in %v", err,
serverJoin.RetryInterval)
}
time.Sleep(serverJoin.retryInterval)
time.Sleep(serverJoin.RetryInterval)
}
}

View File

@@ -6,6 +6,7 @@ import (
"log"
"os"
"testing"
"time"
"github.com/hashicorp/nomad/testutil"
"github.com/hashicorp/nomad/version"
@@ -219,7 +220,7 @@ func TestRetryJoin_Validate(t *testing.T) {
ServerJoin: &ServerJoin{
RetryJoin: []string{"127.0.0.1"},
RetryMaxAttempts: 0,
RetryInterval: "0",
RetryInterval: 0,
StartJoin: []string{},
},
RetryJoin: []string{"127.0.0.1"},
@@ -237,7 +238,7 @@ func TestRetryJoin_Validate(t *testing.T) {
ServerJoin: &ServerJoin{
RetryJoin: []string{"127.0.0.1"},
RetryMaxAttempts: 0,
RetryInterval: "0",
RetryInterval: 0,
StartJoin: []string{},
},
StartJoin: []string{"127.0.0.1"},
@@ -255,7 +256,7 @@ func TestRetryJoin_Validate(t *testing.T) {
ServerJoin: &ServerJoin{
RetryJoin: []string{"127.0.0.1"},
RetryMaxAttempts: 0,
RetryInterval: "0",
RetryInterval: 0,
StartJoin: []string{},
},
StartJoin: []string{},
@@ -273,12 +274,13 @@ func TestRetryJoin_Validate(t *testing.T) {
ServerJoin: &ServerJoin{
RetryJoin: []string{"127.0.0.1"},
RetryMaxAttempts: 0,
RetryInterval: "0",
RetryInterval: time.Duration(1),
StartJoin: []string{},
},
StartJoin: []string{},
RetryMaxAttempts: 0,
RetryInterval: "1",
RetryInterval: "3s",
retryInterval: time.Duration(3),
RetryJoin: []string{},
},
},
@@ -291,7 +293,7 @@ func TestRetryJoin_Validate(t *testing.T) {
ServerJoin: &ServerJoin{
RetryJoin: []string{"127.0.0.1"},
RetryMaxAttempts: 0,
RetryInterval: "0",
RetryInterval: 0,
StartJoin: []string{"127.0.0.1"},
},
},
@@ -305,7 +307,7 @@ func TestRetryJoin_Validate(t *testing.T) {
ServerJoin: &ServerJoin{
RetryJoin: []string{},
RetryMaxAttempts: 0,
RetryInterval: "0",
RetryInterval: 0,
StartJoin: []string{"127.0.0.1"},
},
},
@@ -319,7 +321,7 @@ func TestRetryJoin_Validate(t *testing.T) {
ServerJoin: &ServerJoin{
RetryJoin: []string{"127.0.0.1"},
RetryMaxAttempts: 0,
RetryInterval: "0",
RetryInterval: 0,
},
},
},
@@ -332,7 +334,7 @@ func TestRetryJoin_Validate(t *testing.T) {
ServerJoin: &ServerJoin{
RetryJoin: []string{"127.0.0.1"},
RetryMaxAttempts: 0,
RetryInterval: "0",
RetryInterval: 0,
StartJoin: []string{},
},
StartJoin: []string{},
@@ -349,53 +351,13 @@ func TestRetryJoin_Validate(t *testing.T) {
Server: &ServerConfig{
StartJoin: []string{"127.0.0.1"},
RetryMaxAttempts: 1,
RetryInterval: "3s",
RetryInterval: "0",
RetryJoin: []string{},
},
},
isValid: true,
reason: "server deprecated retry_join configuration should be valid",
},
{
config: &Config{
Server: &ServerConfig{
StartJoin: []string{"127.0.0.1"},
RetryMaxAttempts: 1,
RetryInterval: "invalid!TimeInterval",
RetryJoin: []string{},
},
},
isValid: false,
reason: "invalid time interval",
},
{
config: &Config{
Server: &ServerConfig{
ServerJoin: &ServerJoin{
StartJoin: []string{"127.0.0.1"},
RetryMaxAttempts: 1,
RetryInterval: "invalid!TimeInterval",
RetryJoin: []string{},
},
},
},
isValid: false,
reason: "invalid time interval",
},
{
config: &Config{
Client: &ClientConfig{
ServerJoin: &ServerJoin{
StartJoin: []string{"127.0.0.1"},
RetryMaxAttempts: 1,
RetryInterval: "invalid!TimeInterval",
RetryJoin: []string{},
},
},
},
isValid: false,
reason: "invalid time interval",
},
}
joiner := retryJoiner{}