backoff.go raw

   1  /*
   2   *
   3   * Copyright 2019 gRPC authors.
   4   *
   5   * Licensed under the Apache License, Version 2.0 (the "License");
   6   * you may not use this file except in compliance with the License.
   7   * You may obtain a copy of the License at
   8   *
   9   *     http://www.apache.org/licenses/LICENSE-2.0
  10   *
  11   * Unless required by applicable law or agreed to in writing, software
  12   * distributed under the License is distributed on an "AS IS" BASIS,
  13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14   * See the License for the specific language governing permissions and
  15   * limitations under the License.
  16   *
  17   */
  18  
  19  // Package backoff provides configuration options for backoff.
  20  //
  21  // More details can be found at:
  22  // https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md.
  23  //
  24  // All APIs in this package are experimental.
  25  package backoff
  26  
  27  import "time"
  28  
  29  // Config defines the configuration options for backoff.
  30  type Config struct {
  31  	// BaseDelay is the amount of time to backoff after the first failure.
  32  	BaseDelay time.Duration
  33  	// Multiplier is the factor with which to multiply backoffs after a
  34  	// failed retry. Should ideally be greater than 1.
  35  	Multiplier float64
  36  	// Jitter is the factor with which backoffs are randomized.
  37  	Jitter float64
  38  	// MaxDelay is the upper bound of backoff delay.
  39  	MaxDelay time.Duration
  40  }
  41  
  42  // DefaultConfig is a backoff configuration with the default values specified
  43  // at https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md.
  44  //
  45  // This should be useful for callers who want to configure backoff with
  46  // non-default values only for a subset of the options.
  47  var DefaultConfig = Config{
  48  	BaseDelay:  1.0 * time.Second,
  49  	Multiplier: 1.6,
  50  	Jitter:     0.2,
  51  	MaxDelay:   120 * time.Second,
  52  }
  53