diff options
| author | Paul Zabelin | 2016-04-17 03:22:31 -0700 | 
|---|---|---|
| committer | Paul Zabelin | 2016-04-17 03:22:31 -0700 | 
| commit | b5eb2866cfceb69b0d4dd4948273d679a884fbb2 (patch) | |
| tree | 1fdb61a7138642a1612bb201434e8ebda141cc8a /vendor/google.golang.org/api/gensupport/backoff.go | |
| parent | 8de8e05c483c6b5f23b14742315f1860211dcef7 (diff) | |
| download | gdrive-b5eb2866cfceb69b0d4dd4948273d679a884fbb2.tar.bz2 | |
add Go dependencies by godep
see https://github.com/tools/godep
Diffstat (limited to 'vendor/google.golang.org/api/gensupport/backoff.go')
| -rw-r--r-- | vendor/google.golang.org/api/gensupport/backoff.go | 46 | 
1 files changed, 46 insertions, 0 deletions
| diff --git a/vendor/google.golang.org/api/gensupport/backoff.go b/vendor/google.golang.org/api/gensupport/backoff.go new file mode 100644 index 0000000..1356140 --- /dev/null +++ b/vendor/google.golang.org/api/gensupport/backoff.go @@ -0,0 +1,46 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gensupport + +import ( +	"math/rand" +	"time" +) + +type BackoffStrategy interface { +	// Pause returns the duration of the next pause and true if the operation should be +	// retried, or false if no further retries should be attempted. +	Pause() (time.Duration, bool) + +	// Reset restores the strategy to its initial state. +	Reset() +} + +// ExponentialBackoff performs exponential backoff as per https://en.wikipedia.org/wiki/Exponential_backoff. +// The initial pause time is given by Base. +// Once the total pause time exceeds Max, Pause will indicate no further retries. +type ExponentialBackoff struct { +	Base  time.Duration +	Max   time.Duration +	total time.Duration +	n     uint +} + +func (eb *ExponentialBackoff) Pause() (time.Duration, bool) { +	if eb.total > eb.Max { +		return 0, false +	} + +	// The next pause is selected from randomly from [0, 2^n * Base). +	d := time.Duration(rand.Int63n((1 << eb.n) * int64(eb.Base))) +	eb.total += d +	eb.n++ +	return d, true +} + +func (eb *ExponentialBackoff) Reset() { +	eb.n = 0 +	eb.total = 0 +} | 
