Also make snapshot interval configurable

This commit is contained in:
Preetha Appan 2018-05-10 17:06:47 -05:00
parent ad09865562
commit d721da7b67
No known key found for this signature in database
GPG Key ID: 9F7C19990A50EAFC
7 changed files with 23 additions and 3 deletions

View File

@ -766,6 +766,9 @@ func (a *Agent) consulConfig() (*consul.Config, error) {
if a.config.RaftSnapshotThreshold != 0 { if a.config.RaftSnapshotThreshold != 0 {
base.RaftConfig.SnapshotThreshold = uint64(a.config.RaftSnapshotThreshold) base.RaftConfig.SnapshotThreshold = uint64(a.config.RaftSnapshotThreshold)
} }
if a.config.RaftSnapshotInterval != 0 {
base.RaftConfig.SnapshotInterval = a.config.RaftSnapshotInterval
}
if a.config.ACLMasterToken != "" { if a.config.ACLMasterToken != "" {
base.ACLMasterToken = a.config.ACLMasterToken base.ACLMasterToken = a.config.ACLMasterToken
} }

View File

@ -674,6 +674,7 @@ func (b *Builder) Build() (rt RuntimeConfig, err error) {
RPCRateLimit: rate.Limit(b.float64Val(c.Limits.RPCRate)), RPCRateLimit: rate.Limit(b.float64Val(c.Limits.RPCRate)),
RaftProtocol: b.intVal(c.RaftProtocol), RaftProtocol: b.intVal(c.RaftProtocol),
RaftSnapshotThreshold: b.intVal(c.RaftSnapshotThreshold), RaftSnapshotThreshold: b.intVal(c.RaftSnapshotThreshold),
RaftSnapshotInterval: b.durationVal("raft_snapshot_interval", c.RaftSnapshotInterval),
ReconnectTimeoutLAN: b.durationVal("reconnect_timeout", c.ReconnectTimeoutLAN), ReconnectTimeoutLAN: b.durationVal("reconnect_timeout", c.ReconnectTimeoutLAN),
ReconnectTimeoutWAN: b.durationVal("reconnect_timeout_wan", c.ReconnectTimeoutWAN), ReconnectTimeoutWAN: b.durationVal("reconnect_timeout_wan", c.ReconnectTimeoutWAN),
RejoinAfterLeave: b.boolVal(c.RejoinAfterLeave), RejoinAfterLeave: b.boolVal(c.RejoinAfterLeave),

View File

@ -195,6 +195,7 @@ type Config struct {
RPCProtocol *int `json:"protocol,omitempty" hcl:"protocol" mapstructure:"protocol"` RPCProtocol *int `json:"protocol,omitempty" hcl:"protocol" mapstructure:"protocol"`
RaftProtocol *int `json:"raft_protocol,omitempty" hcl:"raft_protocol" mapstructure:"raft_protocol"` RaftProtocol *int `json:"raft_protocol,omitempty" hcl:"raft_protocol" mapstructure:"raft_protocol"`
RaftSnapshotThreshold *int `json:"raft_snapshot_threshold,omitempty" hcl:"raft_snapshot_threshold" mapstructure:"raft_snapshot_threshold"` RaftSnapshotThreshold *int `json:"raft_snapshot_threshold,omitempty" hcl:"raft_snapshot_threshold" mapstructure:"raft_snapshot_threshold"`
RaftSnapshotInterval *string `json:"raft_snapshot_interval,omitempty" hcl:"raft_snapshot_interval" mapstructure:"raft_snapshot_interval"`
ReconnectTimeoutLAN *string `json:"reconnect_timeout,omitempty" hcl:"reconnect_timeout" mapstructure:"reconnect_timeout"` ReconnectTimeoutLAN *string `json:"reconnect_timeout,omitempty" hcl:"reconnect_timeout" mapstructure:"reconnect_timeout"`
ReconnectTimeoutWAN *string `json:"reconnect_timeout_wan,omitempty" hcl:"reconnect_timeout_wan" mapstructure:"reconnect_timeout_wan"` ReconnectTimeoutWAN *string `json:"reconnect_timeout_wan,omitempty" hcl:"reconnect_timeout_wan" mapstructure:"reconnect_timeout_wan"`
RejoinAfterLeave *bool `json:"rejoin_after_leave,omitempty" hcl:"rejoin_after_leave" mapstructure:"rejoin_after_leave"` RejoinAfterLeave *bool `json:"rejoin_after_leave,omitempty" hcl:"rejoin_after_leave" mapstructure:"rejoin_after_leave"`

View File

@ -905,6 +905,11 @@ type RuntimeConfig struct {
// hcl: raft_snapshot_threshold = int // hcl: raft_snapshot_threshold = int
RaftSnapshotThreshold int RaftSnapshotThreshold int
// RaftSnapshotInterval sets the interval to use when checking whether to create
// a new snapshot. Defaults to 5 seconds.
// hcl: raft_snapshot_threshold = int
RaftSnapshotInterval time.Duration
// ReconnectTimeoutLAN specifies the amount of time to wait to reconnect with // ReconnectTimeoutLAN specifies the amount of time to wait to reconnect with
// another agent before deciding it's permanently gone. This can be used to // another agent before deciding it's permanently gone. This can be used to
// control the time it takes to reap failed nodes from the cluster. // control the time it takes to reap failed nodes from the cluster.

View File

@ -2422,6 +2422,7 @@ func TestFullConfig(t *testing.T) {
"protocol": 30793, "protocol": 30793,
"raft_protocol": 19016, "raft_protocol": 19016,
"raft_snapshot_threshold": 16384, "raft_snapshot_threshold": 16384,
"raft_snapshot_interval": "30s",
"reconnect_timeout": "23739s", "reconnect_timeout": "23739s",
"reconnect_timeout_wan": "26694s", "reconnect_timeout_wan": "26694s",
"recursors": [ "63.38.39.58", "92.49.18.18" ], "recursors": [ "63.38.39.58", "92.49.18.18" ],
@ -2854,6 +2855,7 @@ func TestFullConfig(t *testing.T) {
protocol = 30793 protocol = 30793
raft_protocol = 19016 raft_protocol = 19016
raft_snapshot_threshold = 16384 raft_snapshot_threshold = 16384
raft_snapshot_interval = "30s"
reconnect_timeout = "23739s" reconnect_timeout = "23739s"
reconnect_timeout_wan = "26694s" reconnect_timeout_wan = "26694s"
recursors = [ "63.38.39.58", "92.49.18.18" ] recursors = [ "63.38.39.58", "92.49.18.18" ]
@ -3412,6 +3414,7 @@ func TestFullConfig(t *testing.T) {
RPCMaxBurst: 44848, RPCMaxBurst: 44848,
RaftProtocol: 19016, RaftProtocol: 19016,
RaftSnapshotThreshold: 16384, RaftSnapshotThreshold: 16384,
RaftSnapshotInterval: 30 * time.Second,
ReconnectTimeoutLAN: 23739 * time.Second, ReconnectTimeoutLAN: 23739 * time.Second,
ReconnectTimeoutWAN: 26694 * time.Second, ReconnectTimeoutWAN: 26694 * time.Second,
RejoinAfterLeave: true, RejoinAfterLeave: true,
@ -4092,6 +4095,7 @@ func TestSanitize(t *testing.T) {
"RPCProtocol": 0, "RPCProtocol": 0,
"RPCRateLimit": 0, "RPCRateLimit": 0,
"RaftProtocol": 0, "RaftProtocol": 0,
"RaftSnapshotInterval": "0s",
"RaftSnapshotThreshold": 0, "RaftSnapshotThreshold": 0,
"ReconnectTimeoutLAN": "0s", "ReconnectTimeoutLAN": "0s",
"ReconnectTimeoutWAN": "0s", "ReconnectTimeoutWAN": "0s",

View File

@ -448,7 +448,7 @@ func DefaultConfig() *Config {
// Disable shutdown on removal // Disable shutdown on removal
conf.RaftConfig.ShutdownOnRemove = false conf.RaftConfig.ShutdownOnRemove = false
// Check every 5 seconds to see if there are enough new entries for a snapshot // Check every 5 seconds to see if there are enough new entries for a snapshot, can be overridden
conf.RaftConfig.SnapshotInterval = 5 * time.Second conf.RaftConfig.SnapshotInterval = 5 * time.Second
// Snapshots are created every 8192 entries by default, can be overridden // Snapshots are created every 8192 entries by default, can be overridden

View File

@ -360,7 +360,10 @@ will exit with an error at startup.
for more details. for more details.
* <a name="_raft_snapshot_threshold"></a><a href="#_raft_snapshot_threshold">`-raft-snapshot-threshold`</a> - This * <a name="_raft_snapshot_threshold"></a><a href="#_raft_snapshot_threshold">`-raft-snapshot-threshold`</a> - This
control the minimum number of raft commit entries between snapshots that are saved to disk. controls the minimum number of raft commit entries between snapshots that are saved to disk.
* <a name="_raft_snapshot_interval"></a><a href="#_raft_snapshot_interval">`-raft-snapshot-interval`</a> - This
controls how often servers check if they need to save a snapshot to disk.
* <a name="_recursor"></a><a href="#_recursor">`-recursor`</a> - Specifies the address of an upstream DNS * <a name="_recursor"></a><a href="#_recursor">`-recursor`</a> - Specifies the address of an upstream DNS
server. This option may be provided multiple times, and is functionally server. This option may be provided multiple times, and is functionally
@ -939,7 +942,10 @@ Consul will not enable TLS for the HTTP API unless the `https` port has been ass
[`-raft-protocol` command-line flag](#_raft_protocol). [`-raft-protocol` command-line flag](#_raft_protocol).
* <a name="raft_snapshot_threshold"></a><a href="#raft_snapshot_threshold">`raft_snapshot_threshold`</a> Equivalent to the * <a name="raft_snapshot_threshold"></a><a href="#raft_snapshot_threshold">`raft_snapshot_threshold`</a> Equivalent to the
[`-raft-snapshot-threshold` command-line flag](#_raft_snapshot_threshold). [`-raft-snapshot-threshold` command-line flag](#_raft_snapshot_threshold).
* <a name="raft_snapshot_interval"></a><a href="#raft_snapshot_interval">`raft_snapshot_interval`</a> Equivalent to the
[`-raft-snapshot-interval` command-line flag](#_raft_snapshot_interval).
* <a name="reap"></a><a href="#reap">`reap`</a> This controls Consul's automatic reaping of child processes, * <a name="reap"></a><a href="#reap">`reap`</a> This controls Consul's automatic reaping of child processes,
which is useful if Consul is running as PID 1 in a Docker container. If this isn't specified, then Consul will which is useful if Consul is running as PID 1 in a Docker container. If this isn't specified, then Consul will