diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-27 13:05:59 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-27 13:05:59 +0200 |
| commit | f55d67d98dddf5861dc4266564863dde4b0b6ed1 (patch) | |
| tree | b87ad04a444b9873cb9ec0ede643772f160e6012 /src/main/java/simulator/builder/SimulationFactory.java | |
| parent | 29252fbc7803e4a660332524d5811ff942e2b0bc (diff) | |
sr: retune Raft replay for faster reelection
Diffstat (limited to 'src/main/java/simulator/builder/SimulationFactory.java')
| -rw-r--r-- | src/main/java/simulator/builder/SimulationFactory.java | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/main/java/simulator/builder/SimulationFactory.java b/src/main/java/simulator/builder/SimulationFactory.java index 2bd73b9..48ec638 100644 --- a/src/main/java/simulator/builder/SimulationFactory.java +++ b/src/main/java/simulator/builder/SimulationFactory.java @@ -51,7 +51,7 @@ public class SimulationFactory { .withProtocol(SimulationBuilder.Protocols.TWO_PHASE_COMMIT) .withDuration(10000) .activateServers(0) // Process 0 is coordinator - .activateClients(300, IntStream.range(1, numParticipants + 1).toArray()); + .activateClientsAt(300, IntStream.range(1, numParticipants + 1).toArray()); } /** @@ -80,4 +80,27 @@ public class SimulationFactory { .activateServers(0) // First process broadcasts .activateClients(IntStream.range(1, numProcesses).toArray()); } -}
\ No newline at end of file + + /** + * Create a Raft simulation with a leader crash and staggered follower + * activation so the election deadlines do not stay perfectly aligned. + * + * @return configured Raft simulation builder + */ + public static SimulationBuilder createRaftSimulation() throws Exception { + return new SimulationBuilder() + .withProcesses(3) + .withProtocol(SimulationBuilder.Protocols.RAFT) + .withDuration(30000) + .activateServers(0) + .activateClientsAt(100, 1) + .activateClientsAt(1700, 2) + // Bias process 1 toward a fast, clean post-crash election while + // keeping process 2's timeout comfortably behind it. + .setProtocolLong(1, "electionTimeout", 4000) + .setProtocolLong(1, "electionJitter", 0) + .setProtocolLong(2, "electionTimeout", 9000) + .setProtocolLong(2, "electionJitter", 0) + .addCrashEvent(0, 3500); + } +} |
