Skip to content

Commit c4924d9

Browse files
authored
docs(design): rename Composed-1 docs *_proposed_* → *_partial_* (M5a shipped) (#927)
CLAUDE.md の design-doc lifecycle 規約に従い、Composed-1 関連の 2 つの design doc を `*_proposed_*` → `*_partial_*` にリネーム。M5a が main にランドしたタイミング。 ## Renames ``` 2026_05_29_proposed_composed1_cross_group_commit_guard.md → 2026_05_29_partial_composed1_cross_group_commit_guard.md 2026_06_02_proposed_composed1_m5_jepsen_route_shuffle.md → 2026_06_02_partial_composed1_m5_jepsen_route_shuffle.md ``` ## Status header の更新 **親 doc (cross-group commit guard):** - M1–M4 shipped via PR #900 - M5a shipped via PRs #911 / #916 / #924 / #925 - M5b (route-shuffle nemesis) still open **M5 doc:** - M5a 全 PR 列挙 + 子細 - PR #926 (cross-PR `--host` fix) を E2E 中に発見 - Workers の `ResourceNotFoundException` follow-up issue を tracked separately として記載 ## 親子相互参照リンクの更新 M5 doc の "Parent design" リンクをリネーム後のファイル名に変更。 ## Body content CLAUDE.md の lifecycle 規約通り、design 本体は as-shipped record として温存。Status block のみ進化させる。 ## Test plan - [x] `git mv` で履歴を保持 - [x] 内部リンクは renamed partner を指す <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Updated internal design document references across the codebase to reflect current milestone status. No functional changes or user-facing features affected. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2 parents d23cf69 + 39769a9 commit c4924d9

18 files changed

Lines changed: 38 additions & 23 deletions

cmd/elastickv-list-routes/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// table-route keys on the expected Raft groups before any workload
55
// op runs.
66
//
7-
// Per the design doc (docs/design/2026_06_02_proposed_composed1_m5_jepsen_route_shuffle.md
7+
// Per the design doc (docs/design/2026_06_02_partial_composed1_m5_jepsen_route_shuffle.md
88
// §3.3), the Jepsen client's setup! shells out to this tool rather
99
// than re-implementing the gRPC client in Clojure: a JSON contract is
1010
// stable across versions and a future ListRoutes schema change shows

cmd/elastickv-route-key/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// elastickv-route-key prints the byte-string of a DynamoDB
22
// table-route key for a given table name. Used by the Composed-1
33
// M5 launch script (`scripts/run-jepsen-local.sh`) and OQ-7
4-
// (docs/design/2026_06_02_proposed_composed1_m5_jepsen_route_shuffle.md)
4+
// (docs/design/2026_06_02_partial_composed1_m5_jepsen_route_shuffle.md)
55
// to compute `--shardRanges` boundary keys without inlining the
66
// base64-encoding logic in shell — the encoding is part of the
77
// routing surface and any drift would silently mis-route.

cmd/elastickv-split/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// elastickv-split is a single-shot CLI that invokes the
22
// Distribution.SplitRange RPC on a running elastickv cluster. Per
33
// the Composed-1 M5 design doc
4-
// (docs/design/2026_06_02_proposed_composed1_m5_jepsen_route_shuffle.md
4+
// (docs/design/2026_06_02_partial_composed1_m5_jepsen_route_shuffle.md
55
// §3.1), the Jepsen route-shuffle nemesis shells out to this tool
66
// rather than re-implementing the gRPC client in Clojure: keeping
77
// the request construction and the SplitRangeRequest field

distribution/engine.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ type Engine struct {
3737
ts atomic.Uint64
3838
hotspotThreshold uint64
3939
// history is the M2 versioned-snapshot ring for Composed-1
40-
// (docs/design/2026_05_29_proposed_composed1_cross_group_commit_guard.md
40+
// (docs/design/2026_05_29_partial_composed1_cross_group_commit_guard.md
4141
// §M2). Keyed by catalogVersion; populated on every successful
4242
// ApplySnapshot and seeded by NewEngineWithDefaultRoute so a
4343
// transaction that observed catalogVersion = 0 (the engine's

docs/design/2026_05_29_proposed_composed1_cross_group_commit_guard.md renamed to docs/design/2026_05_29_partial_composed1_cross_group_commit_guard.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# Composed-1 — cross-group commit-time ownership guard
22

3-
Status: Proposed
3+
Status: Partial — M1–M4 shipped via PR #900; M5a shipped via PRs #911 / #916 / #924 / #925; M5b (route-shuffle nemesis) still open. See companion doc `2026_06_02_partial_composed1_m5_jepsen_route_shuffle.md` for the detailed M5 design and per-milestone state.
44
Author: bootjp
5-
Date: 2026-05-29
5+
Date: 2026-05-29 (renamed *_proposed_**_partial_* on 2026-06-04)
66

77
> **Forward-looking proposal.** Today's implementation is vacuously
88
> safe with respect to Composed-1 because `SplitRange` is the only

docs/design/2026_06_02_proposed_composed1_m5_jepsen_route_shuffle.md renamed to docs/design/2026_06_02_partial_composed1_m5_jepsen_route_shuffle.md

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,25 @@
11
# Composed-1 M5 — Jepsen route-shuffle workload
22

3-
Status: Proposed
3+
Status: Partial. M5a shipped:
4+
- PR #911`cmd/elastickv-split` + `cmd/elastickv-route-key` CLI helpers
5+
- PR #916`dynamodb-append-multi-table-workload` (Clojure)
6+
- PR #925`cmd/elastickv-list-routes` + setup-hook
7+
`verify-multi-group-routing!`
8+
- PR #924`scripts/run-jepsen-m5-local.sh` single-process
9+
two-group launcher (with cross-PR integration to #925)
10+
- PR #926 (separate) — `--host 127.0.0.1` fix discovered during
11+
M5a E2E
12+
13+
M5b (route-shuffle nemesis) is still open. Plus one known follow-up
14+
issue from M5a E2E: workers report `ResourceNotFoundException` for
15+
every txn despite `create-all-tables!` reporting success and ListRoutes
16+
showing the expected two-group catalog — likely a CreateTable
17+
race / sync issue under 5-parallel client setup; tracked separately.
18+
419
Author: bootjp
5-
Date: 2026-06-02
20+
Date: 2026-06-02 (renamed *_proposed_**_partial_* on 2026-06-04)
621
Parent design:
7-
[`2026_05_29_proposed_composed1_cross_group_commit_guard.md`](2026_05_29_proposed_composed1_cross_group_commit_guard.md)
22+
[`2026_05_29_partial_composed1_cross_group_commit_guard.md`](2026_05_29_partial_composed1_cross_group_commit_guard.md)
823

924
> **Forward-looking proposal, same posture as the parent doc.**
1025
> Today's `SplitRange` is same-group only (per CLAUDE.md and

jepsen/src/elastickv/dynamodb_multi_table_workload.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"Composed-1 M5a multi-table variant of the DynamoDB list-append workload.
33
44
Why a separate workload exists (see
5-
docs/design/2026_06_02_proposed_composed1_m5_jepsen_route_shuffle.md §3.3):
5+
docs/design/2026_06_02_partial_composed1_m5_jepsen_route_shuffle.md §3.3):
66
the single-table elastickv.dynamodb-workload cannot exercise the 2PC
77
path because kv/shard_key.go normalises every DynamoDB table-meta,
88
item, and GSI key for one table to a single per-table route key

kv/coordinator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1085,7 +1085,7 @@ func elemToMutation(req *Elem[OP]) *pb.Mutation {
10851085
// was captured at — flows into pb.Request.ObservedRouteVersion so the M3
10861086
// Composed-1 FSM apply-time gate can re-validate ownership against the
10871087
// route catalog snapshot at txn-begin (M1 plumbing, see
1088-
// docs/design/2026_05_29_proposed_composed1_cross_group_commit_guard.md).
1088+
// docs/design/2026_05_29_partial_composed1_cross_group_commit_guard.md).
10891089
// Zero is the legacy "unpinned" sentinel.
10901090
func onePhaseTxnRequestWithPrevCommit(startTS, commitTS, prevCommitTS uint64, primaryKey []byte, reqs []*Elem[OP], readKeys [][]byte, observedRouteVersion uint64) *pb.Request {
10911091
muts := make([]*pb.Mutation, 0, len(reqs)+1)

kv/coordinator_txn_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ func TestCoordinateDispatchTxn_PassesReadKeysToRaftEntry(t *testing.T) {
145145
// through the dispatchTxn boundary into pb.Request.ObservedRouteVersion.
146146
//
147147
// This is the M1 round-trip witness for the Composed-1 plumbing per
148-
// docs/design/2026_05_29_proposed_composed1_cross_group_commit_guard.md
148+
// docs/design/2026_05_29_partial_composed1_cross_group_commit_guard.md
149149
// §M1: at this milestone the FSM ignores the field, so the only assertion
150150
// is that the value survives the encoder. M3 will add the FSM apply-time
151151
// gate that *uses* this value.

kv/fsm.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ type kvFSM struct {
7272
// short-circuit as "unpinned" (no Composed-1 enforcement) —
7373
// matching the pre-feature behaviour byte-for-byte. Concrete
7474
// production type is *distribution.Engine. See
75-
// docs/design/2026_05_29_proposed_composed1_cross_group_commit_guard.md
75+
// docs/design/2026_05_29_partial_composed1_cross_group_commit_guard.md
7676
// §4.2 prerequisite block + §M2.
7777
routes RouteHistory
7878
// shardGroupID is the Raft group ID this FSM serves. Used by
@@ -222,7 +222,7 @@ func WithCutoverSource(src CutoverSource) FSMOption {
222222
// historical owner-of-key resolution. Zero is reserved for the
223223
// not-wired case.
224224
//
225-
// See docs/design/2026_05_29_proposed_composed1_cross_group_commit_guard.md
225+
// See docs/design/2026_05_29_partial_composed1_cross_group_commit_guard.md
226226
// §M2 + §4.2 prerequisite block.
227227
func WithRouteHistory(routes RouteHistory, shardGroupID uint64) FSMOption {
228228
return func(f *kvFSM) {
@@ -602,7 +602,7 @@ func (f *kvFSM) handleTxnRequest(ctx context.Context, r *pb.Request, commitTS ui
602602
}
603603

604604
// verifyComposed1 is the M3 apply-time Composed-1 gate per
605-
// docs/design/2026_05_29_proposed_composed1_cross_group_commit_guard.md
605+
// docs/design/2026_05_29_partial_composed1_cross_group_commit_guard.md
606606
// §4.2(a) + §4.4. Runs two checks before the txn's writes land:
607607
//
608608
// (a) Observed-version owner — the txn's read-set was captured

0 commit comments

Comments
 (0)