Skip to content

Commit 95395e7

Browse files
committed
Small fixes + testing small-scope
1 parent 296b81f commit 95395e7

12 files changed

+260
-247
lines changed

simulator/src/main/java/byzzbench/simulator/protocols/fab2/FastByzantineReplica.java

+13-9
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,6 @@ private void handleLearnMessageProposer(String sender, LearnMessage learnMessage
446446
isSatisfied = true;
447447
}
448448

449-
// Leader is ready to move to the next request.
450449
// Leader is ready to move to the next request.
451450
if (isLeader() && !requests.isEmpty()
452451
&& messageLog.getProposersWithLearnedValue().size() >= l) {
@@ -463,8 +462,8 @@ private void handleLearnMessageProposer(String sender, LearnMessage learnMessage
463462
this.isSatisfied = false;
464463
this.isProcessing = false;
465464
this.forwards = 0;
466-
handleClientRequest(clientId, request);
467465
onStart();
466+
handleClientRequest(clientId, request);
468467
}
469468

470469
if (this.proposerTimeoutId != -1) this.clearTimeout(this.proposerTimeoutId);
@@ -580,7 +579,10 @@ private void handleQueryMessage(String sender, QueryMessage queryMessage) {
580579
if (queriedValue != null) {
581580
log.info("Acceptor " + getId() + " sending REPLY to " + sender + " with value " + new String(queriedValue.getValue()));
582581
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);
584586
} else {
585587
log.info("Acceptor " + getId() + " did not have a value to reply with");
586588
sendMessage(new ReplyMessage(new Pair(null,
@@ -648,7 +650,7 @@ public void handleReplyMessage(String sender, ReplyMessage replyMessage) {
648650
// Check if we have enough responses
649651
if (messageLog.getResponses().size() < quorum) {
650652
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);
652654
} else {
653655
isRecovered = true;
654656
// Create the progress certificate
@@ -666,6 +668,10 @@ public void handleReplyMessage(String sender, ReplyMessage replyMessage) {
666668
leaderOnStart(proposeMessage);
667669
} else {
668670
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);
669675
}
670676
}
671677
}
@@ -680,7 +686,7 @@ public void handleReplyMessage(String sender, ReplyMessage replyMessage) {
680686
*/
681687
private void handleViewChangeMessage(String sender, ViewChangeMessage viewChangeMessage) {
682688
long proposalNumber = viewChangeMessage.getProposalNumber().getViewNumber();
683-
if (this.viewNumber > proposalNumber) {
689+
if (this.viewNumber >= proposalNumber) {
684690
log.info("Replica " + getId() + " received VIEW_CHANGE message with an outdated view number");
685691
return;
686692
}
@@ -695,7 +701,7 @@ private void handleViewChangeMessage(String sender, ViewChangeMessage viewChange
695701
this.viewNumber = proposalNumber;
696702
this.leaderId = viewChangeMessage.getNewLeaderId();
697703
this.setView(this.viewNumber, this.leaderId);
698-
this.proposalNumber++;
704+
this.proposalNumber = 1;
699705
this.clearAllTimeouts();
700706
messageLog.acceptViewChange(viewChangeMessage);
701707
this.isCurrentlyLeader = true;
@@ -762,7 +768,7 @@ private void handleNewViewChangeMessage(String sender, NewViewChangeMessage newV
762768
this.learnerTimeoutId = -1;
763769
this.forwards = 0;
764770
this.viewChangeRequests = 0;
765-
this.proposalNumber++;
771+
this.proposalNumber = 1;
766772

767773
if (isProposer()) proposerOnStart();
768774
if (isLearner()) learnerOnStart();
@@ -779,8 +785,6 @@ public void electNewLeader() {
779785
// Select the new leader based on the view number and node IDs
780786
String newLeader = getNewLeader();
781787
log.info("New leader candidate: " + newLeader);
782-
// this.isCurrentlyLeader = newLeader.equals(getId()); // This replica is the new leader
783-
// if (isLeader()) isRecovered = false;
784788

785789
// Notify the other replicas of the view change request
786790
multicastMessage(new ViewChangeMessage(getId(), new ProposalNumber(this.viewNumber + 1, this.proposalNumber), newLeader), this.getNodeIds());

simulator/src/main/java/byzzbench/simulator/protocols/fab2/MessageLog.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,16 @@ public boolean onPropose(String senderId, ProposeMessage proposeMessage, int vou
130130
byte[] messageProposedValue = proposeMessage.getValueAndProposalNumber().getValue();
131131
ProgressCertificate progressCertificate = proposeMessage.getProgressCertificate();
132132

133+
log.info("Replica view: " + this.replica.getViewNumber() + " Proposed view: " + proposalNumber.getViewNumber());
134+
log.info("Replica sequence number: " + this.replica.getProposalNumber() + " Proposed seq: " + proposalNumber.getSequenceNumber());
135+
133136
// Checking if the proposed value is for the same view and sequence number
134137
if (proposalNumber.getViewNumber() != this.replica.getViewNumber()) {
135138
log.info("The view number of the PROPOSE message is not the same as the current view number");
136139
return false; // Only listen to current leader
137-
} else if (proposalNumber.getSequenceNumber() != this.replica.getProposalNumber()) {
140+
}
141+
142+
if (proposalNumber.getSequenceNumber() != this.replica.getProposalNumber()) {
138143
log.info("The sequence number of the PROPOSE message is not the same as the current sequence number");
139144
return false; // Ignore proposals with different sequence numbers
140145
}

simulator/src/main/java/byzzbench/simulator/protocols/fab2/mutator/AcceptMessageMutatorFactory2.java

+35-35
Original file line numberDiff line numberDiff line change
@@ -150,43 +150,43 @@ public void accept(FaultContext serializable) {
150150

151151
messageEvent.setPayload(mutatedMessage);
152152
}
153-
},
153+
}
154154

155155
// Any-scope
156-
new MessageMutationFault(
157-
"fab-accept-any2",
158-
"any-scope AcceptMessage mutation",
159-
List.of(AcceptMessage.class)
160-
) {
161-
@Override
162-
public void accept(FaultContext serializable) {
163-
Optional<Event> event = serializable.getEvent();
164-
Random random = new Random();
165-
int mutation = random.nextInt(2, 100);
166-
167-
if (event.isEmpty()) {
168-
throw new IllegalArgumentException("Invalid message type");
169-
}
170-
171-
if (!(event.get() instanceof MessageEvent messageEvent)) {
172-
throw new IllegalArgumentException("Invalid message type");
173-
}
174-
175-
if (!(messageEvent.getPayload() instanceof AcceptMessage message)) {
176-
throw new IllegalArgumentException("Invalid message type");
177-
}
178-
179-
AcceptMessage mutatedMessage = message.withValueAndProposalNumber(
180-
new Pair(message.getValueAndProposalNumber().getValue(),
181-
new ProposalNumber(
182-
message.getValueAndProposalNumber().getProposalNumber().getViewNumber(),
183-
message.getValueAndProposalNumber().getProposalNumber().getSequenceNumber() + mutation
184-
))
185-
);
186-
187-
messageEvent.setPayload(mutatedMessage);
188-
}
189-
}
156+
// new MessageMutationFault(
157+
// "fab-accept-any2",
158+
// "any-scope AcceptMessage mutation",
159+
// List.of(AcceptMessage.class)
160+
// ) {
161+
// @Override
162+
// public void accept(FaultContext serializable) {
163+
// Optional<Event> event = serializable.getEvent();
164+
// Random random = new Random();
165+
// int mutation = random.nextInt(2, 100);
166+
//
167+
// if (event.isEmpty()) {
168+
// throw new IllegalArgumentException("Invalid message type");
169+
// }
170+
//
171+
// if (!(event.get() instanceof MessageEvent messageEvent)) {
172+
// throw new IllegalArgumentException("Invalid message type");
173+
// }
174+
//
175+
// if (!(messageEvent.getPayload() instanceof AcceptMessage message)) {
176+
// throw new IllegalArgumentException("Invalid message type");
177+
// }
178+
//
179+
// AcceptMessage mutatedMessage = message.withValueAndProposalNumber(
180+
// new Pair(message.getValueAndProposalNumber().getValue(),
181+
// new ProposalNumber(
182+
// message.getValueAndProposalNumber().getProposalNumber().getViewNumber(),
183+
// message.getValueAndProposalNumber().getProposalNumber().getSequenceNumber() + mutation
184+
// ))
185+
// );
186+
//
187+
// messageEvent.setPayload(mutatedMessage);
188+
// }
189+
// }
190190
);
191191
}
192192
}

simulator/src/main/java/byzzbench/simulator/protocols/fab2/mutator/LearnMessageMutatorFactory2.java

+34-34
Original file line numberDiff line numberDiff line change
@@ -85,42 +85,42 @@ public void accept(FaultContext serializable) {
8585

8686
messageEvent.setPayload(mutatedMessage);
8787
}
88-
},
89-
90-
new MessageMutationFault(
91-
"fab-learn-any",
92-
"Any Learn Number",
93-
List.of(LearnMessage.class)
94-
) {
95-
@Override
96-
public void accept(FaultContext serializable) {
97-
Optional<Event> event = serializable.getEvent();
98-
Random random = new Random();
99-
int mutation = random.nextInt(2, 100);
100-
101-
if (event.isEmpty()) {
102-
throw new IllegalArgumentException("Invalid message type");
10388
}
10489

105-
if (!(event.get() instanceof MessageEvent messageEvent)) {
106-
throw new IllegalArgumentException("Invalid message type");
107-
}
108-
109-
if (!(messageEvent.getPayload() instanceof LearnMessage message)) {
110-
throw new IllegalArgumentException("Invalid message type");
111-
}
112-
113-
LearnMessage mutatedMessage = message.withValueAndProposalNumber(
114-
new Pair(message.getValueAndProposalNumber().getValue(),
115-
new ProposalNumber(
116-
message.getValueAndProposalNumber().getProposalNumber().getViewNumber(),
117-
message.getValueAndProposalNumber().getProposalNumber().getSequenceNumber() + mutation
118-
))
119-
);
120-
121-
messageEvent.setPayload(mutatedMessage);
122-
}
123-
}
90+
// new MessageMutationFault(
91+
// "fab-learn-any",
92+
// "Any Learn Number",
93+
// List.of(LearnMessage.class)
94+
// ) {
95+
// @Override
96+
// public void accept(FaultContext serializable) {
97+
// Optional<Event> event = serializable.getEvent();
98+
// Random random = new Random();
99+
// int mutation = random.nextInt(2, 100);
100+
//
101+
// if (event.isEmpty()) {
102+
// throw new IllegalArgumentException("Invalid message type");
103+
// }
104+
//
105+
// if (!(event.get() instanceof MessageEvent messageEvent)) {
106+
// throw new IllegalArgumentException("Invalid message type");
107+
// }
108+
//
109+
// if (!(messageEvent.getPayload() instanceof LearnMessage message)) {
110+
// throw new IllegalArgumentException("Invalid message type");
111+
// }
112+
//
113+
// LearnMessage mutatedMessage = message.withValueAndProposalNumber(
114+
// new Pair(message.getValueAndProposalNumber().getValue(),
115+
// new ProposalNumber(
116+
// message.getValueAndProposalNumber().getProposalNumber().getViewNumber(),
117+
// message.getValueAndProposalNumber().getProposalNumber().getSequenceNumber() + mutation
118+
// ))
119+
// );
120+
//
121+
// messageEvent.setPayload(mutatedMessage);
122+
// }
123+
// }
124124
);
125125
}
126126
}

simulator/src/main/java/byzzbench/simulator/protocols/fab2/mutator/ProposeMessageMutatorFactory2.java

+34-34
Original file line numberDiff line numberDiff line change
@@ -87,40 +87,40 @@ public void accept(FaultContext serializable) {
8787
}
8888
},
8989

