timer

package
v1.4.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 5, 2021 License: BSD-3-Clause Imports: 11 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var MaxTime = time.Unix(1<<63-62135596801, 0) // 0 is used because we drop the nano-seconds

MaxTime was taken from https://stackoverflow.com/questions/25065055/what-is-the-maximum-time-time-in-go/32620397#32620397

Functions

This section is empty.

Types

type AdaptiveTimeoutConfig

type AdaptiveTimeoutConfig struct {
	InitialTimeout time.Duration
	MinimumTimeout time.Duration
	MaximumTimeout time.Duration
	// Timeout is [timeoutCoefficient] * average response time
	// [timeoutCoefficient] must be > 1
	TimeoutCoefficient float64
	// Larger halflife --> less volatile timeout
	// [timeoutHalfLife] must be positive
	TimeoutHalflife  time.Duration
	MetricsNamespace string
	Registerer       prometheus.Registerer
}

AdaptiveTimeoutConfig contains the parameters provided to the adaptive timeout manager.

type AdaptiveTimeoutManager

type AdaptiveTimeoutManager struct {
	// contains filtered or unexported fields
}

AdaptiveTimeoutManager is a manager for timeouts.

func (*AdaptiveTimeoutManager) Dispatch

func (tm *AdaptiveTimeoutManager) Dispatch()

Dispatch ...

func (*AdaptiveTimeoutManager) Initialize

func (tm *AdaptiveTimeoutManager) Initialize(config *AdaptiveTimeoutConfig) error

Initialize this timeout manager with the provided config

func (*AdaptiveTimeoutManager) ObserveLatency

func (tm *AdaptiveTimeoutManager) ObserveLatency(latency time.Duration)

ObserveLatency allows the caller to manually register a response latency. We use this to pretend that it a query to a benched validator timed out when actually, we never even sent them a request.

func (*AdaptiveTimeoutManager) Put

func (tm *AdaptiveTimeoutManager) Put(id ids.ID, msgType constants.MsgType, timeoutHandler func()) time.Time

Put registers a timeout for [id]. If the timeout occurs, [timeoutHandler] is called. Returns the time at which the timeout will fire if it is not first removed by calling [tm.Remove].

func (*AdaptiveTimeoutManager) Remove

func (tm *AdaptiveTimeoutManager) Remove(id ids.ID)

Remove the timeout associated with [id]. Its timeout handler will not be called.

func (*AdaptiveTimeoutManager) Stop

func (tm *AdaptiveTimeoutManager) Stop()

Stop executing timeouts

func (*AdaptiveTimeoutManager) Timeout

func (tm *AdaptiveTimeoutManager) Timeout()

Timeout registers a timeout

func (*AdaptiveTimeoutManager) TimeoutDuration

func (tm *AdaptiveTimeoutManager) TimeoutDuration() time.Duration

TimeoutDuration returns the current network timeout duration

type Clock

type Clock struct {
	// contains filtered or unexported fields
}

Clock acts as a thin wrapper around global time that allows for easy testing

func (*Clock) Set

func (c *Clock) Set(time time.Time)

Set the time on the clock

func (*Clock) Sync

func (c *Clock) Sync()

Sync this clock with global time

func (*Clock) Time

func (c *Clock) Time() time.Time

Time returns the time on this clock

func (*Clock) Unix

func (c *Clock) Unix() uint64

Unix returns the unix time on this clock.

type Meter

type Meter interface {
	// Notify this meter of a new event for it to rate
	Tick()
	// Return the number of events this meter is currently tracking
	Ticks() int
}

Meter tracks the number of occurrences of a specified event

type Repeater

type Repeater struct {
	// contains filtered or unexported fields
}

Repeater ...

func NewRepeater

func NewRepeater(handler func(), frequency time.Duration) *Repeater

NewRepeater ...

func (*Repeater) Dispatch

func (r *Repeater) Dispatch()

Dispatch ...

func (*Repeater) Stop

func (r *Repeater) Stop()

Stop ...

type TimedMeter

type TimedMeter struct {

	// Can be used to fake time in tests
	Clock *Clock
	// Amount of time to keep a tick
	Duration time.Duration
	// contains filtered or unexported fields
}

TimedMeter is a meter that discards old events

func (*TimedMeter) Tick

func (tm *TimedMeter) Tick()

Tick implements the Meter interface

func (*TimedMeter) Ticks

func (tm *TimedMeter) Ticks() int

Ticks implements the Meter interface

type TimeoutManager

type TimeoutManager struct {
	// contains filtered or unexported fields
}

TimeoutManager is a manager for timeouts.

func (*TimeoutManager) Dispatch

func (tm *TimeoutManager) Dispatch()

Dispatch ...

func (*TimeoutManager) Initialize

func (tm *TimeoutManager) Initialize(duration time.Duration)

Initialize is a constructor b/c Golang, in its wisdom, doesn't ... have them?

func (*TimeoutManager) Put

func (tm *TimeoutManager) Put(id ids.ID, handler func())

Put puts hash into the hash map

func (*TimeoutManager) Remove

func (tm *TimeoutManager) Remove(id ids.ID)

Remove the item that no longer needs to be there.

func (*TimeoutManager) Stop

func (tm *TimeoutManager) Stop()

Stop executing timeouts

func (*TimeoutManager) Timeout

func (tm *TimeoutManager) Timeout()

Timeout registers a timeout

type Timer

type Timer struct {
	// contains filtered or unexported fields
}

Timer wraps a timer object. This allows a user to specify a handler. Once specifying the handler, the dispatch thread can be called. The dispatcher will only return after calling Stop. SetTimeoutIn will result in calling the handler in the specified amount of time.

func NewStagedTimer

func NewStagedTimer(f func() (time.Duration, bool)) *Timer

NewStagedTimer returns a timer that will execute [f] when a timeout occurs and execute an additional timeout after the returned duration if [f] returns true and some duration.

func NewTimer

func NewTimer(handler func()) *Timer

NewTimer creates a new timer object

func (*Timer) Cancel

func (t *Timer) Cancel()

Cancel the currently scheduled event

func (*Timer) Dispatch

func (t *Timer) Dispatch()

Dispatch ...

func (*Timer) SetTimeoutIn

func (t *Timer) SetTimeoutIn(duration time.Duration)

SetTimeoutIn will set the timer to fire the handler in [duration]

func (*Timer) Stop

func (t *Timer) Stop()

Stop this timer from executing any more.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL