Fix unit test.

This commit is contained in:
xiao-77 2024-12-06 11:37:45 +08:00
parent 3a32980577
commit c653daf5dc
7 changed files with 145 additions and 48 deletions

View File

@ -54,7 +54,6 @@ extern uint16_t tsServerPort;
extern int32_t tsVersion;
extern int32_t tsForceReadConfig;
extern int32_t tsdmConfigVersion;
extern int32_t tsmmConfigVersion;
extern int32_t tsConfigInited;
extern int32_t tsStatusInterval;
extern int32_t tsNumOfSupportVnodes;

View File

@ -46,7 +46,6 @@ uint16_t tsServerPort = 6030;
int32_t tsVersion = 30000000;
int32_t tsForceReadConfig = 0;
int32_t tsdmConfigVersion = -1;
int32_t tsmmConfigVersion = -1;
int32_t tsConfigInited = 0;
int32_t tsStatusInterval = 1; // second
int32_t tsNumOfSupportVnodes = 256;
@ -2630,7 +2629,6 @@ static int32_t taosCfgDynamicOptionsForClient(SConfig *pCfg, const char *name) {
{"keepColumnName", &tsKeepColumnName},
{"logKeepDays", &tsLogKeepDays},
{"maxInsertBatchRows", &tsMaxInsertBatchRows},
{"maxRetryWaitTime", &tsMaxRetryWaitTime},
{"minSlidingTime", &tsMinSlidingTime},
{"minIntervalTime", &tsMinIntervalTime},
{"numOfLogLines", &tsNumOfLogLines},
@ -2641,13 +2639,10 @@ static int32_t taosCfgDynamicOptionsForClient(SConfig *pCfg, const char *name) {
{"queryNodeChunkSize", &tsQueryNodeChunkSize},
{"queryUseNodeAllocator", &tsQueryUseNodeAllocator},
{"smlDot2Underline", &tsSmlDot2Underline},
{"shellActivityTimer", &tsShellActivityTimer},
{"useAdapter", &tsUseAdapter},
{"experimental", &tsExperimental},
{"multiResultFunctionStarReturnTags", &tsMultiResultFunctionStarReturnTags},
{"maxTsmaCalcDelay", &tsMaxTsmaCalcDelay},
{"tsmaDataDeleteMark", &tsmaDataDeleteMark},
{"safetyCheckLevel", &tsSafetyCheckLevel},
{"bypassFlag", &tsBypassFlag}};
if ((code = taosCfgSetOption(debugOptions, tListLen(debugOptions), pItem, true)) != TSDB_CODE_SUCCESS) {

View File

@ -17,10 +17,7 @@
void* serverLoop(void* param) {
TestServer* server = (TestServer*)param;
if (taosInitCfg(configDir, NULL, NULL, NULL, NULL, 0) != 0){
return NULL;
}
cfgInit(&tsCfg);
if (dmInit() != 0) {
return NULL;

View File

@ -32,7 +32,8 @@ 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);
static int32_t mndConfigUpdateTrans(SMnode *pMnode, const char *name, char *pValue, ECfgDataType dtype,
int32_t tsmmConfigVersion);
static int32_t mndProcessConfigDnodeReq(SRpcMsg *pReq);
static int32_t mndProcessConfigDnodeRsp(SRpcMsg *pRsp);
static int32_t mndProcessConfigReq(SRpcMsg *pReq);
@ -229,10 +230,18 @@ static int32_t mndProcessConfigReq(SRpcMsg *pReq) {
mError("failed to deserialize config req, since %s", terrstr());
goto _OVER;
}
SConfigObj *vObj = sdbAcquire(pMnode->pSdb, SDB_CFG, "tsmmConfigVersion");
if (vObj == NULL) {
mInfo("failed to acquire mnd config version, since %s", terrstr());
goto _OVER;
}
SArray *diffArray = taosArrayInit(16, sizeof(SConfigItem));
SConfigRsp configRsp = {0};
configRsp.forceReadConfig = configReq.forceReadConfig;
configRsp.cver = tsmmConfigVersion;
configRsp.cver = vObj->i32;
if (configRsp.forceReadConfig) {
// compare config array from configReq with current config array
if (compareSConfigItemArrays(taosGetGlobalCfg(tsCfg), configReq.array, diffArray)) {
@ -242,7 +251,7 @@ static int32_t mndProcessConfigReq(SRpcMsg *pReq) {
}
} else {
configRsp.array = taosGetGlobalCfg(tsCfg);
if (configReq.cver == tsmmConfigVersion) {
if (configReq.cver == vObj->i32) {
configRsp.isVersionVerified = 1;
} else {
configRsp.array = taosGetGlobalCfg(tsCfg);
@ -316,11 +325,12 @@ int32_t mndInitReadCfg(SMnode *pMnode) {
}
SConfigObj *obj = sdbAcquire(pMnode->pSdb, SDB_CFG, "tsmmConfigVersion");
if (obj == NULL) {
mInfo("failed to acquire mnd config version, since %s", terrstr());
code = mndInitWriteCfg(pMnode);
if (code != 0) {
mError("failed to init write cfg, since %s", terrstr());
}
mInfo("failed to acquire mnd config version, try to rebuild it , since %s", terrstr());
goto _OVER;
} else {
tsmmConfigVersion = obj->i32;
sdbRelease(pMnode->pSdb, obj);
}
sz = taosArrayGetSize(taosGetGlobalCfg(tsCfg));
@ -469,6 +479,11 @@ static int32_t mndProcessConfigDnodeReq(SRpcMsg *pReq) {
int32_t lino = -1;
SMnode *pMnode = pReq->info.node;
SMCfgDnodeReq cfgReq = {0};
SConfigObj *vObj = sdbAcquire(pMnode->pSdb, SDB_CFG, "tsmmConfigVersion");
if (vObj == NULL) {
mInfo("failed to acquire mnd config version, since %s", terrstr());
TAOS_RETURN(terrno);
}
TAOS_CHECK_RETURN(tDeserializeSMCfgDnodeReq(pReq->pCont, pReq->contLen, &cfgReq));
int8_t updateIpWhiteList = 0;
mInfo("dnode:%d, start to config, option:%s, value:%s", cfgReq.dnodeId, cfgReq.config, cfgReq.value);
@ -521,21 +536,22 @@ static int32_t mndProcessConfigDnodeReq(SRpcMsg *pReq) {
code = TSDB_CODE_CFG_NOT_FOUND;
goto _err_out;
}
_send_req:
if (pItem->category == CFG_CATEGORY_GLOBAL) {
TAOS_CHECK_GOTO(mndConfigUpdateTrans(pMnode, dcfgReq.config, dcfgReq.value, pItem->dtype), &lino, _err_out);
TAOS_CHECK_GOTO(mndConfigUpdateTrans(pMnode, dcfgReq.config, dcfgReq.value, pItem->dtype, ++vObj->i32), &lino,
_err_out);
}
_send_req :
{ // audit
char obj[50] = {0};
(void)sprintf(obj, "%d", cfgReq.dnodeId);
{ // audit
char obj[50] = {0};
(void)sprintf(obj, "%d", cfgReq.dnodeId);
auditRecord(pReq, pMnode->clusterId, "alterDnode", obj, "", cfgReq.sql, cfgReq.sqlLen);
}
auditRecord(pReq, pMnode->clusterId, "alterDnode", obj, "", cfgReq.sql, cfgReq.sqlLen);
}
tFreeSMCfgDnodeReq(&cfgReq);
dcfgReq.version = tsmmConfigVersion;
dcfgReq.version = vObj->i32;
code = mndSendCfgDnodeReq(pMnode, cfgReq.dnodeId, &dcfgReq);
// dont care suss or succ;
@ -577,25 +593,15 @@ _err:
TAOS_RETURN(code);
}
static int32_t mndConfigUpdateTrans(SMnode *pMnode, const char *name, char *pValue, ECfgDataType dtype) {
int32_t code = -1;
int32_t lino = -1;
// SConfigObj *pVersion = sdbAcquire(pMnode->pSdb, SDB_CFG, "tsmmConfigVersion");
// if (pVersion == NULL) {
// mError("failed to acquire tsmmConfigVersion while update config, since %s", terrstr());
// code = terrno;
// goto _OVER;
// }
// pVersion->i32 = ++tsmmConfigVersion;
// SConfigObj *pObj = sdbAcquire(pMnode->pSdb, SDB_CFG, name);
// if (pObj == NULL) {
// mError("failed to acquire mnd config:%s while update config, since %s", name, terrstr());
// code = terrno;
// goto _OVER;
// }
static int32_t mndConfigUpdateTrans(SMnode *pMnode, const char *name, char *pValue, ECfgDataType dtype,
int32_t tsmmConfigVersion) {
int32_t code = -1;
int32_t lino = -1;
SConfigObj pVersion = {0}, pObj = {0};
pVersion.i32 = ++tsmmConfigVersion;
strncpy(pVersion.name, "tsmmConfigVersion", CFG_NAME_MAX_LEN);
pVersion.i32 = tsmmConfigVersion;
pVersion.dtype = CFG_DTYPE_INT32;
pObj.dtype = dtype;
strncpy(pObj.name, name, CFG_NAME_MAX_LEN);
@ -613,7 +619,6 @@ static int32_t mndConfigUpdateTrans(SMnode *pMnode, const char *name, char *pVal
code = 0;
_OVER:
if (code != 0) {
--tsmmConfigVersion;
mError("failed to update config:%s to value:%s, since %s", name, pValue, tstrerror(code));
}
mndTransDrop(pTrans);

View File

@ -822,7 +822,7 @@ SConfigObj *mndInitConfigVersion() {
}
strncpy(pObj->name, "tsmmConfigVersion", CFG_NAME_MAX_LEN);
pObj->dtype = CFG_DTYPE_INT32;
pObj->i32 = ++tsmmConfigVersion;
pObj->i32 = 0;
return pObj;
}

View File

@ -37,6 +37,107 @@ class TDTestCase:
self.configration_dic = {
"cli": [
{
"name": "asyncLog",
"value": 0,
"category": "local",
},
{
"name": "enableQueryHb",
"value": 0,
"category": "local",
},
{
"name": "keepColumnName",
"value": 1,
"category": "local",
},
{
"name": "logKeepDays",
"value": 30,
"category": "local",
},
{
"name": "maxInsertBatchRows",
"value": 2000000,
"category": "local",
},
{
"name": "minSlidingTime",
"value": 10000,
"category": "local",
},
{
"name": "minIntervalTime",
"value": 2,
"category": "local",
},
{
"name": "numOfLogLines",
"value": 20000000,
"category": "local",
},
{
"name": "querySmaOptimize",
"value": 1,
"category": "local",
},
{
"name": "queryPolicy",
"value": 3,
"category": "local",
},
{
"name": "queryTableNotExistAsEmpty",
"value": 1,
"category": "local",
},
{
"name": "queryPlannerTrace",
"value": 1,
"category": "local",
},
{
"name": "queryNodeChunkSize",
"value": 16 * 1024,
"category": "local",
},
{
"name": "queryUseNodeAllocator",
"value": 0,
"category": "local",
},
{
"name": "smlDot2Underline",
"value": 0,
"category": "local",
},
{
"name": "useAdapter",
"value": 1,
"category": "local",
},
# {
# "name": "multiResultFunctionStarReturnTags",
# "value": 1,
# "category": "local",
# },
{
"name": "maxTsmaCalcDelay",
"value": 1200,
"category": "local",
},
{
"name": "tsmaDataDeleteMark",
"value": 1000 * 60 * 60 * 12,
"category": "local",
},
{
"name": "bypassFlag",
"value": 4,
"category": "local",
}
],
"svr": [
{
@ -528,18 +629,17 @@ class TDTestCase:
tdLog.info("success to alter all configurations")
tdLog.info("stop and restart taosd")
time.sleep(3)
sc.dnodeStopAll()
sc.dnodeStart(1)
sc.dnodeStart(2)
sc.dnodeStart(3)
time.sleep(10)
for key in self.configration_dic:
if "cli" == key:
for item in self.configration_dic[key]:
actVal = self.cli_get_param_value(item["name"])
assert str(actVal) == str(item["oldVal"]), f"item name: {item['name']}, Expected value: {item['value']}, actual value: {actVal}"
assert str(actVal) == str(item["value"]), f"item name: {item['name']}, Expected value: {item['value']}, actual value: {actVal}"
elif "svr" == key:
for item in self.configration_dic[key]:
actVal = self.svr_get_param_value(item["name"])

View File

@ -41,6 +41,7 @@
,,n,army,python3 ./test.py -f cmdline/fullopt.py
,,y,army,./pytest.sh python3 ./test.py -f query/show.py -N 3
,,y,army,./pytest.sh python3 ./test.py -f alter/alterConfig.py -N 3
,,y,army,./pytest.sh python3 ./test.py -f alter/test_alter_config.py -N 3
,,y,army,./pytest.sh python3 ./test.py -f query/subquery/subqueryBugs.py -N 3
,,y,army,./pytest.sh python3 ./test.py -f storage/oneStageComp.py -N 3 -L 3 -D 1
,,y,army,./pytest.sh python3 ./test.py -f storage/compressBasic.py -N 3