mirror of
https://github.com/status-im/consul.git
synced 2025-01-19 02:03:00 +00:00
61b7c0d76f
* Support locality testing in consul-container Support including locality in client sidecar config. Also align test config structs with Ent to avoid future conflicts. * Refactor consul-container fortio helpers Refactor fortio test helpers to separate HTTP retries from waiting on fortio result changes due to e.g. service startup and failovers.
44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
package retry
|
|
|
|
import "time"
|
|
|
|
// ThirtySeconds repeats an operation for thirty seconds and waits 500ms in between.
|
|
// Best for known slower operations like waiting on eventually consistent state.
|
|
func ThirtySeconds() *Timer {
|
|
return &Timer{Timeout: 30 * time.Second, Wait: 500 * time.Millisecond}
|
|
}
|
|
|
|
// TwoSeconds repeats an operation for two seconds and waits 25ms in between.
|
|
func TwoSeconds() *Timer {
|
|
return &Timer{Timeout: 2 * time.Second, Wait: 25 * time.Millisecond}
|
|
}
|
|
|
|
// ThreeTimes repeats an operation three times and waits 25ms in between.
|
|
func ThreeTimes() *Counter {
|
|
return &Counter{Count: 3, Wait: 25 * time.Millisecond}
|
|
}
|
|
|
|
// Timer repeats an operation for a given amount
|
|
// of time and waits between subsequent operations.
|
|
type Timer struct {
|
|
Timeout time.Duration
|
|
Wait time.Duration
|
|
|
|
// stop is the timeout deadline.
|
|
// TODO: Next()?
|
|
// Set on the first invocation of Next().
|
|
stop time.Time
|
|
}
|
|
|
|
func (r *Timer) Continue() bool {
|
|
if r.stop.IsZero() {
|
|
r.stop = time.Now().Add(r.Timeout)
|
|
return true
|
|
}
|
|
if time.Now().After(r.stop) {
|
|
return false
|
|
}
|
|
time.Sleep(r.Wait)
|
|
return true
|
|
}
|