Documentation
¶
Index ¶
- func WorkerId(ctx context.Context) string
- type Controller
- type ControllerEntity
- type ControllerManager
- type DeletingReconcileController
- type EntityAccessClient
- type Event
- type EventType
- type GenericController
- type HandlerFunc
- type ReconcileController
- func (c *ReconcileController) Enqueue(event Event)
- func (c *ReconcileController) ProcessEventForTest(ctx context.Context, event Event) error
- func (c *ReconcileController) RecordWrite(revision int64)
- func (c *ReconcileController) SetPeriodic(often time.Duration, fn func(ctx context.Context) error)
- func (c *ReconcileController) Start(top context.Context) error
- func (c *ReconcileController) Stop()
- func (c *ReconcileController) WriteTracker() WriteTracker
- type ReconcileControllerI
- type RingSet
- type UpdatingController
- type WriteTracker
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Controller ¶
Controller processes entities of a specific kind
type ControllerEntity ¶
type ControllerEntity interface {
Decode(getter entity.AttrGetter)
Encode() []entity.Attr
}
type ControllerManager ¶
type ControllerManager struct {
// contains filtered or unexported fields
}
ControllerManager manages multiple controllers
func NewControllerManager ¶
func NewControllerManager() *ControllerManager
NewControllerManager creates a new controller manager
func (*ControllerManager) AddController ¶
func (m *ControllerManager) AddController(controller Controller)
AddController adds a controller to the manager
type DeletingReconcileController ¶
DeletingReconcileController is an optional interface that reconcile controllers can implement to handle deletion of their managed entities.
type EntityAccessClient ¶
type EntityAccessClient interface {
// Get returns a single entity by its ID
Get(ctx context.Context, id string) (*entityserver_v1alpha.EntityAccessClientGetResults, error)
// List returns all entities matching the given index
List(ctx context.Context, index entity.Attr) (*entityserver_v1alpha.EntityAccessClientListResults, error)
// WatchIndex watches for changes to entities matching the given index
// and sends updates through the provided sender
WatchIndex(ctx context.Context, index entity.Attr, sender stream.SendStream[*entityserver_v1alpha.EntityOp]) error
}
EntityAccessClient defines the interface for interacting with the entity server
type Event ¶
type Event struct {
Type EventType
Id entity.Id
Entity *entity.Entity // The entity that was changed
Rev, PrevRev int64 // Revision and previous revision for the entity
}
Event represents a change to an entity
type EventType ¶
type EventType string
EventType represents the type of event that occurred on an entity
type GenericController ¶
type GenericController[P ControllerEntity] interface { Init(context.Context) error Create(ctx context.Context, obj P, meta *entity.Meta) error // Delete is called when an entity is deleted. The obj parameter contains the // entity data from before deletion (available since delete watch events now // include the previous value). It may be nil if the entity data was unavailable // (e.g., watch reconnect after etcd compaction). Delete(ctx context.Context, id entity.Id, obj P) error }
type HandlerFunc ¶
HandlerFunc is a function that processes an entity
func AdaptController ¶
func AdaptController[ T any, P interface { *T ControllerEntity }, C GenericController[P], ](cont C) HandlerFunc
func AdaptReconcileController ¶
func AdaptReconcileController[ T any, P interface { *T ControllerEntity }, C ReconcileControllerI[P], ](cont C) HandlerFunc
AdaptReconcileController adapts a ReconcileControllerI into a HandlerFunc. It calls Reconcile() for both Add and Update events. If the controller implements DeletingReconcileController, Delete() is called for Delete events.
type ReconcileController ¶
ReconcileController implements the Controller interface
func NewReconcileController ¶
func NewReconcileController(name string, log *slog.Logger, index entity.Attr, esc *entityserver_v1alpha.EntityAccessClient, handler HandlerFunc, resyncPeriod time.Duration, workers int) *ReconcileController
NewReconcileController creates a new controller
func (*ReconcileController) Enqueue ¶
func (c *ReconcileController) Enqueue(event Event)
Enqueue adds an event to the work queue for processing
func (*ReconcileController) ProcessEventForTest ¶
func (c *ReconcileController) ProcessEventForTest(ctx context.Context, event Event) error
ProcessEventForTest processes a single event and applies any updates. This is exposed for testing controllers without starting the full controller loop.
func (*ReconcileController) RecordWrite ¶
func (c *ReconcileController) RecordWrite(revision int64)
RecordWrite records a revision that was written by this controller. Subsequent watch events for this revision will be skipped to reduce unnecessary reconciliation noise from self-generated updates.
func (*ReconcileController) SetPeriodic ¶
SetPeriodic sets the periodic callback function
func (*ReconcileController) Start ¶
func (c *ReconcileController) Start(top context.Context) error
Start starts the controller
func (*ReconcileController) WriteTracker ¶
func (c *ReconcileController) WriteTracker() WriteTracker
WriteTracker returns a WriteTracker interface that can be used by controllers to record manual entity writes outside the reconciliation framework.
type ReconcileControllerI ¶
type ReconcileControllerI[P ControllerEntity] interface { Init(context.Context) error Reconcile(ctx context.Context, obj P, meta *entity.Meta) error }
ReconcileControllerI is for controllers that maintain aggregate state across multiple entities. Unlike GenericController which maps 1:1 between an entity and a resource, ReconcileControllerI handles controllers where one entity drives reconciliation of N resources.
type RingSet ¶
type RingSet struct {
// contains filtered or unexported fields
}
RingSet maintains a fixed-size set of recently seen int64 values using a ring buffer. Controllers use this to track recently written entity revisions, allowing them to skip watch events for their own writes and reduce unnecessary reconciliation noise.
Thread-safe for concurrent access by multiple workers and the watch goroutine.
func NewRingSet ¶
type UpdatingController ¶
type UpdatingController[P ControllerEntity] interface { Update(ctx context.Context, obj P, meta *entity.Meta) error }
UpdatingController is an optional interface that controllers can implement to handle updates differently from creates
type WriteTracker ¶
type WriteTracker interface {
RecordWrite(revision int64)
}
WriteTracker provides a way to track entity write revisions to skip self-generated watch events. Controllers that make manual entity writes outside the reconciliation framework can use this to record their writes and avoid unnecessary re-reconciliation.