#改变工作目录到当前脚本所在路径 if [[ "$0" =~ / ]]; then cd "${0%/*}"; fi export CWD=`pwd` echo "check params ..." filescount=`./mql files? log.level=error "$@" | wc -l` if [[ "${filescount}" == "0" || "${filescount}" == "1" ]]; then ./mql "$@" exit $? fi echo "" > changed.log parseargs() { while [[ "$*" != "" ]]; do if [[ "$1" == "init=no" ]]; then noinit=1 elif [[ "$1" == "bgmode" ]]; then bgmode=1 fi shift done } parseargs "$@" keyspace=`./mql keyspace? log.level=error "$@"` if [[ `echo "${keyspace}" | wc -w` == "1" ]]; then logfile="${keyspace}.test.log" else logfile="test.log" fi if [[ "$bgmode" != "1" ]]; then echo mql test running in background mode nohup "$0" bgmode "$@" 2>&1 >/dev/null & tail -F $logfile exit 0 fi last_odbserver=`./mqltest.sh - "help()" | grep "omdb version" | awk -F '"' '{print $4}' | awk -F " omdb " '{print "omdb " $2}'` wait_odbserver_change() { while true; do odbserver=`./mqltest.sh - "help()" | grep "omdb version" | awk -F '"' '{print $4}' | awk -F " omdb " '{print "omdb " $2}'` if [[ "${odbserver:0:12}" == "omdb version" ]]; then if [[ "$odbserver" != "$last_odbserver" ]]; then # wait for sync files complete sleep 10 return 0 fi fi sleep 2 done } n=0 while [[ true ]]; do ret=0 n=`expr $n + 1` odbserver=`./mqltest.sh - "help()" | grep "omdb version" | awk -F '"' '{print $4}' | awk -F " omdb " '{print "omdb " $2}'` if [[ "${odbserver:0:12}" == "omdb version" ]]; then if [[ "$odbserver" != "$last_odbserver" ]]; then echo "odbserver changed" >> changed.log echo "$last_odbserver" >> changed.log echo "$odbserver" >> changed.log if [[ "${odbserver:42:14}" == "${last_odbserver:42:14}" ]]; then codechanged=0 else codechanged=1 fi last_odbserver="$odbserver" if [[ "$noinit" != "1" && "$codechanged" == "1" ]]; then ./initkeyspace.sh $keyspace ret=$? if [[ "$ret" != "0" ]]; then # init error n=0 else n=1 fi else n=1 fi fi fi if [[ "$n" != "0" ]]; then cd "$CWD" PROCFLAG="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 "proc.flag=${PROCFLAG}"` if [[ "$mqlproc" == "" ]]; then return 0 fi odbserver=`./mqltest.sh - "help()" | grep "omdb version" | awk -F '"' '{print $4}' | awk -F " omdb " '{print "omdb " $2}'` if [[ "${odbserver:0:12}" == "omdb version" ]]; then if [[ "$odbserver" != "$last_odbserver" ]]; then ps -ef | grep -v grep | grep mql | grep "proc.flag=${PROCFLAG}" | awk '{print $2}' | xargs kill -9 return 0 fi fi sleep 10 done } run() { ./mqltest.sh "proc.flag=${PROCFLAG}" "$@" ret=$? echo "$endflag $ret" >> $logfile if [[ "$ret" == "0" ]]; then sleep 5 fi return $ret } check_odbserver & run "$@" ret=$? fi if [[ "$ret" != "0" && "$ret" != "99" ]]; then echo "wait for odbserver upgrad" | tee $logfile wait_odbserver_change fi done