summaryrefslogtreecommitdiff
path: root/scripts/analyze-raft-simulation.sh
blob: 7d6d2222e1b2be2a40a2a87fee0536c3c7b25543 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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."