mirror of https://github.com/status-im/consul.git
Make raft snapshot commit threshold configurable
This commit is contained in:
parent
660c3bf455
commit
66f31cd25a
|
@ -763,6 +763,9 @@ func (a *Agent) consulConfig() (*consul.Config, error) {
|
||||||
if a.config.RaftProtocol != 0 {
|
if a.config.RaftProtocol != 0 {
|
||||||
base.RaftConfig.ProtocolVersion = raft.ProtocolVersion(a.config.RaftProtocol)
|
base.RaftConfig.ProtocolVersion = raft.ProtocolVersion(a.config.RaftProtocol)
|
||||||
}
|
}
|
||||||
|
if a.config.RaftSnapshotThreshold != 0 {
|
||||||
|
base.RaftConfig.SnapshotThreshold = uint64(a.config.RaftSnapshotThreshold)
|
||||||
|
}
|
||||||
if a.config.ACLMasterToken != "" {
|
if a.config.ACLMasterToken != "" {
|
||||||
base.ACLMasterToken = a.config.ACLMasterToken
|
base.ACLMasterToken = a.config.ACLMasterToken
|
||||||
}
|
}
|
||||||
|
|
|
@ -673,6 +673,7 @@ func (b *Builder) Build() (rt RuntimeConfig, err error) {
|
||||||
RPCProtocol: b.intVal(c.RPCProtocol),
|
RPCProtocol: b.intVal(c.RPCProtocol),
|
||||||
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),
|
||||||
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),
|
||||||
|
|
|
@ -194,6 +194,7 @@ type Config struct {
|
||||||
Ports Ports `json:"ports,omitempty" hcl:"ports" mapstructure:"ports"`
|
Ports Ports `json:"ports,omitempty" hcl:"ports" mapstructure:"ports"`
|
||||||
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"`
|
||||||
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"`
|
||||||
|
@ -264,6 +265,7 @@ type Consul struct {
|
||||||
ElectionTimeout *string `json:"election_timeout,omitempty" hcl:"election_timeout" mapstructure:"election_timeout"`
|
ElectionTimeout *string `json:"election_timeout,omitempty" hcl:"election_timeout" mapstructure:"election_timeout"`
|
||||||
HeartbeatTimeout *string `json:"heartbeat_timeout,omitempty" hcl:"heartbeat_timeout" mapstructure:"heartbeat_timeout"`
|
HeartbeatTimeout *string `json:"heartbeat_timeout,omitempty" hcl:"heartbeat_timeout" mapstructure:"heartbeat_timeout"`
|
||||||
LeaderLeaseTimeout *string `json:"leader_lease_timeout,omitempty" hcl:"leader_lease_timeout" mapstructure:"leader_lease_timeout"`
|
LeaderLeaseTimeout *string `json:"leader_lease_timeout,omitempty" hcl:"leader_lease_timeout" mapstructure:"leader_lease_timeout"`
|
||||||
|
SnapshotThreshold *int `json:"snapshot_threshold,omitempty" hcl:"snapshot_threshold" mapstructure:"snapshot_threshold"`
|
||||||
} `json:"raft,omitempty" hcl:"raft" mapstructure:"raft"`
|
} `json:"raft,omitempty" hcl:"raft" mapstructure:"raft"`
|
||||||
|
|
||||||
SerfLAN struct {
|
SerfLAN struct {
|
||||||
|
|
|
@ -899,6 +899,12 @@ type RuntimeConfig struct {
|
||||||
// hcl: raft_protocol = int
|
// hcl: raft_protocol = int
|
||||||
RaftProtocol int
|
RaftProtocol int
|
||||||
|
|
||||||
|
// RaftSnapshotThreshold sets the minimum threshold of raft commits after which
|
||||||
|
// a snapshot is created. Defaults to 8192
|
||||||
|
//
|
||||||
|
// hcl: raft_snapshot_threshold = int
|
||||||
|
RaftSnapshotThreshold int
|
||||||
|
|
||||||
// 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.
|
||||||
|
|
|
@ -2421,6 +2421,7 @@ func TestFullConfig(t *testing.T) {
|
||||||
},
|
},
|
||||||
"protocol": 30793,
|
"protocol": 30793,
|
||||||
"raft_protocol": 19016,
|
"raft_protocol": 19016,
|
||||||
|
"raft_snapshot_threshold": 16384,
|
||||||
"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" ],
|
||||||
|
@ -2852,6 +2853,7 @@ func TestFullConfig(t *testing.T) {
|
||||||
}
|
}
|
||||||
protocol = 30793
|
protocol = 30793
|
||||||
raft_protocol = 19016
|
raft_protocol = 19016
|
||||||
|
raft_snapshot_threshold = 16384
|
||||||
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" ]
|
||||||
|
@ -3409,6 +3411,7 @@ func TestFullConfig(t *testing.T) {
|
||||||
RPCRateLimit: 12029.43,
|
RPCRateLimit: 12029.43,
|
||||||
RPCMaxBurst: 44848,
|
RPCMaxBurst: 44848,
|
||||||
RaftProtocol: 19016,
|
RaftProtocol: 19016,
|
||||||
|
RaftSnapshotThreshold: 16384,
|
||||||
ReconnectTimeoutLAN: 23739 * time.Second,
|
ReconnectTimeoutLAN: 23739 * time.Second,
|
||||||
ReconnectTimeoutWAN: 26694 * time.Second,
|
ReconnectTimeoutWAN: 26694 * time.Second,
|
||||||
RejoinAfterLeave: true,
|
RejoinAfterLeave: true,
|
||||||
|
@ -4089,6 +4092,7 @@ func TestSanitize(t *testing.T) {
|
||||||
"RPCProtocol": 0,
|
"RPCProtocol": 0,
|
||||||
"RPCRateLimit": 0,
|
"RPCRateLimit": 0,
|
||||||
"RaftProtocol": 0,
|
"RaftProtocol": 0,
|
||||||
|
"RaftSnapshotThreshold": 0,
|
||||||
"ReconnectTimeoutLAN": "0s",
|
"ReconnectTimeoutLAN": "0s",
|
||||||
"ReconnectTimeoutWAN": "0s",
|
"ReconnectTimeoutWAN": "0s",
|
||||||
"RejoinAfterLeave": false,
|
"RejoinAfterLeave": false,
|
||||||
|
|
|
@ -451,6 +451,9 @@ func DefaultConfig() *Config {
|
||||||
// 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
|
||||||
conf.RaftConfig.SnapshotInterval = 5 * time.Second
|
conf.RaftConfig.SnapshotInterval = 5 * time.Second
|
||||||
|
|
||||||
|
// Snapshots are created every 8192 entries by default, can be overridden
|
||||||
|
conf.RaftConfig.SnapshotThreshold = 8192
|
||||||
|
|
||||||
return conf
|
return conf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -359,6 +359,9 @@ will exit with an error at startup.
|
||||||
[Raft Protocol Version Compatibility](/docs/upgrade-specific.html#raft-protocol-version-compatibility)
|
[Raft Protocol Version Compatibility](/docs/upgrade-specific.html#raft-protocol-version-compatibility)
|
||||||
for more details.
|
for more details.
|
||||||
|
|
||||||
|
* <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.
|
||||||
|
|
||||||
* <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
|
||||||
equivalent to the [`recursors` configuration option](#recursors).
|
equivalent to the [`recursors` configuration option](#recursors).
|
||||||
|
@ -935,6 +938,9 @@ Consul will not enable TLS for the HTTP API unless the `https` port has been ass
|
||||||
* <a name="raft_protocol"></a><a href="#raft_protocol">`raft_protocol`</a> Equivalent to the
|
* <a name="raft_protocol"></a><a href="#raft_protocol">`raft_protocol`</a> Equivalent to the
|
||||||
[`-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
|
||||||
|
[`-raft-snapshot-threshold` command-line flag](#_raft_snapshot_threshold).
|
||||||
|
|
||||||
* <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
|
||||||
automatically reap child processes if it detects it is running as PID 1. If this is set to true or false, then
|
automatically reap child processes if it detects it is running as PID 1. If this is set to true or false, then
|
||||||
|
|
Loading…
Reference in New Issue