aboutsummaryrefslogtreecommitdiffstats
path: root/stacks/lwip_stack/release/upgrade_nstack.sh
diff options
context:
space:
mode:
Diffstat (limited to 'stacks/lwip_stack/release/upgrade_nstack.sh')
-rw-r--r--stacks/lwip_stack/release/upgrade_nstack.sh452
1 files changed, 452 insertions, 0 deletions
diff --git a/stacks/lwip_stack/release/upgrade_nstack.sh b/stacks/lwip_stack/release/upgrade_nstack.sh
new file mode 100644
index 0000000..9302da6
--- /dev/null
+++ b/stacks/lwip_stack/release/upgrade_nstack.sh
@@ -0,0 +1,452 @@
+#!/bin/bash
+
+. ./script/nstack_var.sh
+. ./script/nstack_fun.sh
+
+VERSION_CHK=0
+UPG_MASTER=0
+
+# OLD_VERSION indicates the nStackServer version, in order to support Version upgrade and rollback feature
+# OLD_VERSION=1 B031~newest
+# OLD_VERSION=0 B020~B030
+OLD_VERSION=1
+cur_user=`whoami`
+
+upg_pre_chk()
+{
+ ##########check input info###########################
+ if [ -z "${DST_VER_PATH}" ]; then
+ log $LINENO "dst ${DST_VER_PATH} path error!"
+ return 1
+ fi
+
+ if [ "x${UPG_RBK}" != "x1" -a "x${UPG_RBK}" != "x2" ]; then
+ log $LINENO "type error ${UPG_RBK}!"
+ return 1
+ fi
+
+ ##########check src version info######################
+ SRC_STOP_FILE=${SRC_VER_PATH}/stop_nstack.sh
+ if [ ! -f "$SRC_STOP_FILE" ]; then
+ log $LINENO "${SRC_STOP_FILE} path error!"
+ return 1
+ fi
+
+ MASTER_PATH=`get_nstack_bin nStackMaster`
+ if [ -z "${MASTER_PATH}" ]; then
+ log $LINENO "master not start"
+ return 1
+ fi
+
+ if [ ! -d "${MASTER_PATH}${MASTERBIN}" ]; then
+ log $LINENO "${MASTER_PATH} path error!"
+ return 1
+ fi
+
+ SRC_VERSION=`get_version 1`
+ if [ -z "${SRC_VERSION}" ]; then
+ log $LINENO "get srcVersion error"
+ exit 1
+ fi
+
+ ###########check dst version info######################
+ DST_RUN_FILE=${DST_VER_PATH}/script/run_nstack_main.sh
+ if [ ! -f "$DST_RUN_FILE" ]; then
+ log $LINENO "${DST_RUN_FILE} path error. Try the path of older nstack version then."
+ DST_RUN_FILE=${DST_VER_PATH}/bin/run_nstack_main.sh
+ OLD_VERSION=0
+ if [ ! -f "$DST_RUN_FILE" ]; then
+ log $LINENO "${DST_RUN_FILE} older path error!"
+ return 1
+ fi
+ fi
+
+ DST_STOP_FILE=${DST_VER_PATH}/stop_nstack.sh
+ if [ ! -f "$DST_STOP_FILE" ]; then
+ log $LINENO "${DST_STOP_FILE} path error!"
+ return 1
+ fi
+
+ DST_STAT_FILE=${DST_VER_PATH}/start_nstack.sh
+ if [ ! -f "$DST_STAT_FILE" ]; then
+ log $LINENO "${DST_STAT_FILE} path error!"
+ return 1
+ fi
+
+ if [ ! -x "${DST_VER_PATH}/bin/nStackCtrl" ]; then
+ log $LINENO "${DST_VER_PATH} path nStackCtrl exec error!"
+ return 1
+ fi
+
+ DST_VERSION=`get_version 4 ${DST_VER_PATH}/bin/nStackCtrl`
+ if [ -z "${DST_VERSION}" ]; then
+ log $LINENO "get dstversion error"
+ return 1
+ fi
+}
+
+restart_upgrade()
+{
+ local monipid=`pidof monit`
+ local stop_moni=0
+ if [ ! -z "${monipid}" ]; then
+ for i in `seq 60`
+ do
+ if [ ${cur_user} = "paas" ]; then
+ stop_fin=`/var/ICTS_BASE/Monit/bin/monit summary | grep nstack | grep "Not monitored"`
+ else
+ stop_fin=`su paas -s /bin/bash -c "/var/ICTS_BASE/Monit/bin/monit summary" | grep nstack | grep "Not monitored"`
+ fi
+ if [ -n "${stop_fin}" ]; then
+ break;
+ fi
+
+ if [ $stop_moni -eq 0 ]; then
+ if [ ${cur_user} = "paas" ]; then
+ /var/ICTS_BASE/Monit/bin/monit unmonitor nstack
+ else
+ su paas -s /bin/bash -c "/var/ICTS_BASE/Monit/bin/monit unmonitor nstack"
+ fi
+ stop_moni=1
+ log $LINENO "stop monit"
+ fi
+
+ sleep 1
+ done
+ cd ${SRC_VER_PATH}
+ ./stop_nstack.sh
+ cd -
+ cd ${DST_VER_PATH}
+ if [ -n "${LOG_PATH}" ]; then
+ ./start_nstack.sh -l $LOG_PATH -i $hostinfo_path
+ else
+ ./start_nstack.sh -i $hostinfo_path
+ fi
+ cd -
+
+ log $LINENO "with monit restart"
+ if [ $stop_moni -eq 1 ]; then
+ if [ ${cur_user} = "paas" ]; then
+ /var/ICTS_BASE/Monit/bin/monit monitor nstack
+ else
+ su paas -s /bin/bash -c "/var/ICTS_BASE/Monit/bin/monit monitor nstack"
+ fi
+ log $LINENO "monit restart"
+ fi
+ else
+ cd ${SRC_VER_PATH}
+ ./stop_nstack.sh
+ cd -
+ cd ${DST_VER_PATH}
+ if [ -n "${LOG_PATH}" ]; then
+ ./start_nstack.sh -l $LOG_PATH -i $hostinfo_path
+ else
+ ./start_nstack.sh -i $hostinfo_path
+ fi
+ cd -
+ log $LINENO "none monit restart"
+ fi
+ return 0
+}
+
+run_upgrade()
+{
+
+ if [ -n "${DST_RUN_FILE}" ]; then
+ if [ $OLD_VERSION -ge 1 ]; then
+ ln -s -f "$DST_RUN_FILE" "${DST_VER_PATH}/script/${RUN_NSTACK_FILE}"
+ else
+ ln -s -f "$DST_RUN_FILE" "${DST_VER_PATH}/bin/${RUN_NSTACK_FILE}"
+ fi
+ if [ $? -ne 0 ]; then
+ log $LINENO "dst version link failed!"
+ return 1
+ fi
+ fi
+
+ # copy old config to avoid config change issue
+ copy_config $SRC_VER_PATH $DST_VER_PATH
+
+ ./bin/nStackCtrl --module vermgr -t $UPG_RBK -s $SRC_VERSION -d $DST_VERSION
+ ret=$?
+ if [ $ret -eq 121 ]; then
+ restart_upgrade
+ WAIT_TIME=50
+ RESTART_MASTER=1
+ return 0
+ fi
+
+ if [ $ret -ne 0 ]; then
+ log $LINENO "nStackCtrl send vermsg err $ret code"
+ return 1
+ fi
+
+ nStackMain_pid=`pidof nStackMain`
+ if [ -n "${DST_RUN_FILE}" ]; then
+ ln -s -f "$DST_RUN_FILE" "${MASTER_PATH}${RUN_NSTACK_FILE}"
+ if [ $? -ne 0 ]; then
+ log $LINENO "link failed!"
+ kill -9 $nStackMain_pid
+ return 1
+ fi
+ fi
+ kill -9 $nStackMain_pid
+ return 0
+}
+
+after_upg_chk()
+{
+ for i in `seq $WAIT_TIME`
+ do
+ NEW_DST_VERSION=`get_version 1`
+ if [ -n "${NEW_DST_VERSION}" ]; then
+ if [ "$NEW_DST_VERSION" != "$DST_VERSION" ]; then
+ log $LINENO "new version:$NEW_DST_VERSION maybe error! expect version is:$DST_VERSION"
+ else
+ break;
+ fi
+ fi
+ sleep 1
+ done
+
+ if [ -z "${NEW_DST_VERSION}" ]; then
+ log $LINENO "nStackCtrl get dstVersion error"
+ return 1
+ fi
+
+ if [ "$NEW_DST_VERSION" != "$DST_VERSION" -a $VERSION_CHK -eq 1 ]; then
+ log $LINENO "new version:$NEW_DST_VERSION maybe error! expect version is:$DST_VERSION"
+ return 1
+ fi
+
+ DST_MAIN_PATH=`get_nstack_bin nStackMain`
+ if [ -z "${DST_MAIN_PATH}" ]; then
+ log $LINENO "main not start"
+ return 1
+ fi
+
+ if [ "$DST_MAIN_PATH" != "${DST_VER_PATH}/bin/" ]; then
+ log $LINENO "main start failed run;$DST_MAIN_PATH expect:${DST_VER_PATH}/script !"
+ return 1
+ fi
+}
+
+
+run_upgrade_master()
+{
+ core_mask=`get_core_mask`
+ START_TYPE="secondary"
+ ./bin/nStackCtrl --module vermgr -t $UPG_RBK -s $SRC_VERSION -d $DST_VERSION -p 2
+ ret=$?
+ if [ $ret -ne 0 ]; then
+ log $LINENO "nStackMaster nStackCtrl send vermsg err $ret code"
+ return 1
+ fi
+
+ nStackMaster_pid=`pidof nStackMaster`
+ kill -9 $nStackMaster_pid
+ cd ${DST_VER_PATH}/script/
+ ./run_nstack_master.sh ${core_mask} $HUGE_DIR $MEM_SIZE $START_TYPE
+ log $LINENO "./script/run_nstack_master.sh ${core_mask} $HUGE_DIR $MEM_SIZE $START_TYPE"
+ cd -
+ return 0
+}
+
+
+after_upg_master_chk()
+{
+ for i in `seq 10`
+ do
+ NEW_MAS_VERSION=`get_version 2`
+ if [ -n "${NEW_MAS_VERSION}" ]; then
+ if [ "$NEW_MAS_VERSION" != "$DST_VERSION" ]; then
+ log $LINENO "new version:$NEW_MAS_VERSION maybe error! expect version is:$DST_VERSION"
+ else
+ break;
+ fi
+ fi
+ sleep 1
+ done
+
+ if [ -z "${NEW_MAS_VERSION}" ]; then
+ log $LINENO "nStackCtrl get dstVersion error"
+ return 1
+ fi
+
+ if [ "$NEW_MAS_VERSION" != "$DST_VERSION" -a $VERSION_CHK -eq 1 ]; then
+ log $LINENO "new version:$NEW_MAS_VERSION maybe error! expect version is:$DST_VERSION"
+ return 1
+ fi
+
+ DST_MAS_PATH=`get_nstack_bin nStackMaster`
+ if [ -z "${DST_MAS_PATH}" ]; then
+ log $LINENO "master not start"
+ return 1
+ fi
+
+ if [ "$DST_MAS_PATH" != "${DST_VER_PATH}/script/" ]; then
+ log $LINENO "main start failed run;$DST_MAS_PATH expect:${DST_VER_PATH}/script !"
+ return 1
+ fi
+ return 0
+}
+
+opr_suc()
+{
+ log $LINENO "operation successful $SRC_VERSION to $NEW_DST_VERSION"
+}
+
+mod_log_path()
+{
+ local dst_proc=$1
+ local dst_log_path=$2
+ ./bin/nStackCtrl --module setlog -n maspath -v ${dst_log_path} -p $dst_proc
+ ret=$?
+ if [ $ret -ne 0 ]; then
+ log $LINENO "mod_log_path error err $ret code"
+ return 1
+ fi
+ return 0
+}
+
+ini_file_path="invalid_path_upgrade"
+
+while getopts 's:d:t:l:i:' opt
+do
+ case $opt in
+ s)
+ SRC_VER_PATH=`get_abs_path $OPTARG`
+ ;;
+ :)
+ echo "-$OPTARG needs an argument"
+ exit 1
+ ;;
+ d)
+ DST_VER_PATH=`get_abs_path $OPTARG`
+ ;;
+ :)
+ echo "-$OPTARG needs an argument"
+ exit 1
+ ;;
+ t)
+ UPG_RBK=$OPTARG
+ ;;
+ :)
+ echo "-$OPTARG needs an argument"
+ exit 1
+ ;;
+ l)
+ LOG_PATH=`get_abs_path $OPTARG`
+ ;;
+ :)
+ echo "-$OPTARG needs an argument"
+ exit 1
+ ;;
+ i)
+ ini_file_path=`get_abs_path $OPTARG`
+ ;;
+ :)
+ echo "-$OPTARG needs an argument"
+ exit 1
+ ;;
+ *)
+ echo "command not recognized"
+ usage
+ exit 1
+ ;;
+ esac
+done
+
+if [ -z $ini_file_path ]; then
+ hostinfo_path="invalid_path_upgrade"
+ else
+ hostinfo_path=$ini_file_path
+fi
+
+(
+flock -e -n 201
+if [ $? -eq 1 ]
+then
+ log $LINENO "another upgrade process is running now, exit"
+ exit 1
+fi
+
+if [ -n "${LOG_PATH}" ]; then
+ modify_nstack_log_path ${LOG_PATH}
+fi
+modify_log_var
+) 201>>./uplockfile
+
+if [ -f "uplockfile" ]; then
+ rm uplockfile
+fi
+
+. ./script/nstack_var.sh
+
+RESTART_MASTER=0
+WAIT_TIME=60
+
+log $LINENO "######################upgrade nstack######################"
+log $LINENO "src ver path ${SRC_VER_PATH},dst ver path ${DST_VER_PATH}, type ${UPG_RBK}, log path ${LOG_PATH}"
+
+upg_pre_chk
+ret=$?
+if [ $ret -ne 0 ]; then
+ log $LINENO "pre_chk error err $ret code"
+ exit 1
+fi
+
+if [ "${DST_VERSION}" = "${SRC_VERSION}" -a $VERSION_CHK -eq 1 ]; then
+ log $LINENO "version equal ${DST_VERSION} ${SRC_VERSION}"
+ exit 0
+fi
+log $LINENO "prepare ok"
+
+log $LINENO "src ver $SRC_VERSION with master path $MASTER_PATH,dst ver $DST_VERSION,dst run file $DST_RUN_FILE, type ${UPG_RBK}"
+run_upgrade
+ret=$?
+if [ $ret -ne 0 ]; then
+ log $LINENO "run_proc error err $ret code"
+ exit 1
+fi
+
+log $LINENO "wait new version start"
+sleep 2
+after_upg_chk
+ret=$?
+if [ $ret -ne 0 ]; then
+ log $LINENO "after_chk error err $ret code"
+ exit 1
+fi
+
+if [ $RESTART_MASTER -ne 0 ]; then
+ log $LINENO "master has restart!"
+ opr_suc
+ exit 0
+fi
+
+if [ $UPG_MASTER -eq 0 ]; then
+ if [ -n "${LOG_PATH}" ]; then
+ mod_log_path 2 ${LOG_PATH}
+ fi
+ opr_suc
+ exit 0
+fi
+
+run_upgrade_master
+ret=$?
+if [ $ret -ne 0 ]; then
+ log $LINENO "run_proc master error err $ret code"
+ exit 1
+fi
+
+log $LINENO "wait new version master start"
+sleep 2
+after_upg_master_chk
+ret=$?
+if [ $ret -ne 0 ]; then
+ log $LINENO "after_chk master error err $ret code"
+ exit 1
+fi
+
+opr_suc