#!/bin/bash
set +x
G_INSPECT_MMLPATH="/opt/product/snas/script/inspect_mml"
source "${G_INSPECT_MMLPATH}/CheckItems"
curInspectNum="327"
curInspectFun="$(GetInspectType $curInspectNum)"
resultFile="${G_TMP_INSPECT_PATH}/tmpResult${curInspectFun}"
>"${resultFile}"

function CheckCCDBDBConsistency()
{
    local dbfile=""
    local version=""
    local item=""

    dbfile=$([ -d "/opt/product/etc/ccdb/" ] && find /opt/product/etc/ccdb/ -type f | grep -vP '\-wal|\-shm|\.log|/ccdb_export/')
    if [ $? -eq 0 ] && [ "${dbfile}" != "" ];then
        for item in ${dbfile};do
            version=$(sqlite3 $item "select version from db_snapshot_version_tbl;")
            version=${version:-0}
            echo "$item $version"  >>${resultFile} 2>&1
        done
    else
        echo "No CCDB database file"  >>${resultFile} 2>&1
    fi
}

function CheckIfCcdbMasterSwitchOver()
{
    local ccdbMasterIp=""
    local ccdbEpoch=""
    local ccdbNewMasterIp=""
    local ccdbNewEpoch=""

    if [ ! -f "/proc/monc_ccdbmap" ]; then
        echo "Epoch: /proc/monc_ccdbmap is nonexist." >>${resultFile} 2>&1
        return
    fi

    ccdbEpoch=$( cat /proc/monc_ccdbmap | grep Epoch | awk -F: '{print $2}' | sed "s/^ *//g" | sed "s/ *$//g" )
    ccdbMasterIp=$( cat /proc/monc_ccdbmap | grep "Role: 0" | awk '{print $NF}' | sed "s/^ *//g" | sed "s/ *$//g" )
    if [ X"${ccdbEpoch}" == X"" -o X"${ccdbMasterIp}" == X"" ]; then
        echo "Epoch: faild to get epoch(${ccdbEpoch}) or ccdbmasterip(${ccdbMasterIp}) from /proc/monc_ccdbmap." >>${resultFile} 2>&1
        return
    fi

    sleep 60

    if [ ! -f "/proc/monc_ccdbmap" ]; then
        echo "Epoch: /proc/monc_ccdbmap is nonexist." >>${resultFile} 2>&1
        return
    fi

    ccdbNewEpoch=$( cat /proc/monc_ccdbmap | grep Epoch | awk -F: '{print $2}' | sed "s/^ *//g" | sed "s/ *$//g" )
    ccdbNewMasterIp=$( cat /proc/monc_ccdbmap | grep "Role: 0" | awk '{print $NF}' | sed "s/^ *//g" | sed "s/ *$//g" )
    if [ X"${ccdbNewEpoch}" == X"" -o X"${ccdbNewMasterIp}" == X"" ]; then
        echo "Epoch: faild to get epoch(${ccdbNewEpoch}) or ccdbmasterip(${ccdbNewMasterIp}) from /proc/monc_ccdbmap.." >>${resultFile} 2>&1
        return
    fi

    if [ ${ccdbEpoch} != ${ccdbNewEpoch} -a ${ccdbMasterIp} != ${ccdbNewMasterIp} ]; then
        echo "Epoch: The CCDB master node may be switching frequently.Epoch(${ccdbEpoch} --> ${ccdbNewEpoch}),ccdbMasterIp(${ccdbMasterIp} --> ${ccdbNewMasterIp})." >>${resultFile} 2>&1
        return
    fi

    return
}

CheckCCDBDBConsistency

# CCDB飺1ʹcat /proc/monc_ccdbmap鿴Epochţ2ȴ1ӣִв13Epoch仯CCDBƵҪccdbͬ²鿴
CheckIfCcdbMasterSwitchOver