summaryrefslogtreecommitdiff
path: root/src/main/java/simulator/builder/SimulationFactory.java
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-27 13:05:59 +0200
committerPaul Buetow <paul@buetow.org>2026-03-27 13:05:59 +0200
commitf55d67d98dddf5861dc4266564863dde4b0b6ed1 (patch)
treeb87ad04a444b9873cb9ec0ede643772f160e6012 /src/main/java/simulator/builder/SimulationFactory.java
parent29252fbc7803e4a660332524d5811ff942e2b0bc (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.java27
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);
+ }
+}