Polish: honest consistency docs, hardened failure demo, join/leave + CI - #2
Merged
Merged
Conversation
Fix the failure-demo key picker so it reads owners[] instead of grepping the whole /ring body (which always contains node-b). Add scenario B (partial ACK then kill the only copy). Document the consistency contract up front, add a 60s quickstart, join/leave remapping, and GitHub Actions. Co-authored-by: dheeraj <hello@tomlin7.com>
Replace the quieter-slot ops/s with numbers measured on this commit (hardware and date labeled). Note the earlier same-day run so the spread is honest. Tidy demo GET lines to include HTTP status. Co-authored-by: dheeraj <hello@tomlin7.com>
tomlin7
marked this pull request as ready for review
September 13, 2026 11:10
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR #1 already merged. This is merge-ready polish on that MVP — no rewrite, no AI.
Why
The merged demo grepped the whole
/ringJSON for"node-b". That string is always present in the clusternodeslist, so the “key owned by node-b” picker could pick a key that node-b does not own.What changed
owners[]only. Two scenarios:acked=1), kill the surviving copy → GET missesacked≥1, not linearizable; R=2 sync fan-out; last-writer-wins; no persistence./scripts/quickstart.sh(ormake cluster+ curl)POST/DELETE /admin/members(local, not gossip) +./scripts/rebalance-demo.sh(~1/N remap)gofmt,vet,-race, then both demo scripts against a local 3-node clusterStore.Closeis idempotentHow to run (60s)
Verified on this agent VM (2026-09-13)
make ci(gofmt,go vet,go test ./... -race)./scripts/quickstart.sh— SETuser:1acked 2/2, GET via node-b hitdemo:failure-a:1owners[node-b, node-a], SET acked 2/2; after kill, :8080/:8082 servednode-a; :8081 downdemo:failure-b:1owners[node-b, node-a]; SET while node-b down →acked=1 failed=[node-b]; kill node-a → GET :8082 503Honesty
Best-effort sync replication. Success is
acked≥1. Last-writer-wins. Static-unless-you-POST membership. No persistence.