-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathreplication_tunable_consistency.sh
executable file
·86 lines (71 loc) · 3.24 KB
/
replication_tunable_consistency.sh
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
76
77
78
79
80
81
82
83
84
85
86
#!/bin/bash
set -e
source common.sh
echo "Building all required containers"
( cd apps/replication_tunable_consistency/ && docker build --build-arg APP_NAME=generator -t generator . )
( cd apps/replication_tunable_consistency/ && docker build --build-arg APP_NAME=importer -t importer . )
( cd apps/replication_tunable_consistency/ && docker build --build-arg APP_NAME=patcher -t patcher . )
( cd apps/replication_tunable_consistency/ && docker build --build-arg APP_NAME=updater -t updater . )
( cd apps/replication_tunable_consistency/ && docker build --build-arg APP_NAME=cluster_healthy -t cluster_healthy . )
( cd apps/replication_tunable_consistency/ && docker build --build-arg APP_NAME=cluster_one_node_down -t cluster_one_node_down . )
( cd apps/replication_tunable_consistency/ && docker build --build-arg APP_NAME=cluster_one_node_remaining -t cluster_one_node_remaining . )
rm -rf workdir
mkdir workdir
touch workdir/data.json
docker run --network host -v "$PWD/workdir/data.json:/workdir/data.json" --name generator -t generator
echo "Done generating."
export COMPOSE="apps/weaviate/docker-compose-replication_single_voter.yml"
echo "Starting Weaviate..."
docker compose -f $COMPOSE up -d weaviate-node-1 weaviate-node-2 weaviate-node-3
wait_weaviate 8080
wait_weaviate 8081
wait_weaviate 8082
# POST objects with consistency level ALL
docker run --network host -v "$PWD/workdir/data.json:/workdir/data.json" --name importer -t importer
# Read objects with consistency level ONE
if docker run --network host -v "$PWD/workdir/:/workdir/data" --name cluster_healthy -t cluster_healthy; then
echo "All objects read with consistency level ONE".
else
exit 1
fi
# PATCH objects with one node down, consistency level QUORUM
echo "Killing node 3"
docker compose -f $COMPOSE kill weaviate-node-3
sleep 10
if docker run --network host -v "$PWD/workdir/data.json:/workdir/data.json" --name patcher -t patcher; then
echo "All objects patched with consistency level QUORUM with one node down".
else
exit 1
fi
# Restart dead node, read objects with consistency level QUORUM
echo "Restart node 3"
docker compose -f $COMPOSE up -d weaviate-node-3
wait_weaviate 8082
if docker run --network host -v "$PWD/workdir/:/workdir/data" --name cluster_one_node_down -t cluster_one_node_down; then
echo "All objects read with consistency level QUORUM after weaviate-node-3 restarted".
else
exit 1
fi
# PUT objects with only one node remaining, consistency level ONE
echo "Killing node 2"
docker compose -f $COMPOSE kill weaviate-node-2
echo "Killing node 3"
docker compose -f $COMPOSE kill weaviate-node-3
sleep 10
if docker run --network host -v "$PWD/workdir/data.json:/workdir/data.json" --name updater -t updater; then
echo "All objects updated with consistency level ONE with only weaviate-node-1 up".
else
exit 1
fi
# Restart dead nodes, read objects with consistency level ALL
docker compose -f $COMPOSE up -d weaviate-node-2
wait_weaviate 8081
docker compose -f $COMPOSE up -d weaviate-node-3
wait_weaviate 8082
if docker run --network host -v "$PWD/workdir/:/workdir/data" --name cluster_one_node_remaining -t cluster_one_node_remaining; then
echo "All objects read with consistency level ALL after weaviate-node-2 and weaviate-node-3 restarted".
else
exit 1
fi
echo "Success!"
shutdown