Adds a max raft multiplier and tweaks documentation.

This commit is contained in:
James Phillips 2016-08-25 15:36:05 -07:00
parent 5df36fbd82
commit 2f4c237cff
No known key found for this signature in database
GPG Key ID: 77183E682AC5FC11
4 changed files with 31 additions and 14 deletions

View File

@ -942,6 +942,11 @@ func DecodeConfig(r io.Reader) (*Config, error) {
result.AdvertiseAddrs.RPC = addr
}
// Enforce the max Raft multiplier.
if result.Performance.RaftMultiplier > consul.MaxRaftMultiplier {
return nil, fmt.Errorf("Performance.RaftMultiplier must be <= %d", consul.MaxRaftMultiplier)
}
return &result, nil
}

View File

@ -966,6 +966,12 @@ func TestDecodeConfig_Performance(t *testing.T) {
if config.Performance.RaftMultiplier != 3 {
t.Fatalf("bad: multiplier isn't set: %#v", config)
}
input = `{"performance": { "raft_multiplier": 11 }}`
config, err = DecodeConfig(bytes.NewReader([]byte(input)))
if err == nil || !strings.Contains(err.Error(), "Performance.RaftMultiplier must be <=") {
t.Fatalf("bad: %v", err)
}
}
func TestDecodeConfig_Services(t *testing.T) {

View File

@ -18,9 +18,14 @@ const (
DefaultLANSerfPort = 8301
DefaultWANSerfPort = 8302
// See docs/guides/performance.html for information on how this value
// was obtained.
// DefaultRaftMultiplier is used as a baseline Raft configuration that
// will be reliable on a very basic server. See docs/guides/performance.html
// for information on how this value was obtained.
DefaultRaftMultiplier uint = 5
// MaxRaftMultiplier is a fairly arbitrary upper bound that limits the
// amount of performance detuning that's possible.
MaxRaftMultiplier uint = 10
)
var (

View File

@ -581,18 +581,19 @@ Consul will not enable TLS for the HTTP API unless the `https` port has been ass
Consul. See the [Server Performance](/docs/guides/performance.html) guide for more details. The
following parameters are available:
* <a name="raft_multiplier"></a><a href="#raft_multiplier">`raft_multiplier`</a> - An integer
multiplier used by Consul servers to scale key Raft timing parameters. Tuning this affects
the time it takes Consul to detect leader failures and to perform leader elections, at the
expense of requiring more network and CPU resources for better performance.<br><br>A value
of 0, the default, means that Consul will use a lower-performance timing that's suitable for
[minimal Consul servers](/docs/guides/performance.html#minumum), currently equivalent to
setting this to a value of 5 (this default may be changed in future versions of Consul,
depending if the target minimum server profile changes). Above 0, higher values imply lower
levels of performance. Setting this to a value of 1 will configure Raft to its
highest-performance mode, equivalent to the default timing of Consul prior to 0.7, and is
recommended for [production Consul servers](/docs/guides/performance.html#production). See
the note on [last contact](/docs/guides/performance.html#last-contact) timing for more
details on tuning this parameter.
multiplier used by Consul servers to scale key Raft timing parameters. Omitting this value
or setting it to 0 uses default timing described below. Lower values are used to tighten
timing and increase sensitivity while higher values relax timings and reduce sensitivity.
Tuning this affects the time it takes Consul to detect leader failures and to perform
leader elections, at the expense of requiring more network and CPU resources for better
performance.<br><br>By default, Consul will use a lower-performance timing that's suitable
for [minimal Consul servers](/docs/guides/performance.html#minumum), currently equivalent
to setting this to a value of 5 (this default may be changed in future versions of Consul,
depending if the target minimum server profile changes). Setting this to a value of 1 will
configure Raft to its highest-performance mode, equivalent to the default timing of Consul
prior to 0.7, and is recommended for [production Consul servers](/docs/guides/performance.html#production).
See the note on [last contact](/docs/guides/performance.html#last-contact) timing for more
details on tuning this parameter. The maximum allowed value is 10.
* <a name="ports"></a><a href="#ports">`ports`</a> This is a nested object that allows setting
the bind ports for the following keys: