@@ -446,7 +446,6 @@ private void handleLearnMessageProposer(String sender, LearnMessage learnMessage
446
446
isSatisfied = true ;
447
447
}
448
448
449
- // Leader is ready to move to the next request.
450
449
// Leader is ready to move to the next request.
451
450
if (isLeader () && !requests .isEmpty ()
452
451
&& messageLog .getProposersWithLearnedValue ().size () >= l ) {
@@ -463,8 +462,8 @@ private void handleLearnMessageProposer(String sender, LearnMessage learnMessage
463
462
this .isSatisfied = false ;
464
463
this .isProcessing = false ;
465
464
this .forwards = 0 ;
466
- handleClientRequest (clientId , request );
467
465
onStart ();
466
+ handleClientRequest (clientId , request );
468
467
}
469
468
470
469
if (this .proposerTimeoutId != -1 ) this .clearTimeout (this .proposerTimeoutId );
@@ -580,7 +579,10 @@ private void handleQueryMessage(String sender, QueryMessage queryMessage) {
580
579
if (queriedValue != null ) {
581
580
log .info ("Acceptor " + getId () + " sending REPLY to " + sender + " with value " + new String (queriedValue .getValue ()));
582
581
log .info ("Leader is " + leaderId );
583
- sendMessage (new ReplyMessage (messageLog .getAcceptedProposal (), true , sender , this .clientId ), leaderId );
582
+ sendMessage (new ReplyMessage (new Pair (
583
+ queriedValue .getValue (),
584
+ new ProposalNumber (this .viewNumber , this .proposalNumber )
585
+ ), true , sender , this .clientId ), leaderId );
584
586
} else {
585
587
log .info ("Acceptor " + getId () + " did not have a value to reply with" );
586
588
sendMessage (new ReplyMessage (new Pair (null ,
@@ -648,7 +650,7 @@ public void handleReplyMessage(String sender, ReplyMessage replyMessage) {
648
650
// Check if we have enough responses
649
651
if (messageLog .getResponses ().size () < quorum ) {
650
652
log .info ("Leader " + getId () + " did not receive enough responses yet." );
651
- // multicastMessage(new QueryMessage(viewNumber ), this.acceptorNodeIds);
653
+ multicastMessage (new QueryMessage (replyMessage . getValueAndProposalNumber (). getProposalNumber () ), this .acceptorNodeIds );
652
654
} else {
653
655
isRecovered = true ;
654
656
// Create the progress certificate
@@ -666,6 +668,10 @@ public void handleReplyMessage(String sender, ReplyMessage replyMessage) {
666
668
leaderOnStart (proposeMessage );
667
669
} else {
668
670
log .info ("Leader " + getId () + " could not find a majority value in the progress certificate" );
671
+ this .proposedValue = "new_v" .getBytes ();
672
+ ProposeMessage proposeMessage = new ProposeMessage (getId (), new Pair (this .proposedValue , new ProposalNumber (this .viewNumber , this .proposalNumber )), this .pc );
673
+ multicastMessage (proposeMessage , this .acceptorNodeIds );
674
+ leaderOnStart (proposeMessage );
669
675
}
670
676
}
671
677
}
@@ -680,7 +686,7 @@ public void handleReplyMessage(String sender, ReplyMessage replyMessage) {
680
686
*/
681
687
private void handleViewChangeMessage (String sender , ViewChangeMessage viewChangeMessage ) {
682
688
long proposalNumber = viewChangeMessage .getProposalNumber ().getViewNumber ();
683
- if (this .viewNumber > proposalNumber ) {
689
+ if (this .viewNumber >= proposalNumber ) {
684
690
log .info ("Replica " + getId () + " received VIEW_CHANGE message with an outdated view number" );
685
691
return ;
686
692
}
@@ -695,7 +701,7 @@ private void handleViewChangeMessage(String sender, ViewChangeMessage viewChange
695
701
this .viewNumber = proposalNumber ;
696
702
this .leaderId = viewChangeMessage .getNewLeaderId ();
697
703
this .setView (this .viewNumber , this .leaderId );
698
- this .proposalNumber ++ ;
704
+ this .proposalNumber = 1 ;
699
705
this .clearAllTimeouts ();
700
706
messageLog .acceptViewChange (viewChangeMessage );
701
707
this .isCurrentlyLeader = true ;
@@ -762,7 +768,7 @@ private void handleNewViewChangeMessage(String sender, NewViewChangeMessage newV
762
768
this .learnerTimeoutId = -1 ;
763
769
this .forwards = 0 ;
764
770
this .viewChangeRequests = 0 ;
765
- this .proposalNumber ++ ;
771
+ this .proposalNumber = 1 ;
766
772
767
773
if (isProposer ()) proposerOnStart ();
768
774
if (isLearner ()) learnerOnStart ();
@@ -779,8 +785,6 @@ public void electNewLeader() {
779
785
// Select the new leader based on the view number and node IDs
780
786
String newLeader = getNewLeader ();
781
787
log .info ("New leader candidate: " + newLeader );
782
- // this.isCurrentlyLeader = newLeader.equals(getId()); // This replica is the new leader
783
- // if (isLeader()) isRecovered = false;
784
788
785
789
// Notify the other replicas of the view change request
786
790
multicastMessage (new ViewChangeMessage (getId (), new ProposalNumber (this .viewNumber + 1 , this .proposalNumber ), newLeader ), this .getNodeIds ());
0 commit comments