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

Prevent Commit after ChangeView #642

Merged
merged 35 commits into from
Mar 25, 2019
Merged
Changes from 1 commit
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
aa16b7f
Prevent commit after ChangeView.
jsolman Mar 18, 2019
d686236
Minor simplification.
jsolman Mar 18, 2019
0d98768
Minimize differences.
jsolman Mar 18, 2019
d9ea44e
Don't consider view changing once F nodes committed.
jsolman Mar 19, 2019
57065f8
Add a comment describing current potential issues.
jsolman Mar 19, 2019
442bfe8
Save consensus context upon changing view to prevent split commit.
jsolman Mar 19, 2019
f471b32
Adjust comment concerning potential issues.
jsolman Mar 19, 2019
7d5b201
Further improve comment.
jsolman Mar 19, 2019
470b35c
Reduce to minimal changes to fix the main issue that can cause the ne…
jsolman Mar 19, 2019
bfb729e
Rename helper method that checks if F nodes are already committed.
jsolman Mar 19, 2019
76bd576
Greater than F nodes must have committed for it to not be possible fo…
jsolman Mar 19, 2019
ee72d58
Rename flag to MoreThanFNodesCommitted.
jsolman Mar 19, 2019
3dcc435
Merge branch 'master' into consensus/preventStall
vncoelho Mar 19, 2019
b18735e
Merge branch 'master' into consensus/preventStall
jsolman Mar 20, 2019
aa365fd
Make a new flag for clarity. Add TODO for fixing counting committed p…
jsolman Mar 20, 2019
4959176
Keep track of commit payloads in all views to support counting commits.
jsolman Mar 20, 2019
abb8063
Merge branch 'master' into consensus/preventStall
jsolman Mar 20, 2019
68f5235
Rename flag for clarity.
jsolman Mar 20, 2019
eee35cc
Remove unnecessary change of recording commit from another view.
jsolman Mar 20, 2019
2e7d8ad
Fix typo in comment.
jsolman Mar 20, 2019
28b45cc
If we already have a commit for the validator at the current view, we…
jsolman Mar 20, 2019
b6bf4da
Add warning log for receiving a different commit from a validator. A …
jsolman Mar 20, 2019
ce7685b
minor changes
erikzhang Mar 21, 2019
b8beafc
use `LogLevel.Warning`
erikzhang Mar 21, 2019
731b915
Merge branch 'master' into consensus/preventStall
erikzhang Mar 21, 2019
7ba991b
Check `ViewNumber` in `OnPrepareRequestReceived()` and `OnPrepareResp…
erikzhang Mar 21, 2019
6fc4864
Simplify `OnRecoveryMessageReceived()`
erikzhang Mar 21, 2019
b7e7981
minor change
erikzhang Mar 21, 2019
9838afc
Fix a merge issue. OnConsensusPayload method should not be accepting …
jsolman Mar 21, 2019
663a8ae
Revert "Fix a merge issue. OnConsensusPayload method should not be ac…
jsolman Mar 21, 2019
d0f89c6
Merge branch 'master' into consensus/preventStall
jsolman Mar 21, 2019
c3005ac
Merge branch 'master' into consensus/preventStall
shargon Mar 21, 2019
dda3e9a
Merge branch 'master' into consensus/preventStall
vncoelho Mar 24, 2019
5e925b0
Merge branch 'master' into consensus/preventStall
igormcoelho Mar 24, 2019
45091ce
Merge branch 'master' into consensus/preventStall
shargon Mar 25, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 3 additions & 6 deletions neo/Consensus/ConsensusService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -263,14 +263,10 @@ private void OnConsensusPayload(ConsensusPayload payload)
return;
}
if (payload.ValidatorIndex >= context.Validators.Length) return;
ConsensusMessage message = payload.ConsensusMessage;
if (message.ViewNumber != context.ViewNumber && (message.Type == ConsensusMessageType.PrepareRequest ||
jsolman marked this conversation as resolved.
Show resolved Hide resolved
message.Type == ConsensusMessageType.PrepareResponse))
return;
foreach (IP2PPlugin plugin in Plugin.P2PPlugins)
if (!plugin.OnConsensusMessage(payload))
return;
switch (message)
switch (payload.ConsensusMessage)
{
case ChangeView view:
OnChangeViewReceived(payload, view);
Expand Down Expand Up @@ -364,7 +360,7 @@ private void OnRecoveryMessageReceived(ConsensusPayload payload, RecoveryMessage
private void OnPrepareRequestReceived(ConsensusPayload payload, PrepareRequest message)
{
if (context.RequestSentOrReceived() || context.NotAcceptingPayloadsDueToViewChanging()) return;
if (payload.ValidatorIndex != context.PrimaryIndex) return;
if (payload.ValidatorIndex != context.PrimaryIndex || message.ViewNumber != context.ViewNumber) return;
Log($"{nameof(OnPrepareRequestReceived)}: height={payload.BlockIndex} view={message.ViewNumber} index={payload.ValidatorIndex} tx={message.TransactionHashes.Length}");
if (message.Timestamp <= context.PrevHeader().Timestamp || message.Timestamp > TimeProvider.Current.UtcNow.AddMinutes(10).ToTimestamp())
{
Expand Down Expand Up @@ -424,6 +420,7 @@ private void OnPrepareRequestReceived(ConsensusPayload payload, PrepareRequest m

private void OnPrepareResponseReceived(ConsensusPayload payload, PrepareResponse message)
{
if (message.ViewNumber != context.ViewNumber) return;
if (context.PreparationPayloads[payload.ValidatorIndex] != null || context.NotAcceptingPayloadsDueToViewChanging()) return;
if (context.PreparationPayloads[context.PrimaryIndex] != null && !message.PreparationHash.Equals(context.PreparationPayloads[context.PrimaryIndex].Hash))
return;
Expand Down