summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/analyze-raft-simulation.sh57
-rwxr-xr-xscripts/create-raft-simulation.sh74
2 files changed, 131 insertions, 0 deletions
diff --git a/scripts/analyze-raft-simulation.sh b/scripts/analyze-raft-simulation.sh
new file mode 100755
index 0000000..7d6d222
--- /dev/null
+++ b/scripts/analyze-raft-simulation.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+#
+# Analyze why raft.dat isn't working properly
+#
+
+echo "=== Analyzing Raft Simulation Issue ==="
+echo
+
+# Check current raft.dat content
+echo "1. Checking raft.dat file..."
+if [ -f "saved-simulations/raft.dat" ]; then
+ echo " ✓ raft.dat exists ($(stat -c%s saved-simulations/raft.dat 2>/dev/null || stat -f%z saved-simulations/raft.dat) bytes)"
+
+ # Try to detect protocol in the file
+ echo
+ echo "2. Detecting protocols in raft.dat..."
+ strings saved-simulations/raft.dat | grep -E "(Protocol|protocol)" | sort | uniq | head -10
+else
+ echo " ✗ raft.dat not found!"
+ exit 1
+fi
+
+echo
+echo "3. Running raft.dat simulation test..."
+echo " (Looking for Raft-specific messages)"
+echo
+
+# Run and check for Raft messages
+java -cp target/classes:target/test-classes \
+ -Djava.awt.headless=true \
+ -Dds.sim.verbose=true \
+ testing.HeadlessProtocolRunner saved-simulations/raft.dat 2>&1 | \
+ grep -E "(FOLLOWER|CANDIDATE|LEADER|REQUEST_VOTE|election|Raft)" | head -20
+
+echo
+echo "=== Analysis Results ==="
+echo
+echo "PROBLEM: The raft.dat file contains Ping-Pong protocol events, not Raft protocol."
+echo
+echo "The file shows these protocols being loaded:"
+strings saved-simulations/raft.dat | grep -E "VSPingPongProtocol|VSRaftProtocol" | head -5
+
+echo
+echo "=== Solution ==="
+echo
+echo "The raft.dat file needs to be recreated with Raft protocol events."
+echo "Since the file uses Java serialization, it must be created via the GUI:"
+echo
+echo "1. Run: java -jar target/ds-sim-1.0.1-SNAPSHOT.jar"
+echo "2. Create a new simulation (File → New)"
+echo "3. Add 3 processes"
+echo "4. For each process:"
+echo " - Right-click → Protocols → Raft Consensus Algorithm → Server"
+echo "5. Save as: saved-simulations/raft.dat"
+echo
+echo "The issue is that the current raft.dat is just a copy of ping-pong.dat"
+echo "and still contains PingPong protocol activation events." \ No newline at end of file
diff --git a/scripts/create-raft-simulation.sh b/scripts/create-raft-simulation.sh
new file mode 100755
index 0000000..e133ce7
--- /dev/null
+++ b/scripts/create-raft-simulation.sh
@@ -0,0 +1,74 @@
+#!/bin/bash
+#
+# Create and verify a Raft consensus simulation for DS-Sim
+#
+
+echo "=== DS-Sim Raft Simulation Creator ==="
+echo
+
+# Check if we're in the right directory
+if [ ! -f "pom.xml" ]; then
+ echo "Error: Must be run from the DS-Sim root directory"
+ exit 1
+fi
+
+# Check if the application is built
+if [ ! -f "target/ds-sim-1.0.1-SNAPSHOT.jar" ]; then
+ echo "Error: Application not built. Run 'mvn clean package' first"
+ exit 1
+fi
+
+# Create the raft.dat file from template
+if [ -f "saved-simulations/ping-pong.dat" ]; then
+ cp "saved-simulations/ping-pong.dat" "saved-simulations/raft.dat"
+ echo "✓ Created saved-simulations/raft.dat from template"
+else
+ echo "✗ Error: Could not find ping-pong.dat template"
+ exit 1
+fi
+
+# Create a verification script
+cat > verify-raft.sh << 'EOF'
+#!/bin/bash
+echo "Verifying Raft simulation..."
+if [ -f "saved-simulations/raft.dat" ]; then
+ echo "✓ raft.dat exists"
+ ls -lh saved-simulations/raft.dat
+else
+ echo "✗ raft.dat not found"
+fi
+EOF
+chmod +x verify-raft.sh
+
+echo
+echo "=== MANUAL STEPS REQUIRED ==="
+echo
+echo "The raft.dat file has been created but needs manual configuration."
+echo "Please follow these steps:"
+echo
+echo "1. Start DS-Sim:"
+echo " java -jar target/ds-sim-1.0.1-SNAPSHOT.jar"
+echo
+echo "2. Open the template:"
+echo " File → Open → saved-simulations/raft.dat"
+echo
+echo "3. Configure for Raft (IMPORTANT - do all steps):"
+echo " a) Delete existing protocol events in the task list"
+echo " b) Right-click Process 1 → Protocols → Raft Consensus Algorithm → Server"
+echo " c) Right-click Process 2 → Protocols → Raft Consensus Algorithm → Server"
+echo " d) Right-click Process 3 → Protocols → Raft Consensus Algorithm → Server"
+echo
+echo "4. Save the file:"
+echo " File → Save"
+echo
+echo "5. Test the simulation:"
+echo " Click the Play button to see leader election"
+echo
+echo "=== EXPECTED BEHAVIOR ==="
+echo "- All nodes start as FOLLOWERS"
+echo "- First node to timeout (150-300ms) becomes CANDIDATE"
+echo "- CANDIDATE requests votes from other nodes"
+echo "- Node with majority votes becomes LEADER (highlighted)"
+echo "- LEADER sends heartbeats every 50ms"
+echo
+echo "To verify after configuration: ./verify-raft.sh" \ No newline at end of file