diff --git a/scripts/fast-reboot b/scripts/fast-reboot index ec0ccae1b7..2bff7cbe25 100755 --- a/scripts/fast-reboot +++ b/scripts/fast-reboot @@ -156,6 +156,42 @@ function request_pre_shutdown() } } +function recover_issu_bank_file_instruction() +{ + debug "To recover (${ISSU_BANK_FILE}) file, do the following:" + debug "$ docker exec -it syncd sx_api_dbg_generate_dump.py" + debug "$ docker exec -it syncd cat /tmp/sdkdump | grep 'ISSU Bank'" + debug "Command above will print the VALUE of ISSU BANK - 0 or 1, use this VALUE in the next command" + debug "$ printf VALUE > /host/warmboot/issu_bank.txt" +} + +function check_issu_bank_file() +{ + ISSU_BANK_FILE=/host/warmboot/issu_bank.txt + MLNX_ISSU_BANK_BROKEN=102 + + if [[ ! -s "$ISSU_BANK_FILE" ]]; then + error "(${ISSU_BANK_FILE}) does NOT exist or empty ..." + recover_issu_bank_file_instruction + if [[ "$1" = true ]]; then + exit "${MLNX_ISSU_BANK_BROKEN}" + fi + return + fi + + issu_file_chars_count=`stat -c %s ${ISSU_BANK_FILE}`; + issu_file_content=`awk '{print $0}' ${ISSU_BANK_FILE}` + + if [[ $issu_file_chars_count != 1 ]] || + [[ "$issu_file_content" != "0" && "$issu_file_content" != "1" ]]; then + error "(${ISSU_BANK_FILE}) is broken ..." + recover_issu_bank_file_instruction + if [[ "$1" = true ]]; then + exit "${MLNX_ISSU_BANK_BROKEN}" + fi + fi +} + function wait_for_pre_shutdown_complete_or_fail() { debug "Waiting for pre-shutdown ..." @@ -483,10 +519,20 @@ systemctl stop swss if [[ "$REBOOT_TYPE" = "warm-reboot" || "$REBOOT_TYPE" = "fastfast-reboot" ]]; then initialize_pre_shutdown + BEFORE_PRE_SHUTDOWN=true + + if [[ "x$sonic_asic_type" == x"mellanox" ]]; then + check_issu_bank_file "$BEFORE_PRE_SHUTDOWN" + fi + request_pre_shutdown wait_for_pre_shutdown_complete_or_fail + if [[ "x$sonic_asic_type" == x"mellanox" ]]; then + check_issu_bank_file + fi + # Warm reboot: dump state to host disk if [[ "$REBOOT_TYPE" = "fastfast-reboot" ]]; then sonic-db-cli ASIC_DB FLUSHDB > /dev/null