25
25
public class RandomScheduler extends BaseScheduler {
26
26
private final Random random = new Random ();
27
27
28
-
29
28
public RandomScheduler (ByzzBenchConfig config , MessageMutatorService messageMutatorService ) {
30
29
super (config , messageMutatorService );
31
30
}
32
31
32
+ public <T > T getRandomElement (List <T > list ) {
33
+ return list .get (random .nextInt (list .size ()));
34
+ }
35
+
33
36
@ Override
34
37
public String getId () {
35
38
return "Random" ;
@@ -69,7 +72,7 @@ public synchronized Optional<EventDecision> scheduleNext(Scenario scenario) thro
69
72
// check if we should trigger a timeout
70
73
dieRoll -= timeoutWeight ;
71
74
if (dieRoll < 0 ) {
72
- Event timeout = timeoutEvents . get ( random . nextInt ( timeoutEvents . size ()) );
75
+ Event timeout = getRandomElement ( timeoutEvents );
73
76
scenario .getTransport ().deliverEvent (timeout .getEventId ());
74
77
EventDecision decision = new EventDecision (EventDecision .DecisionType .DELIVERED , timeout .getEventId ());
75
78
return Optional .of (decision );
@@ -87,7 +90,7 @@ public synchronized Optional<EventDecision> scheduleNext(Scenario scenario) thro
87
90
// check if we should target delivering a request from a client to a replica
88
91
dieRoll -= deliverClientRequestWeight ;
89
92
if (dieRoll < 0 ) {
90
- Event request = clientRequestEvents . get ( random . nextInt ( clientRequestEvents . size ()) );
93
+ Event request = getRandomElement ( clientRequestEvents );
91
94
scenario .getTransport ().deliverEvent (request .getEventId ());
92
95
EventDecision decision = new EventDecision (EventDecision .DecisionType .DELIVERED , request .getEventId ());
93
96
return Optional .of (decision );
@@ -96,7 +99,7 @@ public synchronized Optional<EventDecision> scheduleNext(Scenario scenario) thro
96
99
// check if we should drop a message sent between nodes
97
100
dieRoll -= dropMessageWeight ;
98
101
if (dieRoll < 0 ) {
99
- Event message = messageEvents . get ( random . nextInt ( messageEvents . size ()) );
102
+ Event message = getRandomElement ( messageEvents );
100
103
scenario .getTransport ().dropEvent (message .getEventId ());
101
104
EventDecision decision = new EventDecision (EventDecision .DecisionType .DROPPED , message .getEventId ());
102
105
return Optional .of (decision );
@@ -105,7 +108,7 @@ public synchronized Optional<EventDecision> scheduleNext(Scenario scenario) thro
105
108
// check if we should mutate-and-deliver a message sent between nodes
106
109
dieRoll -= mutateMessageWeight ;
107
110
if (dieRoll < 0 ) {
108
- Event message = mutateableMessageEvents . get ( random . nextInt ( mutateableMessageEvents . size ()) );
111
+ Event message = getRandomElement ( mutateableMessageEvents );
109
112
List <MessageMutationFault > mutators = this .getMessageMutatorService ().getMutatorsForEvent (message );
110
113
111
114
if (mutators .isEmpty ()) {
@@ -115,7 +118,7 @@ public synchronized Optional<EventDecision> scheduleNext(Scenario scenario) thro
115
118
}
116
119
scenario .getTransport ().applyMutation (
117
120
message .getEventId (),
118
- mutators . get ( random . nextInt ( mutators . size ()) ));
121
+ getRandomElement ( mutators ));
119
122
scenario .getTransport ().deliverEvent (message .getEventId ());
120
123
121
124
EventDecision decision = new EventDecision (EventDecision .DecisionType .MUTATED_AND_DELIVERED , message .getEventId ());
0 commit comments