-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtestrolling.sh
executable file
·92 lines (80 loc) · 1.66 KB
/
testrolling.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
87
88
89
#!/bin/bash
nodes=("a", "b", "c")
RANDOM=$$$(date +%s)
LOGFILE=testrolling.log
function log() {
msg="$(date '+%F %H:%M:%S') $1"
echo $msg
echo $msg >> $LOGFILE
}
function logdebug() {
msg="$(date '+%F %H:%M:%S') $1"
echo $msg >> $LOGFILE
}
function run4lw() {
exec 5<>/dev/tcp/$2/$3;echo $1 >&5;cat <&5 | egrep "Mode: "
}
function srvr() {
run4lw srvr $1 $2 2> /dev/null
}
function verify() {
j=1
while [ $j -lt 60 ]
do
ok=0
for i in "${nodes[@]}";
do
status=$(srvr $i 2181)
logdebug "$i: $status"
if [ "$status" == "" ];
then
ok=1
break
fi
done
if [ $ok -eq 0 ];
then
break
fi
j=$[$j+1]
sleep 1
done
echo $ok
}
function restart() {
node=$1
log "Restarting : $node"
ssh -q andor@$node <<ENDSSH
cd zookeeper
PIDFILE=./$node:2181/zookeeper_server.pid
if [ -e "\$PIDFILE" ]
then
kill -9 \$(cat \$PIDFILE)
rm \$PIDFILE
else
echo "Missing \$PIDFILE, not stopping respective server"
fi
sleep 1
java $ZKCONF_START_ZKOPTS -cp ./*:. org.apache.zookeeper.server.quorum.QuorumPeerMain ./$node:2181/zoo.cfg > ./$node:2181/zoo.log 2>&1 &
echo -n \$! > ./$node:2181/zookeeper_server.pid
ENDSSH
}
ok=0
result=$(verify)
log "Result = $result"
if [ $result -ne 0 ];
then
ok=1
fi
while [ $ok -eq 0 ];
do
selectednode=${nodes[$RANDOM % ${#nodes[@]} ]}
restart $selectednode
result=$(verify)
log "Result = $result"
if [ $result -ne 0 ];
then
ok=1
break
fi
done