-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreplication_failover_test.sh
More file actions
executable file
·75 lines (61 loc) · 1.9 KB
/
replication_failover_test.sh
File metadata and controls
executable file
·75 lines (61 loc) · 1.9 KB
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/env bash
set -e
NODES=(
"8080:weaviate-node-1"
"8081:weaviate-node-2"
"8082:weaviate-node-3"
)
LEADER_NODE=8080
echo "==== 1. Insert object on leader (node1:$LEADER_NODE) ===="
OBJECT_ID=$(curl -s -X POST http://localhost:$LEADER_NODE/v1/objects \
-H "Content-Type: application/json" \
-d '{
"class": "Article",
"properties": {
"title": "Replication Test",
"content": "Testing replication and availability"
}
}' | jq -r '.id')
echo "Inserted object ID: $OBJECT_ID"
sleep 3
echo "==== 2. Read object from all nodes ===="
for ENTRY in "${NODES[@]}"; do
PORT=${ENTRY%%:*}
echo "Reading from node on port $PORT..."
curl -s http://localhost:$PORT/v1/objects/$OBJECT_ID | jq .
done
echo "==== 3. Stop leader node (simulate failure) ===="
docker stop weaviate-node-1
sleep 5
echo "==== 4. Read object from remaining nodes ===="
for ENTRY in "${NODES[@]}"; do
PORT=${ENTRY%%:*}
NAME=${ENTRY##*:}
if [ "$NAME" != "weaviate-node-1" ]; then
echo "Reading from $NAME (port $PORT)..."
curl -s http://localhost:$PORT/v1/objects/$OBJECT_ID | jq .
fi
done
echo "==== 5. Insert new object on node2 ===="
OBJECT_ID2=$(curl -s -X POST http://localhost:8081/v1/objects \
-H "Content-Type: application/json" \
-d '{
"class": "Article",
"properties": {
"title": "Post-Failover Test",
"content": "Written while leader is down"
}
}' | jq -r '.id')
echo "Inserted object ID2: $OBJECT_ID2"
echo "==== 6. Restart leader node ===="
docker start weaviate-node-1
sleep 10
echo "==== 7. Verify both objects exist on all nodes ===="
for ENTRY in "${NODES[@]}"; do
PORT=${ENTRY%%:*}
NAME=${ENTRY##*:}
echo "--- Checking $NAME (port $PORT) ---"
curl -s http://localhost:$PORT/v1/objects/$OBJECT_ID | jq .
curl -s http://localhost:$PORT/v1/objects/$OBJECT_ID2 | jq .
done
echo "==== Test complete: replication consistency and availability verified ===="