crypto: reduce retry delay when retrying KES requests (#10394)

This commit reduces the retry delay when retrying a request
to a KES server by:
 - reducing the max. jitter delay from 3s to 1.5s
 - skipping the random delay when there are more KES endpoints
   available.

If there are more KES endpoints we can directly retry to the request
by sending it to the next endpoint - as pointed out by @krishnasrinivas
master
Andreas Auernhammer 4 years ago committed by GitHub
parent 9a1615768d
commit 9a703befe6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      cmd/crypto/kes.go
  2. 4
      cmd/crypto/retry.go

@ -414,19 +414,22 @@ func (c *kesClient) postRetry(path string, body io.ReadSeeker, limit int64) (io.
return response, nil return response, nil
} }
// If the error is not temp. / retryable => fail the request immediately.
if !xnet.IsNetworkOrHostDown(err) && if !xnet.IsNetworkOrHostDown(err) &&
!errors.Is(err, io.EOF) && !errors.Is(err, io.EOF) &&
!errors.Is(err, io.ErrUnexpectedEOF) && !errors.Is(err, io.ErrUnexpectedEOF) &&
!errors.Is(err, context.DeadlineExceeded) { !errors.Is(err, context.DeadlineExceeded) {
return nil, err return nil, err
} }
if remain := retryMax - i; remain <= 0 { // Fail if we exceeded our retry limit.
// retriable network errors.
remain := retryMax - i
if remain <= 0 {
return response, err return response, err
} }
// If there are more KES instances then skip waiting and
// try the next endpoint directly.
if i < len(c.endpoints) {
continue
}
<-time.After(LinearJitterBackoff(retryWaitMin, retryWaitMax, i)) <-time.After(LinearJitterBackoff(retryWaitMin, retryWaitMax, i))
} }
} }

@ -21,8 +21,8 @@ import (
// default retry configuration // default retry configuration
const ( const (
retryWaitMin = 500 * time.Millisecond // minimum retry limit. retryWaitMin = 100 * time.Millisecond // minimum retry limit.
retryWaitMax = 3 * time.Second // 3 secs worth of max retry. retryWaitMax = 1500 * time.Millisecond // 1.5 secs worth of max retry.
) )
// LinearJitterBackoff provides the time.Duration for a caller to // LinearJitterBackoff provides the time.Duration for a caller to

Loading…
Cancel
Save