Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: ensure vote packets can be retried #2605

Merged
merged 1 commit into from
Aug 15, 2024

Conversation

jstarry
Copy link

@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 carllin and AshwinSekar and removed request for carllin August 15, 2024 06:05
@jstarry jstarry added v1.18 v2.0 Backport to v2.0 branch labels Aug 15, 2024
Copy link

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.

Copy link

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.

Copy link

@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
41 checks passed
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
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
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 :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
v1.18 v2.0 Backport to v2.0 branch
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants