Documentation
¶
Overview ¶
Package controller hosts the Wavefront reconciler: the control loop that wires detection (internal/gitpoll), discovery (internal/adapter), topology (internal/graph), the rolling-admission core (internal/engine) and the pin mechanism (internal/pin) into one stateless pass (DESIGN §3, §4).
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type WavefrontReconciler ¶
type WavefrontReconciler struct {
client.Client
Scheme *runtime.Scheme
Recorder events.EventRecorder
Adapter adapter.Adapter
Strategy selection.Strategy
Poller *gitpoll.Poller
PinWriter *pin.Writer
Clock func() time.Time
Metrics *metrics.Instruments
// contains filtered or unexported fields
}
WavefrontReconciler reconciles a Wavefront object.
Every pass is a full recalculation: discovery, source resolution, graph derivation and admissibility are all derived from live cluster state plus the poller's observations, never from stored orchestration state (DESIGN D9). The only state status carries forward is edge-trigger ledgers, each diffed against the exact capped, sorted mirror it itself holds (decision D-C): the hold ledger (status.Held, against the pass's derived holds) and the shadow-admission ledger (status.Shadow, against this pass's admissions, decision D-H), never against the unbounded live-derived set, so a restart replays at most StatusListCap detections rather than an unbounded backlog.
func (*WavefrontReconciler) Reconcile ¶
Reconcile runs one full evaluation of the fleet and executes the admissions it derives.
There is no finalizer by design: deleting a Wavefront releases the fleet from management and leaves every pin exactly where it stands (DESIGN D8).
func (*WavefrontReconciler) SetupWithManager ¶
func (r *WavefrontReconciler) SetupWithManager(mgr ctrl.Manager, pollEvents <-chan event.GenericEvent) error
SetupWithManager wires the controller into the manager. The Flux watches carry no GenerationChangedPredicate: gates are reachable through unlabelled objects and it is precisely their *status* changes that unblock a wavefront.