90-
new MessageMutationFault(
91-
"fab-propose-any",
92-
"Any Propose Number",
93-
List.of(ProposeMessage.class)
94-
) {
95-
@Override
96-
public void accept(FaultContext serializable) {
97-
Optional<Event> event = serializable.getEvent();
98-
Random random = new Random();
99-
int mutation = random.nextInt(2, 100);
100-
101-
if (event.isEmpty()) {
102-
throw new IllegalArgumentException("Invalid message type");
103-
}
104-
105-
if (!(event.get() instanceof MessageEvent messageEvent)) {
106-
throw new IllegalArgumentException("Invalid message type");
107-
}
108-
109-
if (!(messageEvent.getPayload() instanceof ProposeMessage message)) {
110-
throw new IllegalArgumentException("Invalid message type");
111-
}
112-
113-
ProposeMessage mutatedMessage = message.withValueAndProposalNumber(
114-
new Pair(message.getValueAndProposalNumber().getValue(),
115-
new ProposalNumber(
116-
message.getValueAndProposalNumber().getProposalNumber().getViewNumber(),
117-
message.getValueAndProposalNumber().getProposalNumber().getSequenceNumber() + mutation
118-
))
119-
);
120-
121-
messageEvent.setPayload(mutatedMessage);
122-
}
123-
},
90+
// new MessageMutationFault(
91+
// "fab-propose-any",
92+
// "Any Propose Number",
93+
// List.of(ProposeMessage.class)
94+
// ) {
95+
// @Override
96+
// public void accept(FaultContext serializable) {
97+
// Optional<Event> event = serializable.getEvent();
98+
// Random random = new Random();
99+
// int mutation = random.nextInt(2, 100);
100+
//
101+
// if (event.isEmpty()) {
102+
// throw new IllegalArgumentException("Invalid message type");
103+
// }
104+
//
105+
// if (!(event.get() instanceof MessageEvent messageEvent)) {
106+
// throw new IllegalArgumentException("Invalid message type");
107+
// }
108+
//
109+
// if (!(messageEvent.getPayload() instanceof ProposeMessage message)) {
110+
// throw new IllegalArgumentException("Invalid message type");
111+
// }
112+
//
113+
// ProposeMessage mutatedMessage = message.withValueAndProposalNumber(
114+
// new Pair(message.getValueAndProposalNumber().getValue(),
115+
// new ProposalNumber(
116+
// message.getValueAndProposalNumber().getProposalNumber().getViewNumber(),
117+
// message.getValueAndProposalNumber().getProposalNumber().getSequenceNumber() + mutation
118+
// ))
119+
// );
120+
//
121+
// messageEvent.setPayload(mutatedMessage);
122+
// }
123+
// },
124124

125125
new MessageMutationFault(
126126
"fab-propose-value",

0 commit comments

Comments
 (0)