Skip to content

Commit 89cf947

Browse files
kvapsclaude
andcommitted
docs(plan): tick Phase 10.2 SSA — satellite SetState now FieldOwner-aware
Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
1 parent a7168ef commit 89cf947

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

PLAN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,7 @@ and per-object configuration lives in typed Spec / Status fields.
536536
- [x] Audit every site where observed state currently writes to `Spec.Props` (2026-05-10). `applyObserved` now sets `state.DrbdState` directly on the typed `apiv1.ResourceState`; the k8s store routes the whole write through `.Status().Update()` to `Resource.Status.DrbdState`. SetState's legacy `drbdProps map[string]string` parameter is gone. No production Spec.Props side-writes remain on the observation path.
537537
- [x] Add `ResourceVolumeStatus.CurrentGi string` and `ResourceVolumeStatus.HistoryGi []string` (2026-05-10). Both fields landed via the Phase 8.1 initial-sync-skip pipeline; CurrentGi is written by the satellite observer on every `events2 --full` device frame; HistoryGi remains nil-by-default (DRBD keeps the chain in metadata; surfacing it costs Status budget for a UI feature we don't yet have, so we keep the field but defer the writer).
538538
- [x] Document the Spec/Status split rule in `docs/architecture.md` (2026-05-10). Includes the cheatsheet table per typed field, the multi-writer Status / SSA story, the hierarchy-resolver nil-vs-set discipline, the wire-vs-CRD format boundary, and the DRBD initial-sync skip pipeline as a worked example of the rule.
539-
- [ ] Use Kubernetes server-side-apply field managers when both controller (writes parts of Status — e.g. allocator outputs `DRBDPort`) and satellite (writes other parts of Status `DiskState`, `CurrentGi`) touch the same Status, so neither clobbers the other. Today the controller uses regular `Update` which can clobber Status writes that landed between Get and Update.
539+
- [x] Server-side-apply field managers (2026-05-10). `pkg/store/k8s/resources.go.SetState` now writes Status via `client.Apply` with `FieldOwner=blockstor-satellite` + `ForceOwnership` instead of whole-object Update; controller-side allocator writes keep the default field manager so SSA's per-field merge preserves both sides' writes on the shared Status subresource. Added `+listType=map +listMapKey=volumeNumber` markers on Spec.Volumes + Status.Volumes so a frame updating one volume's DiskState leaves the others alone. Patch-type API kept for now — applyconfiguration-gen for our CRDs is a follow-up.
540540

541541
### 10.3 — Typed fields replace `Spec.Props map[string]string`
542542

0 commit comments

Comments
 (0)