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

refactor(consensus): separate sending votes from "pick votes" logic #2659

Merged
merged 7 commits into from
Mar 20, 2024

Conversation

sergio-mena
Copy link
Contributor

This is done by @adizere , @ebuchman , and @sergio-mena as part of a refactoring spree :-)

The goal of this is to improve testability of gossipVotesRoutine by separating out the logic for picking which vote to send. We introduced a new pure function, pickVoteToSend, which returns a vote, and then call the new SendVoteSetHasVote method to send it. This greatly simplifies the loop in gossipVoteRoutine, and allows the pickVoteToSend function to be independently tested.

Note for reviewers:

  • This is pure refactoring, no logic change was intended.
  • This PR can be reviewed commit by commit

PR checklist

  • Tests written/updated
  • Changelog entry added in .changelog (we use unclog to manage our changelog)
  • Updated relevant documentation (docs/ or spec/) and code comments
  • Title follows the Conventional Commits spec

Copy link
Contributor

@andynog andynog left a comment

Choose a reason for hiding this comment

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

just added a suggestion

internal/consensus/reactor.go Show resolved Hide resolved
Copy link
Contributor

@cason cason left a comment

Choose a reason for hiding this comment

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

Good refactoring. Separating the logic for picking a vote to send to a peer from the actual sending logic is a good improvement.

I left some comments with suggestions. I would separate the most common logic, pick a vote from the current height, from the catchup logic, that takes votes from previous heights.

internal/consensus/reactor.go Outdated Show resolved Hide resolved
internal/consensus/reactor.go Show resolved Hide resolved
internal/consensus/reactor.go Show resolved Hide resolved
internal/consensus/reactor.go Show resolved Hide resolved
internal/consensus/reactor.go Outdated Show resolved Hide resolved
internal/consensus/reactor.go Show resolved Hide resolved
sergio-mena and others added 2 commits March 20, 2024 17:04
Co-authored-by: Daniel <daniel.cason@informal.systems>
@sergio-mena sergio-mena added this pull request to the merge queue Mar 20, 2024
Merged via the queue into main with commit 34e41c5 Mar 20, 2024
21 checks passed
@sergio-mena sergio-mena deleted the sergio/gossip-votes-extract-io branch March 20, 2024 16:39
@adizere adizere added this to the 2024-Q1 milestone Mar 25, 2024
github-merge-queue bot pushed a commit that referenced this pull request Apr 17, 2024
…gic (#2663)

This was done by @ebuchman as part of a refactoring spree :-)

The goal of this is to improve testability of `gossipDataRoutine` by
separating out the logic for picking which block part to send. We
introduced a new pure function, `pickPartToSend`, which returns a block
part, and then call the new `SendPartSetHasPart` method to send it and
update the peer state. This greatly simplifies the loop in
`gossipDataRoutine`, and allows the `pickPartToSend` function to be
independently tested.

Note for reviewers:
* This PR is built on top of #2659
* This is pure refactoring, no logic change was intended.
* This PR can be reviewed commit by commit

---

#### PR checklist

