Documentation ¶
Overview ¶
Package controller provides reusable support for controller implementations.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Queue ¶
type Queue interface { Pop() interface{} AddIfNotPresent(interface{}) error }
Queue is a narrow abstraction of a cache.FIFO.
type QueueRetryManager ¶
type QueueRetryManager struct {
// contains filtered or unexported fields
}
QueueRetryManager retries a resource by re-queueing it into a Queue up to MaxRetries number of times.
func NewQueueRetryManager ¶
func NewQueueRetryManager(queue Queue, keyFunc kcache.KeyFunc, maxRetries int) *QueueRetryManager
NewQueueRetryManager safely creates a new QueueRetryManager.
func (*QueueRetryManager) Forget ¶
func (r *QueueRetryManager) Forget(resource interface{})
Forget resets the retry count for resource.
func (*QueueRetryManager) Retry ¶
func (r *QueueRetryManager) Retry(resource interface{})
Retry will enqueue resource until maxRetries for that resource has been exceeded, at which point resource will be forgotten and no longer retried.
A maxRetries value of -1 is interpreted as retry forever.
type RetryController ¶
type RetryController struct { // Queue is where work is retrieved for Handle. Queue Queue // Handle is expected to process the next resource from the queue. Handle func(interface{}) error // ShouldRetry returns true if the resource and error returned from // HandleNext should trigger a retry via the RetryManager. ShouldRetry func(interface{}, error) bool // RetryManager is fed the handled resource if Handle returns a Retryable // error. If Handle returns no error, the RetryManager is asked to forget // the resource. RetryManager RetryManager }
RetryController is a RunnableController which delegates resource handling to a function and knows how to safely manage retries of a resource which failed to be successfully handled.
func (*RetryController) Run ¶
func (c *RetryController) Run()
Run begins processing resources from Queue asynchronously.
type RetryManager ¶
type RetryManager interface { // Retry will cause resource processing to be retried (for example, by // requeueing resource) Retry(resource interface{}) // Forget will cause the manager to erase all prior knowledge of resource // and reclaim internal resources associated with state tracking of // resource. Forget(resource interface{}) }
RetryManager knows how to retry processing of a resource, and how to forget a resource it may be tracking the state of.
type RunnableController ¶
type RunnableController interface {
// Run starts the asynchronous controller loop.
Run()
}
RunnableController is a controller which implements a Run loop.