From 37d6af96b0c31aa9d97bc2e5ba55a606e75c5859 Mon Sep 17 00:00:00 2001 From: xiao-77 Date: Mon, 9 Dec 2024 19:36:15 +0800 Subject: [PATCH] enh some codes. --- source/dnode/mnode/impl/src/mndConfig.c | 129 +++++++++++++++++++++++- source/dnode/mnode/impl/src/mndDnode.c | 117 --------------------- 2 files changed, 124 insertions(+), 122 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndConfig.c b/source/dnode/mnode/impl/src/mndConfig.c index 0a9c51511f..13468d2792 100644 --- a/source/dnode/mnode/impl/src/mndConfig.c +++ b/source/dnode/mnode/impl/src/mndConfig.c @@ -32,16 +32,18 @@ enum CfgAlterType { 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, ECfgDataType dtype, - int32_t tsmmConfigVersion); +static int32_t mndProcessShowVariablesReq(SRpcMsg *pReq); static int32_t mndProcessConfigDnodeReq(SRpcMsg *pReq); static int32_t mndProcessConfigDnodeRsp(SRpcMsg *pRsp); static int32_t mndProcessConfigReq(SRpcMsg *pReq); static int32_t mndInitWriteCfg(SMnode *pMnode); -static int32_t mndMaybeReBuildCfg(SMnode *pMnode); +static int32_t mndInitReadCfg(SMnode *pMnode); static int32_t initConfigArrayFromSdb(SMnode *pMnode, SArray *array); static void cfgArrayCleanUp(SArray *array); +static int32_t mndConfigUpdateTrans(SMnode *pMnode, const char *name, char *pValue, ECfgDataType dtype, + int32_t tsmmConfigVersion); + int32_t mndSetCreateConfigCommitLogs(STrans *pTrans, SConfigObj *obj); int32_t mndInitConfig(SMnode *pMnode) { @@ -59,6 +61,7 @@ int32_t mndInitConfig(SMnode *pMnode) { mndSetMsgHandle(pMnode, TDMT_MND_CONFIG, mndProcessConfigReq); mndSetMsgHandle(pMnode, TDMT_MND_CONFIG_DNODE, mndProcessConfigDnodeReq); mndSetMsgHandle(pMnode, TDMT_DND_CONFIG_DNODE_RSP, mndProcessConfigDnodeRsp); + mndSetMsgHandle(pMnode, TDMT_MND_SHOW_VARIABLES, mndProcessShowVariablesReq); return sdbSetTable(pMnode->pSdb, table); } @@ -219,7 +222,7 @@ static int32_t mndCfgActionUpdate(SSdb *pSdb, SConfigObj *pOld, SConfigObj *pNew static int32_t mndCfgActionDeploy(SMnode *pMnode) { return mndInitWriteCfg(pMnode); } -static int32_t mndCfgActionPrepare(SMnode *pMnode) { return mndMaybeReBuildCfg(pMnode); } +static int32_t mndCfgActionPrepare(SMnode *pMnode) { return mndInitReadCfg(pMnode); } static int32_t mndProcessConfigReq(SRpcMsg *pReq) { SMnode *pMnode = pReq->info.node; @@ -322,7 +325,7 @@ _OVER: return TSDB_CODE_SUCCESS; } -int32_t mndMaybeReBuildCfg(SMnode *pMnode) { +int32_t mndInitReadCfg(SMnode *pMnode) { int32_t code = 0; int32_t sz = -1; SConfigObj *obj = sdbAcquire(pMnode->pSdb, SDB_CFG, "tsmmConfigVersion"); @@ -679,4 +682,120 @@ static void cfgArrayCleanUp(SArray *array) { } taosArrayDestroy(array); +} + +SArray *initVariablesFromItems(SArray *pItems) { + if (pItems == NULL) { + return NULL; + } + + int32_t sz = taosArrayGetSize(pItems); + + SArray *pInfos = taosArrayInit(sz, sizeof(SVariablesInfo)); + for (int32_t i = 0; i < sz; ++i) { + SConfigItem *pItem = taosArrayGet(pItems, i); + SVariablesInfo info = {0}; + strcpy(info.name, pItem->name); + + // init info value + switch (pItem->dtype) { + case CFG_DTYPE_NONE: + break; + case CFG_DTYPE_BOOL: + sprintf(info.value, "%d", pItem->bval); + break; + case CFG_DTYPE_INT32: + sprintf(info.value, "%d", pItem->i32); + break; + case CFG_DTYPE_INT64: + sprintf(info.value, "%" PRId64, pItem->i64); + break; + case CFG_DTYPE_FLOAT: + case CFG_DTYPE_DOUBLE: + sprintf(info.value, "%f", pItem->fval); + break; + case CFG_DTYPE_STRING: + case CFG_DTYPE_DIR: + case CFG_DTYPE_LOCALE: + case CFG_DTYPE_CHARSET: + case CFG_DTYPE_TIMEZONE: + sprintf(info.value, "%s", pItem->str); + break; + } + + // init info scope + switch (pItem->scope) { + case CFG_SCOPE_SERVER: + strcpy(info.scope, "server"); + break; + case CFG_SCOPE_CLIENT: + strcpy(info.scope, "client"); + break; + case CFG_SCOPE_BOTH: + strcpy(info.scope, "both"); + break; + default: + strcpy(info.scope, "unknown"); + break; + } + // init info category + switch (pItem->category) { + case CFG_CATEGORY_GLOBAL: + strcpy(info.category, "global"); + break; + case CFG_CATEGORY_LOCAL: + strcpy(info.category, "local"); + break; + default: + strcpy(info.category, "unknown"); + break; + } + if (NULL == taosArrayPush(pInfos, &info)) { + mError("failed to push info to array while init variables from items,since %s", tstrerror(terrno)); + return NULL; + } + } + + return pInfos; +} + +static int32_t mndProcessShowVariablesReq(SRpcMsg *pReq) { + SShowVariablesRsp rsp = {0}; + int32_t code = -1; + + if (mndCheckOperPrivilege(pReq->info.node, pReq->info.conn.user, MND_OPER_SHOW_VARIABLES) != 0) { + goto _OVER; + } + + SVariablesInfo info = {0}; + + rsp.variables = initVariablesFromItems(taosGetGlobalCfg(tsCfg)); + if (rsp.variables == NULL) { + code = terrno; + goto _OVER; + } + int32_t rspLen = tSerializeSShowVariablesRsp(NULL, 0, &rsp); + void *pRsp = rpcMallocCont(rspLen); + if (pRsp == NULL) { + code = terrno; + goto _OVER; + } + + if ((rspLen = tSerializeSShowVariablesRsp(pRsp, rspLen, &rsp)) <= 0) { + code = rspLen; + goto _OVER; + } + + pReq->info.rspLen = rspLen; + pReq->info.rsp = pRsp; + code = 0; + +_OVER: + + if (code != 0) { + mError("failed to get show variables info since %s", tstrerror(code)); + } + + tFreeSShowVariablesRsp(&rsp); + TAOS_RETURN(code); } \ No newline at end of file diff --git a/source/dnode/mnode/impl/src/mndDnode.c b/source/dnode/mnode/impl/src/mndDnode.c index dfe0c1e933..fd520f723b 100644 --- a/source/dnode/mnode/impl/src/mndDnode.c +++ b/source/dnode/mnode/impl/src/mndDnode.c @@ -77,7 +77,6 @@ static int32_t mndDnodeActionInsert(SSdb *pSdb, SDnodeObj *pDnode); static int32_t mndDnodeActionDelete(SSdb *pSdb, SDnodeObj *pDnode); static int32_t mndDnodeActionUpdate(SSdb *pSdb, SDnodeObj *pOld, SDnodeObj *pNew); static int32_t mndProcessDnodeListReq(SRpcMsg *pReq); -static int32_t mndProcessShowVariablesReq(SRpcMsg *pReq); static int32_t mndProcessCreateDnodeReq(SRpcMsg *pReq); static int32_t mndProcessDropDnodeReq(SRpcMsg *pReq); @@ -118,7 +117,6 @@ int32_t mndInitDnode(SMnode *pMnode) { mndSetMsgHandle(pMnode, TDMT_MND_STATUS, mndProcessStatusReq); mndSetMsgHandle(pMnode, TDMT_MND_NOTIFY, mndProcessNotifyReq); mndSetMsgHandle(pMnode, TDMT_MND_DNODE_LIST, mndProcessDnodeListReq); - mndSetMsgHandle(pMnode, TDMT_MND_SHOW_VARIABLES, mndProcessShowVariablesReq); mndSetMsgHandle(pMnode, TDMT_MND_RESTORE_DNODE, mndProcessRestoreDnodeReq); mndSetMsgHandle(pMnode, TDMT_MND_STATIS, mndProcessStatisReq); mndSetMsgHandle(pMnode, TDMT_MND_AUDIT, mndProcessAuditReq); @@ -1079,121 +1077,6 @@ static void getSlowLogScopeString(int32_t scope, char *result) { } } -SArray *initVariablesFromItems(SArray *pItems) { - if (pItems == NULL) { - return NULL; - } - - int32_t sz = taosArrayGetSize(pItems); - - SArray *pInfos = taosArrayInit(sz, sizeof(SVariablesInfo)); - for (int32_t i = 0; i < sz; ++i) { - SConfigItem *pItem = taosArrayGet(pItems, i); - SVariablesInfo info = {0}; - strcpy(info.name, pItem->name); - - // init info value - switch (pItem->dtype) { - case CFG_DTYPE_NONE: - break; - case CFG_DTYPE_BOOL: - sprintf(info.value, "%d", pItem->bval); - break; - case CFG_DTYPE_INT32: - sprintf(info.value, "%d", pItem->i32); - break; - case CFG_DTYPE_INT64: - sprintf(info.value, "%" PRId64, pItem->i64); - break; - case CFG_DTYPE_FLOAT: - case CFG_DTYPE_DOUBLE: - sprintf(info.value, "%f", pItem->fval); - break; - case CFG_DTYPE_STRING: - case CFG_DTYPE_DIR: - case CFG_DTYPE_LOCALE: - case CFG_DTYPE_CHARSET: - case CFG_DTYPE_TIMEZONE: - sprintf(info.value, "%s", pItem->str); - break; - } - - // init info scope - switch (pItem->scope) { - case CFG_SCOPE_SERVER: - strcpy(info.scope, "server"); - break; - case CFG_SCOPE_CLIENT: - strcpy(info.scope, "client"); - break; - case CFG_SCOPE_BOTH: - strcpy(info.scope, "both"); - break; - default: - strcpy(info.scope, "unknown"); - break; - } - // init info category - switch (pItem->category) { - case CFG_CATEGORY_GLOBAL: - strcpy(info.category, "global"); - break; - case CFG_CATEGORY_LOCAL: - strcpy(info.category, "local"); - break; - default: - strcpy(info.category, "unknown"); - break; - } - if (NULL == taosArrayPush(pInfos, &info)) { - mError("failed to push info to array while init variables from items,since %s", tstrerror(terrno)); - return NULL; - } - } - - return pInfos; -} - -static int32_t mndProcessShowVariablesReq(SRpcMsg *pReq) { - SShowVariablesRsp rsp = {0}; - int32_t code = -1; - - if (mndCheckOperPrivilege(pReq->info.node, pReq->info.conn.user, MND_OPER_SHOW_VARIABLES) != 0) { - goto _OVER; - } - - SVariablesInfo info = {0}; - - rsp.variables = initVariablesFromItems(taosGetGlobalCfg(tsCfg)); - if (rsp.variables == NULL) { - code = terrno; - goto _OVER; - } - int32_t rspLen = tSerializeSShowVariablesRsp(NULL, 0, &rsp); - void *pRsp = rpcMallocCont(rspLen); - if (pRsp == NULL) { - code = terrno; - goto _OVER; - } - - if ((rspLen = tSerializeSShowVariablesRsp(pRsp, rspLen, &rsp)) <= 0) { - code = rspLen; - goto _OVER; - } - - pReq->info.rspLen = rspLen; - pReq->info.rsp = pRsp; - code = 0; - -_OVER: - - if (code != 0) { - mError("failed to get show variables info since %s", tstrerror(code)); - } - - tFreeSShowVariablesRsp(&rsp); - TAOS_RETURN(code); -} static int32_t mndProcessCreateDnodeReq(SRpcMsg *pReq) { SMnode *pMnode = pReq->info.node;