Repository navigation
fix(txfeed): retire the vote group 232.0.3.2; txfeed-sub drops -vote (BLO-22812) - #194
Conversation
…(BLO-22812) Partitions gives a simple vote no partition, so shred-txfeed stops sending to 232.0.3.2 (and ff3e::232:302). PartVote = 2 stays reserved. Consensus votes left blocks at Alpenglow, but the simple-vote test still matches rare vote-account transactions such as Withdraw; they are counted in votes= and sent on no group. txfeed-sub drops its -vote selector.
There was a problem hiding this comment.
Ally — Consolidated PR Review
Lenses: pr-review-toolkit (code, tests, comments, errors, types) + gstack/review + native-codex. All three were applied directly in this pod; no nested CLIs were run.
Reviewed head: de0600b
The change does what it says. Partitions now returns nil for a simple vote. Its only production caller is publish in cmd/shred-txfeed/main.go, and that ranges over the result, so a nil slice sends nothing. PartVote = 2 stays reserved, and TestGroup still pins it to 232.0.3.2, so no other partition can reuse offset 2. Removing -vote from txfeed-sub is complete: the flag, the -listen exclusivity check, the -group-base check and the "nothing to subscribe to" message are all updated. Nothing else in the repo references -vote or 232.0.3.2.
At this head I ran CGO_ENABLED=0 go test ./txfeed ./cmd/shred-txfeed ./cmd/txfeed-sub, gofmt and go vet. All passed.
Critical Issues (0)
Important Issues (0)
Suggestions (1)
- [native-codex]
cmd/shred-txfeed/main.go:138:publishstill buildsdgsfor a vote and returnslen(dgs). So a large vote transaction still incrementschunked(main.go:468) even though no partition group receives it. Vote-account transactions of that size are rare, so the stats skew is negligible. If you wantchunkedto count only datagrams actually sent on partition groups, havepublishreturn 0 whenPartitionsis empty.
Strengths
- Keeping
PartVotereserved means a stale subscriber gets silence instead of another feed. TheRefusedKeysrationale was updated to match. - The PR description is unusually precise about why this is a behaviour change: Withdraw-shaped transactions still match the simple-vote test and are now dropped. It also explains why folding them into non-vote was deferred.
- There is a test showing
-voteis now rejected, and the relay and native join tests moved to-nonvotewithout losing coverage.
Recommended Action
- No blocking changes requested.
- Merge once the remaining required CI checks finish green.
|
Landed by kkroo drive session a2176509 at |
Retires the txfeed vote partition, offset 2 (232.0.3.2, and its IPv6 twin ff3e::232:302). This follows the CTO decision on BLO-22812 (2026-10-25) and is tracked on BLO-48422.
What changes
txfeed.Partitionsgives a simple vote no partition; before, it sent one toPartVoteonly. shred-txfeed is the only production caller, so the publisher stops sending to 232.0.3.2, and to ff3e::232:302 if-group-base6is ever set. Simple votes are still counted invotes=.PartVote = 2stays, as a retired and reserved constant. No other partition may take offset 2, so a stale subscriber gets silence, not another feed.txfeed-subdrops its-voteselector.txfeed-sub -votenow exits 2 with "flag provided but not defined". A raw-ssm 69.25.95.57@232.0.3.2:5003still joins and gets silence.RefusedKeysrationale. The Vote program stays refused for W9 channels.Why this is a behaviour change, not cleanup. The group is not empty today. Consensus votes left blocks at Alpenglow, but the simple-vote test ignores instruction data. That test is Agave's
is_simple_vote_transactionshape: a legacy message, fewer than 3 signatures, one instruction, to the Vote program. So rare vote-account transactions such as Withdraw still match it, and today they go only to 232.0.3.2. On mainnet on 10-25 that was about 2 per hour, in bursts; slot 461300180 held 5 Withdraws. After this change they reach no group. Non-vote subscribers never received them, so nothing regresses for them. Folding them into non-vote instead would change what non-vote means and what the frame vote bit means. That is a separate decision.Unchanged: the bytes on the non-vote, named-program and bucket groups; the frame format and its vote bit; W9 channel matching.
Deploy. A merge changes nothing that production runs. packaging.yml builds only
./cmd/blockcast-shreds, which does not import txfeed. shred-txfeed on CT 140 is a hand-installed binary, so the publisher change takes effect only when it is rebuilt from main and restarted. That is a separate production step.Tests
TestPartitionsexpects no partition for a vote. This fails on main.-nonvoteas the generic selector and expect 4 relay joins. A new case checks that-voteis rejected.TestGroupstill pinsPartVoteto 232.0.3.2.CGO_ENABLED=0 go testandgo test -race -tags puregoon./txfeed ./cmd/shred-txfeed ./cmd/txfeed-sub, plus gofmt and go vet.