Skip to content

fix(txfeed): retire the vote group 232.0.3.2; txfeed-sub drops -vote (BLO-22812) - #194

Merged
kkroo merged 1 commit into
mainfrom
drive/retire-vote-group
Oct 25, 2026
Merged

kkroo merged 1 commit into
mainfrom
drive/retire-vote-group

Conversation

@kkroo

@kkroo kkroo commented Oct 25, 2026

Copy link
Copy Markdown
Contributor

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.Partitions gives a simple vote no partition; before, it sent one to PartVote only. shred-txfeed is the only production caller, so the publisher stops sending to 232.0.3.2, and to ff3e::232:302 if -group-base6 is ever set. Simple votes are still counted in votes=.
  • PartVote = 2 stays, as a retired and reserved constant. No other partition may take offset 2, so a stale subscriber gets silence, not another feed.
  • txfeed-sub drops its -vote selector. txfeed-sub -vote now exits 2 with "flag provided but not defined". A raw -ssm 69.25.95.57@232.0.3.2:5003 still joins and gets silence.
  • Comments: the shred-txfeed offset table, the package doc and the RefusedKeys rationale. 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_transaction shape: 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

  • TestPartitions expects no partition for a vote. This fails on main.
  • The txfeed-sub tests use -nonvote as the generic selector and expect 4 relay joins. A new case checks that -vote is rejected.
  • TestGroup still pins PartVote to 232.0.3.2.
  • Locally: CGO_ENABLED=0 go test and go test -race -tags purego on ./txfeed ./cmd/shred-txfeed ./cmd/txfeed-sub, plus gofmt and go vet.

…(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.
@allyblockcast

allyblockcast Bot commented Oct 25, 2026

Copy link
Copy Markdown
Contributor

🔗 Paperclip issue: BLO-22812
🔗 Paperclip issue: BLO-48422

@allyblockcast allyblockcast Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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: publish still builds dgs for a vote and returns len(dgs). So a large vote transaction still increments chunked (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 want chunked to count only datagrams actually sent on partition groups, have publish return 0 when Partitions is empty.

Strengths

  • Keeping PartVote reserved means a stale subscriber gets silence instead of another feed. The RefusedKeys rationale 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 -vote is now rejected, and the relay and native join tests moved to -nonvote without losing coverage.

Recommended Action

  1. No blocking changes requested.
  2. Merge once the remaining required CI checks finish green.

@kkroo
kkroo merged commit 3fe642f into main Oct 25, 2026
24 checks passed
@kkroo

kkroo commented Oct 25, 2026

Copy link
Copy Markdown
Contributor Author

Landed by kkroo drive session a2176509 at de0600b5: Ally 0C/0I at that head, drive-merge-gate PROCEED, one squash merge with a trailer-free message -> 3fe642f2.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant