diff --git a/src/cm_adapter/cm_sharediskapi/cm_voting_disk.cpp b/src/cm_adapter/cm_sharediskapi/cm_voting_disk.cpp index d3f8545..cb85c97 100644 --- a/src/cm_adapter/cm_sharediskapi/cm_voting_disk.cpp +++ b/src/cm_adapter/cm_sharediskapi/cm_voting_disk.cpp @@ -112,14 +112,14 @@ status_t SetVotingDiskNodeData(char *data, uint32 dataLen) return CM_SUCCESS; } -status_t UpdateAllNodeHeartBeat() +status_t UpdateAllNodeHeartBeat(uint32 nodeNum) { - uint32 dataLen = VOTING_DISK_DATA_SIZE; + uint32 dataLen = nodeNum * VOTING_DISK_EACH_NODE_OFFSET; if (GetVotingDiskNodeData(g_nodeDataBuff, dataLen) != CM_SUCCESS) { write_runlog(ERROR, "[%s] get voting disk node data failed.\n", __FUNCTION__); return CM_ERROR; } - for (uint32 i = 0; i < VOTING_DISK_MAX_NODE_NUM; i++) { + for (uint32 i = 0; i < nodeNum; i++) { uint32 offset = i * VOTING_DISK_EACH_NODE_OFFSET; VotingDiskNodeInfo *nodeInfo = (VotingDiskNodeInfo*)(g_nodeDataBuff + offset); if (nodeInfo->nodeTime == 0) { diff --git a/src/cm_server/cms_arbitrate_cluster.cpp b/src/cm_server/cms_arbitrate_cluster.cpp index 976cc22..de23564 100644 --- a/src/cm_server/cms_arbitrate_cluster.cpp +++ b/src/cm_server/cms_arbitrate_cluster.cpp @@ -1005,7 +1005,7 @@ static status_t CheckVotingDisk() const uint32 timeout = 6; uint32 time = timeout; while (time > 0) { - if (UpdateAllNodeHeartBeat() == CM_SUCCESS) { + if (UpdateAllNodeHeartBeat(g_node_num) == CM_SUCCESS) { return CM_SUCCESS; } time--; diff --git a/src/include/cm/cm_adapter/cm_sharedisk/cm_voting_disk.h b/src/include/cm/cm_adapter/cm_sharedisk/cm_voting_disk.h index c32816c..eb2be21 100644 --- a/src/include/cm/cm_adapter/cm_sharedisk/cm_voting_disk.h +++ b/src/include/cm/cm_adapter/cm_sharedisk/cm_voting_disk.h @@ -42,7 +42,7 @@ status_t GetVotingDiskData(char *data, uint32 dataLen, uint32 offset); status_t GetVotingDiskSingleNodeInfo(VotingDiskNodeInfo *nodeInfo, uint32 nodeIndex); status_t InitVotingDiskHandler(const char *scsiDev, uint32 offset); status_t InitVotingDisk(const char *votingDiskPath); -status_t UpdateAllNodeHeartBeat(); +status_t UpdateAllNodeHeartBeat(uint32 nodeNum); void ResetVotingdiskHeartBeat(); VotingDiskStatus GetNodeHeartbeatStat(uint32 nodeIndex, uint32 diskTimeout, int logLevel); status_t AllocVotingDiskMem();