Skip to content

fix: ensure vote packets can be retried#2605

Merged
jstarry merged 1 commit intoanza-xyz:masterfrom
jstarry:fix/retryable-vote-txs
Aug 15, 2024
Merged

fix: ensure vote packets can be retried#2605
jstarry merged 1 commit intoanza-xyz:masterfrom
jstarry:fix/retryable-vote-txs

Conversation

@jstarry
Copy link
Copy Markdown

@jstarry jstarry commented Aug 15, 2024

Problem

Retryable vote packets are not retried so any votes received at the end of a block won't ever get processed by the current leader leading to higher voting latency

This is because when we try to reinsert retryable vote tx packets, the reinserted vote tx's will have timestamps equal to but not greater than the latest stored vote tx's timestamp. So the "taken" vote packet never gets replenished.

Summary of Changes

Allow replacing existing latest votes when the latest vote is "taken" and the slot and timestamps are equivalent to the replaced vote.

Fixes #

@jstarry jstarry requested review from AshwinSekar and carllin and removed request for carllin August 15, 2024 06:05
@mergify
Copy link
Copy Markdown

mergify Bot commented Aug 15, 2024

Backports to the stable branch are to be avoided unless absolutely necessary for fixing bugs, security issues, and perf regressions. Changes intended for backport should be structured such that a minimum effective diff can be committed separately from any refactoring, plumbing, cleanup, etc that are not strictly necessary to achieve the goal. Any of the latter should go only into master and ride the normal stabilization schedule.

@mergify
Copy link
Copy Markdown

mergify Bot commented Aug 15, 2024

Backports to the beta branch are to be avoided unless absolutely necessary for fixing bugs, security issues, and perf regressions. Changes intended for backport should be structured such that a minimum effective diff can be committed separately from any refactoring, plumbing, cleanup, etc that are not strictly necessary to achieve the goal. Any of the latter should go only into master and ride the normal stabilization schedule. Exceptions include CI/metrics changes, CLI improvements and documentation updates on a case by case basis.

@jstarry jstarry requested a review from carllin August 15, 2024 06:09
@jstarry jstarry force-pushed the fix/retryable-vote-txs branch from cc63f99 to 7782a79 Compare August 15, 2024 06:16
Copy link
Copy Markdown

@AshwinSekar AshwinSekar left a comment

Choose a reason for hiding this comment

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

nice catch!

@jstarry jstarry merged commit ecb44d7 into anza-xyz:master Aug 15, 2024
mergify Bot pushed a commit that referenced this pull request Aug 15, 2024
(cherry picked from commit ecb44d7)

# Conflicts:
#	core/src/banking_stage/latest_unprocessed_votes.rs
mergify Bot pushed a commit that referenced this pull request Aug 15, 2024
@jstarry jstarry deleted the fix/retryable-vote-txs branch August 16, 2024 02:50
Comment on lines +222 to +233
match slot.cmp(&latest_vote.slot()) {
cmp::Ordering::Less => return false,
cmp::Ordering::Greater => return true,
cmp::Ordering::Equal => {}
};

// Slots are equal, now check timestamp
match timestamp.cmp(&latest_vote.timestamp()) {
cmp::Ordering::Less => return false,
cmp::Ordering::Greater => return true,
cmp::Ordering::Equal => {}
};
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit: can be combined with match (slot, timestamp).cmp((...)) { ... } maybe?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

That's neat. I'm satisfied with the less elegant way though :)

ray-kast pushed a commit to abklabs/agave that referenced this pull request Nov 27, 2024
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.

3 participants