#改变工作目录到当前脚本所在路径 if [[ "$0" =~ / ]]; then cd "${0%/*}"; fi export CWD=`pwd` echo "" > changed.log parseargs() { while [[ "$*" != "" ]]; do if [[ "$1" == "init=no" ]]; then noinit=1 fi shift done } parseargs "$@" if [[ -e /opt/matrix/odbserver/odbserver ]]; then last_odbserver=`/opt/matrix/odbserver/odbserver -version` fi keyspace=`./mql keyspace? log.level=error "$@"` logfile="${keyspace}.test.log" wait_odbserver_change() { while true; do if [[ -e ~/odbserver/odbserver ]]; then odbserver=`~/odbserver/odbserver -version 2>&1` if [[ "${odbserver:0:12}" == "omdb version" ]]; then if [[ "$odbserver" != "$last_odbserver" ]]; then return 0 fi fi fi sleep 2 done } n=0 while [[ true ]]; do ret=0 n=`expr $n + 1` if [[ -e ~/odbserver/odbserver ]]; then odbserver=`~/odbserver/odbserver -version` if [[ "$odbserver" != "$last_odbserver" ]]; then echo "odbserver changed" >> changed.log echo "$last_odbserver" >> changed.log echo "$odbserver" >> changed.log ./sync.sh cp -pf ~/odbserver/odbserver /opt/matrix/odbserver/odbserver last_odbserver="$odbserver" if [[ "noinit" != "1" ]]; then ./initkeyspace.sh $keyspace ret=$? if [[ "$ret" != "0" ]]; then n=0 else n=1 fi else n=1 fi fi fi if [[ "$n" != "0" ]]; then cd "$CWD" PREFIX="test $n" endflag="$odbserver end of test $n return" ttt=`date +'%Y%m%d%H%M%S'` check_odbserver() { sleep 10 while true; do mqlproc=`ps -ef | grep -v grep | grep mql | grep "log.prefix=${PREFIX}"` if [[ "$mqlproc" == "" ]]; then return 0 fi if [[ -e ~/odbserver/odbserver ]]; then odbserver=`~/odbserver/odbserver -version` if [[ "$odbserver" != "$last_odbserver" ]]; then ps -ef | grep -v grep | grep mql | grep "log.prefix=${PREFIX}" | awk '{print $2}' | xargs kill -9 return 0 fi fi sleep 10 done } run() { ./mqltest.sh "log.prefix=${PREFIX}" "$@" ret=$? if [[ "$ret" != "0" ]]; then return $ret fi lastline=`tail -n 1 $logfile 2>&1` if [[ "$lastline" != "PASS" ]]; then ret=1 if [[ `echo "$lastline" | grep './mqltest.sh:' | grep "已杀死"` != "" ]]; then ret=0 elif [[ `echo "$lastline" | grep './mqltest.sh:' | grep "killed"` != "" ]]; then ret=0 else exit 0 fi fi echo "$endflag $ret" >> $logfile if [[ "$ret" != "0" ]]; then return $ret fi } check_odbserver & run "$@" ret=$? fi if [[ "$ret" != "0" ]]; then echo "wait for odbserver upgrad" wait_odbserver_change fi done