Merge pull request #11594 from taosdata/fix/tsim
enh: support variables like $data[0][1] and $data(db)[0] in tsim scripts
This commit is contained in:
commit
eaebd86edd
|
@ -121,7 +121,7 @@ int32_t mmWriteFile(SMgmtWrapper *pWrapper, SDCreateMnodeReq *pReq, bool deploye
|
|||
int32_t len = 0;
|
||||
int32_t maxLen = 4096;
|
||||
char *content = taosMemoryCalloc(1, maxLen + 1);
|
||||
|
||||
|
||||
len += snprintf(content + len, maxLen - len, "{\n");
|
||||
len += snprintf(content + len, maxLen - len, " \"mnodes\": [{\n");
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ static int32_t mndProcessCreateBnodeReq(SNodeMsg *pReq);
|
|||
static int32_t mndProcessCreateBnodeRsp(SNodeMsg *pRsp);
|
||||
static int32_t mndProcessDropBnodeReq(SNodeMsg *pReq);
|
||||
static int32_t mndProcessDropBnodeRsp(SNodeMsg *pRsp);
|
||||
static int32_t mndRetrieveBnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock* pBlock, int32_t rows);
|
||||
static int32_t mndRetrieveBnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows);
|
||||
static void mndCancelGetNextBnode(SMnode *pMnode, void *pIter);
|
||||
|
||||
int32_t mndInitBnode(SMnode *pMnode) {
|
||||
|
@ -437,7 +437,7 @@ static int32_t mndProcessDropBnodeRsp(SNodeMsg *pRsp) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int32_t mndRetrieveBnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock* pBlock, int32_t rows) {
|
||||
static int32_t mndRetrieveBnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) {
|
||||
SMnode *pMnode = pReq->pNode;
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
int32_t numOfRows = 0;
|
||||
|
@ -449,8 +449,8 @@ static int32_t mndRetrieveBnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock* p
|
|||
if (pShow->pIter == NULL) break;
|
||||
|
||||
cols = 0;
|
||||
SColumnInfoData* pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
colDataAppend(pColInfo, numOfRows, (const char*) &pObj->id, false);
|
||||
SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
colDataAppend(pColInfo, numOfRows, (const char *)&pObj->id, false);
|
||||
|
||||
char buf[TSDB_EP_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(buf, pObj->pDnode->ep, pShow->bytes[cols]);
|
||||
|
@ -459,7 +459,7 @@ static int32_t mndRetrieveBnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock* p
|
|||
colDataAppend(pColInfo, numOfRows, buf, false);
|
||||
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
colDataAppend(pColInfo, numOfRows, (const char*) &pObj->createdTime, false);
|
||||
colDataAppend(pColInfo, numOfRows, (const char *)&pObj->createdTime, false);
|
||||
|
||||
numOfRows++;
|
||||
sdbRelease(pSdb, pObj);
|
||||
|
|
|
@ -615,7 +615,7 @@ static int32_t mndProcessDropMnodeRsp(SNodeMsg *pRsp) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int32_t mndRetrieveMnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock* pBlock, int32_t rows) {
|
||||
static int32_t mndRetrieveMnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) {
|
||||
SMnode *pMnode = pReq->pNode;
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
int32_t numOfRows = 0;
|
||||
|
@ -628,8 +628,8 @@ static int32_t mndRetrieveMnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock* p
|
|||
if (pShow->pIter == NULL) break;
|
||||
|
||||
cols = 0;
|
||||
SColumnInfoData* pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
colDataAppend(pColInfo, numOfRows, (const char*) &pObj->id, false);
|
||||
SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
colDataAppend(pColInfo, numOfRows, (const char *)&pObj->id, false);
|
||||
|
||||
char b1[TSDB_EP_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(b1, pObj->pDnode->ep, pShow->bytes[cols]);
|
||||
|
@ -638,11 +638,11 @@ static int32_t mndRetrieveMnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock* p
|
|||
colDataAppend(pColInfo, numOfRows, b1, false);
|
||||
|
||||
const char *roles = mndGetRoleStr(pObj->role);
|
||||
char* b2 = taosMemoryCalloc(1, strlen(roles) + VARSTR_HEADER_SIZE);
|
||||
char *b2 = taosMemoryCalloc(1, strlen(roles) + VARSTR_HEADER_SIZE);
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(b2, roles, pShow->bytes[cols]);
|
||||
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
colDataAppend(pColInfo, numOfRows, (const char*) b2, false);
|
||||
colDataAppend(pColInfo, numOfRows, (const char *)b2, false);
|
||||
|
||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
colDataAppend(pColInfo, numOfRows, (const char *)&pObj->roleTime, false);
|
||||
|
|
|
@ -34,7 +34,7 @@ static int32_t mndProcessCreateQnodeRsp(SNodeMsg *pRsp);
|
|||
static int32_t mndProcessDropQnodeReq(SNodeMsg *pReq);
|
||||
static int32_t mndProcessDropQnodeRsp(SNodeMsg *pRsp);
|
||||
static int32_t mndProcessQnodeListReq(SNodeMsg *pReq);
|
||||
static int32_t mndRetrieveQnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock* pBlock, int32_t rows);
|
||||
static int32_t mndRetrieveQnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows);
|
||||
static void mndCancelGetNextQnode(SMnode *pMnode, void *pIter);
|
||||
|
||||
int32_t mndInitQnode(SMnode *pMnode) {
|
||||
|
@ -497,7 +497,7 @@ static int32_t mndProcessDropQnodeRsp(SNodeMsg *pRsp) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int32_t mndRetrieveQnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock* pBlock, int32_t rows) {
|
||||
static int32_t mndRetrieveQnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) {
|
||||
SMnode *pMnode = pReq->pNode;
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
int32_t numOfRows = 0;
|
||||
|
@ -510,8 +510,8 @@ static int32_t mndRetrieveQnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock* p
|
|||
if (pShow->pIter == NULL) break;
|
||||
|
||||
cols = 0;
|
||||
SColumnInfoData* pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
colDataAppend(pColInfo, numOfRows, (const char*)&pObj->id, false);
|
||||
SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
colDataAppend(pColInfo, numOfRows, (const char *)&pObj->id, false);
|
||||
|
||||
char ep[TSDB_EP_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(ep, pObj->pDnode->ep, pShow->bytes[cols]);
|
||||
|
|
|
@ -33,7 +33,7 @@ static int32_t mndProcessCreateSnodeReq(SNodeMsg *pReq);
|
|||
static int32_t mndProcessCreateSnodeRsp(SNodeMsg *pRsp);
|
||||
static int32_t mndProcessDropSnodeReq(SNodeMsg *pReq);
|
||||
static int32_t mndProcessDropSnodeRsp(SNodeMsg *pRsp);
|
||||
static int32_t mndRetrieveSnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock* pBlock, int32_t rows);
|
||||
static int32_t mndRetrieveSnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows);
|
||||
static void mndCancelGetNextSnode(SMnode *pMnode, void *pIter);
|
||||
|
||||
int32_t mndInitSnode(SMnode *pMnode) {
|
||||
|
@ -447,7 +447,7 @@ static int32_t mndProcessDropSnodeRsp(SNodeMsg *pRsp) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int32_t mndRetrieveSnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock* pBlock, int32_t rows) {
|
||||
static int32_t mndRetrieveSnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock *pBlock, int32_t rows) {
|
||||
SMnode *pMnode = pReq->pNode;
|
||||
SSdb *pSdb = pMnode->pSdb;
|
||||
int32_t numOfRows = 0;
|
||||
|
@ -459,8 +459,8 @@ static int32_t mndRetrieveSnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock* p
|
|||
if (pShow->pIter == NULL) break;
|
||||
|
||||
cols = 0;
|
||||
SColumnInfoData* pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
colDataAppend(pColInfo, numOfRows, (const char*)&pObj->id, false);
|
||||
SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||
colDataAppend(pColInfo, numOfRows, (const char *)&pObj->id, false);
|
||||
|
||||
char ep[TSDB_EP_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(ep, pObj->pDnode->ep, pShow->bytes[cols]);
|
||||
|
|
|
@ -72,7 +72,7 @@ print rows: $rows
|
|||
print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07 $data08 $data09
|
||||
print $data10 $data11 $data12 $data13 $data14 $data15 $data16 $data17 $data18 $data19
|
||||
print ====> dataX_db
|
||||
print $data0_db $data1_db $data2_db $data3_db $data4_db $data5_db $data6_db $data7_db $data8_db $data9_db $data10_db $data11_db $data12_db $data13_db $data14_db $data15_db $data16_db $data17_db
|
||||
print $data(db)[0] $data(db)[1] $data2_db $data3_db $data4_db $data5_db $data6_db $data7_db $data8_db $data9_db $data10_db $data11_db $data12_db $data13_db $data14_db $data15_db $data16_db $data17_db
|
||||
|
||||
if $rows != 3 then
|
||||
return -1
|
||||
|
|
|
@ -17,7 +17,6 @@ print =============== step1
|
|||
# quorum presicion
|
||||
sql create database $db vgroups 8 replica 1 days 2880 keep 3650 cache 32 blocks 12 minrows 80 maxrows 10000 wal 2 fsync 1000 comp 0 cachelast 2 precision 'us'
|
||||
sql show databases
|
||||
print $data0_1 $data1_1 $data2_1 $data3_1 $data4_1 $data5_1 $data6_1 $data7_1 $data8_1 $data9_1
|
||||
print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07 $data08 $data09
|
||||
|
||||
if $rows != 3 then
|
||||
|
|
|
@ -9,9 +9,9 @@ if $rows != 1 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
print $data00 $data01 $data02
|
||||
print $data10 $data11 $data22
|
||||
print $data20 $data11 $data22
|
||||
print $data[0][0] $data[0][1] $data[0][2]
|
||||
print $data[1][0] $data[1][1] $data[1][2]
|
||||
print $data[2][0] $data[1][2] $data[2][2]
|
||||
|
||||
sql_error show accounts;
|
||||
sql_error create account a pass "a"
|
||||
|
@ -25,10 +25,10 @@ if $rows != 2 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
print $data00 $data01 $data02
|
||||
print $data10 $data11 $data12
|
||||
print $data20 $data11 $data22
|
||||
print $data30 $data31 $data32
|
||||
print $data[0][0] $data[0][1] $data[0][2]
|
||||
print $data[1][0] $data[1][1] $data[1][2]
|
||||
print $data[2][0] $data[1][2] $data[2][2]
|
||||
print $data[3][0] $data[3][1] $data[3][2]
|
||||
|
||||
print =============== create user2
|
||||
sql create user user2 PASS 'user2'
|
||||
|
@ -37,10 +37,10 @@ if $rows != 3 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
print $data00 $data01 $data02
|
||||
print $data10 $data11 $data12
|
||||
print $data20 $data11 $data22
|
||||
print $data30 $data31 $data32
|
||||
print $data[0][0] $data[0][1] $data[0][2]
|
||||
print $data[1][0] $data[1][1] $data[1][2]
|
||||
print $data[2][0] $data[1][2] $data[2][2]
|
||||
print $data[3][0] $data[3][1] $data[3][2]
|
||||
print $data40 $data41 $data42
|
||||
|
||||
print =============== drop user1
|
||||
|
@ -50,10 +50,10 @@ if $rows != 2 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
print $data00 $data01 $data02
|
||||
print $data10 $data11 $data22
|
||||
print $data20 $data11 $data22
|
||||
print $data30 $data31 $data32
|
||||
print $data[0][0] $data[0][1] $data[0][2]
|
||||
print $data[1][0] $data[1][1] $data[1][2]
|
||||
print $data[2][0] $data[1][2] $data[2][2]
|
||||
print $data[3][0] $data[3][1] $data[3][2]
|
||||
|
||||
print =============== restart taosd
|
||||
system sh/exec.sh -n dnode1 -s stop
|
||||
|
@ -66,9 +66,9 @@ if $rows != 2 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
print $data00 $data01 $data02
|
||||
print $data10 $data11 $data22
|
||||
print $data20 $data11 $data22
|
||||
print $data30 $data31 $data32
|
||||
print $data[0][0] $data[0][1] $data[0][2]
|
||||
print $data[1][0] $data[1][1] $data[1][2]
|
||||
print $data[2][0] $data[1][2] $data[2][2]
|
||||
print $data[3][0] $data[3][1] $data[3][2]
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
|
|
|
@ -33,9 +33,9 @@
|
|||
#define MAX_BACKGROUND_SCRIPT_NUM 10
|
||||
#define MAX_FILE_NAME_LEN 256
|
||||
#define MAX_ERROR_LEN 1024
|
||||
#define MAX_QUERY_VALUE_LEN 10240
|
||||
#define MAX_QUERY_COL_NUM 20
|
||||
#define MAX_QUERY_ROW_NUM 20
|
||||
#define MAX_QUERY_VALUE_LEN 1024
|
||||
#define MAX_QUERY_COL_NUM 100
|
||||
#define MAX_QUERY_ROW_NUM 100
|
||||
#define MAX_SYSTEM_RESULT_LEN 2048
|
||||
#define MAX_VAR_LEN 100
|
||||
#define MAX_VAR_NAME_LEN 32
|
||||
|
|
|
@ -49,6 +49,41 @@ char *simParseHostName(char *varName) {
|
|||
return hostName;
|
||||
}
|
||||
|
||||
static void simFindFirstNum(const char *begin, int32_t beginLen, int32_t *num) {
|
||||
if (beginLen <= 5) {
|
||||
*num = 0;
|
||||
} else {
|
||||
*num = atoi(begin + 5);
|
||||
}
|
||||
}
|
||||
|
||||
static void simFindSecondNum(const char *begin, int32_t beginLen, int32_t *num) {
|
||||
const char *number = strstr(begin, "][");
|
||||
if (number == NULL) {
|
||||
*num = 0;
|
||||
} else {
|
||||
*num = atoi(number + 2);
|
||||
}
|
||||
}
|
||||
|
||||
static void simFindFirstKeyVal(const char *begin, int32_t beginLen, char *key, int32_t keyLen) {
|
||||
key[0] = 0;
|
||||
for (int32_t i = 5; i < beginLen && i - 5 < keyLen; ++i) {
|
||||
if (begin[i] != 0 && begin[i] != ']' && begin[i] != ')') {
|
||||
key[i - 5] = begin[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void simFindSecondKeyNum(const char *begin, int32_t beginLen, int32_t *num) {
|
||||
const char *number = strstr(begin, ")[");
|
||||
if (number == NULL) {
|
||||
*num = 0;
|
||||
} else {
|
||||
*num = atoi(number + 2);
|
||||
}
|
||||
}
|
||||
|
||||
char *simGetVariable(SScript *script, char *varName, int32_t varLen) {
|
||||
if (strncmp(varName, "hostname", 8) == 0) {
|
||||
return simParseHostName(varName);
|
||||
|
@ -66,13 +101,40 @@ char *simGetVariable(SScript *script, char *varName, int32_t varLen) {
|
|||
|
||||
if (strncmp(varName, "system_content", varLen) == 0) return script->system_ret_content;
|
||||
|
||||
// variable like data2_192.168.0.1
|
||||
if (strncmp(varName, "data", 4) == 0) {
|
||||
if (varLen < 6) {
|
||||
return "null";
|
||||
}
|
||||
|
||||
if (varName[5] == '_') {
|
||||
int32_t row = 0;
|
||||
int32_t col = 0;
|
||||
char keyVal[1024] = {0};
|
||||
int32_t keyLen = 1024;
|
||||
|
||||
if (varName[4] == '[') {
|
||||
// $data[0][1]
|
||||
simFindFirstNum(varName, varLen, &row);
|
||||
simFindSecondNum(varName, varLen, &col);
|
||||
if (row < 0 || row >= MAX_QUERY_ROW_NUM) {
|
||||
return "null";
|
||||
}
|
||||
if (col < 0 || col >= MAX_QUERY_COL_NUM) {
|
||||
return "null";
|
||||
}
|
||||
simDebug("script:%s, data[%d][%d]=%s", script->fileName, row, col, script->data[row][col]);
|
||||
return script->data[row][col];
|
||||
} else if (varName[4] == '(') {
|
||||
// $data(db)[0]
|
||||
simFindFirstKeyVal(varName, varLen, keyVal, keyLen);
|
||||
simFindSecondKeyNum(varName, varLen, &col);
|
||||
for (int32_t i = 0; i < MAX_QUERY_ROW_NUM; ++i) {
|
||||
if (strncmp(keyVal, script->data[i][0], keyLen) == 0) {
|
||||
simDebug("script:%s, keyName:%s, keyValue:%s", script->fileName, script->data[i][0], script->data[i][col]);
|
||||
return script->data[i][col];
|
||||
}
|
||||
}
|
||||
} else if (varName[5] == '_') {
|
||||
// data2_db
|
||||
int32_t col = varName[4] - '0';
|
||||
if (col < 0 || col >= MAX_QUERY_COL_NUM) {
|
||||
return "null";
|
||||
|
@ -90,6 +152,7 @@ char *simGetVariable(SScript *script, char *varName, int32_t varLen) {
|
|||
}
|
||||
return "null";
|
||||
} else if (varName[6] == '_') {
|
||||
// data21_db
|
||||
int32_t col = (varName[4] - '0') * 10 + (varName[5] - '0');
|
||||
if (col < 0 || col >= MAX_QUERY_COL_NUM) {
|
||||
return "null";
|
||||
|
@ -107,6 +170,7 @@ char *simGetVariable(SScript *script, char *varName, int32_t varLen) {
|
|||
}
|
||||
return "null";
|
||||
} else {
|
||||
// $data00
|
||||
int32_t row = varName[4] - '0';
|
||||
int32_t col = varName[5] - '0';
|
||||
if (row < 0 || row >= MAX_QUERY_ROW_NUM) {
|
||||
|
@ -119,6 +183,8 @@ char *simGetVariable(SScript *script, char *varName, int32_t varLen) {
|
|||
simDebug("script:%s, data[%d][%d]=%s", script->fileName, row, col, script->data[row][col]);
|
||||
return script->data[row][col];
|
||||
}
|
||||
|
||||
return "null";
|
||||
}
|
||||
|
||||
for (int32_t i = 0; i < script->varLen; ++i) {
|
||||
|
@ -127,9 +193,6 @@ char *simGetVariable(SScript *script, char *varName, int32_t varLen) {
|
|||
continue;
|
||||
}
|
||||
if (strncmp(varName, var->varName, varLen) == 0) {
|
||||
// if (strlen(var->varValue) != 0)
|
||||
// simDebug("script:%s, var:%s, value:%s", script->fileName,
|
||||
// var->varName, var->varValue);
|
||||
return var->varValue;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue