Merge pull request #29704 from taosdata/fix/main/TS-5974

Fix(cfg):fix some configs' errors and remove some configs from global config list.
This commit is contained in:
Shengliang Guan 2025-02-10 10:13:54 +08:00 committed by GitHub
commit f5c0d5ffaa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 130 additions and 69 deletions

View File

@ -326,7 +326,6 @@ int32_t tDeserializeSConfigArray(SDecoder *pDecoder, SArray *array);
int32_t setAllConfigs(SConfig *pCfg);
void printConfigNotMatch(SArray *array);
int32_t compareSConfigItemArrays(SArray *mArray, const SArray *dArray, SArray *diffArray);
bool isConifgItemLazyMode(SConfigItem *item);
int32_t taosUpdateTfsItemDisable(SConfig *pCfg, const char *value, void *pTfs);

View File

@ -35,6 +35,7 @@ time_t mktime_z(timezone_t, struct tm *);
timezone_t tzalloc(char const *);
void tzfree(timezone_t);
void getTimezoneStr(char *tz);
void truncateTimezoneString(char *tz);
#endif

View File

@ -713,11 +713,11 @@ static int32_t taosAddClientCfg(SConfig *pCfg) {
tsNumOfRpcThreads = tsNumOfCores / 2;
tsNumOfRpcThreads = TRANGE(tsNumOfRpcThreads, 2, TSDB_MAX_RPC_THREADS);
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfRpcThreads", tsNumOfRpcThreads, 1, 1024, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY,
CFG_CATEGORY_GLOBAL));
CFG_CATEGORY_LOCAL));
tsNumOfRpcSessions = TRANGE(tsNumOfRpcSessions, 100, 100000);
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfRpcSessions", tsNumOfRpcSessions, 1, 100000, CFG_SCOPE_BOTH,
CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
CFG_DYN_BOTH_LAZY, CFG_CATEGORY_LOCAL));
tsShareConnLimit = TRANGE(tsShareConnLimit, 1, 512);
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "shareConnLimit", tsShareConnLimit, 1, 512, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY,
@ -734,7 +734,7 @@ static int32_t taosAddClientCfg(SConfig *pCfg) {
tsNumOfTaskQueueThreads = TMAX(tsNumOfTaskQueueThreads, 16);
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfTaskQueueThreads", tsNumOfTaskQueueThreads, 4, 1024, CFG_SCOPE_CLIENT,
CFG_DYN_CLIENT_LAZY, CFG_CATEGORY_GLOBAL));
CFG_DYN_CLIENT_LAZY, CFG_CATEGORY_LOCAL));
TAOS_CHECK_RETURN(
cfgAddBool(pCfg, "experimental", tsExperimental, CFG_SCOPE_BOTH, CFG_DYN_BOTH_LAZY, CFG_CATEGORY_GLOBAL));
TAOS_CHECK_RETURN(cfgAddBool(pCfg, "multiResultFunctionStarReturnTags", tsMultiResultFunctionStarReturnTags,
@ -864,12 +864,12 @@ static int32_t taosAddServerCfg(SConfig *pCfg) {
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfSnodeSharedThreads", tsNumOfSnodeStreamThreads, 2, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "numOfSnodeUniqueThreads", tsNumOfSnodeWriteThreads, 2, 1024, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_LOCAL));
TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "rpcQueueMemoryAllowed", tsQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * RPC_MEMORY_USAGE_RATIO * 10L, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "rpcQueueMemoryAllowed", tsQueueMemoryAllowed, TSDB_MAX_MSG_SIZE * RPC_MEMORY_USAGE_RATIO * 10L, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_LOCAL));
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncElectInterval", tsElectInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncHeartbeatInterval", tsHeartbeatInterval, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncHeartbeatTimeout", tsHeartbeatTimeout, 10, 1000 * 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "syncSnapReplMaxWaitN", tsSnapReplMaxWaitN, 16, (TSDB_SYNC_SNAP_BUFFER_SIZE >> 2), CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "syncLogBufferMemoryAllowed", tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10L, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
TAOS_CHECK_RETURN(cfgAddInt64(pCfg, "syncLogBufferMemoryAllowed", tsLogBufferMemoryAllowed, TSDB_MAX_MSG_SIZE * 10L, INT64_MAX, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_LOCAL));
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbHeartBeatIntervalSec", tsArbHeartBeatIntervalSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "arbCheckSyncIntervalSec", tsArbCheckSyncIntervalSec, 1, 60 * 24 * 2, CFG_SCOPE_SERVER, CFG_DYN_SERVER,CFG_CATEGORY_GLOBAL));
@ -947,9 +947,7 @@ static int32_t taosAddServerCfg(SConfig *pCfg) {
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "cacheLazyLoadThreshold", tsCacheLazyLoadThreshold, 0, 100000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER,CFG_CATEGORY_GLOBAL));
TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "fPrecision", tsFPrecision, 0.0f, 100000.0f, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
SConfigItem *pItem = NULL;
TAOS_CHECK_GET_CFG_ITEM(pCfg, pItem, "fPrecision");
tsFPrecision = pItem->fval;
TAOS_CHECK_RETURN(cfgAddFloat(pCfg, "dPrecision", tsDPrecision, 0.0f, 1000000.0f, CFG_SCOPE_SERVER, CFG_DYN_NONE,CFG_CATEGORY_GLOBAL));
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "maxRange", tsMaxRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
TAOS_CHECK_RETURN(cfgAddInt32(pCfg, "curRange", tsCurRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_SERVER_LAZY,CFG_CATEGORY_GLOBAL));
@ -3196,57 +3194,6 @@ _exit:
return code;
}
bool compareSConfigItem(const SConfigItem *item1, const SConfigItem *item2) {
switch (item1->dtype) {
case CFG_DTYPE_BOOL:
if (item1->bval != item2->bval) return false;
break;
case CFG_DTYPE_FLOAT:
if (item1->fval != item2->fval) return false;
break;
case CFG_DTYPE_INT32:
if (item1->i32 != item2->i32) return false;
break;
case CFG_DTYPE_INT64:
if (item1->i64 != item2->i64) return false;
break;
case CFG_DTYPE_STRING:
case CFG_DTYPE_DIR:
case CFG_DTYPE_LOCALE:
case CFG_DTYPE_CHARSET:
case CFG_DTYPE_TIMEZONE:
if (strcmp(item1->str, item2->str) != 0) return false;
break;
default:
return false;
}
return true;
}
int32_t compareSConfigItemArrays(SArray *mArray, const SArray *dArray, SArray *diffArray) {
int32_t code = 0;
int32_t msz = taosArrayGetSize(mArray);
int32_t dsz = taosArrayGetSize(dArray);
if (msz != dsz) {
return TSDB_CODE_FAILED;
}
for (int i = 0; i < msz; i++) {
SConfigItem *mItem = (SConfigItem *)taosArrayGet(mArray, i);
SConfigItem *dItem = (SConfigItem *)taosArrayGet(dArray, i);
if (!compareSConfigItem(mItem, dItem)) {
code = TSDB_CODE_FAILED;
if (taosArrayPush(diffArray, mItem) == NULL) {
code = terrno;
return code;
}
}
}
return code;
}
void printConfigNotMatch(SArray *array) {
uError(
"The global configuration parameters in the configuration file do not match those in the cluster. Please "

View File

@ -40,6 +40,7 @@ static int32_t initConfigArrayFromSdb(SMnode *pMnode, SArray *array);
static int32_t mndTryRebuildConfigSdb(SRpcMsg *pReq);
static void cfgArrayCleanUp(SArray *array);
static void cfgObjArrayCleanUp(SArray *array);
int32_t compareSConfigItemArrays(SMnode *pMnode, const SArray *dArray, SArray *diffArray);
static int32_t mndConfigUpdateTrans(SMnode *pMnode, const char *name, char *pValue, ECfgDataType dtype,
int32_t tsmmConfigVersion);
@ -250,7 +251,12 @@ static int32_t mndProcessConfigReq(SRpcMsg *pReq) {
configRsp.cver = vObj->i32;
if (configRsp.forceReadConfig) {
// compare config array from configReq with current config array
if (compareSConfigItemArrays(taosGetGlobalCfg(tsCfg), configReq.array, array)) {
code = compareSConfigItemArrays(pMnode, configReq.array, array);
if (code != TSDB_CODE_SUCCESS) {
mError("failed to compare config array, since %s", tstrerror(code));
goto _OVER;
}
if (taosArrayGetSize(array) > 0) {
configRsp.array = array;
} else {
configRsp.isConifgVerified = 1;
@ -293,7 +299,7 @@ _OVER:
}
sdbRelease(pMnode->pSdb, vObj);
cfgArrayCleanUp(array);
return TSDB_CODE_SUCCESS;
return code;
}
int32_t mndInitWriteCfg(SMnode *pMnode) {
@ -921,4 +927,85 @@ _OVER:
tFreeSShowVariablesRsp(&rsp);
TAOS_RETURN(code);
}
int32_t compareSConfigItem(const SConfigObj *item1, SConfigItem *item2, bool *compare) {
switch (item1->dtype) {
case CFG_DTYPE_BOOL:
if (item1->bval != item2->bval) {
item2->bval = item1->bval;
*compare = false;
}
break;
case CFG_DTYPE_FLOAT:
if (item1->fval != item2->fval) {
item2->fval = item1->fval;
*compare = false;
}
break;
case CFG_DTYPE_INT32:
if (item1->i32 != item2->i32) {
item2->i32 = item1->i32;
*compare = false;
}
break;
case CFG_DTYPE_INT64:
if (item1->i64 != item2->i64) {
item2->i64 = item1->i64;
*compare = false;
}
break;
case CFG_DTYPE_STRING:
case CFG_DTYPE_DIR:
case CFG_DTYPE_LOCALE:
case CFG_DTYPE_CHARSET:
case CFG_DTYPE_TIMEZONE:
if (strcmp(item1->str, item2->str) != 0) {
taosMemoryFree(item2->str);
item2->str = taosStrdup(item1->str);
if (item2->str == NULL) {
return TSDB_CODE_OUT_OF_MEMORY;
}
*compare = false;
}
break;
default:
*compare = false;
return TSDB_CODE_INVALID_CFG;
}
*compare = true;
return TSDB_CODE_SUCCESS;
}
int32_t compareSConfigItemArrays(SMnode *pMnode, const SArray *dArray, SArray *diffArray) {
int32_t code = 0;
int32_t dsz = taosArrayGetSize(dArray);
bool compare = false;
for (int i = 0; i < dsz; i++) {
SConfigItem *dItem = (SConfigItem *)taosArrayGet(dArray, i);
SConfigObj *mObj = sdbAcquire(pMnode->pSdb, SDB_CFG, dItem->name);
if (mObj == NULL) {
code = terrno;
mError("failed to acquire config:%s from sdb, since %s", dItem->name, tstrerror(code));
return code;
}
code = compareSConfigItem(mObj, dItem, &compare);
if (code != TSDB_CODE_SUCCESS) {
sdbRelease(pMnode->pSdb, mObj);
return code;
}
if (!compare) {
if (taosArrayPush(diffArray, dItem) == NULL) {
sdbRelease(pMnode->pSdb, mObj);
return terrno;
}
}
sdbRelease(pMnode->pSdb, mObj);
}
return code;
}

View File

@ -872,6 +872,13 @@ END:
}
#endif
void truncateTimezoneString(char *tz) {
char *spacePos = strchr(tz, ' ');
if (spacePos != NULL) {
*spacePos = '\0';
}
}
int32_t taosGetSystemTimezone(char *outTimezoneStr) {
#ifdef WINDOWS
char value[100] = {0};

View File

@ -97,6 +97,7 @@ int32_t cfgLoadFromArray(SConfig *pCfg, SArray *pArgs) {
}
int32_t cfgUpdateFromArray(SConfig *pCfg, SArray *pArgs) {
int32_t code = TSDB_CODE_SUCCESS;
int32_t size = taosArrayGetSize(pArgs);
for (int32_t i = 0; i < size; ++i) {
SConfigItem *pItemNew = taosArrayGet(pArgs, i);
@ -124,9 +125,6 @@ int32_t cfgUpdateFromArray(SConfig *pCfg, SArray *pArgs) {
break;
case CFG_DTYPE_STRING:
case CFG_DTYPE_DIR:
case CFG_DTYPE_LOCALE:
case CFG_DTYPE_CHARSET:
case CFG_DTYPE_TIMEZONE:
taosMemoryFree(pItemOld->str);
pItemOld->str = taosStrdup(pItemNew->str);
if (pItemOld->str == NULL) {
@ -134,6 +132,22 @@ int32_t cfgUpdateFromArray(SConfig *pCfg, SArray *pArgs) {
TAOS_RETURN(terrno);
}
break;
case CFG_DTYPE_LOCALE:
case CFG_DTYPE_CHARSET:
code = cfgSetItemVal(pItemOld, pItemNew->name, pItemNew->str, pItemNew->stype);
if (code != TSDB_CODE_SUCCESS) {
(void)taosThreadMutexUnlock(&pCfg->lock);
TAOS_RETURN(code);
}
break;
case CFG_DTYPE_TIMEZONE:
truncateTimezoneString(pItemNew->str);
code = cfgSetItemVal(pItemOld, pItemNew->name, pItemNew->str, pItemNew->stype);
if (code != TSDB_CODE_SUCCESS) {
(void)taosThreadMutexUnlock(&pCfg->lock);
TAOS_RETURN(code);
}
break;
default:
break;
}

View File

@ -176,7 +176,12 @@ class TDTestCase(TBase):
def alter_err_case(self):
tdSql.error(f"alter local 'audit 0'",expectErrInfo="Config not found")
tdSql.error(f"alter dnode 1 'audit 1'",expectErrInfo="Invalid config option")
def alter_dnode_1_case(self):
tdSql.execute("alter dnode 1 'numOfRpcThreads' '5'")
tdSql.execute("alter dnode 1 'rpcQueueMemoryAllowed' '15242880'")
tdSql.execute("alter dnode 1 'syncLogBufferMemoryAllowed' '115728640'")
# run
def run(self):
tdLog.debug(f"start to excute {__file__}")
@ -191,6 +196,7 @@ class TDTestCase(TBase):
self.alterBypassFlag()
# TS-5007
self.alter_err_case()
self.alter_dnode_1_case()
tdLog.success(f"{__file__} successfully executed")

View File

@ -230,7 +230,7 @@ endi
sql_error show create stable t0;
sql show variables;
if $rows != 93 then
if $rows != 88 then
return -1
endi

View File

@ -120,7 +120,7 @@ if $rows != 3 then
endi
sql show variables;
if $rows != 93 then
if $rows != 88 then
return -1
endi

View File

@ -47,7 +47,7 @@ class TDTestCase:
def case2(self):
tdSql.query("show variables")
tdSql.checkRows(93)
tdSql.checkRows(88)
for i in range(self.replicaVar):
tdSql.query("show dnode %d variables like 'debugFlag'" % (i + 1))