- [ ] Tests written/updated
- [ ] Changelog entry added in `.changelog` (we use
[unclog](https://github.com/informalsystems/unclog) to manage our
changelog)
- [ ] Updated relevant documentation (`docs/` or `spec/`) and code
comments
- [x] Title follows the [Conventional
Commits](https://www.conventionalcommits.org/en/v1.0.0/) spec

---------

Co-authored-by: Sergio Mena <sergio@informal.systems>
Co-authored-by: Ethan Buchman <ethan@coinculture.info>
mergify bot pushed a commit that referenced this pull request May 9, 2024
…gic (#2663)

This was done by @ebuchman as part of a refactoring spree :-)

The goal of this is to improve testability of `gossipDataRoutine` by
separating out the logic for picking which block part to send. We
introduced a new pure function, `pickPartToSend`, which returns a block
part, and then call the new `SendPartSetHasPart` method to send it and
update the peer state. This greatly simplifies the loop in
`gossipDataRoutine`, and allows the `pickPartToSend` function to be
independently tested.

Note for reviewers:
* This PR is built on top of #2659
* This is pure refactoring, no logic change was intended.
* This PR can be reviewed commit by commit

---

#### PR checklist

- [ ] Tests written/updated
- [ ] Changelog entry added in `.changelog` (we use
[unclog](https://github.com/informalsystems/unclog) to manage our
changelog)
- [ ] Updated relevant documentation (`docs/` or `spec/`) and code
comments
- [x] Title follows the [Conventional
Commits](https://www.conventionalcommits.org/en/v1.0.0/) spec

---------

Co-authored-by: Sergio Mena <sergio@informal.systems>
Co-authored-by: Ethan Buchman <ethan@coinculture.info>
(cherry picked from commit 163f2d5)

# Conflicts:
#	internal/consensus/reactor.go
@melekes
Copy link
Contributor

melekes commented May 9, 2024

@mergify backport v1.x

Copy link
Contributor

mergify bot commented May 9, 2024

backport v1.x

✅ Backports have been created

mergify bot pushed a commit that referenced this pull request May 9, 2024
…2659)

This is done by @adizere , @ebuchman , and @sergio-mena as part of a
refactoring spree :-)

The goal of this is to improve testability of gossipVotesRoutine by
separating out the logic for picking which vote to send. We introduced a
new pure function, pickVoteToSend, which returns a vote, and then call
the new SendVoteSetHasVote method to send it. This greatly simplifies
the loop in gossipVoteRoutine, and allows the pickVoteToSend function to
be independently tested.

Note for reviewers:
* This is pure refactoring, no logic change was intended.
* This PR can be reviewed commit by commit

---

#### PR checklist

- [ ] Tests written/updated
- [ ] Changelog entry added in `.changelog` (we use
[unclog](https://github.com/informalsystems/unclog) to manage our
changelog)
- [ ] Updated relevant documentation (`docs/` or `spec/`) and code
comments
- [ ] Title follows the [Conventional
Commits](https://www.conventionalcommits.org/en/v1.0.0/) spec

---------

Co-authored-by: Daniel <daniel.cason@informal.systems>
(cherry picked from commit 34e41c5)
melekes pushed a commit that referenced this pull request May 9, 2024
…backport #2659) (#3047)

This is done by @adizere , @ebuchman , and @sergio-mena as part of a
refactoring spree :-)

The goal of this is to improve testability of gossipVotesRoutine by
separating out the logic for picking which vote to send. We introduced a
new pure function, pickVoteToSend, which returns a vote, and then call
the new SendVoteSetHasVote method to send it. This greatly simplifies
the loop in gossipVoteRoutine, and allows the pickVoteToSend function to
be independently tested.

Note for reviewers:
* This is pure refactoring, no logic change was intended.
* This PR can be reviewed commit by commit

---

#### PR checklist

- [ ] Tests written/updated
- [ ] Changelog entry added in `.changelog` (we use
[unclog](https://github.com/informalsystems/unclog) to manage our
changelog)
- [ ] Updated relevant documentation (`docs/` or `spec/`) and code
comments
- [ ] Title follows the [Conventional
Commits](https://www.conventionalcommits.org/en/v1.0.0/) spec
<hr>This is an automatic backport of pull request #2659 done by
[Mergify](https://mergify.com).

Co-authored-by: Sergio Mena <sergio@informal.systems>
melekes added a commit that referenced this pull request May 9, 2024
…gic (backport #2663) (#3046)

This was done by @ebuchman as part of a refactoring spree :-)

The goal of this is to improve testability of `gossipDataRoutine` by
separating out the logic for picking which block part to send. We
introduced a new pure function, `pickPartToSend`, which returns a block
part, and then call the new `SendPartSetHasPart` method to send it and
update the peer state. This greatly simplifies the loop in
`gossipDataRoutine`, and allows the `pickPartToSend` function to be
independently tested.

Note for reviewers:
* This PR is built on top of #2659
* This is pure refactoring, no logic change was intended.
* This PR can be reviewed commit by commit

---

#### PR checklist

- [ ] Tests written/updated
- [ ] Changelog entry added in `.changelog` (we use
[unclog](https://github.com/informalsystems/unclog) to manage our
changelog)
- [ ] Updated relevant documentation (`docs/` or `spec/`) and code
comments
- [x] Title follows the [Conventional
Commits](https://www.conventionalcommits.org/en/v1.0.0/) spec
<hr>This is an automatic backport of pull request #2663 done by
[Mergify](https://mergify.com).

---------

Co-authored-by: Daniel <daniel.cason@informal.systems>
Co-authored-by: Anton Kaliaev <anton.kalyaev@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

None yet

6 participants