Skip to content

Commit

Permalink
Fix and optimize view changing (#590)
Browse files Browse the repository at this point in the history
  • Loading branch information
erikzhang authored Feb 19, 2019
1 parent 19ada04 commit 445fa92
Showing 1 changed file with 7 additions and 1 deletion.
8 changes: 7 additions & 1 deletion neo/Consensus/ConsensusService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,12 @@ private void CheckExpectedView(byte viewNumber)
{
if (context.ViewNumber == viewNumber) return;
if (context.ChangeViewPayloads.Count(p => p != null && p.GetDeserializedMessage<ChangeView>().NewViewNumber == viewNumber) >= context.M)
{
ChangeView message = context.ChangeViewPayloads[context.MyIndex]?.GetDeserializedMessage<ChangeView>();
if (message is null || message.NewViewNumber < viewNumber)
localNode.Tell(new LocalNode.SendDirectly { Inventory = context.MakeChangeView(viewNumber) });
InitializeConsensus(viewNumber);
}
}

private void CheckPreparations()
Expand Down Expand Up @@ -494,7 +499,8 @@ public static Props Props(IActorRef localNode, IActorRef taskManager, Store stor
private void RequestChangeView()
{
context.State |= ConsensusState.ViewChanging;
byte expectedView = GetLastExpectedView(context.MyIndex);
byte expectedView = context.ChangeViewPayloads[context.MyIndex]?.GetDeserializedMessage<ChangeView>().NewViewNumber ?? 0;
if (expectedView < context.ViewNumber) expectedView = context.ViewNumber;
expectedView++;
Log($"request change view: height={context.BlockIndex} view={context.ViewNumber} nv={expectedView} state={context.State}");
ChangeTimer(TimeSpan.FromSeconds(Blockchain.SecondsPerBlock << (expectedView + 1)));
Expand Down

0 comments on commit 445fa92

Please sign in to comment.