Skip to main content

Reconcile loop

DonkeyFleet separates observation, policy, authorization, and mutation. Every run holds one PostgreSQL advisory lock; with multiple replicas, only the lock holder reconciles.

Triggers and cadence

TriggerDefaultPurpose
Scheduled reconcile5mFull inventory, policy evaluation, drift, and baseline monitoring
Approval or policy changeImmediate, coalescedRe-observe and evaluate without waiting for the schedule
Active provisioning follow-up15sAdvance persisted create-volume and create-relationship checkpoints safely

The fast follow-up is not a shortcut around Observe. It acquires the same lock, reads complete state, checks the stored ONTAP job, and advances only after the previous step is proven complete. After initialize is accepted, the long baseline returns to the normal five-minute observation cadence.

This means a queue does not wait five minutes between destination-volume creation, relationship creation, and initialization. Baseline admission remains controlled separately by max_concurrent_initializes and intercluster_budget_kbps.

Complete observation

Pagination is driven to exhaustion. Any non-success response, pagination failure, or mismatch with ONTAP's record count aborts the run as skipped_observe_incomplete. DonkeyFleet never evaluates a partial fleet as complete.

Transition-based plans

Plan items represent meaningful changes, not reconcile frequency. Repeated observation of the same entity, action, and reason increments occurrences. No-op results are not persisted.

Baseline serialization

The default maximum concurrent initialization count is one. Raising it permits more baselines only when their estimated throttles fit the automation profile's intercluster budget. Destination volume and relationship preparation can overlap within max_actions_per_run; initialization is the bandwidth-heavy gate.