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

Make {TERM, b} messages count towards {BVAL, b} thresholds #38

Merged
merged 2 commits into from
Jan 25, 2019

Conversation

Vagabond
Copy link
Member

This prevents slow nodes not sending an AUX because they don't count
{TERM, b} towards 2f+1 {BVAL, b} messages. This also prevents f+1
{BVAL, b} messages from triggering a send of {BVAL, b} if it has not
already been sent.

Additionally don't lose the fact that we broadcast a bval value.

This prevents slow nodes not sending an AUX because they don't count
{TERM, b} towards 2f+1 {BVAL, b} messages. This also prevents f+1
{BVAL, b} messages from triggering a send of {BVAL, b} if it has not
already been sent.

Additionally don't lose the fact that we broadcast a bval value.
@Vagabond Vagabond requested review from vihu and evanmcc January 17, 2019 17:03
@coveralls
Copy link

coveralls commented Jan 17, 2019

Pull Request Test Coverage Report for Build 368

  • 7 of 8 (87.5%) changed or added relevant lines in 1 file are covered.
  • 1 unchanged line in 1 file lost coverage.
  • Overall coverage increased (+0.07%) to 82.851%

Changes Missing Coverage Covered Lines Changed/Added Lines %
src/hbbft_bba.erl 7 8 87.5%
Files with Coverage Reduction New Missed Lines %
src/hbbft_bba.erl 1 82.67%
Totals Coverage Status
Change from base Build 364: 0.07%
Covered Lines: 401
Relevant Lines: 484

💛 - Coveralls

@@ -149,7 +149,7 @@ handle_msg(_Data, _J, _Msg) ->
bval(Data=#bba_data{f=F}, Id, V) ->
%% add to witnesses
Witness = add_witness(Id, V, Data#bba_data.bval_witness, true),
WitnessCount = maps:get({val, V}, Witness, 0),
WitnessCount = maps:get({val, V}, Witness, 0) + maps:get({val, V}, Data#bba_data.terminate_witness, 0),
Copy link
Contributor

@evanmcc evanmcc Jan 18, 2019

Choose a reason for hiding this comment

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

I have some safety concerns here. This implementation allows nodes to effectively vote twice for a value. I think that this is only safe if the witness tracks the source and only allows one vote per node.

Copy link
Member Author

Choose a reason for hiding this comment

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

Which kind of vote, it is technically valid, I think, for a node to vote for a bval value twice?

Copy link
Contributor

Choose a reason for hiding this comment

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

I guess I was thinking that a malign set of nodes could emit both immediately, which would push the node over the threshold I think?

Copy link
Member Author

Choose a reason for hiding this comment

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

add_witness has an 'allow union' flag that prevents changing your vote in the case of a TERM message. BVAL votes are allowed to be made for both values (as the node will emit a {BVAL, b} message once it sees f+1 {BVAL, b} messages).

I'm not clear how many AUX messages can be emitted per round. I think just one, but I'm not sure. Currently it allows a node to propose both.

CONF messages don't use add_witness, but they probably should. and they should allow only a single vote from a node per round.

Copy link
Member Author

Choose a reason for hiding this comment

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

I have added a commit to prevent more than one AUX or CONF message per round. TERM was already limited and BVAL should allow multiples.

@Vagabond Vagabond merged commit 279fc5a into master Jan 25, 2019
@Vagabond Vagabond deleted the adt/bba-count-term-against-bval branch January 25, 2019 17:57
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.

None yet

3 participants