Skip to content

Commit 48f49c0

Browse files
kvapsclaude
andcommitted
docs(plan): drop KVEntry migration job from 10.4 — recreate environments
The user confirmed migrations aren't needed at this stage. Phase 10 is pre-1.0; operational cost of writing a one-shot KVEntry → ControllerConfig/Secret/annotations migrator exceeds the cost of `kubectl delete -f && kubectl apply -f` on dev / pre-prod clusters when 10.4 lands. Replaces the "Migration job" item with an explicit no-data-migration note at the top of 10.4. Operators populate ControllerConfig + Secret on fresh install via manifest / Helm values rather than inheriting state from the old KVEntry instances. Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
1 parent 3a7cb49 commit 48f49c0

1 file changed

Lines changed: 7 additions & 2 deletions

File tree

PLAN.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -692,12 +692,17 @@ fields directly and emits each non-zero one into the right
692692

693693
### 10.4 — Eliminate `KVEntry` CRD
694694

695-
- [ ] **`ControllerProps` instance → typed singleton CRD**. New `ControllerConfig` cluster-scoped CRD, name=`default`, with structured fields (`Spec.DRBDOptions`, `Spec.AutoQuorum`, `Spec.AutoAddQuorumTiebreaker`, `Spec.PassphraseSecretRef`). Migration job seeds one from existing `KVEntry/ControllerProps` items.
695+
**No data migration**: existing dev / pre-prod environments are
696+
recreated from scratch when this lands. Phase 10 is pre-1.0; the
697+
operational cost of writing a one-shot migration job exceeds the
698+
cost of `kubectl delete -f manifests/ && kubectl apply -f manifests/`
699+
on the affected clusters.
700+
701+
- [ ] **`ControllerProps` instance → typed singleton CRD**. New `ControllerConfig` cluster-scoped CRD, name=`default`, with structured fields (`Spec.DRBDOptions`, `Spec.AutoQuorum`, `Spec.AutoAddQuorumTiebreaker`, `Spec.PassphraseSecretRef`). Operators populate it on a fresh install via manifest / Helm chart values.
696702
- [ ] **Cluster passphrase → native `Secret`**. New Secret (default name `blockstor-cluster-passphrase`, key `passphrase`). `ControllerConfig.Spec.PassphraseSecretRef` points at it. REST endpoints (`/v1/encryption/passphrase` POST/PATCH/PUT) rewritten to mutate the Secret.
697703
- [ ] **`csi-volumes` instance → per-Resource annotation**. linstor-csi's per-PVC JSON metadata moves to `Resource.metadata.annotations["blockstor.io/csi-volume-data"]`. Annotations have no size limit issue at csi-typical payloads (typically 1-4 KiB; per-object annotation cap is 256 KiB).
698704
- [ ] **`csi-snapshot-shippings` instance → per-Snapshot annotation** (`blockstor.io/csi-shipping-data`).
699705
- [ ] **REST `/v1/key-value-store/{instance}` rewritten** on top of the new homes. `GET csi-volumes` does `client.List(Resources)` and assembles a map from annotations; `POST csi-volumes/{key}` writes the annotation on the matching Resource. golinstor sees the same shape.
700-
- [ ] **Migration job**: on first run after upgrade, list every `KVEntry`, write to the new home (annotation / Secret / ControllerConfig), then delete the KVEntries. Fails fast if any entry has an instance the migrator doesn't know about — operator must triage.
701706
- [ ] **Drop `kventries.blockstor.io.blockstor.io` CRD** type registration, `api/v1alpha1/kventry_types.go`, `pkg/store/k8s/kv_store.go`, the `KeyValueStore` interface in `pkg/store/store.go`.
702707

703708
### 10.5 — `ApplyStoragePools` made non-stub (absorbs the existing architectural-debt item)

0 commit comments

Comments
 (0)