consul: lower default query time and add small stagger

This commit is contained in:
Armon Dadgar 2015-05-14 17:59:43 -07:00
parent e5c8fce96a
commit 2c9592c5ee
2 changed files with 16 additions and 4 deletions

View File

@ -30,6 +30,15 @@ const (
// maxQueryTime is used to bound the limit of a blocking query // maxQueryTime is used to bound the limit of a blocking query
maxQueryTime = 600 * time.Second maxQueryTime = 600 * time.Second
// defaultQueryTime is the amount of time we block waiting for a change
// if no time is specified. Previously we would wait the maxQueryTime.
defaultQueryTime = 300 * time.Second
// jitterFraction is a the limit to the amount of jitter we apply
// to a user specified MaxQueryTime. We divide the specified time by
// the fraction. So 16 == 6.25% limit of jitter
jitterFraction = 16
// Warn if the Raft command is larger than this. // Warn if the Raft command is larger than this.
// If it's over 1MB something is probably being abusive. // If it's over 1MB something is probably being abusive.
raftWarnSize = 1024 * 1024 raftWarnSize = 1024 * 1024
@ -332,9 +341,12 @@ func (s *Server) blockingRPCOpt(opts *blockingRPCOptions) error {
if opts.queryOpts.MaxQueryTime > maxQueryTime { if opts.queryOpts.MaxQueryTime > maxQueryTime {
opts.queryOpts.MaxQueryTime = maxQueryTime opts.queryOpts.MaxQueryTime = maxQueryTime
} else if opts.queryOpts.MaxQueryTime <= 0 { } else if opts.queryOpts.MaxQueryTime <= 0 {
opts.queryOpts.MaxQueryTime = maxQueryTime opts.queryOpts.MaxQueryTime = defaultQueryTime
} }
// Apply a small amount of jitter to the request
opts.queryOpts.MaxQueryTime += randomStagger(opts.queryOpts.MaxQueryTime / jitterFraction)
// Setup a query timeout // Setup a query timeout
timeout = time.NewTimer(opts.queryOpts.MaxQueryTime) timeout = time.NewTimer(opts.queryOpts.MaxQueryTime)

View File

@ -39,9 +39,9 @@ query string parameter to the value of `X-Consul-Index`, indicating that the cli
to wait for any changes subsequent to that index. to wait for any changes subsequent to that index.
In addition to `index`, endpoints that support blocking will also honor a `wait` In addition to `index`, endpoints that support blocking will also honor a `wait`
parameter specifying a maximum duration for the blocking request. If not set, it will parameter specifying a maximum duration for the blocking request. This is limited to
default to 10 minutes. This value can be specified in the form of "10s" or "5m" (i.e., 10 minutes. If not set, the wait time defaults to 5 minutes. This value can be specified
10 seconds or 5 minutes, respectively). in the form of "10s" or "5m" (i.e., 10 seconds or 5 minutes, respectively).
A critical note is that the return of a blocking request is **no guarantee** of a change. It A critical note is that the return of a blocking request is **no guarantee** of a change. It
is possible that the timeout was reached or that there was an idempotent write that does is possible that the timeout was reached or that there was an idempotent write that does