Skip to content

Commit b5b60b0

Browse files
committed
decide which replicas are byzantine during scenario setup
1 parent 394409f commit b5b60b0

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

simulator/src/main/java/byzzbench/simulator/BaseScenario.java

+9
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,15 @@ public synchronized Node getNode(String nodeId) {
166166
@Override
167167
public final void setupScenario() {
168168
this.setup();
169+
170+
// sample f replicas to be faulty at start
171+
List<String> replicaIds = new ArrayList<>(this.getReplicas().keySet());
172+
Collections.shuffle(replicaIds);
173+
int f = this.maxFaultyReplicas();
174+
for (int i = 0; i < f; i++) {
175+
this.markReplicaFaulty(replicaIds.get(i));
176+
}
177+
169178
this.getClients().values().forEach(Client::initialize);
170179
this.getNodes().values().forEach(Node::initialize);
171180
this.scheduler.initializeScenario(this);

simulator/src/main/java/byzzbench/simulator/faults/factories/ByzzFuzzScenarioFaultFactory.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public List<Fault> generateFaults(FaultContext input) {
3737
int d = scheduler.getNumRoundsWithNetworkFaults();
3838
int r = scheduler.getNumRoundsWithFaults();
3939
Set<String> replicaIds = scenario.getReplicas().keySet();
40+
Set<String> faultyReplicaIds = scenario.getFaultyReplicaIds();
4041

4142
// Create network faults
4243
for (int i = 1; i <= d; i++) {
@@ -49,7 +50,7 @@ public List<Fault> generateFaults(FaultContext input) {
4950
// Create process faults
5051
for (int i = 1; i <= c; i++) {
5152
int round = rand.nextInt(r) + 1;
52-
String sender = replicaIds.stream().skip(rand.nextInt(replicaIds.size())).findFirst().orElseThrow();
53+
String sender = input.getScenario().getFaultyReplicaIds().stream().skip(rand.nextInt(faultyReplicaIds.size())).findFirst().orElseThrow();
5354
Set<String> recipientIds = SetSubsets.getRandomNonEmptySubset(replicaIds);
5455

5556
// generate process fault

0 commit comments

Comments
 (0)