open-consul/agent/consul/controller/reconciler.go

52 lines
1.6 KiB
Go

package controller
import (
"context"
"fmt"
"time"
"github.com/hashicorp/consul/acl"
)
// Request contains the information necessary to reconcile a config entry.
// This includes only the information required to uniquely identify the
// config entry.
type Request struct {
Kind string
Name string
Meta *acl.EnterpriseMeta
}
// RequeueAfterError is an error that allows a Reconciler to override the
// exponential backoff behavior of the Controller, rather than applying
// the backoff algorithm, returning a RequeueAfterError will cause the
// Controller to reschedule the Request at a given time in the future.
type RequeueAfterError time.Duration
// Error implements the error interface.
func (r RequeueAfterError) Error() string {
return fmt.Sprintf("requeue at %s", time.Duration(r))
}
// RequeueAfter constructs a RequeueAfterError with the given duration
// setting.
func RequeueAfter(after time.Duration) error {
return RequeueAfterError(after)
}
// RequeueNow constructs a RequeueAfterError that reschedules the Request
// immediately.
func RequeueNow() error {
return RequeueAfterError(0)
}
// Reconciler is the main implementation interface for Controllers. A Reconciler
// receives any change notifications for config entries that the controller is subscribed
// to and processes them with its Reconcile function.
type Reconciler interface {
// Reconcile performs a reconciliation on the config entry referred to by the Request.
// The Controller will requeue the Request to be processed again if an error is non-nil.
// If no error is returned, the Request will be removed from the working queue.
Reconcile(context.Context, Request) error
}