From 1089f323e4cf57f04277961f6435d357ee71af65 Mon Sep 17 00:00:00 2001 From: xiao-77 Date: Thu, 21 Nov 2024 16:43:58 +0800 Subject: [PATCH] Add logic to set configs while init dnode. --- source/common/src/tglobal.c | 8 ++++++-- source/dnode/mgmt/mgmt_dnode/src/dmHandle.c | 9 +++++++-- source/dnode/mnode/impl/src/mndConfig.c | 4 ++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index 50fab2d3f4..7cd05f7fb6 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -35,7 +35,6 @@ // GRANT_CFG_DECLARE; SConfig *tsCfg = NULL; - // cluster char tsFirst[TSDB_EP_LEN] = {0}; char tsSecond[TSDB_EP_LEN] = {0}; @@ -602,6 +601,8 @@ static int32_t taosAddClientCfg(SConfig *pCfg) { (void)strcpy(defaultFqdn, "localhost"); } + TAOS_CHECK_RETURN( + cfgAddBool(pCfg, "forceReadConfig", tsForceReadConfig, CFG_SCOPE_BOTH, CFG_DYN_NONE, CFG_CATEGORY_LOCAL)); TAOS_CHECK_RETURN(cfgAddString(pCfg, "firstEp", "", CFG_SCOPE_BOTH, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL)); TAOS_CHECK_RETURN(cfgAddString(pCfg, "secondEp", "", CFG_SCOPE_BOTH, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL)); TAOS_CHECK_RETURN(cfgAddString(pCfg, "fqdn", defaultFqdn, CFG_SCOPE_SERVER, CFG_DYN_CLIENT, CFG_CATEGORY_LOCAL)); @@ -1230,6 +1231,9 @@ static int32_t taosSetClientCfg(SConfig *pCfg) { TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fqdn"); tstrncpy(tsLocalFqdn, pItem->str, TSDB_FQDN_LEN); + TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "forceReadConfig"); + tsForceReadConfig = pItem->bval; + TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "serverPort"); tsServerPort = (uint16_t)pItem->i32; (void)snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort); @@ -2060,7 +2064,7 @@ int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile tsCfg = NULL; TAOS_RETURN(code); } - tryLoadCfgFromDataDir(tsCfg); + TAOS_CHECK_GOTO(tryLoadCfgFromDataDir(tsCfg), &lino, _exit); if (tsc) { TAOS_CHECK_GOTO(taosSetClientCfg(tsCfg), &lino, _exit); diff --git a/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c b/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c index 7301923873..c106278009 100644 --- a/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c +++ b/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c @@ -286,7 +286,6 @@ void dmSendStatusReq(SDnodeMgmt *pMgmt) { static void dmProcessConfigRsp(SDnodeMgmt *pMgmt, SRpcMsg *pRsp) { const STraceId *trace = &pRsp->info.traceId; SConfigRsp configRsp = {0}; - dGTrace("status rsp received from mnode, statusSeq:%d code:0x%x", pMgmt->statusSeq, pRsp->code); if (pRsp->code != 0) { if (pRsp->code == TSDB_CODE_MND_DNODE_NOT_EXIST && !pMgmt->pData->dropped && pMgmt->pData->dnodeId > 0) { @@ -300,8 +299,10 @@ static void dmProcessConfigRsp(SDnodeMgmt *pMgmt, SRpcMsg *pRsp) { (void)raise(SIGINT); } } else { + bool needUpdate = false; if (pRsp->pCont != NULL && pRsp->contLen > 0 && tDeserializeSConfigRsp(pRsp->pCont, pRsp->contLen, &configRsp) == 0) { + // Try to use cfg file in current dnode. if (configRsp.forceReadConfig) { if (configRsp.isConifgVerified) { persistGlobalConfig(taosGetGlobalCfg(tsCfg), pMgmt->path, configRsp.cver); @@ -311,11 +312,15 @@ static void dmProcessConfigRsp(SDnodeMgmt *pMgmt, SRpcMsg *pRsp) { goto _exit; } } + // Try to use cfg from mnode sdb. if (!configRsp.isVersionVerified) { + needUpdate = true; persistGlobalConfig(configRsp.array, pMgmt->path, configRsp.cver); } } - setAllConfigs(tsCfg); + if (needUpdate) { + setAllConfigs(tsCfg); + } persistLocalConfig(pMgmt->path); tsConfigInited = 1; } diff --git a/source/dnode/mnode/impl/src/mndConfig.c b/source/dnode/mnode/impl/src/mndConfig.c index a044f6e8c4..e5e6a95c8d 100644 --- a/source/dnode/mnode/impl/src/mndConfig.c +++ b/source/dnode/mnode/impl/src/mndConfig.c @@ -27,8 +27,8 @@ static int32_t mndMCfgGetValInt32(SMCfgDnodeReq *pInMCfgReq, int32_t optLen, int32_t *pOutValue); static int32_t cfgUpdateItem(SConfigItem *pItem, SConfigObj *obj); -static int32_t mndConfigUpdateTrans(SMnode *pMnode, const char *name, char *pValue) static int32_t - mndProcessConfigDnodeReq(SRpcMsg *pReq); +static int32_t mndConfigUpdateTrans(SMnode *pMnode, const char *name, char *pValue); +static int32_t mndProcessConfigDnodeReq(SRpcMsg *pReq); static int32_t mndProcessConfigDnodeRsp(SRpcMsg *pRsp); static int32_t mndProcessConfigReq(SRpcMsg *pReq); static int32_t mndInitWriteCfg(SMnode *pMnode);