Skip to content

Commit be109e5

Browse files
committed
random scheduler: add helper method to get random element from list
1 parent 643b8b3 commit be109e5

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

simulator/src/main/java/byzzbench/simulator/scheduler/RandomScheduler.java

+9-6
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,14 @@
2525
public class RandomScheduler extends BaseScheduler {
2626
private final Random random = new Random();
2727

28-
2928
public RandomScheduler(ByzzBenchConfig config, MessageMutatorService messageMutatorService) {
3029
super(config, messageMutatorService);
3130
}
3231

32+
public <T> T getRandomElement(List<T> list) {
33+
return list.get(random.nextInt(list.size()));
34+
}
35+
3336
@Override
3437
public String getId() {
3538
return "Random";
@@ -69,7 +72,7 @@ public synchronized Optional<EventDecision> scheduleNext(Scenario scenario) thro
6972
// check if we should trigger a timeout
7073
dieRoll -= timeoutWeight;
7174
if (dieRoll < 0) {
72-
Event timeout = timeoutEvents.get(random.nextInt(timeoutEvents.size()));
75+
Event timeout = getRandomElement(timeoutEvents);
7376
scenario.getTransport().deliverEvent(timeout.getEventId());
7477
EventDecision decision = new EventDecision(EventDecision.DecisionType.DELIVERED, timeout.getEventId());
7578
return Optional.of(decision);
@@ -87,7 +90,7 @@ public synchronized Optional<EventDecision> scheduleNext(Scenario scenario) thro
8790
// check if we should target delivering a request from a client to a replica
8891
dieRoll -= deliverClientRequestWeight;
8992
if (dieRoll < 0) {
90-
Event request = clientRequestEvents.get(random.nextInt(clientRequestEvents.size()));
93+
Event request = getRandomElement(clientRequestEvents);
9194
scenario.getTransport().deliverEvent(request.getEventId());
9295
EventDecision decision = new EventDecision(EventDecision.DecisionType.DELIVERED, request.getEventId());
9396
return Optional.of(decision);
@@ -96,7 +99,7 @@ public synchronized Optional<EventDecision> scheduleNext(Scenario scenario) thro
9699
// check if we should drop a message sent between nodes
97100
dieRoll -= dropMessageWeight;
98101
if (dieRoll < 0) {
99-
Event message = messageEvents.get(random.nextInt(messageEvents.size()));
102+
Event message = getRandomElement(messageEvents);
100103
scenario.getTransport().dropEvent(message.getEventId());
101104
EventDecision decision = new EventDecision(EventDecision.DecisionType.DROPPED, message.getEventId());
102105
return Optional.of(decision);
@@ -105,7 +108,7 @@ public synchronized Optional<EventDecision> scheduleNext(Scenario scenario) thro
105108
// check if we should mutate-and-deliver a message sent between nodes
106109
dieRoll -= mutateMessageWeight;
107110
if (dieRoll < 0) {
108-
Event message = mutateableMessageEvents.get(random.nextInt(mutateableMessageEvents.size()));
111+
Event message = getRandomElement(mutateableMessageEvents);
109112
List<MessageMutationFault> mutators = this.getMessageMutatorService().getMutatorsForEvent(message);
110113

111114
if (mutators.isEmpty()) {
@@ -115,7 +118,7 @@ public synchronized Optional<EventDecision> scheduleNext(Scenario scenario) thro
115118
}
116119
scenario.getTransport().applyMutation(
117120
message.getEventId(),
118-
mutators.get(random.nextInt(mutators.size())));
121+
getRandomElement(mutators));
119122
scenario.getTransport().deliverEvent(message.getEventId());
120123

121124
EventDecision decision = new EventDecision(EventDecision.DecisionType.MUTATED_AND_DELIVERED, message.getEventId());

0 commit comments

Comments
 (0)