From da6722d35370aaef0e234d391e1e8c4f88a8c9e0 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Mon, 16 Jan 2023 13:28:18 +0800 Subject: [PATCH] enh: update epset on dnode info changed --- source/dnode/mgmt/node_mgmt/src/dmMgmt.c | 3 +++ source/dnode/mgmt/node_util/inc/dmUtil.h | 1 + source/dnode/mgmt/node_util/src/dmEps.c | 26 ++++++++++++++++++------ 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c index 27673b3dcf..16d453abb5 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c +++ b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c @@ -84,6 +84,9 @@ static void dmClearVars(SDnode *pDnode) { pData->dnodeEps = NULL; } if (pData->oldDnodeEps != NULL) { + if (dmWriteEps(pData) == 0) { + dmRemoveDnodePairs(pData); + } taosArrayDestroy(pData->oldDnodeEps); pData->oldDnodeEps = NULL; } diff --git a/source/dnode/mgmt/node_util/inc/dmUtil.h b/source/dnode/mgmt/node_util/inc/dmUtil.h index 784bb3c5e1..40b171601d 100644 --- a/source/dnode/mgmt/node_util/inc/dmUtil.h +++ b/source/dnode/mgmt/node_util/inc/dmUtil.h @@ -169,6 +169,7 @@ void dmGetMnodeEpSet(SDnodeData *pData, SEpSet *pEpSet); void dmGetMnodeEpSetForRedirect(SDnodeData *pData, SRpcMsg *pMsg, SEpSet *pEpSet); void dmSetMnodeEpSet(SDnodeData *pData, SEpSet *pEpSet); void dmUpdateDnodeInfo(void *pData, int32_t *dnodeId, int64_t *clusterId, char *fqdn, uint16_t *port); +void dmRemoveDnodePairs(SDnodeData *pData); #ifdef __cplusplus } diff --git a/source/dnode/mgmt/node_util/src/dmEps.c b/source/dnode/mgmt/node_util/src/dmEps.c index e061a7dfeb..8234787baa 100644 --- a/source/dnode/mgmt/node_util/src/dmEps.c +++ b/source/dnode/mgmt/node_util/src/dmEps.c @@ -155,6 +155,7 @@ _OVER: if (code != 0) { dError("failed to read dnode file:%s since %s", file, terrstr()); + return code; } if (taosArrayGetSize(pData->dnodeEps) == 0) { @@ -164,6 +165,10 @@ _OVER: taosArrayPush(pData->dnodeEps, &dnodeEp); } + if (dmReadDnodePairs(pData) != 0) { + return -1; + } + dDebug("reset dnode list on startup"); dmResetEps(pData, pData->dnodeEps); @@ -416,6 +421,13 @@ static int32_t dmDecodeEpPairs(SJson *pJson, SDnodeData *pData) { return code; } +void dmRemoveDnodePairs(SDnodeData *pData) { + char file[PATH_MAX] = {0}; + snprintf(file, sizeof(file), "%s%sdnode%sep.json", tsDataDir, TD_DIRSEP, TD_DIRSEP); + dInfo("dnode file:%s is removed", file); + (void)taosRemoveFile(file); +} + static int32_t dmReadDnodePairs(SDnodeData *pData) { int32_t code = -1; TdFilePtr pFile = NULL; @@ -424,12 +436,6 @@ static int32_t dmReadDnodePairs(SDnodeData *pData) { char file[PATH_MAX] = {0}; snprintf(file, sizeof(file), "%s%sdnode%sep.json", tsDataDir, TD_DIRSEP, TD_DIRSEP); - pData->oldDnodeEps = taosArrayInit(1, sizeof(SDnodeEp)); - if (pData->oldDnodeEps == NULL) { - dError("failed to calloc dnodeEp array since %s", strerror(errno)); - goto _OVER; - } - if (taosStatFile(file, NULL, NULL) < 0) { dDebug("dnode file:%s not exist", file); code = 0; @@ -470,7 +476,15 @@ static int32_t dmReadDnodePairs(SDnodeData *pData) { goto _OVER; } + pData->oldDnodeEps = taosArrayInit(1, sizeof(SDnodeEp)); + if (pData->oldDnodeEps == NULL) { + dError("failed to calloc dnodeEp array since %s", strerror(errno)); + goto _OVER; + } + if (dmDecodeEpPairs(pJson, pData) < 0) { + taosArrayDestroy(pData->oldDnodeEps); + pData->oldDnodeEps = NULL; terrno = TSDB_CODE_INVALID_JSON_FORMAT; goto _OVER; }