diff --git a/.travis.yml b/.travis.yml index 37e6e5a6c3..f9a27fdabd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -59,17 +59,30 @@ matrix: GREEN_UNDERLINE='\033[4;32m' NC='\033[0m' - tail -10 mem-error-out.txt - defiMemError=`grep -m 1 'definitely lost' mem-error-out.txt | awk '{print $7}'` - memError=`grep -m 1 'ERROR SUMMARY' mem-error-out.txt | awk '{print $4}'` + grep 'ERROR SUMMARY' mem-error-out.txt | uniq | tee uniq-mem-error-out.txt - if [ -n "$memError" ]; then - if [ "$memError" -gt 16 ] || [ "$defiMemError" -gt 0 ]; then - echo -e "${RED} ## Memory errors number valgrind reports is $memError.\ - Definitely lost is $defiMemError. More than our threshold! ## ${NC}" - travis_terminate $memError + for memError in `cat uniq-mem-error-out.txt | awk '{print $4}'` + do + if [ -n "$memError" ]; then + if [ "$memError" -gt 16 ]; then + echo -e "${RED} ## Memory errors number valgrind reports is $memError.\ + More than our threshold! ## ${NC}" + travis_terminate $memError + fi fi - fi + done + + grep 'definitely lost' mem-error-out.txt | uniq | tee uniq-definitely-lost-out.txt + for defiMemError in `cat uniq-definitely-lost-out.txt | awk '{print $7}'` + do + if [ -n "$defiMemError" ]; then + if [ "$defiMemError" -gt 16 ]; then + echo -e "${RED} ## Memory errors number valgrind reports \ + Definitely lost is $defiMemError. More than our threshold! ## ${NC}" + travis_terminate $defiMemError + fi + fi + done ;; esac diff --git a/README.md b/README.md index 280cf73ba0..158ae040fa 100644 --- a/README.md +++ b/README.md @@ -115,6 +115,251 @@ TDengine provides abundant developing tools for users to develop on TDengine. Fo - [RESTful API](https://www.taosdata.com/en/documentation/connector/#RESTful-Connector) - [Node.js](https://www.taosdata.com/en/documentation/connector/#Node.js-Connector) +# How to run the test cases and how to add a new test case? + +### Prepare development environment + +1. sudo apt install + build-essential cmake net-tools python-pip python-setuptools python3-pip + python3-setuptools valgrind + +2. git clone ; cd TDengine + +3. mkdir debug; cd debug; cmake ..; make ; sudo make install + +4. pip install src/connector/python/linux/python2 ; pip3 install + src/connector/python/linux/python3 + +### How to run TSIM test suite + +1. cd \/tests/script + +2. sudo ./test.sh + +### How to run Python test suite + +1. cd \/tests/pytest + +2. ./smoketest.sh \# for smoke test + +3. ./smoketest.sh -g \# for memory leak detection test with valgrind + +4. ./fulltest.sh \# for full test + +> Note1: TDengine daemon's configuration and data files are stored in +> \/sim directory. As a historical design, it's same place with +> TSIM script. So after the TSIM script ran with sudo privilege, the directory +> has been used by TSIM then the python script cannot write it by a normal +> user. You need to remove the directory completely first before running the +> Python test case. We should consider using two different locations to store +> for TSIM and Python script. + +> Note2: if you need to debug crash problem with a core dump, you need +> manually edit smoketest.sh or fulltest.sh to add "ulimit -c unlimited" +> before the script line. Then you can look for the core file in +> \/tests/pytest after the program crash. + +### How to add a new test case + +**1. add a new TSIM test cases:** + +TSIM test cases are now included in the new development branch and can be +added to the TDengine/tests/script/test.sh script based on the manual test +methods necessary to add test cases as described above. + +**2. add a new Python test cases:** + +**2.1 Please refer to \/tests/pytest/insert/basic.py to add a new +test case.** The new test case must implement 3 functions, where self.init() +and self.stop() simply copy the contents of insert/basic.py and the test +logic is implemented in self.run(). You can refer to the code in the util +directory for more information. + +**2.2 Edit smoketest.sh to add the path and filename of the new test case** + +Note: The Python test framework may continue to be improved in the future, +hopefully, to provide more functionality and ease of writing test cases. The +method of writing the test case above does not exclude that it will also be +affected. + +**2.3 What test.py does in detail:** + +test.py is the entry program for test case execution and monitoring. + +test.py has the following functions. + +\-f --file, Specifies the test case file name to be executed +-p --path, Specifies deployment path + +\-m --master, Specifies the master server IP for cluster deployment +-c--cluster, test cluster function +-s--stop, terminates all running nodes + +\-g--valgrind, load valgrind for memory leak detection test + +\-h--help, display help + +**2.4 What util/log.py does in detail:** + +log.py is quite simple, the main thing is that you can print the output in +different colors as needed. The success() should be called for successful +test case execution and the success() will print green text. The exit() will +print red text and exit the program, exit() should be called for test +failure. + +**util/log.py** + +... + +    def info(self, info): + +        printf("%s %s" % (datetime.datetime.now(), info)) + +  + +    def sleep(self, sec): + +        printf("%s sleep %d seconds" % (datetime.datetime.now(), sec)) + +        time.sleep(sec) + +  + +    def debug(self, err): + +        printf("\\033[1;36m%s %s\\033[0m" % (datetime.datetime.now(), err)) + +  + +    def success(self, info): + +        printf("\\033[1;32m%s %s\\033[0m" % (datetime.datetime.now(), info)) + +  + +    def notice(self, err): + +        printf("\\033[1;33m%s %s\\033[0m" % (datetime.datetime.now(), err)) + +  + +    def exit(self, err): + +        printf("\\033[1;31m%s %s\\033[0m" % (datetime.datetime.now(), err)) + +        sys.exit(1) + +  + +    def printNoPrefix(self, info): + +        printf("\\033[1;36m%s\\033[0m" % (info) + +... + +**2.5 What util/sql.py does in detail:** + +SQL.py is mainly used to execute SQL statements to manipulate the database, +and the code is extracted and commented as follows: + +**util/sql.py** + +\# prepare() is mainly used to set up the environment for testing table and +data, and to set up the database db for testing. do not call prepare() if you +need to test the database operation command. + +def prepare(self): + +tdLog.info("prepare database:db") + +self.cursor.execute('reset query cache') + +self.cursor.execute('drop database if exists db') + +self.cursor.execute('create database db') + +self.cursor.execute('use db') + +... + +\# query() is mainly used to execute select statements for normal syntax input + +def query(self, sql): + +... + +\# error() is mainly used to execute the select statement with the wrong syntax +input, the error will be caught as a reasonable behavior, if not caught it will +prove that the test failed + +def error() + +... + +\# checkRows() is used to check the number of returned lines after calling +query(select ...) after calling the query(select ...) to check the number of +rows of returned results. + +def checkRows(self, expectRows): + +... + +\# checkData() is used to check the returned result data after calling +query(select ...) after the query(select ...) is called, failure to meet +expectation is + +def checkData(self, row, col, data): + +... + +\# getData() returns the result data after calling query(select ...) to return +the resulting data after calling query(select ...) + +def getData(self, row, col): + +... + +\# execute() used to execute sql and return the number of affected rows + +def execute(self, sql): + +... + +\# executeTimes() Multiple executions of the same sql statement + +def executeTimes(self, sql, times): + +... + +\# CheckAffectedRows() Check if the number of affected rows is as expected + +def checkAffectedRows(self, expectAffectedRows): + +... + +> Note: Both Python2 and Python3 are currently supported by the Python test +> case. Since Python2 is no longer officially supported by January 1, 2020, it +> is recommended that subsequent test case development be guaranteed to run +> correctly on Python3. For Python2, please consider being compatible if +> appropriate without additional +> burden.   + +### CI Covenant submission adoption principle. + +- Every commit / PR compilation must pass. Currently, the warning is treated + as an error, so the warning must also be resolved. + +- Test cases that already exist must pass. + +- Because CI is very important to support build and automatically test + procedure, it is necessary to manually test the test case before adding it + and do as many iterations as possible to ensure that the test case provides + stable and reliable test results when added. + +> Note: In the future, according to the requirements and test development +> progress will add stress testing, performance testing, code style, +> and other features based on functional testing. + ### Third Party Connectors The TDengine community has also kindly built some of their own connectors! Follow the links below to find the source code for them. diff --git a/src/client/inc/tsclient.h b/src/client/inc/tsclient.h index 7cb9c513e5..203ba90c5f 100644 --- a/src/client/inc/tsclient.h +++ b/src/client/inc/tsclient.h @@ -280,6 +280,7 @@ typedef struct { SResRec * pGroupRec; char * data; void ** tsrow; + int32_t* length; // length for each field for current row char ** buffer; // Buffer used to put multibytes encoded using unicode (wchar_t) SColumnIndex * pColumnIndex; struct SLocalReducer *pLocalReducer; @@ -421,7 +422,7 @@ int32_t tscInvalidSQLErrMsg(char *msg, const char *additionalInfo, const char *s void tscQueueAsyncFreeResult(SSqlObj *pSql); int32_t tscToSQLCmd(SSqlObj *pSql, struct SSqlInfo *pInfo); -char * tscGetResultColumnChr(SSqlRes *pRes, SQueryInfo *pQueryInfo, int32_t column, int16_t bytes); +void tscGetResultColumnChr(SSqlRes *pRes, SFieldInfo* pFieldInfo, int32_t column); extern void * pVnodeConn; extern void * tscCacheHandle; diff --git a/src/client/src/tscAsync.c b/src/client/src/tscAsync.c index b64c1ed8c0..9f207936df 100644 --- a/src/client/src/tscAsync.c +++ b/src/client/src/tscAsync.c @@ -317,7 +317,7 @@ void tscProcessFetchRow(SSchedMsg *pMsg) { SFieldSupInfo* pSup = taosArrayGet(pQueryInfo->fieldsInfo.pSupportInfo, i); if (pSup->pSqlExpr != NULL) { - pRes->tsrow[i] = tscGetResultColumnChr(pRes, pQueryInfo, i, pSup->pSqlExpr->resBytes); + tscGetResultColumnChr(pRes, &pQueryInfo->fieldsInfo, i); } else { // todo add } diff --git a/src/client/src/tscParseInsert.c b/src/client/src/tscParseInsert.c index 8f40cf6fb9..4bee595dac 100644 --- a/src/client/src/tscParseInsert.c +++ b/src/client/src/tscParseInsert.c @@ -310,7 +310,7 @@ int32_t tsParseOneColumnData(SSchema *pSchema, SSQLToken *pToken, char *payload, *payload = TSDB_DATA_BINARY_NULL; } else { // too long values will return invalid sql, not be truncated automatically - if (pToken->n > pSchema->bytes) { + if (pToken->n + VARSTR_HEADER_SIZE > pSchema->bytes) { //todo refactor return tscInvalidSQLErrMsg(msg, "string data overflow", pToken->z); } @@ -328,7 +328,7 @@ int32_t tsParseOneColumnData(SSchema *pSchema, SSQLToken *pToken, char *payload, } else { // if the converted output len is over than pColumnModel->bytes, return error: 'Argument list too long' int32_t resLen = -1; - if (!taosMbsToUcs4(pToken->z, pToken->n, payload + VARSTR_HEADER_SIZE, pSchema->bytes, &resLen)) { + if (!taosMbsToUcs4(pToken->z, pToken->n, payload + VARSTR_HEADER_SIZE, pSchema->bytes - VARSTR_HEADER_SIZE, &resLen)) { char buf[512] = {0}; snprintf(buf, 512, "%s", strerror(errno)); diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index e23086c4e7..12032725c3 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -5520,18 +5520,26 @@ int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo) { SSchema* pTagSchema = tscGetTableTagSchema(pStableMeterMetaInfo->pTableMeta); char* tagVal = pCreateTable->usingInfo.tagdata.data; + int32_t ret = TSDB_CODE_SUCCESS; + for (int32_t i = 0; i < pList->nExpr; ++i) { - int32_t ret = tVariantDump(&(pList->a[i].pVar), tagVal, pTagSchema[i].type); + + if (pTagSchema[i].type == TSDB_DATA_TYPE_BINARY || pTagSchema[i].type == TSDB_DATA_TYPE_NCHAR) { + // validate the length of binary + if (pList->a[i].pVar.nLen + VARSTR_HEADER_SIZE > pTagSchema[i].bytes) { + return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3); + } + + *(VarDataLenT*)tagVal = pList->a[i].pVar.nLen; + ret = tVariantDump(&(pList->a[i].pVar), tagVal + VARSTR_HEADER_SIZE, pTagSchema[i].type); + } else { + ret = tVariantDump(&(pList->a[i].pVar), tagVal, pTagSchema[i].type); + } + if (ret != TSDB_CODE_SUCCESS) { return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg4); } - // validate the length of binary - if ((pTagSchema[i].type == TSDB_DATA_TYPE_BINARY || pTagSchema[i].type == TSDB_DATA_TYPE_NCHAR) && - pList->a[i].pVar.nLen > pTagSchema[i].bytes) { - return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3); - } - tagVal += pTagSchema[i].bytes; } @@ -5541,7 +5549,7 @@ int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo) { } STableMetaInfo* pTableMeterMetaInfo = tscGetMetaInfo(pQueryInfo, TABLE_INDEX); - int32_t ret = tscSetTableId(pTableMeterMetaInfo, &pInfo->pCreateTableInfo->name, pSql); + ret = tscSetTableId(pTableMeterMetaInfo, &pInfo->pCreateTableInfo->name, pSql); if (ret != TSDB_CODE_SUCCESS) { return ret; } diff --git a/src/client/src/tscServer.c b/src/client/src/tscServer.c index aa4eb01eae..a6ed575686 100644 --- a/src/client/src/tscServer.c +++ b/src/client/src/tscServer.c @@ -2262,7 +2262,7 @@ int tscProcessConnectRsp(SSqlObj *pSql) { strcpy(pObj->sversion, pConnect->serverVersion); pObj->writeAuth = pConnect->writeAuth; pObj->superAuth = pConnect->superAuth; -// taosTmrReset(tscProcessActivityTimer, tsShellActivityTimer * 500, pObj, tscTmr, &pObj->pTimer); + taosTmrReset(tscProcessActivityTimer, tsShellActivityTimer * 500, pObj, tscTmr, &pObj->pTimer); return 0; } diff --git a/src/client/src/tscSql.c b/src/client/src/tscSql.c index aff4ad525b..afac69350c 100644 --- a/src/client/src/tscSql.c +++ b/src/client/src/tscSql.c @@ -168,6 +168,13 @@ static void syncConnCallback(void *param, TAOS_RES *tres, int code) { TAOS *taos_connect(const char *ip, const char *user, const char *pass, const char *db, uint16_t port) { tscTrace("try to create a connection to %s", ip); + if (port != 0) { + tsServerPort = port; + tsMnodeShellPort = tsServerPort + TSDB_PORT_MNODESHELL; + tsDnodeShellPort = tsServerPort + TSDB_PORT_DNODESHELL; + tsMnodeDnodePort = tsServerPort + TSDB_PORT_MNODEDNODE; + tsDnodeMnodePort = tsServerPort + TSDB_PORT_DNODEMNODE; + } STscObj *pObj = taosConnectImpl(ip, user, pass, db, port, NULL, NULL, NULL); if (pObj != NULL) { @@ -425,7 +432,7 @@ int taos_fetch_block_impl(TAOS_RES *res, TAOS_ROW *rows) { assert(0); for (int i = 0; i < pQueryInfo->fieldsInfo.numOfOutput; ++i) { - pRes->tsrow[i] = tscGetResultColumnChr(pRes, pQueryInfo, i, 0); + tscGetResultColumnChr(pRes, &pQueryInfo->fieldsInfo, i); } *rows = pRes->tsrow; @@ -725,6 +732,15 @@ char *taos_get_server_info(TAOS *taos) { return pObj->sversion; } +int* taos_fetch_lengths(TAOS_RES *res) { + SSqlObj* pSql = (SSqlObj* ) res; + if (pSql == NULL || pSql->signature != pSql) { + return NULL; + } + + return pSql->res.length; +} + char *taos_get_client_info() { return version; } void taos_stop_query(TAOS_RES *res) { @@ -796,7 +812,7 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields) case TSDB_DATA_TYPE_BINARY: case TSDB_DATA_TYPE_NCHAR: { size_t xlen = 0; - for (xlen = 0; xlen <= fields[i].bytes; xlen++) { + for (xlen = 0; xlen < fields[i].bytes - VARSTR_HEADER_SIZE; xlen++) { char c = ((char *)row[i])[xlen]; if (c == 0) break; str[len++] = c; diff --git a/src/client/src/tscSubquery.c b/src/client/src/tscSubquery.c index 9aceecd377..c3d6c0f5fc 100644 --- a/src/client/src/tscSubquery.c +++ b/src/client/src/tscSubquery.c @@ -1849,6 +1849,7 @@ void tscBuildResFromSubqueries(SSqlObj *pSql) { if (pRes->tsrow == NULL) { pRes->tsrow = calloc(numOfExprs, POINTER_BYTES); + pRes->length = calloc(numOfExprs, sizeof(int32_t)); } bool success = false; @@ -1967,7 +1968,7 @@ void **doSetResultRowData(SSqlObj *pSql, bool finalResult) { for (int i = 0; i < tscNumOfFields(pQueryInfo); ++i) { SFieldSupInfo* pSup = tscFieldInfoGetSupp(&pQueryInfo->fieldsInfo, i); if (pSup->pSqlExpr != NULL) { - pRes->tsrow[i] = tscGetResultColumnChr(pRes, pQueryInfo, i, pSup->pSqlExpr->resBytes); + tscGetResultColumnChr(pRes, &pQueryInfo->fieldsInfo, i); } // primary key column cannot be null in interval query, no need to check diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index 4844ab3db8..d49fff1583 100644 --- a/src/client/src/tscUtil.c +++ b/src/client/src/tscUtil.c @@ -210,7 +210,7 @@ bool tscNonOrderedProjectionQueryOnSTable(SQueryInfo* pQueryInfo, int32_t tableI return false; } - // order by column exists, not a non-ordered projection query + // order by columnIndex exists, not a non-ordered projection query return pQueryInfo->order.orderColId < 0; } @@ -219,7 +219,7 @@ bool tscOrderedProjectionQueryOnSTable(SQueryInfo* pQueryInfo, int32_t tableInde return false; } - // order by column exists, a non-ordered projection query + // order by columnIndex exists, a non-ordered projection query return pQueryInfo->order.orderColId >= 0; } @@ -286,13 +286,15 @@ int32_t tscCreateResPointerInfo(SSqlRes* pRes, SQueryInfo* pQueryInfo) { int32_t numOfOutput = pQueryInfo->fieldsInfo.numOfOutput; pRes->numOfCols = numOfOutput; - pRes->tsrow = calloc(POINTER_BYTES, numOfOutput); - pRes->buffer = calloc(POINTER_BYTES, numOfOutput); + pRes->tsrow = calloc(numOfOutput, POINTER_BYTES); + pRes->length = calloc(numOfOutput, sizeof(int32_t)); // todo refactor + pRes->buffer = calloc(numOfOutput, POINTER_BYTES); // not enough memory if (pRes->tsrow == NULL || (pRes->buffer == NULL && pRes->numOfCols > 0)) { tfree(pRes->tsrow); tfree(pRes->buffer); + tfree(pRes->length); pRes->code = TSDB_CODE_CLI_OUT_OF_MEMORY; return pRes->code; @@ -312,6 +314,7 @@ void tscDestroyResPointerInfo(SSqlRes* pRes) { tfree(pRes->pRsp); tfree(pRes->tsrow); + tfree(pRes->length); tfree(pRes->pGroupRec); tfree(pRes->pColumnIndex); @@ -592,7 +595,7 @@ int32_t tscGetDataBlockFromList(void* pHashList, SDataBlockList* pDataBlockList, } static int trimDataBlock(void* pDataBlock, STableDataBlocks* pTableDataBlock) { - // TODO: optimize this function + // TODO: optimize this function, handle the case while binary is not presented int len = 0; STableMeta* pTableMeta = pTableDataBlock->pTableMeta; @@ -924,7 +927,7 @@ static SSqlExpr* doBuildSqlExpr(SQueryInfo* pQueryInfo, int16_t functionId, SCol SSqlExpr* pExpr = calloc(1, sizeof(SSqlExpr)); pExpr->functionId = functionId; - // set the correct column index + // set the correct columnIndex index if (pColIndex->columnIndex == TSDB_TBNAME_COLUMN_INDEX) { pExpr->colInfo.colId = TSDB_TBNAME_COLUMN_INDEX; } else { @@ -1063,7 +1066,7 @@ void tscSqlExprCopy(SArray* dst, const SArray* src, uint64_t uid, bool deepcopy) } SColumn* tscColumnListInsert(SArray* pColumnList, SColumnIndex* pColIndex) { - // ignore the tbname column to be inserted into source list + // ignore the tbname columnIndex to be inserted into source list if (pColIndex->columnIndex < 0) { return NULL; } @@ -2124,22 +2127,30 @@ void tscTryQueryNextClause(SSqlObj* pSql, void (*queryFp)()) { } } -char* tscGetResultColumnChr(SSqlRes* pRes, SQueryInfo* pQueryInfo, int32_t column, int16_t bytes) { - SFieldInfo* pFieldInfo = &pQueryInfo->fieldsInfo; - SFieldSupInfo* pInfo = tscFieldInfoGetSupp(pFieldInfo, column); - +void tscGetResultColumnChr(SSqlRes* pRes, SFieldInfo* pFieldInfo, int32_t columnIndex) { + SFieldSupInfo* pInfo = tscFieldInfoGetSupp(pFieldInfo, columnIndex); + assert(pInfo->pSqlExpr != NULL); + int32_t type = pInfo->pSqlExpr->resType; + int32_t bytes = pInfo->pSqlExpr->resBytes; + char* pData = ((char*) pRes->data) + pInfo->pSqlExpr->offset * pRes->numOfRows + bytes * pRes->row; if (type == TSDB_DATA_TYPE_NCHAR || type == TSDB_DATA_TYPE_BINARY) { int32_t realLen = varDataLen(pData); + assert(realLen <= bytes - VARSTR_HEADER_SIZE); + if (realLen < pInfo->pSqlExpr->resBytes - VARSTR_HEADER_SIZE) { // todo refactor *(char*) (pData + realLen + VARSTR_HEADER_SIZE) = 0; } - return pData + VARSTR_HEADER_SIZE; // head is the length of binary/nchar data + pRes->tsrow[columnIndex] = pData + VARSTR_HEADER_SIZE; + pRes->length[columnIndex] = realLen; } else { - return pData; + assert(bytes == tDataTypeDesc[type].nSize); + + pRes->tsrow[columnIndex] = pData; + pRes->length[columnIndex] = bytes; } } diff --git a/src/common/inc/tdataformat.h b/src/common/inc/tdataformat.h index 78b6cb73b2..794d45da6f 100644 --- a/src/common/inc/tdataformat.h +++ b/src/common/inc/tdataformat.h @@ -32,7 +32,7 @@ extern "C" { #define STR_WITH_MAXSIZE_TO_VARSTR(x, str, _maxs) do {\ char* _e = stpncpy((char*)(x) + VARSTR_HEADER_SIZE, (str), (_maxs));\ - *(VarDataLenT*)(x) = _e - (x);\ + *(VarDataLenT*)(x) = (_e - (x) - VARSTR_HEADER_SIZE);\ } while(0) #define STR_WITH_SIZE_TO_VARSTR(x, str, _size) do {\ @@ -97,7 +97,7 @@ typedef void *SDataRow; #define TD_DATA_ROW_HEAD_SIZE sizeof(int32_t) #define dataRowLen(r) (*(int32_t *)(r)) -#define dataRowTuple(r) POINTER_DRIFT(r, TD_DATA_ROW_HEAD_SIZE) +#define dataRowTuple(r) POINTER_SHIFT(r, TD_DATA_ROW_HEAD_SIZE) #define dataRowKey(r) (*(TSKEY *)(dataRowTuple(r))) #define dataRowSetLen(r, l) (dataRowLen(r) = (l)) #define dataRowCpy(dst, r) memcpy((dst), (r), dataRowLen(r)) @@ -114,10 +114,10 @@ static FORCE_INLINE void *tdGetRowDataOfCol(SDataRow row, int8_t type, int32_t o switch (type) { case TSDB_DATA_TYPE_BINARY: case TSDB_DATA_TYPE_NCHAR: - return POINTER_DRIFT(row, *(VarDataOffsetT *)POINTER_DRIFT(row, offset)); + return POINTER_SHIFT(row, *(VarDataOffsetT *)POINTER_SHIFT(row, offset)); break; default: - return POINTER_DRIFT(row, offset); + return POINTER_SHIFT(row, offset); break; } } @@ -149,11 +149,11 @@ static FORCE_INLINE void *tdGetColDataOfRow(SDataCol *pCol, int row) { switch (pCol->type) { case TSDB_DATA_TYPE_BINARY: case TSDB_DATA_TYPE_NCHAR: - return POINTER_DRIFT(pCol->pData, pCol->dataOff[row]); + return POINTER_SHIFT(pCol->pData, pCol->dataOff[row]); break; default: - return POINTER_DRIFT(pCol->pData, TYPE_BYTES[pCol->type] * row); + return POINTER_SHIFT(pCol->pData, TYPE_BYTES[pCol->type] * row); break; } } diff --git a/src/common/src/tdataformat.c b/src/common/src/tdataformat.c index 28f42f85a5..9d81cd07af 100644 --- a/src/common/src/tdataformat.c +++ b/src/common/src/tdataformat.c @@ -167,17 +167,17 @@ void tdFreeDataRow(SDataRow row) { int tdAppendColVal(SDataRow row, void *value, int8_t type, int32_t bytes, int32_t offset) { ASSERT(value != NULL); int32_t toffset = offset + TD_DATA_ROW_HEAD_SIZE; - char * ptr = POINTER_DRIFT(row, dataRowLen(row)); + char * ptr = POINTER_SHIFT(row, dataRowLen(row)); switch (type) { case TSDB_DATA_TYPE_BINARY: case TSDB_DATA_TYPE_NCHAR: - *(VarDataOffsetT *)POINTER_DRIFT(row, toffset) = dataRowLen(row); + *(VarDataOffsetT *)POINTER_SHIFT(row, toffset) = dataRowLen(row); memcpy(ptr, value, varDataTLen(value)); dataRowLen(row) += varDataTLen(value); break; default: - memcpy(POINTER_DRIFT(row, toffset), value, TYPE_BYTES[type]); + memcpy(POINTER_SHIFT(row, toffset), value, TYPE_BYTES[type]); break; } @@ -202,13 +202,13 @@ void dataColInit(SDataCol *pDataCol, STColumn *pCol, void **pBuf, int maxPoints) if (pDataCol->type == TSDB_DATA_TYPE_BINARY || pDataCol->type == TSDB_DATA_TYPE_NCHAR) { pDataCol->spaceSize = (sizeof(VarDataLenT) + pDataCol->bytes) * maxPoints; pDataCol->dataOff = (VarDataOffsetT *)(*pBuf); - pDataCol->pData = POINTER_DRIFT(*pBuf, TYPE_BYTES[pDataCol->type] * maxPoints); - *pBuf = POINTER_DRIFT(*pBuf, pDataCol->spaceSize + TYPE_BYTES[pDataCol->type] * maxPoints); + pDataCol->pData = POINTER_SHIFT(*pBuf, TYPE_BYTES[pDataCol->type] * maxPoints); + *pBuf = POINTER_SHIFT(*pBuf, pDataCol->spaceSize + TYPE_BYTES[pDataCol->type] * maxPoints); } else { pDataCol->spaceSize = pDataCol->bytes * maxPoints; pDataCol->dataOff = NULL; pDataCol->pData = *pBuf; - *pBuf = POINTER_DRIFT(*pBuf, pDataCol->spaceSize); + *pBuf = POINTER_SHIFT(*pBuf, pDataCol->spaceSize); } } @@ -222,13 +222,13 @@ void dataColAppendVal(SDataCol *pCol, void *value, int numOfPoints, int maxPoint // set offset pCol->dataOff[numOfPoints] = pCol->len; // Copy data - memcpy(POINTER_DRIFT(pCol->pData, pCol->len), value, varDataTLen(value)); + memcpy(POINTER_SHIFT(pCol->pData, pCol->len), value, varDataTLen(value)); // Update the length pCol->len += varDataTLen(value); break; default: ASSERT(pCol->len == TYPE_BYTES[pCol->type] * numOfPoints); - memcpy(POINTER_DRIFT(pCol->pData, pCol->len), value, pCol->bytes); + memcpy(POINTER_SHIFT(pCol->pData, pCol->len), value, pCol->bytes); pCol->len += pCol->bytes; break; } @@ -244,12 +244,12 @@ void dataColPopPoints(SDataCol *pCol, int pointsToPop, int numOfPoints) { VarDataOffsetT toffset = pCol->dataOff[pointsToPop]; pCol->len = pCol->len - toffset; ASSERT(pCol->len > 0); - memmove(pCol->pData, POINTER_DRIFT(pCol->pData, toffset), pCol->len); + memmove(pCol->pData, POINTER_SHIFT(pCol->pData, toffset), pCol->len); dataColSetOffset(pCol, pointsLeft); } else { ASSERT(pCol->len == TYPE_BYTES[pCol->type] * numOfPoints); pCol->len = TYPE_BYTES[pCol->type] * pointsLeft; - memmove(pCol->pData, POINTER_DRIFT(pCol->pData, TYPE_BYTES[pCol->type] * pointsToPop), pCol->len); + memmove(pCol->pData, POINTER_SHIFT(pCol->pData, TYPE_BYTES[pCol->type] * pointsToPop), pCol->len); } } @@ -301,7 +301,7 @@ void dataColSetOffset(SDataCol *pCol, int nEle) { for (int i = 0; i < nEle; i++) { pCol->dataOff[i] = offset; offset += varDataTLen(tptr); - tptr = POINTER_DRIFT(tptr, varDataTLen(tptr)); + tptr = POINTER_SHIFT(tptr, varDataTLen(tptr)); } } diff --git a/src/common/src/tmessage.c b/src/common/src/tmessage.c index 5a134df129..0b6dbfdb51 100644 --- a/src/common/src/tmessage.c +++ b/src/common/src/tmessage.c @@ -13,122 +13,6 @@ * along with this program. If not, see . */ -char *taosMsg[] = { - "null", - "registration", - "registration-rsp", - "submit", - "submit-rsp", - "query", - "query-rsp", - "retrieve", - "retrieve-rsp", - "create-table", - "create-table-rsp", //10 - - "drop-table", - "drop-table-rsp", - "alter-table", - "alter-table-rsp", - "create-vnode", - "create-vnode-rsp", - "drop-vnode", - "drop-vnode-rsp", - "alter-vnode", - "alter-vnode-rsp", //20 - - "drop-stable", - "drop-stable-rsp", - "alter-stream", - "alter-stream-rsp", - "config-dnode", - "config-dnode-rsp", - "", - "", - "", - "", //30 - - "connect", - "connect-rsp", - "create-acct", - "create-acct-rsp", - "alter-acct", - "alter-acct-rsp", - "drop-acct", - "drop-acct-rsp", - "create-user", - "create-user-rsp", //40 - - "alter-user", - "alter-user-rsp", - "drop-user", - "drop-user-rsp", - "create-dnode", - "create-dnode-rsp", - "drop-dnode", - "drop-dnode-rsp", - "create-db", - "create-db-rsp", //50 - - "drop-db", - "drop-db-rsp", - "use-db", - "use-db-rsp", - "alter-db", - "alter-db-rsp", - "create-table", - "create-table-rsp", - "drop-table", - "drop-table-rsp", //60 - - "alter-table", - "alter-table-rsp", - "table-meta", - "table-meta-rsp", - "super-table-meta", - "super-stable-meta-rsp", - "multi-table-meta", - "multi-table-meta-rsp", - "alter-stream", - "alter-stream-rsp", //70 - - "show", - "show-rsp", - "kill-query", - "kill-query-rsp", - "kill-stream", - "kill-stream-rsp", - "kill-connection", - "kill-connectoin-rsp", - "heart-beat", - "heart-beat-rsp", //80 - - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", //90 - - "config-table", - "config-table-rsp", - "config-vnode", - "config-vnode-rsp", - "status", - "status-rsp", - "grant", - "grant-rsp", - "", - "", //100 - - "sdb-sync", - "sdb-sync-rsp", - "sdb-forward", - "sdb-forward-rsp", - "max" -}; +#define TAOS_MESSAGE_C +#include "taosmsg.h" diff --git a/src/connector/python/linux/python3/taos/cinterface.py b/src/connector/python/linux/python3/taos/cinterface.py index 77001609b6..6ef54f1ba5 100644 --- a/src/connector/python/linux/python3/taos/cinterface.py +++ b/src/connector/python/linux/python3/taos/cinterface.py @@ -146,6 +146,7 @@ class CTaosInterface(object): libtaos.taos_errstr.restype = ctypes.c_char_p libtaos.taos_subscribe.restype = ctypes.c_void_p libtaos.taos_consume.restype = ctypes.c_void_p + libtaos.taos_fetch_lengths.restype = ctypes.c_void_p def __init__(self, config=None): ''' @@ -314,6 +315,8 @@ class CTaosInterface(object): isMicro = (CTaosInterface.libtaos.taos_result_precision(result) == FieldType.C_TIMESTAMP_MICRO) blocks = [None] * len(fields) + fieldL = CTaosInterface.libtaos.taos_fetch_lengths(result) + fieldLen = [ele for ele in ctypes.cast(fieldL, ctypes.POINTER(ctypes.c_int))[:len(fields)]] for i in range(len(fields)): data = ctypes.cast(pblock, ctypes.POINTER(ctypes.c_void_p))[i] if data == None: @@ -323,7 +326,7 @@ class CTaosInterface(object): if fields[i]['type'] not in _CONVERT_FUNC: raise DatabaseError("Invalid data type returned from database") - blocks[i] = _CONVERT_FUNC[fields[i]['type']](data, num_of_rows, fields[i]['bytes'], isMicro) + blocks[i] = _CONVERT_FUNC[fields[i]['type']](data, num_of_rows, fieldLen[i], isMicro) return blocks, abs(num_of_rows) diff --git a/src/dnode/src/dnodeRead.c b/src/dnode/src/dnodeRead.c index e52b59d20a..efa5dc7695 100644 --- a/src/dnode/src/dnodeRead.c +++ b/src/dnode/src/dnodeRead.c @@ -74,8 +74,10 @@ void dnodeCleanupRead() { for (int i=0; i < readPool.max; ++i) { SReadWorker *pWorker = readPool.readWorker + i; - if (pWorker->thread) + if (pWorker->thread) { + pthread_cancel(pWorker->thread); pthread_join(pWorker->thread, NULL); + } } taosCloseQset(readQset); @@ -114,12 +116,12 @@ void dnodeRead(SRpcMsg *pMsg) { pRead->pCont = pCont; pRead->contLen = pHead->contLen; - taosWriteQitem(queue, TAOS_QTYPE_RPC, pRead); - // next vnode leftLen -= pHead->contLen; pCont -= pHead->contLen; queuedMsgNum++; + + taosWriteQitem(queue, TAOS_QTYPE_RPC, pRead); } if (queuedMsgNum == 0) { diff --git a/src/dnode/src/dnodeWrite.c b/src/dnode/src/dnodeWrite.c index babbcf4ae8..4ca9b1935d 100644 --- a/src/dnode/src/dnodeWrite.c +++ b/src/dnode/src/dnodeWrite.c @@ -71,7 +71,10 @@ void dnodeCleanupWrite() { for (int32_t i = 0; i < wWorkerPool.max; ++i) { SWriteWorker *pWorker = wWorkerPool.writeWorker + i; if (pWorker->thread) { + pthread_cancel(pWorker->thread); pthread_join(pWorker->thread, NULL); + taosFreeQall(pWorker->qall); + taosCloseQset(pWorker->qset); } } @@ -228,7 +231,7 @@ static void dnodeHandleIdleWorker(SWriteWorker *pWorker) { int32_t num = taosGetQueueNumber(pWorker->qset); if (num > 0) { - usleep(30); + usleep(30000); sched_yield(); } else { taosFreeQall(pWorker->qall); diff --git a/src/inc/taos.h b/src/inc/taos.h index d4f1b8f48c..2f23b10a61 100644 --- a/src/inc/taos.h +++ b/src/inc/taos.h @@ -53,9 +53,9 @@ typedef enum { } TSDB_OPTION; typedef struct taosField { - char name[64]; - short bytes; - char type; + char name[64]; + short bytes; + uint8_t type; } TAOS_FIELD; #ifdef _TD_GO_DLL_ @@ -104,6 +104,8 @@ DLL_EXPORT void taos_stop_query(TAOS_RES *res); int taos_fetch_block(TAOS_RES *res, TAOS_ROW *rows); int taos_validate_sql(TAOS *taos, const char *sql); +int* taos_fetch_lengths(TAOS_RES *res); + // TAOS_RES *taos_list_tables(TAOS *mysql, const char *wild); // TAOS_RES *taos_list_dbs(TAOS *mysql, const char *wild); diff --git a/src/inc/taosdef.h b/src/inc/taosdef.h index aa4889ec9d..e60124cf0a 100644 --- a/src/inc/taosdef.h +++ b/src/inc/taosdef.h @@ -36,14 +36,17 @@ extern "C" { typedef int32_t VarDataOffsetT; typedef int16_t VarDataLenT; +#define VARSTR_HEADER_SIZE sizeof(VarDataLenT) + #define varDataLen(v) ((VarDataLenT *)(v))[0] #define varDataTLen(v) (sizeof(VarDataLenT) + varDataLen(v)) #define varDataVal(v) ((void *)((char *)v + sizeof(VarDataLenT))) #define varDataCopy(dst, v) memcpy((dst), (void*) (v), varDataTLen(v)) +#define varDataLenByData(v) (*(VarDataLenT *)(((char*)(v)) - VARSTR_HEADER_SIZE)) // this data type is internally used only in 'in' query to hold the values #define TSDB_DATA_TYPE_ARRAY (TSDB_DATA_TYPE_NCHAR + 1) -#define VARSTR_HEADER_SIZE sizeof(VarDataLenT) + // Bytes for each type. extern const int32_t TYPE_BYTES[11]; diff --git a/src/inc/taoserror.h b/src/inc/taoserror.h index c9071f4cb0..b5ab4412a9 100644 --- a/src/inc/taoserror.h +++ b/src/inc/taoserror.h @@ -115,6 +115,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_QUERY_ID, 0, 255, "invalid query i TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_STREAM_ID, 0, 256, "invalid stream id") TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_CONNECTION, 0, 257, "invalid connection") TAOS_DEFINE_ERROR(TSDB_CODE_SDB_ERROR, 0, 258, "sdb error") +TAOS_DEFINE_ERROR(TSDB_CODE_TIMESTAMP_OUT_OF_RANGE, 0, 259, "timestamp is out of range") // acct TAOS_DEFINE_ERROR(TSDB_CODE_ACCT_ALREADY_EXIST, 0, 300, "accounts already exist") @@ -172,6 +173,9 @@ TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_VALUE, 0, 462, "invalid value") // others TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_FILE_FORMAT, 0, 500, "invalid file format") +// TSDB +TAOS_DEFINE_ERROR(TSDB_CODE_INVALID_CONFIG, 0, 550, "invalid TSDB configuration") + #ifdef TAOS_ERROR_C }; diff --git a/src/inc/taosmsg.h b/src/inc/taosmsg.h index 68e72b0964..a91a1e2128 100644 --- a/src/inc/taosmsg.h +++ b/src/inc/taosmsg.h @@ -28,103 +28,76 @@ extern "C" { #include "trpc.h" // message type -#define TSDB_MSG_TYPE_REG 1 -#define TSDB_MSG_TYPE_REG_RSP 2 -#define TSDB_MSG_TYPE_SUBMIT 3 -#define TSDB_MSG_TYPE_SUBMIT_RSP 4 -#define TSDB_MSG_TYPE_QUERY 5 -#define TSDB_MSG_TYPE_QUERY_RSP 6 -#define TSDB_MSG_TYPE_RETRIEVE 7 -#define TSDB_MSG_TYPE_RETRIEVE_RSP 8 + +#ifdef TAOS_MESSAGE_C +#define TAOS_DEFINE_MESSAGE_TYPE( name, msg ) msg, msg "-rsp", +char *taosMsg[] = { + "null", +#else +#define TAOS_DEFINE_MESSAGE_TYPE( name, msg ) name, name##_RSP, +enum { + TSDB_MESSAGE_NULL = 0, +#endif + +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_REG, "registration" ) // 1 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_SUBMIT, "submit" ) // 3 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_QUERY, "query" ) // 5 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_RETRIEVE, "retrieve" ) // 7 // message from mnode to dnode -#define TSDB_MSG_TYPE_MD_CREATE_TABLE 9 -#define TSDB_MSG_TYPE_MD_CREATE_TABLE_RSP 10 -#define TSDB_MSG_TYPE_MD_DROP_TABLE 11 -#define TSDB_MSG_TYPE_MD_DROP_TABLE_RSP 12 -#define TSDB_MSG_TYPE_MD_ALTER_TABLE 13 -#define TSDB_MSG_TYPE_MD_ALTER_TABLE_RSP 14 -#define TSDB_MSG_TYPE_MD_CREATE_VNODE 15 -#define TSDB_MSG_TYPE_MD_CREATE_VNODE_RSP 16 -#define TSDB_MSG_TYPE_MD_DROP_VNODE 17 -#define TSDB_MSG_TYPE_MD_DROP_VNODE_RSP 18 -#define TSDB_MSG_TYPE_MD_DROP_STABLE 19 -#define TSDB_MSG_TYPE_MD_DROP_STABLE_RSP 20 -#define TSDB_MSG_TYPE_MD_ALTER_STREAM 21 -#define TSDB_MSG_TYPE_MD_ALTER_STREAM_RSP 22 -#define TSDB_MSG_TYPE_MD_CONFIG_DNODE 23 -#define TSDB_MSG_TYPE_MD_CONFIG_DNODE_RSP 24 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_MD_CREATE_TABLE, "create-table" ) // 9 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_MD_DROP_TABLE, "drop-table" ) // 11 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_MD_ALTER_TABLE, "alter-table" ) // 13 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_MD_CREATE_VNODE, "create-vnode" ) // 15 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_MD_DROP_VNODE, "drop-vnode" ) // 17 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_MD_DROP_STABLE, "drop-stable" ) // 19 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_MD_ALTER_STREAM, "alter-stream" ) // 21 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_MD_CONFIG_DNODE, "config-dnode" ) // 23 // message from client to mnode -#define TSDB_MSG_TYPE_CM_CONNECT 31 -#define TSDB_MSG_TYPE_CM_CONNECT_RSP 32 -#define TSDB_MSG_TYPE_CM_CREATE_ACCT 33 -#define TSDB_MSG_TYPE_CM_CREATE_ACCT_RSP 34 -#define TSDB_MSG_TYPE_CM_ALTER_ACCT 35 -#define TSDB_MSG_TYPE_CM_ALTER_ACCT_RSP 36 -#define TSDB_MSG_TYPE_CM_DROP_ACCT 37 -#define TSDB_MSG_TYPE_CM_DROP_ACCT_RSP 38 -#define TSDB_MSG_TYPE_CM_CREATE_USER 39 -#define TSDB_MSG_TYPE_CM_CREATE_USER_RSP 40 -#define TSDB_MSG_TYPE_CM_ALTER_USER 41 -#define TSDB_MSG_TYPE_CM_ALTER_USER_RSP 42 -#define TSDB_MSG_TYPE_CM_DROP_USER 43 -#define TSDB_MSG_TYPE_CM_DROP_USER_RSP 44 -#define TSDB_MSG_TYPE_CM_CREATE_DNODE 45 -#define TSDB_MSG_TYPE_CM_CREATE_DNODE_RSP 46 -#define TSDB_MSG_TYPE_CM_DROP_DNODE 47 -#define TSDB_MSG_TYPE_CM_DROP_DNODE_RSP 48 -#define TSDB_MSG_TYPE_CM_CONFIG_DNODE TSDB_MSG_TYPE_MD_CONFIG_DNODE -#define TSDB_MSG_TYPE_CM_CONFIG_DNODE_RSP TSDB_MSG_TYPE_MD_CONFIG_DNODE_RSP -#define TSDB_MSG_TYPE_CM_CREATE_DB 49 -#define TSDB_MSG_TYPE_CM_CREATE_DB_RSP 50 -#define TSDB_MSG_TYPE_CM_DROP_DB 51 -#define TSDB_MSG_TYPE_CM_DROP_DB_RSP 52 -#define TSDB_MSG_TYPE_CM_USE_DB 53 -#define TSDB_MSG_TYPE_CM_USE_DB_RSP 54 -#define TSDB_MSG_TYPE_CM_ALTER_DB 55 -#define TSDB_MSG_TYPE_CM_ALTER_DB_RSP 56 -#define TSDB_MSG_TYPE_CM_CREATE_TABLE 57 -#define TSDB_MSG_TYPE_CM_CREATE_TABLE_RSP 58 -#define TSDB_MSG_TYPE_CM_DROP_TABLE 59 -#define TSDB_MSG_TYPE_CM_DROP_TABLE_RSP 60 -#define TSDB_MSG_TYPE_CM_ALTER_TABLE 61 -#define TSDB_MSG_TYPE_CM_ALTER_TABLE_RSP 62 -#define TSDB_MSG_TYPE_CM_TABLE_META 63 -#define TSDB_MSG_TYPE_CM_TABLE_META_RSP 64 -#define TSDB_MSG_TYPE_CM_STABLE_VGROUP 65 -#define TSDB_MSG_TYPE_CM_STABLE_VGROUP_RSP 66 -#define TSDB_MSG_TYPE_CM_TABLES_META 67 -#define TSDB_MSG_TYPE_CM_TABLES_META_RSP 68 -#define TSDB_MSG_TYPE_CM_ALTER_STREAM 69 -#define TSDB_MSG_TYPE_CM_ALTER_STREAM_RSP 70 -#define TSDB_MSG_TYPE_CM_SHOW 71 -#define TSDB_MSG_TYPE_CM_SHOW_RSP 72 -#define TSDB_MSG_TYPE_CM_KILL_QUERY 73 -#define TSDB_MSG_TYPE_CM_KILL_QUERY_RSP 74 -#define TSDB_MSG_TYPE_CM_KILL_STREAM 75 -#define TSDB_MSG_TYPE_CM_KILL_STREAM_RSP 76 -#define TSDB_MSG_TYPE_CM_KILL_CONN 77 -#define TSDB_MSG_TYPE_CM_KILL_CONN_RSP 78 -#define TSDB_MSG_TYPE_CM_HEARTBEAT 79 -#define TSDB_MSG_TYPE_CM_HEARTBEAT_RSP 80 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_CONNECT, "connect" ) // 31 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_CREATE_ACCT, "create-acct" ) // 33 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_ALTER_ACCT, "alter-acct" ) // 35 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_DROP_ACCT, "drop-acct" ) // 37 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_CREATE_USER, "create-user" ) // 39 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_ALTER_USER, "alter-user" ) // 41 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_DROP_USER, "drop-user" ) // 43 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_CREATE_DNODE, "create-dnode" ) // 45 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_DROP_DNODE, "drop-dnode" ) // 47 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_CREATE_DB, "create-db" ) // 49 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_DROP_DB, "drop-db" ) // 51 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_USE_DB, "use-db" ) // 53 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_ALTER_DB, "alter-db" ) // 55 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_CREATE_TABLE, "create-table" ) // 57 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_DROP_TABLE, "drop-table" ) // 59 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_ALTER_TABLE, "alter-table" ) // 61 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_TABLE_META, "table-meta" ) // 63 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_STABLE_VGROUP, "stable-vgroup" ) // 65 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_TABLES_META, "tables-meta" ) // 67 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_ALTER_STREAM, "alter-stream" ) // 69 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_SHOW, "show" ) // 71 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_KILL_QUERY, "kill-query" ) // 73 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_KILL_STREAM, "kill-stream" ) // 75 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_KILL_CONN, "kill-conn" ) // 77 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_HEARTBEAT, "heartbeat" ) // 79 // message from dnode to mnode -#define TSDB_MSG_TYPE_DM_CONFIG_TABLE 91 -#define TSDB_MSG_TYPE_DM_CONFIG_TABLE_RSP 92 -#define TSDB_MSG_TYPE_DM_CONFIG_VNODE 93 -#define TSDB_MSG_TYPE_DM_CONFIG_VNODE_RSP 94 -#define TSDB_MSG_TYPE_DM_STATUS 95 -#define TSDB_MSG_TYPE_DM_STATUS_RSP 96 -#define TSDB_MSG_TYPE_DM_GRANT 97 -#define TSDB_MSG_TYPE_DM_GRANT_RSP 98 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_DM_CONFIG_TABLE, "config-table" ) // 91 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_DM_CONFIG_VNODE, "config-vnode" ) // 93 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_DM_STATUS, "status" ) // 95 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_DM_GRANT, "grant" ) // 97 -#define TSDB_MSG_TYPE_SDB_SYNC 101 -#define TSDB_MSG_TYPE_SDB_SYNC_RSP 102 -#define TSDB_MSG_TYPE_SDB_FORWARD 103 -#define TSDB_MSG_TYPE_SDB_FORWARD_RSP 104 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_SDB_SYNC, "sdb-sync" ) // 101 +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_SDB_FORWARD, "sdb-forward" ) // 103 -#define TSDB_MSG_TYPE_MAX 105 +#ifndef TAOS_MESSAGE_C + TSDB_MSG_TYPE_MAX // 105 +#endif + +}; + +#define TSDB_MSG_TYPE_CM_CONFIG_DNODE TSDB_MSG_TYPE_MD_CONFIG_DNODE +#define TSDB_MSG_TYPE_CM_CONFIG_DNODE_RSP TSDB_MSG_TYPE_MD_CONFIG_DNODE_RSP // IE type #define TSDB_IE_TYPE_SEC 1 diff --git a/src/kit/shell/inc/shell.h b/src/kit/shell/inc/shell.h index 7abe8a5776..381c6f1dbf 100644 --- a/src/kit/shell/inc/shell.h +++ b/src/kit/shell/inc/shell.h @@ -61,6 +61,7 @@ struct arguments { int threadNum; char* commands; int abort; + int port; }; /**************** Function declarations ****************/ diff --git a/src/kit/shell/src/shellDarwin.c b/src/kit/shell/src/shellDarwin.c index 13513426cd..cd2fe6df33 100644 --- a/src/kit/shell/src/shellDarwin.c +++ b/src/kit/shell/src/shellDarwin.c @@ -81,7 +81,7 @@ void shellParseArgument(int argc, char *argv[], struct arguments *arguments) { // for management port else if (strcmp(argv[i], "-P") == 0) { if (i < argc - 1) { - tsMnodeShellPort = atoi(argv[++i]); + arguments->port = atoi(argv[++i]); } else { fprintf(stderr, "option -P requires an argument\n"); exit(EXIT_FAILURE); diff --git a/src/kit/shell/src/shellEngine.c b/src/kit/shell/src/shellEngine.c index eeaeec83f2..152397c044 100644 --- a/src/kit/shell/src/shellEngine.c +++ b/src/kit/shell/src/shellEngine.c @@ -68,7 +68,7 @@ TAOS *shellInit(struct arguments *args) { tsMeterMetaKeepTimer = 3000; // Connect to the database. - TAOS *con = taos_connect(args->host, args->user, args->password, args->database, tsMnodeShellPort); + TAOS *con = taos_connect(args->host, args->user, args->password, args->database, args->port); if (con == NULL) { return con; } @@ -350,6 +350,8 @@ int shellDumpResult(TAOS *con, char *fname, int *error_no, bool printMode) { TAOS_FIELD *fields = taos_fetch_fields(result); row = taos_fetch_row(result); + int32_t* length = taos_fetch_lengths(result); + char t_str[TSDB_MAX_BYTES_PER_ROW] = "\0"; int l[TSDB_MAX_COLUMNS] = {0}; int maxLenColumnName = 0; @@ -457,7 +459,7 @@ int shellDumpResult(TAOS *con, char *fname, int *error_no, bool printMode) { case TSDB_DATA_TYPE_BINARY: case TSDB_DATA_TYPE_NCHAR: memset(t_str, 0, TSDB_MAX_BYTES_PER_ROW); - memcpy(t_str, row[i], fields[i].bytes); + memcpy(t_str, row[i], length[i]); /* printf("%-*s|",max(fields[i].bytes, strlen(fields[i].name)), * t_str); */ /* printf("%-*s|", l[i], t_str); */ @@ -532,7 +534,8 @@ int shellDumpResult(TAOS *con, char *fname, int *error_no, bool printMode) { case TSDB_DATA_TYPE_BINARY: case TSDB_DATA_TYPE_NCHAR: memset(t_str, 0, TSDB_MAX_BYTES_PER_ROW); - memcpy(t_str, row[i], fields[i].bytes); + memcpy(t_str, row[i], length[i]); + l[i] = MAX(fields[i].bytes, strlen(fields[i].name)); shellPrintNChar(t_str, l[i], printMode); break; @@ -610,7 +613,7 @@ int shellDumpResult(TAOS *con, char *fname, int *error_no, bool printMode) { case TSDB_DATA_TYPE_BINARY: case TSDB_DATA_TYPE_NCHAR: memset(t_str, 0, TSDB_MAX_BYTES_PER_ROW); - memcpy(t_str, row[i], fields[i].bytes); + memcpy(t_str, row[i], length[i]); fprintf(fp, "\'%s\'", t_str); break; case TSDB_DATA_TYPE_TIMESTAMP: diff --git a/src/kit/shell/src/shellLinux.c b/src/kit/shell/src/shellLinux.c index 22ffa78c81..0d9458e00c 100644 --- a/src/kit/shell/src/shellLinux.c +++ b/src/kit/shell/src/shellLinux.c @@ -63,7 +63,7 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) { break; case 'P': if (arg) { - tsMnodeShellPort = atoi(arg); + arguments->port = atoi(arg); } else { fprintf(stderr, "Invalid port\n"); return -1; diff --git a/src/kit/shell/src/shellWindows.c b/src/kit/shell/src/shellWindows.c index 8863f4fa46..ac04c593fb 100644 --- a/src/kit/shell/src/shellWindows.c +++ b/src/kit/shell/src/shellWindows.c @@ -61,7 +61,7 @@ void shellParseArgument(int argc, char *argv[], struct arguments *arguments) { // for management port else if (strcmp(argv[i], "-P") == 0) { if (i < argc - 1) { - tsMnodeShellPort = atoi(argv[++i]); + arguments->port = atoi(argv[++i]); } else { fprintf(stderr, "option -P requires an argument\n"); exit(EXIT_FAILURE); diff --git a/src/mnode/src/mgmtDServer.c b/src/mnode/src/mgmtDServer.c index 726554e490..1e820be0e9 100644 --- a/src/mnode/src/mgmtDServer.c +++ b/src/mnode/src/mgmtDServer.c @@ -52,14 +52,14 @@ int32_t mgmtInitDServer() { rpcInit.idleTime = tsShellActivityTimer * 1000; rpcInit.afp = mgmtDServerRetrieveAuth; + tsMgmtDServerQhandle = taosInitScheduler(tsMaxShellConns, 1, "MS"); + tsMgmtDServerRpc = rpcOpen(&rpcInit); if (tsMgmtDServerRpc == NULL) { mError("failed to init server connection to dnode"); return -1; } - tsMgmtDServerQhandle = taosInitScheduler(tsMaxShellConns, 1, "MS"); - mPrint("server connection to dnode is opened"); return 0; } diff --git a/src/mnode/src/mgmtDb.c b/src/mnode/src/mgmtDb.c index 9ddf647d74..9eb8b8dce1 100644 --- a/src/mnode/src/mgmtDb.c +++ b/src/mnode/src/mgmtDb.c @@ -672,7 +672,7 @@ static int32_t mgmtRetrieveDbs(SShowObj *pShow, char *data, int32_t rows, void * pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; char *prec = (pDb->cfg.precision == TSDB_TIME_PRECISION_MILLI) ? TSDB_TIME_PRECISION_MILLI_STR : TSDB_TIME_PRECISION_MICRO_STR; - strcpy(pWrite, prec); + STR_WITH_SIZE_TO_VARSTR(pWrite, prec, 2); cols++; pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; diff --git a/src/mnode/src/mgmtDnode.c b/src/mnode/src/mgmtDnode.c index b041d862cf..bb98e1c3e6 100644 --- a/src/mnode/src/mgmtDnode.c +++ b/src/mnode/src/mgmtDnode.c @@ -426,6 +426,7 @@ static int32_t mgmtDropDnodeByEp(char *ep) { return TSDB_CODE_NO_REMOVE_MASTER; } + mPrint("dnode:%d, start to drop it", pDnode->dnodeId); #ifndef _SYNC return mgmtDropDnode(pDnode); #else diff --git a/src/mnode/src/mgmtSdb.c b/src/mnode/src/mgmtSdb.c index 3717277992..a55869222d 100644 --- a/src/mnode/src/mgmtSdb.c +++ b/src/mnode/src/mgmtSdb.c @@ -143,7 +143,9 @@ static void *sdbGetTableFromId(int32_t tableId) { static int32_t sdbInitWal() { SWalCfg walCfg = {.commitLog = 2, .wals = 2, .keep = 1}; - tsSdbObj.wal = walOpen(tsMnodeDir, &walCfg); + char temp[TSDB_FILENAME_LEN]; + sprintf(temp, "%s/wal", tsMnodeDir); + tsSdbObj.wal = walOpen(temp, &walCfg); if (tsSdbObj.wal == NULL) { sdbError("failed to open sdb wal in %s", tsMnodeDir); return -1; @@ -196,8 +198,7 @@ static uint32_t sdbGetFileInfo(void *ahandle, char *name, uint32_t *index, int32 } static int sdbGetWalInfo(void *ahandle, char *name, uint32_t *index) { - strcpy(name, "wal0"); - return 0; + return walGetWalFile(tsSdbObj.wal, name, index); } static void sdbNotifyRole(void *ahandle, int8_t role) { @@ -281,7 +282,7 @@ void sdbUpdateSync() { syncInfo.vgId = 1; syncInfo.version = sdbGetVersion(); syncInfo.syncCfg = syncCfg; - sprintf(syncInfo.path, "%s/", tsMnodeDir); + sprintf(syncInfo.path, "%s", tsMnodeDir); syncInfo.ahandle = NULL; syncInfo.getWalInfo = sdbGetWalInfo; syncInfo.getFileInfo = sdbGetFileInfo; diff --git a/src/mnode/src/mgmtUser.c b/src/mnode/src/mgmtUser.c index b4dd58cb3b..ecd3c217ca 100644 --- a/src/mnode/src/mgmtUser.c +++ b/src/mnode/src/mgmtUser.c @@ -396,7 +396,7 @@ static void mgmtProcessAlterUserMsg(SQueuedMsg *pMsg) { code = mgmtUpdateUser(pUser); mLPrint("user:%s, password is altered by %s, result:%s", pUser->user, pOperUser->user, tstrerror(code)); } else { - mError("user:%s, no rights to ater user", pOperUser->user); + mError("user:%s, no rights to alter user", pOperUser->user); code = TSDB_CODE_NO_RIGHTS; } @@ -439,13 +439,13 @@ static void mgmtProcessAlterUserMsg(SQueuedMsg *pMsg) { code = mgmtUpdateUser(pUser); mLPrint("user:%s, privilege is altered by %s, result:%s", pUser->user, pOperUser->user, tstrerror(code)); } else { - mError("user:%s, no rights to ater user", pOperUser->user); + mError("user:%s, no rights to alter user", pOperUser->user); code = TSDB_CODE_NO_RIGHTS; } mgmtSendSimpleResp(pMsg->thandle, code); } else { - mError("user:%s, no rights to ater user", pOperUser->user); + mError("user:%s, no rights to alter user", pOperUser->user); mgmtSendSimpleResp(pMsg->thandle, TSDB_CODE_NO_RIGHTS); } diff --git a/src/mnode/src/mgmtVgroup.c b/src/mnode/src/mgmtVgroup.c index 2162230606..f83268e760 100644 --- a/src/mnode/src/mgmtVgroup.c +++ b/src/mnode/src/mgmtVgroup.c @@ -160,10 +160,7 @@ static int32_t mgmtVgroupActionUpdate(SSdbOper *pOper) { mgmtDecVgroupRef(pVgroup); - mTrace("vgId:%d, is updated, numOfVnode:%d", pVgroup->vgId, pVgroup->numOfVnodes); - if (pDb) { - mTrace("tables:%d", pDb->cfg.maxTables); - } + mTrace("vgId:%d, is updated, numOfVnode:%d tables:%d", pVgroup->vgId, pVgroup->numOfVnodes, pDb == NULL ? 0 : pDb->cfg.maxTables); return TSDB_CODE_SUCCESS; } diff --git a/src/rpc/src/rpcMain.c b/src/rpc/src/rpcMain.c index d463bc3d95..20404511f6 100644 --- a/src/rpc/src/rpcMain.c +++ b/src/rpc/src/rpcMain.c @@ -1083,6 +1083,7 @@ static void rpcSendMsgToPeer(SRpcConn *pConn, void *msg, int msgLen) { pRpc->label, pConn, taosMsg[pHead->msgType], pConn->peerFqdn, pConn->peerPort, msgLen, pHead->sourceId, pHead->destId, pHead->tranId); } else { + if (pHead->code == 0) pConn->secured = 1; // for success response, set link as secured if (pHead->msgType < TSDB_MSG_TYPE_CM_HEARTBEAT || (rpcDebugFlag & 16)) tTrace( "%s %p, %s is sent to %s:%hu, code:0x%x len:%d sig:0x%08x:0x%08x:%d", pRpc->label, pConn, taosMsg[pHead->msgType], pConn->peerFqdn, pConn->peerPort, @@ -1364,7 +1365,7 @@ static int rpcCheckAuthentication(SRpcConn *pConn, char *msg, int msgLen) { } } } else { - tTrace("%s %p, auth spi not matched, msg discarded", pRpc->label, pConn); + tTrace("%s %p, auth spi:%d not matched with received:%d", pRpc->label, pConn, pConn->spi, pHead->spi); code = TSDB_CODE_AUTH_FAILURE; } diff --git a/src/tsdb/inc/tsdbMain.h b/src/tsdb/inc/tsdbMain.h index 39808ab02f..a681c865c9 100644 --- a/src/tsdb/inc/tsdbMain.h +++ b/src/tsdb/inc/tsdbMain.h @@ -21,6 +21,7 @@ #include "tskiplist.h" #include "tutil.h" #include "tlog.h" +#include "tcoding.h" #ifdef __cplusplus extern "C" { @@ -160,6 +161,7 @@ typedef struct { typedef struct { int64_t index; + int numOfCacheBlocks; SList * memPool; } STsdbCachePool; @@ -227,13 +229,13 @@ typedef struct { int maxFGroups; int numOfFGroups; - SFileGroup fGroup[]; + SFileGroup *fGroup; } STsdbFileH; #define TSDB_MIN_FILE_ID(fh) (fh)->fGroup[0].fileId #define TSDB_MAX_FILE_ID(fh) (fh)->fGroup[(fh)->numOfFGroups - 1].fileId -STsdbFileH *tsdbInitFileH(char *dataDir, int maxFiles); +STsdbFileH *tsdbInitFileH(char *dataDir, STsdbCfg *pCfg); void tsdbCloseFileH(STsdbFileH *pFileH); int tsdbCreateFile(char *dataDir, int fileId, const char *suffix, int maxTables, SFile *pFile, int writeHeader, int toClose); @@ -261,11 +263,12 @@ SFileGroup *tsdbGetFileGroupNext(SFileGroupIter *pIter); typedef struct { int32_t len; int32_t offset; + int32_t padding; // For padding purpose int32_t hasLast : 1; int32_t numOfBlocks : 31; - int32_t checksum; + int64_t uid; TSKEY maxKey; -} SCompIdx; /* sizeof(SCompIdx) = 24 */ +} SCompIdx; /* sizeof(SCompIdx) = 28 */ /** * if numOfSubBlocks == 0, then the SCompBlock is a sub-block @@ -485,6 +488,11 @@ int tsdbMoveLastBlockIfNeccessary(SRWHelper *pHelper); int tsdbWriteCompInfo(SRWHelper *pHelper); int tsdbWriteCompIdx(SRWHelper *pHelper); +// --------- Other functions need to further organize +void tsdbFitRetention(STsdbRepo *pRepo); +int tsdbAlterCacheTotalBlocks(STsdbRepo *pRepo, int totalBlocks); +void tsdbAdjustCacheBlocks(STsdbCache *pCache); + #ifdef __cplusplus } #endif diff --git a/src/tsdb/src/tsdbCache.c b/src/tsdb/src/tsdbCache.c index 9351bc602b..84f8a81eea 100644 --- a/src/tsdb/src/tsdbCache.c +++ b/src/tsdb/src/tsdbCache.c @@ -20,6 +20,7 @@ static int tsdbAllocBlockFromPool(STsdbCache *pCache); static void tsdbFreeBlockList(SList *list); static void tsdbFreeCacheMem(SCacheMem *mem); +static int tsdbAddCacheBlockToPool(STsdbCache *pCache); STsdbCache *tsdbInitCache(int cacheBlockSize, int totalBlocks, TsdbRepoT *pRepo) { STsdbCache *pCache = (STsdbCache *)calloc(1, sizeof(STsdbCache)); @@ -40,13 +41,7 @@ STsdbCache *tsdbInitCache(int cacheBlockSize, int totalBlocks, TsdbRepoT *pRepo) if (pPool->memPool == NULL) goto _err; for (int i = 0; i < totalBlocks; i++) { - STsdbCacheBlock *pBlock = (STsdbCacheBlock *)malloc(sizeof(STsdbCacheBlock) + cacheBlockSize); - if (pBlock == NULL) { - goto _err; - } - pBlock->offset = 0; - pBlock->remain = cacheBlockSize; - tdListAppend(pPool->memPool, (void *)(&pBlock)); + if (tsdbAddCacheBlockToPool(pCache) < 0) goto _err; } pCache->mem = NULL; @@ -142,4 +137,70 @@ static int tsdbAllocBlockFromPool(STsdbCache *pCache) { tsdbUnLockRepo(pCache->pRepo); return 0; +} + +int tsdbAlterCacheTotalBlocks(STsdbRepo *pRepo, int totalBlocks) { + STsdbCache *pCache = pRepo->tsdbCache; + int oldNumOfBlocks = pCache->totalCacheBlocks; + + tsdbLockRepo((TsdbRepoT *)pRepo); + + ASSERT(pCache->totalCacheBlocks != totalBlocks); + + if (pCache->totalCacheBlocks < totalBlocks) { + ASSERT(pCache->totalCacheBlocks == pCache->pool.numOfCacheBlocks); + int blocksToAdd = pCache->totalCacheBlocks - totalBlocks; + pCache->totalCacheBlocks = totalBlocks; + for (int i = 0; i < blocksToAdd; i++) { + if (tsdbAddCacheBlockToPool(pCache) < 0) { + tsdbUnLockRepo((TsdbRepoT *)pRepo); + tsdbError("tsdbId %d: failed to add cache block to cache pool", pRepo->config.tsdbId); + return -1; + } + } + } else { + pCache->totalCacheBlocks = totalBlocks; + tsdbAdjustCacheBlocks(pCache); + } + + tsdbUnLockRepo((TsdbRepoT *)pRepo); + tsdbTrace("tsdbId %d: tsdb total cache blocks changed from %d to %d", pRepo->config.tsdbId, oldNumOfBlocks, totalBlocks); + return 0; +} + +static int tsdbAddCacheBlockToPool(STsdbCache *pCache) { + STsdbCachePool *pPool = &pCache->pool; + + STsdbCacheBlock *pBlock = malloc(sizeof(STsdbCacheBlock) + pCache->cacheBlockSize); + if (pBlock == NULL) return -1; + + pBlock->offset = 0; + pBlock->remain = pCache->cacheBlockSize; + tdListAppend(pPool->memPool, (void *)(&pBlock)); + pPool->numOfCacheBlocks++; + + return 0; +} + +static int tsdbRemoveCacheBlockFromPool(STsdbCache *pCache) { + STsdbCachePool *pPool = &pCache->pool; + STsdbCacheBlock *pBlock = NULL; + + ASSERT(pCache->totalCacheBlocks >= 0); + + SListNode *node = tdListPopHead(pPool->memPool); + if (node == NULL) return -1; + + tdListNodeGetData(pPool->memPool, node, &pBlock); + free(pBlock); + listNodeFree(node); + pPool->numOfCacheBlocks--; + + return 0; +} + +void tsdbAdjustCacheBlocks(STsdbCache *pCache) { + while (pCache->totalCacheBlocks < pCache->pool.numOfCacheBlocks) { + if (tsdbRemoveCacheBlockFromPool(pCache) < 0) break; + } } \ No newline at end of file diff --git a/src/tsdb/src/tsdbFile.c b/src/tsdb/src/tsdbFile.c index ab76f69bed..ad98bb7b20 100644 --- a/src/tsdb/src/tsdbFile.c +++ b/src/tsdb/src/tsdbFile.c @@ -27,6 +27,7 @@ #include "tchecksum.h" #include "tsdbMain.h" #include "tutil.h" +#include "ttime.h" const char *tsdbFileSuffix[] = { ".head", // TSDB_FILE_TYPE_HEAD @@ -40,13 +41,19 @@ static int tsdbWriteFileHead(SFile *pFile); static int tsdbWriteHeadFileIdx(SFile *pFile, int maxTables); static int tsdbOpenFGroup(STsdbFileH *pFileH, char *dataDir, int fid); -STsdbFileH *tsdbInitFileH(char *dataDir, int maxFiles) { - STsdbFileH *pFileH = (STsdbFileH *)calloc(1, sizeof(STsdbFileH) + sizeof(SFileGroup) * maxFiles); +STsdbFileH *tsdbInitFileH(char *dataDir, STsdbCfg *pCfg) { + STsdbFileH *pFileH = (STsdbFileH *)calloc(1, sizeof(STsdbFileH)); if (pFileH == NULL) { // TODO: deal with ERROR here return NULL; } - pFileH->maxFGroups = maxFiles; + pFileH->maxFGroups = pCfg->keep / pCfg->daysPerFile + 3; + + pFileH->fGroup = (SFileGroup *)calloc(pFileH->maxFGroups, sizeof(SFileGroup)); + if (pFileH->fGroup == NULL) { + free(pFileH); + return NULL; + } DIR *dir = opendir(dataDir); if (dir == NULL) { @@ -69,7 +76,12 @@ STsdbFileH *tsdbInitFileH(char *dataDir, int maxFiles) { return pFileH; } -void tsdbCloseFileH(STsdbFileH *pFileH) { free(pFileH); } +void tsdbCloseFileH(STsdbFileH *pFileH) { + if (pFileH) { + tfree(pFileH->fGroup); + free(pFileH); + } +} static int tsdbInitFile(char *dataDir, int fid, const char *suffix, SFile *pFile) { tsdbGetFileName(dataDir, fid, suffix, pFile->fname); @@ -161,6 +173,18 @@ void tsdbInitFileGroupIter(STsdbFileH *pFileH, SFileGroupIter *pIter, int direct } } +void tsdbFitRetention(STsdbRepo *pRepo) { + STsdbFileH *pFileH = pRepo->tsdbFileH; + SFileGroup *pGroup = pFileH->fGroup; + + int mfid = + tsdbGetKeyFileId(taosGetTimestamp(pRepo->config.precision), pRepo->config.daysPerFile, pRepo->config.precision) - pFileH->maxFGroups + 3; + + while (pFileH->numOfFGroups > 0 && pGroup[0].fileId < mfid) { + tsdbRemoveFileGroup(pFileH, pGroup[0].fileId); + } +} + void tsdbSeekFileGroupIter(SFileGroupIter *pIter, int fid) { if (pIter->numOfFGroups == 0) { assert(pIter->pFileGroup == NULL); @@ -252,43 +276,6 @@ int tsdbCopyBlockDataInFile(SFile *pOutFile, SFile *pInFile, SCompInfo *pCompInf return 0; } -// int tsdbLoadCompIdx(SFileGroup *pGroup, void *buf, int maxTables) { -// SFile *pFile = &(pGroup->files[TSDB_FILE_TYPE_HEAD]); -// if (lseek(pFile->fd, TSDB_FILE_HEAD_SIZE, SEEK_SET) < 0) return -1; - -// if (read(pFile->fd, buf, sizeof(SCompIdx) * maxTables) < 0) return -1; -// // TODO: need to check the correctness -// return 0; -// } - -// int tsdbLoadCompBlocks(SFileGroup *pGroup, SCompIdx *pIdx, void *buf) { -// SFile *pFile = &(pGroup->files[TSDB_FILE_TYPE_HEAD]); - -// if (lseek(pFile->fd, pIdx->offset, SEEK_SET) < 0) return -1; - -// if (read(pFile->fd, buf, pIdx->len) < 0) return -1; - -// // TODO: need to check the correctness - -// return 0; -// } - -// int tsdbLoadCompCols(SFile *pFile, SCompBlock *pBlock, void *buf) { -// // assert(pBlock->numOfSubBlocks == 0 || pBlock->numOfSubBlocks == 1); - -// if (lseek(pFile->fd, pBlock->offset, SEEK_SET) < 0) return -1; -// size_t size = sizeof(SCompData) + sizeof(SCompCol) * pBlock->numOfCols; -// if (read(pFile->fd, buf, size) < 0) return -1; - -// return 0; -// } - -// int tsdbLoadColData(SFile *pFile, SCompCol *pCol, int64_t blockBaseOffset, void *buf) { -// if (lseek(pFile->fd, blockBaseOffset + pCol->offset, SEEK_SET) < 0) return -1; -// if (read(pFile->fd, buf, pCol->len) < 0) return -1; -// return 0; -// } - static int compFGroupKey(const void *key, const void *fgroup) { int fid = *(int *)key; SFileGroup *pFGroup = (SFileGroup *)fgroup; diff --git a/src/tsdb/src/tsdbMain.c b/src/tsdb/src/tsdbMain.c index b1ef3d2d9c..3f41a3c5fe 100644 --- a/src/tsdb/src/tsdbMain.c +++ b/src/tsdb/src/tsdbMain.c @@ -6,6 +6,7 @@ #include "tsdbMain.h" #include "tscompression.h" #include "tchecksum.h" +#include "ttime.h" int tsdbDebugFlag = 135; @@ -27,7 +28,7 @@ static int32_t tsdbCheckAndSetDefaultCfg(STsdbCfg *pCfg); static int32_t tsdbSetRepoEnv(STsdbRepo *pRepo); static int32_t tsdbDestroyRepoEnv(STsdbRepo *pRepo); // static int tsdbOpenMetaFile(char *tsdbDir); -static int32_t tsdbInsertDataToTable(TsdbRepoT *repo, SSubmitBlk *pBlock); +static int32_t tsdbInsertDataToTable(TsdbRepoT *repo, SSubmitBlk *pBlock, TSKEY now); static int32_t tsdbRestoreCfg(STsdbRepo *pRepo, STsdbCfg *pCfg); static int32_t tsdbGetDataDirName(STsdbRepo *pRepo, char *fname); static void * tsdbCommitData(void *arg); @@ -35,8 +36,9 @@ static int tsdbCommitToFile(STsdbRepo *pRepo, int fid, SSkipListIterator **i SDataCols *pDataCols); static TSKEY tsdbNextIterKey(SSkipListIterator *pIter); static int tsdbHasDataToCommit(SSkipListIterator **iters, int nIters, TSKEY minKey, TSKEY maxKey); -// static int tsdbWriteBlockToFileImpl(SFile *pFile, SDataCols *pCols, int pointsToWrite, int64_t *offset, int32_t *len, -// int64_t uid); +static void tsdbAlterCompression(STsdbRepo *pRepo, int8_t compression); +static void tsdbAlterKeep(STsdbRepo *pRepo, int32_t keep); +static void tsdbAlterMaxTables(STsdbRepo *pRepo, int32_t maxTables); #define TSDB_GET_TABLE_BY_ID(pRepo, sid) (((STSDBRepo *)pRepo)->pTableList)[sid] #define TSDB_GET_TABLE_BY_NAME(pRepo, name) @@ -214,7 +216,7 @@ TsdbRepoT *tsdbOpenRepo(char *tsdbDir, STsdbAppH *pAppH) { } tsdbGetDataDirName(pRepo, dataDir); - pRepo->tsdbFileH = tsdbInitFileH(dataDir, pRepo->config.maxTables); + pRepo->tsdbFileH = tsdbInitFileH(dataDir, &(pRepo->config)); if (pRepo->tsdbFileH == NULL) { tsdbFreeCache(pRepo->tsdbCache); tsdbFreeMeta(pRepo->tsdbMeta); @@ -297,10 +299,23 @@ int32_t tsdbCloseRepo(TsdbRepoT *repo) { */ int32_t tsdbConfigRepo(TsdbRepoT *repo, STsdbCfg *pCfg) { STsdbRepo *pRepo = (STsdbRepo *)repo; + STsdbCfg * pRCfg = &pRepo->config; - pRepo->config = *pCfg; - // TODO - return 0; + if (tsdbCheckAndSetDefaultCfg(pCfg) < 0) return TSDB_CODE_INVALID_CONFIG; + + ASSERT(pRCfg->tsdbId == pCfg->tsdbId); + ASSERT(pRCfg->cacheBlockSize == pCfg->cacheBlockSize); + ASSERT(pRCfg->daysPerFile == pCfg->daysPerFile); + ASSERT(pRCfg->minRowsPerFileBlock == pCfg->minRowsPerFileBlock); + ASSERT(pRCfg->maxRowsPerFileBlock == pCfg->maxRowsPerFileBlock); + ASSERT(pRCfg->precision == pCfg->precision); + + if (pRCfg->compression != pCfg->compression) tsdbAlterCompression(pRepo, pCfg->compression); + if (pRCfg->keep != pCfg->keep) tsdbAlterKeep(pRepo, pCfg->keep); + if (pRCfg->totalBlocks != pCfg->totalBlocks) tsdbAlterCacheTotalBlocks(pRepo, pCfg->totalBlocks); + if (pRCfg->maxTables != pCfg->maxTables) tsdbAlterMaxTables(pRepo, pCfg->maxTables); + + return TSDB_CODE_SUCCESS; } int32_t tsdbTriggerCommit(TsdbRepoT *repo) { @@ -394,13 +409,16 @@ STableInfo *tsdbGetTableInfo(TsdbRepoT *pRepo, STableId tableId) { // TODO: need to return the number of data inserted int32_t tsdbInsertData(TsdbRepoT *repo, SSubmitMsg *pMsg) { SSubmitMsgIter msgIter; + STsdbRepo *pRepo = (STsdbRepo *)repo; tsdbInitSubmitMsgIter(pMsg, &msgIter); SSubmitBlk *pBlock = NULL; int32_t code = TSDB_CODE_SUCCESS; - + + TSKEY now = taosGetTimestamp(pRepo->config.precision); + while ((pBlock = tsdbGetSubmitMsgNext(&msgIter)) != NULL) { - if ((code = tsdbInsertDataToTable(repo, pBlock)) != TSDB_CODE_SUCCESS) { + if ((code = tsdbInsertDataToTable(repo, pBlock, now)) != TSDB_CODE_SUCCESS) { return code; } } @@ -787,21 +805,31 @@ static int32_t tdInsertRowToTable(STsdbRepo *pRepo, SDataRow row, STable *pTable return 0; } -static int32_t tsdbInsertDataToTable(TsdbRepoT *repo, SSubmitBlk *pBlock) { +static int32_t tsdbInsertDataToTable(TsdbRepoT *repo, SSubmitBlk *pBlock, TSKEY now) { STsdbRepo *pRepo = (STsdbRepo *)repo; STableId tableId = {.uid = pBlock->uid, .tid = pBlock->tid}; STable *pTable = tsdbIsValidTableToInsert(pRepo->tsdbMeta, tableId); if (pTable == NULL) { - uError("failed to get table for insert, uid:%" PRIu64 ", tid:%d", tableId.uid, tableId.tid); + tsdbError("failed to get table for insert, uid:%" PRIu64 ", tid:%d", tableId.uid, tableId.tid); return TSDB_CODE_INVALID_TABLE_ID; } - SSubmitBlkIter blkIter; - SDataRow row; + SSubmitBlkIter blkIter = {0}; + SDataRow row = NULL; + + TSKEY minKey = now - tsMsPerDay[pRepo->config.precision] * pRepo->config.keep; + TSKEY maxKey = now + tsMsPerDay[pRepo->config.precision] * pRepo->config.daysPerFile; tsdbInitSubmitBlkIter(pBlock, &blkIter); while ((row = tsdbGetSubmitBlkNext(&blkIter)) != NULL) { + if (dataRowKey(row) < minKey || dataRowKey(row) > maxKey) { + tsdbError( + "tsdbId: %d, table tid: %d, talbe uid: %ld timestamp is out of range. now: %ld maxKey: %ld, minKey: %ld", + pRepo->config.tsdbId, pTable->tableId.tid, pTable->tableId.uid, now, minKey, maxKey); + return TSDB_CODE_TIMESTAMP_OUT_OF_RANGE; + } + if (tdInsertRowToTable(pRepo, row, pTable) < 0) { return -1; } @@ -903,6 +931,9 @@ static void *tsdbCommitData(void *arg) { } } + // Do retention actions + tsdbFitRetention(pRepo); + _exit: tdFreeDataCols(pDataCols); tsdbDestroyTableIters(iters, pCfg->maxTables); @@ -910,6 +941,7 @@ _exit: tsdbLockRepo(arg); tdListMove(pCache->imem->list, pCache->pool.memPool); + tsdbAdjustCacheBlocks(pCache); tdListFree(pCache->imem->list); free(pCache->imem); pCache->imem = NULL; @@ -1028,4 +1060,27 @@ static int tsdbHasDataToCommit(SSkipListIterator **iters, int nIters, TSKEY minK if (nextKey > 0 && (nextKey >= minKey && nextKey <= maxKey)) return 1; } return 0; +} + +static void tsdbAlterCompression(STsdbRepo *pRepo, int8_t compression) { + pRepo->config.compression = compression; +} + +static void tsdbAlterKeep(STsdbRepo *pRepo, int32_t keep) { + STsdbCfg *pCfg = &pRepo->config; + + int maxFiles = keep / pCfg->maxTables + 3; + if (pRepo->config.keep > keep) { + pRepo->tsdbFileH->maxFGroups = maxFiles; + } else { + pRepo->tsdbFileH->fGroup = realloc(pRepo->tsdbFileH->fGroup, sizeof(SFileGroup)); + if (pRepo->tsdbFileH->fGroup == NULL) { + // TODO: deal with the error + } + pRepo->tsdbFileH->maxFGroups = maxFiles; + } +} + +static void tsdbAlterMaxTables(STsdbRepo *pRepo, int32_t maxTables) { + // TODO } \ No newline at end of file diff --git a/src/tsdb/src/tsdbMeta.c b/src/tsdb/src/tsdbMeta.c index ec4fb2a33f..63ccb538ed 100644 --- a/src/tsdb/src/tsdbMeta.c +++ b/src/tsdb/src/tsdbMeta.c @@ -535,5 +535,5 @@ static int tsdbEstimateTableEncodeSize(STable *pTable) { char *getTupleKey(const void * data) { SDataRow row = (SDataRow)data; - return POINTER_DRIFT(row, TD_DATA_ROW_HEAD_SIZE); + return POINTER_SHIFT(row, TD_DATA_ROW_HEAD_SIZE); } \ No newline at end of file diff --git a/src/tsdb/src/tsdbRWHelper.c b/src/tsdb/src/tsdbRWHelper.c index 653379e03b..e32a646296 100644 --- a/src/tsdb/src/tsdbRWHelper.c +++ b/src/tsdb/src/tsdbRWHelper.c @@ -414,6 +414,7 @@ int tsdbWriteCompInfo(SRWHelper *pHelper) { ASSERT((pIdx->len - sizeof(SCompInfo) - sizeof(TSCKSUM)) % sizeof(SCompBlock) == 0); taosCalcChecksumAppend(0, (uint8_t *)pHelper->pCompInfo, pIdx->len); pIdx->offset = lseek(pHelper->files.nHeadF.fd, 0, SEEK_END); + pIdx->uid = pHelper->tableInfo.uid; if (pIdx->offset < 0) return -1; ASSERT(pIdx->offset >= tsizeof(pHelper->pCompIdx)); diff --git a/src/util/inc/tcoding.h b/src/util/inc/tcoding.h new file mode 100644 index 0000000000..9f64f127e1 --- /dev/null +++ b/src/util/inc/tcoding.h @@ -0,0 +1,214 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +#ifndef _TD_CODING_H_ +#define _TD_CODING_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#include "tutil.h" + +// TODO: move this to a platform file +#define ENCODE_LIMIT (((uint8_t)1) << 7) +static const int32_t TNUMBER = 1; +#define IS_LITTLE_ENDIAN() (*(uint8_t *)(&TNUMBER) != 0) + +static FORCE_INLINE void *taosEncodeFixed16(void *buf, uint16_t value) { + if (IS_LITTLE_ENDIAN()) { + memcpy(buf, &value, sizeof(value)); + } else { + ((uint8_t *)buf)[0] = value & 0xff; + ((uint8_t *)buf)[1] = (value >> 8) & 0xff; + } + + return POINTER_SHIFT(buf, sizeof(value)); +} + +static FORCE_INLINE void *taosEncodeFixed32(void *buf, uint32_t value) { + if (IS_LITTLE_ENDIAN()) { + memcpy(buf, &value, sizeof(value)); + } else { + ((uint8_t *)buf)[0] = value & 0xff; + ((uint8_t *)buf)[1] = (value >> 8) & 0xff; + ((uint8_t *)buf)[2] = (value >> 16) & 0xff; + ((uint8_t *)buf)[3] = (value >> 24) & 0xff; + } + + return POINTER_SHIFT(buf, sizeof(value)); +} + +static FORCE_INLINE void *taosEncodeFixed64(void *buf, uint64_t value) { + if (IS_LITTLE_ENDIAN()) { + memcpy(buf, &value, sizeof(value)); + } else { + ((uint8_t *)buf)[0] = value & 0xff; + ((uint8_t *)buf)[1] = (value >> 8) & 0xff; + ((uint8_t *)buf)[2] = (value >> 16) & 0xff; + ((uint8_t *)buf)[3] = (value >> 24) & 0xff; + ((uint8_t *)buf)[4] = (value >> 32) & 0xff; + ((uint8_t *)buf)[5] = (value >> 40) & 0xff; + ((uint8_t *)buf)[6] = (value >> 48) & 0xff; + ((uint8_t *)buf)[7] = (value >> 56) & 0xff; + } + + return POINTER_SHIFT(buf, sizeof(value)); +} + +static FORCE_INLINE void *taosDecodeFixed16(void *buf, uint16_t *value) { + if (IS_LITTLE_ENDIAN()) { + memcpy(value, buf, sizeof(*value)); + } else { + ((uint8_t *)value)[1] = ((uint8_t *)buf)[0]; + ((uint8_t *)value)[0] = ((uint8_t *)buf)[1]; + } + + return POINTER_SHIFT(buf, sizeof(*value)); +} + +static FORCE_INLINE void *taosDecodeFixed32(void *buf, uint32_t *value) { + if (IS_LITTLE_ENDIAN()) { + memcpy(value, buf, sizeof(*value)); + } else { + ((uint8_t *)value)[3] = ((uint8_t *)buf)[0]; + ((uint8_t *)value)[2] = ((uint8_t *)buf)[1]; + ((uint8_t *)value)[1] = ((uint8_t *)buf)[2]; + ((uint8_t *)value)[0] = ((uint8_t *)buf)[3]; + } + + return POINTER_SHIFT(buf, sizeof(*value)); +} + +static FORCE_INLINE void *taosDecodeFixed64(void *buf, uint64_t *value) { + if (IS_LITTLE_ENDIAN()) { + memcpy(value, buf, sizeof(*value)); + } else { + ((uint8_t *)value)[7] = ((uint8_t *)buf)[0]; + ((uint8_t *)value)[6] = ((uint8_t *)buf)[1]; + ((uint8_t *)value)[5] = ((uint8_t *)buf)[2]; + ((uint8_t *)value)[4] = ((uint8_t *)buf)[3]; + ((uint8_t *)value)[3] = ((uint8_t *)buf)[4]; + ((uint8_t *)value)[2] = ((uint8_t *)buf)[5]; + ((uint8_t *)value)[1] = ((uint8_t *)buf)[6]; + ((uint8_t *)value)[0] = ((uint8_t *)buf)[7]; + } + + return POINTER_SHIFT(buf, sizeof(*value)); +} + +static FORCE_INLINE void *taosEncodeVariant16(void *buf, uint16_t value) { + int i = 0; + while (value >= ENCODE_LIMIT) { + ((uint8_t *)buf)[i] = (value | ENCODE_LIMIT); + value >>= 7; + i++; + ASSERT(i < 3); + } + + ((uint8_t *)buf)[i] = value; + + return POINTER_SHIFT(buf, i+1); +} + +static FORCE_INLINE void *taosEncodeVariant32(void *buf, uint32_t value) { + int i = 0; + while (value >= ENCODE_LIMIT) { + ((uint8_t *)buf)[i] = (value | ENCODE_LIMIT); + value >>= 7; + i++; + ASSERT(i < 5); + } + + ((uint8_t *)buf)[i] = value; + + return POINTER_SHIFT(buf, i + 1); +} + +static FORCE_INLINE void *taosEncodeVariant64(void *buf, uint64_t value) { + int i = 0; + while (value >= ENCODE_LIMIT) { + ((uint8_t *)buf)[i] = (value | ENCODE_LIMIT); + value >>= 7; + i++; + ASSERT(i < 10); + } + + ((uint8_t *)buf)[i] = value; + + return POINTER_SHIFT(buf, i + 1); +} + +static FORCE_INLINE void *taosDecodeVariant16(void *buf, uint16_t *value) { + int i = 0; + uint16_t tval = 0; + *value = 0; + while (i < 3) { + tval = (uint16_t)(((uint8_t *)buf)[i]); + if (tval < ENCODE_LIMIT) { + (*value) |= (tval << (7 * i)); + return POINTER_SHIFT(buf, i + 1); + } else { + (*value) |= ((tval & (ENCODE_LIMIT - 1)) << (7 * i)); + i++; + } + } + + return NULL; // error happened +} + +static FORCE_INLINE void *taosDecodeVariant32(void *buf, uint32_t *value) { + int i = 0; + uint32_t tval = 0; + *value = 0; + while (i < 5) { + tval = (uint32_t)(((uint8_t *)buf)[i]); + if (tval < ENCODE_LIMIT) { + (*value) |= (tval << (7 * i)); + return POINTER_SHIFT(buf, i + 1); + } else { + (*value) |= ((tval & (ENCODE_LIMIT - 1)) << (7 * i)); + i++; + } + } + + return NULL; // error happened +} + +static FORCE_INLINE void *taosDecodeVariant64(void *buf, uint64_t *value) { + int i = 0; + uint64_t tval = 0; + *value = 0; + while (i < 10) { + tval = (uint64_t)(((uint8_t *)buf)[i]); + if (tval < ENCODE_LIMIT) { + (*value) |= (tval << (7 * i)); + return POINTER_SHIFT(buf, i + 1); + } else { + (*value) |= ((tval & (ENCODE_LIMIT - 1)) << (7 * i)); + i++; + } + } + + return NULL; // error happened +} + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/src/util/inc/ttime.h b/src/util/inc/ttime.h index 34c241cbc0..61df65f345 100644 --- a/src/util/inc/ttime.h +++ b/src/util/inc/ttime.h @@ -22,22 +22,37 @@ extern "C" { #include #include +#include "tutil.h" //@return timestamp in second int32_t taosGetTimestampSec(); //@return timestamp in millisecond -int64_t taosGetTimestampMs(); +static FORCE_INLINE int64_t taosGetTimestampMs() { + struct timeval systemTime; + gettimeofday(&systemTime, NULL); + return (int64_t)systemTime.tv_sec * 1000L + (uint64_t)systemTime.tv_usec / 1000; +} //@return timestamp in microsecond -int64_t taosGetTimestampUs(); +static FORCE_INLINE int64_t taosGetTimestampUs() { + struct timeval systemTime; + gettimeofday(&systemTime, NULL); + return (int64_t)systemTime.tv_sec * 1000000L + (uint64_t)systemTime.tv_usec; +} /* * @return timestamp decided by global conf variable, tsTimePrecision * if precision == TSDB_TIME_PRECISION_MICRO, it returns timestamp in microsecond. * precision == TSDB_TIME_PRECISION_MILLI, it returns timestamp in millisecond. */ -int64_t taosGetTimestamp(int32_t precision); +static FORCE_INLINE int64_t taosGetTimestamp(int32_t precision) { + if (precision == TSDB_TIME_PRECISION_MICRO) { + return taosGetTimestampUs(); + } else { + return taosGetTimestampMs(); + } +} int32_t getTimestampInUsFromStr(char* token, int32_t tokenlen, int64_t* ts); diff --git a/src/util/inc/tutil.h b/src/util/inc/tutil.h index b03e0a1c5b..9528904882 100644 --- a/src/util/inc/tutil.h +++ b/src/util/inc/tutil.h @@ -45,7 +45,7 @@ extern "C" { #define tclose(x) taosCloseSocket(x) // Pointer p drift right by b bytes -#define POINTER_DRIFT(p, b) ((void *)((char *)(p) + (b))) +#define POINTER_SHIFT(p, b) ((void *)((char *)(p) + (b))) #ifndef NDEBUG #define ASSERT(x) assert(x) diff --git a/src/util/src/tqueue.c b/src/util/src/tqueue.c index c639452823..8a203ed917 100644 --- a/src/util/src/tqueue.c +++ b/src/util/src/tqueue.c @@ -41,6 +41,7 @@ typedef struct _taos_qset { pthread_mutex_t mutex; int32_t numOfQueues; int32_t numOfItems; + tsem_t sem; } STaosQset; typedef struct _taos_qall { @@ -59,6 +60,7 @@ taos_queue taosOpenQueue() { } pthread_mutex_init(&queue->mutex, NULL); + return queue; } @@ -79,7 +81,7 @@ void taosCloseQueue(taos_queue param) { } pthread_mutex_unlock(&queue->mutex); - + pthread_mutex_destroy(&queue->mutex); free(queue); } @@ -92,8 +94,6 @@ void *taosAllocateQitem(int size) { void taosFreeQitem(void *param) { if (param == NULL) return; - uTrace("item:%p is freed", param); - char *temp = (char *)param; temp -= sizeof(STaosQnode); free(temp); @@ -116,11 +116,12 @@ int taosWriteQitem(taos_queue param, int type, void *item) { queue->numOfItems++; if (queue->qset) atomic_add_fetch_32(&queue->qset->numOfItems, 1); - uTrace("item:%p is put into queue:%p, type:%d items:%d", item, queue, type, queue->numOfItems); pthread_mutex_unlock(&queue->mutex); + if (queue->qset) tsem_post(&queue->qset->sem); + return 0; } @@ -141,7 +142,7 @@ int taosReadQitem(taos_queue param, int *type, void **pitem) { queue->numOfItems--; if (queue->qset) atomic_sub_fetch_32(&queue->qset->numOfItems, 1); code = 1; - //uTrace("item:%p is read out from queue, items:%d", *pitem, queue->numOfItems); + uTrace("item:%p is read out from queue, items:%d", *pitem, queue->numOfItems); } pthread_mutex_unlock(&queue->mutex); @@ -217,12 +218,15 @@ taos_qset taosOpenQset() { } pthread_mutex_init(&qset->mutex, NULL); + tsem_init(&qset->sem, 0, 0); return qset; } void taosCloseQset(taos_qset param) { STaosQset *qset = (STaosQset *)param; + pthread_mutex_destroy(&qset->mutex); + tsem_destroy(&qset->sem); free(qset); } @@ -298,16 +302,17 @@ int taosReadQitemFromQset(taos_qset param, int *type, void **pitem, void **phand STaosQnode *pNode = NULL; int code = 0; + tsem_wait(&qset->sem); + pthread_mutex_lock(&qset->mutex); for(int i=0; inumOfQueues; ++i) { - //pthread_mutex_lock(&qset->mutex); if (qset->current == NULL) qset->current = qset->head; STaosQueue *queue = qset->current; if (queue) qset->current = queue->next; - //pthread_mutex_unlock(&qset->mutex); if (queue == NULL) break; + if (queue->head == NULL) continue; pthread_mutex_lock(&queue->mutex); @@ -339,16 +344,16 @@ int taosReadAllQitemsFromQset(taos_qset param, taos_qall p2, void **phandle) { STaosQall *qall = (STaosQall *)p2; int code = 0; + tsem_wait(&qset->sem); pthread_mutex_lock(&qset->mutex); for(int i=0; inumOfQueues; ++i) { - // pthread_mutex_lock(&qset->mutex); if (qset->current == NULL) qset->current = qset->head; queue = qset->current; if (queue) qset->current = queue->next; - // pthread_mutex_unlock(&qset->mutex); if (queue == NULL) break; + if (queue->head == NULL) continue; pthread_mutex_lock(&queue->mutex); @@ -364,6 +369,7 @@ int taosReadAllQitemsFromQset(taos_qset param, taos_qall p2, void **phandle) { queue->tail = NULL; queue->numOfItems = 0; atomic_sub_fetch_32(&qset->numOfItems, qall->numOfItems); + for (int j=1; jnumOfItems; ++j) tsem_wait(&qset->sem); } pthread_mutex_unlock(&queue->mutex); diff --git a/src/util/src/ttime.c b/src/util/src/ttime.c index 015cb19606..d34bf0e6ce 100644 --- a/src/util/src/ttime.c +++ b/src/util/src/ttime.c @@ -121,30 +121,6 @@ static int32_t parseLocaltime(char* timestr, int64_t* time, int32_t timePrec); int32_t taosGetTimestampSec() { return (int32_t)time(NULL); } -int64_t taosGetTimestampMs() { - struct timeval systemTime; - gettimeofday(&systemTime, NULL); - return (int64_t)systemTime.tv_sec * 1000L + (uint64_t)systemTime.tv_usec / 1000; -} - -int64_t taosGetTimestampUs() { - struct timeval systemTime; - gettimeofday(&systemTime, NULL); - return (int64_t)systemTime.tv_sec * 1000000L + (uint64_t)systemTime.tv_usec; -} - -/* - * If tsTimePrecision == 1, taosGetTimestamp will return timestamp in microsecond. - * Otherwise, it will return timestamp in millisecond. - */ -int64_t taosGetTimestamp(int32_t precision) { - if (precision == TSDB_TIME_PRECISION_MICRO) { - return taosGetTimestampUs(); - } else { - return taosGetTimestampMs(); - } -} - int32_t taosParseTime(char* timestr, int64_t* time, int32_t len, int32_t timePrec) { /* parse datatime string in with tz */ if (strnchr(timestr, 'T', len, false) != NULL) { diff --git a/src/util/tests/codingTests.cpp b/src/util/tests/codingTests.cpp new file mode 100644 index 0000000000..a72c7ef291 --- /dev/null +++ b/src/util/tests/codingTests.cpp @@ -0,0 +1,116 @@ +#include +#include +#include +#include + +#include "tcoding.h" + +static bool test_fixed_uint16(uint16_t value) { + char buf[20] = "\0"; + uint16_t value_check = 0; + + void *ptr1 = taosEncodeFixed16(static_cast(buf), value); + void *ptr2 = taosDecodeFixed16(static_cast(buf), &value_check); + + return ((ptr2 != NULL) && (value == value_check) && (ptr1 == ptr2)); +} + +static bool test_fixed_uint32(uint32_t value) { + char buf[20] = "\0"; + uint32_t value_check = 0; + + void *ptr1 = taosEncodeFixed32(static_cast(buf), value); + void *ptr2 = taosDecodeFixed32(static_cast(buf), &value_check); + + return ((ptr2 != NULL) && (value == value_check) && (ptr1 == ptr2)); +} + +static bool test_fixed_uint64(uint64_t value) { + char buf[20] = "\0"; + uint64_t value_check = 0; + + void *ptr1 = taosEncodeFixed64(static_cast(buf), value); + void *ptr2 = taosDecodeFixed64(static_cast(buf), &value_check); + + return ((ptr2 != NULL) && (value == value_check) && (ptr1 == ptr2)); +} + +static bool test_variant_uint16(uint16_t value) { + char buf[20] = "\0"; + uint16_t value_check = 0; + + void *ptr1 = taosEncodeVariant16(static_cast(buf), value); + void *ptr2 = taosDecodeVariant16(static_cast(buf), &value_check); + + return ((ptr2 != NULL) && (value == value_check) && (ptr1 == ptr2)); +} + +static bool test_variant_uint32(uint32_t value) { + char buf[20] = "\0"; + uint32_t value_check = 0; + + void *ptr1 = taosEncodeVariant32(static_cast(buf), value); + void *ptr2 = taosDecodeVariant32(static_cast(buf), &value_check); + + return ((ptr2 != NULL) && (value == value_check) && (ptr1 == ptr2)); +} + +static bool test_variant_uint64(uint64_t value) { + char buf[20] = "\0"; + uint64_t value_check = 0; + + void *ptr1 = taosEncodeVariant64(static_cast(buf), value); + void *ptr2 = taosDecodeVariant64(static_cast(buf), &value_check); + + return ((ptr2 != NULL) && (value == value_check) && (ptr1 == ptr2)); +} + +TEST(codingTest, fixed_encode_decode) { + srand(time(0)); + + for (uint16_t value = 0; value <= UINT16_MAX; value++) { + ASSERT_TRUE(test_fixed_uint16(value)); + if (value == UINT16_MAX) break; + } + + ASSERT_TRUE(test_fixed_uint32(0)); + ASSERT_TRUE(test_fixed_uint32(UINT32_MAX)); + + for (int i = 0; i < 1000000; i++) { + ASSERT_TRUE(test_fixed_uint32(rand())); + } + + std::mt19937_64 gen (std::random_device{}()); + + ASSERT_TRUE(test_fixed_uint64(0)); + ASSERT_TRUE(test_fixed_uint64(UINT64_MAX)); + for (int i = 0; i < 1000000; i++) { + ASSERT_TRUE(test_fixed_uint64(gen())); + } +} + +TEST(codingTest, variant_encode_decode) { + srand(time(0)); + + for (uint16_t value = 0; value <= UINT16_MAX; value++) { + ASSERT_TRUE(test_variant_uint16(value)); + if (value == UINT16_MAX) break; + } + + ASSERT_TRUE(test_variant_uint32(0)); + ASSERT_TRUE(test_variant_uint32(UINT32_MAX)); + + for (int i = 0; i < 5000000; i++) { + ASSERT_TRUE(test_variant_uint32(rand())); + } + + std::mt19937_64 gen (std::random_device{}()); + + ASSERT_TRUE(test_variant_uint64(0)); + ASSERT_TRUE(test_variant_uint64(UINT64_MAX)); + for (int i = 0; i < 5000000; i++) { + uint64_t value = gen(); + // printf("%ull\n", value); + ASSERT_TRUE(test_variant_uint64(value)); + } +} \ No newline at end of file diff --git a/src/vnode/src/vnodeMain.c b/src/vnode/src/vnodeMain.c index f9904f7fa8..2c914de20f 100644 --- a/src/vnode/src/vnodeMain.c +++ b/src/vnode/src/vnodeMain.c @@ -184,6 +184,7 @@ int32_t vnodeOpen(int32_t vnode, char *rootDir) { pVnode->status = TAOS_VN_STATUS_INIT; pVnode->refCount = 1; pVnode->version = 0; + pVnode->tsdbCfg.tsdbId = pVnode->vgId; taosAddIntHash(tsDnodeVnodesHash, pVnode->vgId, (char *)(&pVnode)); int32_t code = vnodeReadCfg(pVnode); diff --git a/src/vnode/src/vnodeWrite.c b/src/vnode/src/vnodeWrite.c index 2f49280cb6..3541fc15b6 100644 --- a/src/vnode/src/vnodeWrite.c +++ b/src/vnode/src/vnodeWrite.c @@ -111,11 +111,13 @@ static int32_t vnodeProcessCreateTableMsg(SVnodeObj *pVnode, void *pCont, SRspRe int32_t code = 0; dTrace("pVnode:%p vgId:%d, table:%s, start to create", pVnode, pVnode->vgId, pTable->tableId); - int16_t numOfColumns = htons(pTable->numOfColumns); - int16_t numOfTags = htons(pTable->numOfTags); - int32_t sid = htonl(pTable->sid); - uint64_t uid = htobe64(pTable->uid); - SSchema *pSchema = (SSchema *) pTable->data; + int16_t numOfColumns = htons(pTable->numOfColumns); + int16_t numOfTags = htons(pTable->numOfTags); + int32_t sid = htonl(pTable->sid); + uint64_t uid = htobe64(pTable->uid); + SSchema * pSchema = (SSchema *)pTable->data; + STSchema *pDestTagSchema = NULL; + SDataRow dataRow = NULL; int32_t totalCols = numOfColumns + numOfTags; @@ -130,7 +132,7 @@ static int32_t vnodeProcessCreateTableMsg(SVnodeObj *pVnode, void *pCont, SRspRe tsdbTableSetName(&tCfg, pTable->tableId, false); if (numOfTags != 0) { - STSchema *pDestTagSchema = tdNewSchema(numOfTags); + pDestTagSchema = tdNewSchema(numOfTags); for (int i = numOfColumns; i < totalCols; i++) { tdSchemaAddCol(pDestTagSchema, pSchema[i].type, htons(pSchema[i].colId), htons(pSchema[i].bytes)); } @@ -140,7 +142,7 @@ static int32_t vnodeProcessCreateTableMsg(SVnodeObj *pVnode, void *pCont, SRspRe char *pTagData = pTable->data + totalCols * sizeof(SSchema); int accumBytes = 0; - SDataRow dataRow = tdNewDataRowFromSchema(pDestTagSchema); + dataRow = tdNewDataRowFromSchema(pDestTagSchema); for (int i = 0; i < numOfTags; i++) { STColumn *pTCol = schemaColAt(pDestTagSchema, i); @@ -151,6 +153,8 @@ static int32_t vnodeProcessCreateTableMsg(SVnodeObj *pVnode, void *pCont, SRspRe } code = tsdbCreateTable(pVnode->tsdb, &tCfg); + tdFreeDataRow(dataRow); + tfree(pDestTagSchema); tfree(pDestSchema); dTrace("pVnode:%p vgId:%d, table:%s is created, result:%x", pVnode, pVnode->vgId, pTable->tableId, code); diff --git a/tests/pytest/insert/binary.py b/tests/pytest/insert/binary.py index 9989865f96..e254fb1438 100644 --- a/tests/pytest/insert/binary.py +++ b/tests/pytest/insert/binary.py @@ -27,8 +27,8 @@ class TDTestCase: tdSql.query('select speed from tb order by ts desc') tdLog.info('tdSql.checkRow(1)') tdSql.checkRows(1) - tdLog.info('tdSql.checkData(0, 0, 1234)') - tdSql.checkData(0, 0, 1234) + tdLog.info("tdSql.checkData(0, 0, '1234')") + tdSql.checkData(0, 0, '1234') tdLog.info('=============== step3') tdLog.info("insert into tb values (now+2a, '23456')") tdSql.execute("insert into tb values (now+2a, '23456')") @@ -37,8 +37,8 @@ class TDTestCase: tdLog.info('tdSql.checkRow(2)') tdSql.checkRows(2) tdLog.info('==> $data00') - tdLog.info('tdSql.checkData(0, 0, 23456)') - tdSql.checkData(0, 0, 23456) + tdLog.info("tdSql.checkData(0, 0, '23456')") + tdSql.checkData(0, 0, '23456') tdLog.info('=============== step4') tdLog.info("insert into tb values (now+3a, '345678')") tdSql.error("insert into tb values (now+3a, '345678')") @@ -49,8 +49,8 @@ class TDTestCase: tdLog.info('tdSql.checkRow(3)') tdSql.checkRows(3) tdLog.info('==> $data00') - tdLog.info('tdSql.checkData(0, 0, 34567)') - tdSql.checkData(0, 0, 34567) + tdLog.info("tdSql.checkData(0, 0, '34567')") + tdSql.checkData(0, 0, '34567') tdLog.info('drop database db') tdSql.execute('drop database db') tdLog.info('show databases') diff --git a/tests/pytest/util/sql.py b/tests/pytest/util/sql.py index a1f7dd2f64..0e7e186206 100644 --- a/tests/pytest/util/sql.py +++ b/tests/pytest/util/sql.py @@ -93,6 +93,9 @@ class TDSql: if data is None: tdLog.info("sql:%.40s, row:%d col:%d data:%s == expect:%s" % (self.sql, row, col, self.queryResult[row][col], data)) + elif isinstance(data, str): + tdLog.info("sql:%.40s, row:%d col:%d data:%s == expect:%s" % + (self.sql, row, col, self.queryResult[row][col], data)) elif isinstance(data, datetime.date): tdLog.info("sql:%.40s, row:%d col:%d data:%s == expect:%s" % (self.sql, row, col, self.queryResult[row][col], data)) diff --git a/tests/script/jenkins/basic.txt b/tests/script/jenkins/basic.txt new file mode 100644 index 0000000000..4c150b63bc --- /dev/null +++ b/tests/script/jenkins/basic.txt @@ -0,0 +1,96 @@ +cd ../../debug; cmake .. +#cd ../../debug; make clean +cd ../../debug; make + +cd ../../../debug; cmake .. +#cd ../../../debug; make clean +cd ../../../debug; make + + +#general + +./test.sh -f general/db/basic1.sim +./test.sh -f general/db/basic2.sim +./test.sh -f general/db/basic3.sim +./test.sh -f general/db/basic4.sim +./test.sh -f general/db/basic5.sim + +./test.sh -f general/table/autocreate.sim +./test.sh -f general/table/basic1.sim +./test.sh -f general/table/basic2.sim +./test.sh -f general/table/basic3.sim +./test.sh -f general/table/bigint.sim +./test.sh -f general/table/bool.sim +./test.sh -f general/table/column_name.sim +./test.sh -f general/table/column_num.sim +./test.sh -f general/table/db.table.sim +./test.sh -f general/table/double.sim +./test.sh -f general/table/float.sim +./test.sh -f general/table/int.sim +./test.sh -f general/table/smallint.sim +./test.sh -f general/table/tinyint.sim + +./test.sh -f general/user/basic1.sim +./test.sh -f general/user/pass_alter.sim +./test.sh -f general/user/pass_len.sim +./test.sh -f general/user/user_create.sim +./test.sh -f general/user/user_len.sim + + +# unique + +./test.sh -u -f unique/account/account_create.sim +./test.sh -u -f unique/account/account_delete.sim +./test.sh -u -f unique/account/account_len.sim +./test.sh -u -f unique/account/authority.sim +./test.sh -u -f unique/account/basic.sim +./test.sh -u -f unique/account/paras.sim +./test.sh -u -f unique/account/pass_alter.sim +./test.sh -u -f unique/account/pass_len.sim +./test.sh -u -f unique/account/usage.sim +./test.sh -u -f unique/account/user_create.sim +./test.sh -u -f unique/account/user_len.sim + +#big + +./test.sh -u -f unique/cluster/balance1.sim +./test.sh -u -f unique/cluster/balance2.sim +./test.sh -u -f unique/cluster/balance3.sim + +./test.sh -u -f unique/column/replica3.sim + +./test.sh -u -f unique/db/replica_add12.sim +./test.sh -u -f unique/db/replica_add13.sim +./test.sh -u -f unique/db/replica_add23.sim +./test.sh -u -f unique/db/replica_reduce21.sim +./test.sh -u -f unique/db/replica_reduce32.sim +./test.sh -u -f unique/db/replica_reduce31.sim +./test.sh -u -f unique/db/replica_part.sim + +./test.sh -u -f unique/dnode/balance1.sim +./test.sh -u -f unique/dnode/balance2.sim +./test.sh -u -f unique/dnode/balance3.sim +./test.sh -u -f unique/dnode/balancex.sim +./test.sh -u -f unique/dnode/offline1.sim +./test.sh -u -f unique/dnode/offline2.sim + +./test.sh -u -f unique/http/admin.sim + +#import + +#metrics + +./test.sh -u -f unique/mnode/mgmt22.sim +./test.sh -u -f unique/mnode/mgmt23.sim +./test.sh -u -f unique/mnode/mgmt24.sim +./test.sh -u -f unique/mnode/mgmt25.sim +./test.sh -u -f unique/mnode/mgmt26.sim +./test.sh -u -f unique/mnode/mgmt33.sim +./test.sh -u -f unique/mnode/mgmt34.sim + +#stream + +#table + +./test.sh -u -f unique/vnode/replica2_basic2.sim +./test.sh -u -f unique/vnode/replica3_basic.sim \ No newline at end of file diff --git a/tests/script/jenkins/basic1.txt b/tests/script/jenkins/basic1.txt deleted file mode 100644 index ef6d4e239b..0000000000 --- a/tests/script/jenkins/basic1.txt +++ /dev/null @@ -1,11 +0,0 @@ -./test.sh -f general/user/basic1.sim - -./test.sh -f general/db/basic1.sim -./test.sh -f general/db/basic2.sim -./test.sh -f general/db/basic3.sim -./test.sh -f general/db/basic4.sim -./test.sh -f general/db/basic5.sim - -./test.sh -f general/table/basic1.sim -./test.sh -f general/table/basic2.sim -./test.sh -f general/table/basic3.sim \ No newline at end of file diff --git a/tests/script/unique/account/account_create.sim b/tests/script/unique/account/account_create.sim index b6eb239052..6ada0b4910 100644 --- a/tests/script/unique/account/account_create.sim +++ b/tests/script/unique/account/account_create.sim @@ -76,4 +76,4 @@ if $rows != 1 then return -1 endi - +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/account/account_delete.sim b/tests/script/unique/account/account_delete.sim index 6d1c148698..039f381632 100644 --- a/tests/script/unique/account/account_delete.sim +++ b/tests/script/unique/account/account_delete.sim @@ -94,4 +94,6 @@ sql drop account oroot sql show accounts if $rows != 1 then return -1 -endi \ No newline at end of file +endi + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/account/account_len.sim b/tests/script/unique/account/account_len.sim index 06fb37bb5a..eaa5873a1f 100644 --- a/tests/script/unique/account/account_len.sim +++ b/tests/script/unique/account/account_len.sim @@ -88,3 +88,5 @@ sql show users if $rows != 3 then return -1 endi + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/account/authority.sim b/tests/script/unique/account/authority.sim index e6532458f0..ca9c68f57d 100644 --- a/tests/script/unique/account/authority.sim +++ b/tests/script/unique/account/authority.sim @@ -227,7 +227,8 @@ print ============= step6 sql close sql connect owrite sleep 2000 - +sql reset query cache +sleep 1000 sql create database d1 sql create database d3 sql create table d1.t1 (ts timestamp, i int) @@ -342,3 +343,5 @@ sql drop database d1 sql drop database d2 sql drop database d3 sql drop database d4 + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/account/basic.sim b/tests/script/unique/account/basic.sim index b2d8904cc6..d06f7a15d9 100644 --- a/tests/script/unique/account/basic.sim +++ b/tests/script/unique/account/basic.sim @@ -42,4 +42,4 @@ endi print $data00 $data01 $data02 print $data10 $data11 $data22 - +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/account/paras.sim b/tests/script/unique/account/paras.sim index d1d573d334..b2e540400c 100644 --- a/tests/script/unique/account/paras.sim +++ b/tests/script/unique/account/paras.sim @@ -109,3 +109,5 @@ endi if $data16 != 0.000/10.000 then return -1 endi + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/account/pass_alter.sim b/tests/script/unique/account/pass_alter.sim index 54ab8fbda8..12a237c972 100644 --- a/tests/script/unique/account/pass_alter.sim +++ b/tests/script/unique/account/pass_alter.sim @@ -112,3 +112,5 @@ sql alter user oroot pass 'taosdata' sql drop account oroot sql drop user read sql drop user write + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/account/pass_len.sim b/tests/script/unique/account/pass_len.sim index acf4f50c69..b78c881c7f 100644 --- a/tests/script/unique/account/pass_len.sim +++ b/tests/script/unique/account/pass_len.sim @@ -78,4 +78,4 @@ if $rows != 3 then return -1 endi - +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/account/testSuite.sim b/tests/script/unique/account/testSuite.sim index 38856196c2..9d4141cfe0 100644 --- a/tests/script/unique/account/testSuite.sim +++ b/tests/script/unique/account/testSuite.sim @@ -4,7 +4,7 @@ run unique/account/account_len.sim run unique/account/authority.sim run unique/account/basic.sim run unique/account/paras.sim -#run unique/account/pass_alter.sim +run unique/account/pass_alter.sim run unique/account/pass_len.sim run unique/account/usage.sim run unique/account/user_create.sim diff --git a/tests/script/unique/account/usage.sim b/tests/script/unique/account/usage.sim index af904815a0..f022380ac4 100644 --- a/tests/script/unique/account/usage.sim +++ b/tests/script/unique/account/usage.sim @@ -54,4 +54,6 @@ if $data05 != 0/10 then endi print =============== check grant -sql_error create database d6 \ No newline at end of file +sql_error create database d6 + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/account/user_create.sim b/tests/script/unique/account/user_create.sim index bc4a8f6e8e..ae15f8e02b 100644 --- a/tests/script/unique/account/user_create.sim +++ b/tests/script/unique/account/user_create.sim @@ -81,7 +81,4 @@ step42: sql drop user read - - - - +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/account/user_len.sim b/tests/script/unique/account/user_len.sim index 0e25f554e0..2122e7bd3f 100644 --- a/tests/script/unique/account/user_len.sim +++ b/tests/script/unique/account/user_len.sim @@ -89,3 +89,5 @@ sql show accounts if $rows != 1 then return -1 endi + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/big/balance.sim b/tests/script/unique/big/balance.sim index 3ae30f283d..270c3810a7 100644 --- a/tests/script/unique/big/balance.sim +++ b/tests/script/unique/big/balance.sim @@ -1,9 +1,3 @@ - - - - - - system sh/stop_dnodes.sh system sh/deploy.sh -n dnode1 -i 1 system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4 diff --git a/tests/script/unique/cluster/balance1.sim b/tests/script/unique/cluster/balance1.sim index a7113b4535..638febd3db 100644 --- a/tests/script/unique/cluster/balance1.sim +++ b/tests/script/unique/cluster/balance1.sim @@ -92,7 +92,7 @@ $x = 0 show2: $x = $x + 1 sleep 2000 - if $x == 30 then + if $x == 20 then return -1 endi sql show dnodes -x show2 @@ -134,7 +134,7 @@ $x = 0 show4: $x = $x + 1 sleep 2000 - if $x == 30 then + if $x == 20 then return -1 endi sql show dnodes -x show4 @@ -442,19 +442,24 @@ sql reset query cache sleep 1000 sql use c_b1_d1 -sql select * from c_b1_t1 +sql select * from c_b1_d1.c_b1_t1 +print $rows +print $data01 $data11 $data21 $data31 $data41 if $rows != 5 then return -1 endi sql use c_b1_d2 -sql select * from c_b1_t2 -if $rows == 6 then +sql select * from c_b1_d2.c_b1_t2 +print $rows +print $data01 $data11 $data21 $data31 $data41 +if $rows != 6 then return -1 endi sql use c_b1_d3 -sql select * from c_b1_t3 order by t desc +sql select * from c_b1_d3.c_b1_t3 order by t desc +print $rows print $data01 $data11 $data21 $data31 $data41 if $rows != 6 then return -1 @@ -464,11 +469,13 @@ if $data01 != 36 then endi sql use c_b1_d4 -sql select * from c_b1_t4 order by t desc +sql select * from c_b1_d4.c_b1_t4 order by t desc +print $rows print $data01 $data11 $data21 $data31 $data41 sql use c_b1_d5 -sql select * from c_b1_t5 order by t desc +sql select * from c_b1_d5.c_b1_t5 order by t desc +print $rows print $data01 $data11 $data21 $data31 $data41 if $data01 != 51 then return -1 @@ -487,7 +494,8 @@ if $data41 != 55 then endi sql use c_b1_d6 -sql select * from c_b1_t6 order by t desc +sql select * from c_b1_d6.c_b1_t6 order by t desc +print $rows print $data01 $data11 $data21 $data31 $data41 if $data01 != 61 then return -1 @@ -506,7 +514,8 @@ if $data41 != 65 then endi sql use c_b1_d7 -sql select * from c_b1_t7 order by t desc +sql select * from c_b1_d7.c_b1_t7 order by t desc +print $rows print $data01 $data11 $data21 $data31 $data41 if $data01 != 71 then return -1 @@ -525,7 +534,8 @@ if $data41 != 75 then endi sql use c_b1_d8 -sql select * from c_b1_t8 order by t desc +sql select * from c_b1_d8.c_b1_t8 order by t desc +print $rows print $data01 $data11 $data21 $data31 $data41 if $data01 != 81 then return -1 @@ -543,11 +553,12 @@ if $data41 != 85 then return -1 endi -print ============================================ over -system sh/exec_up.sh -n dnode2 -s stop -x SIGINT -system sh/exec_up.sh -n dnode3 -s stop -x SIGINT -system sh/exec_up.sh -n dnode4 -s stop -x SIGINT -system sh/exec_up.sh -n dnode5 -s stop -x SIGINT - - - +print ============================================ over= +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/cluster/balance1_bug.sim b/tests/script/unique/cluster/balance1_bug.sim deleted file mode 100644 index d9f903d55e..0000000000 --- a/tests/script/unique/cluster/balance1_bug.sim +++ /dev/null @@ -1,789 +0,0 @@ -system sh/stop_dnodes.sh -system sh/deploy.sh -n dnode1 -i 1 -system sh/deploy.sh -n dnode2 -i 2 -system sh/deploy.sh -n dnode3 -i 3 -system sh/deploy.sh -n dnode4 -i 4 - -system sh/cfg.sh -n dnode1 -c numOfMPeers -v 3 -system sh/cfg.sh -n dnode2 -c numOfMPeers -v 3 -system sh/cfg.sh -n dnode3 -c numOfMPeers -v 3 -system sh/cfg.sh -n dnode4 -c numOfMPeers -v 3 - -system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4 -system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4 -system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4 -system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4 - -system sh/cfg.sh -n dnode1 -c clog -v 1 -system sh/cfg.sh -n dnode2 -c clog -v 1 -system sh/cfg.sh -n dnode3 -c clog -v 1 -system sh/cfg.sh -n dnode4 -c clog -v 1 - -system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 0 -system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 0 -system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 0 -system sh/cfg.sh -n dnode4 -c mgmtEqualVnodeNum -v 0 - -print ============== step1 -print ========= start dnode1 -system sh/exec_up.sh -n dnode1 -s start -sql connect - -sql create database c_b1_d1 tables 4 -sql use c_b1_d1 - -sql create table c_b1_t1 (t timestamp, i int) -sql insert into c_b1_t1 values(now+1s, 15) -sql insert into c_b1_t1 values(now+2s, 14) -sql insert into c_b1_t1 values(now+2s, 13) -sql insert into c_b1_t1 values(now+3s, 12) -sql insert into c_b1_t1 values(now+4s, 11) - -sql create database c_b1_d2 tables 4 -sql use c_b1_d2 -sql create table c_b1_t2 (t timestamp, i int) -sql insert into c_b1_t2 values(now+1s, 25) -sql insert into c_b1_t2 values(now+2s, 24) -sql insert into c_b1_t2 values(now+3s, 23) -sql insert into c_b1_t2 values(now+4s, 22) -sql insert into c_b1_t2 values(now+5s, 21) - -sql show dnodes -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes - -if $dnode1Vnodes != 2 then - return -1 -endi -if $dnode2Vnodes != null then - return -1 -endi - -print ============================== step2 -print ========= start dnode2 -sleep 2000 -sql create dnode $hostname2 -system sh/exec_up.sh -n dnode2 -s start -sleep 5000 - -$x = 0 -show2: - $x = $x + 1 - sleep 2000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show2 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes - -if $dnode1Vnodes != 3 then - goto show2 -endi -if $dnode2Vnodes != 3 then - goto show2 -endi - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -print ============================== step3 -print ========= add db3 -sql create database c_b1_d3 tables 4 -sql use c_b1_d3 -sql create table c_b1_t3 (t timestamp, i int) -sql insert into c_b1_t3 values(now+1s, 35) -sql insert into c_b1_t3 values(now+2s, 34) -sql insert into c_b1_t3 values(now+3s, 33) -sql insert into c_b1_t3 values(now+4s, 32) -sql insert into c_b1_t3 values(now+5s, 31) - -print ============================== step4 -print ========= drop dnode2 -sql drop dnode $hostname2 -sleep 9000 - -$x = 0 -show4: - $x = $x + 1 - sleep 2000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show4 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes - -if $dnode1Vnodes != 1 then - goto show4 -endi -if $dnode2Vnodes != null then - goto show4 -endi - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -print ============================== step5 -print ========= add dnode2 -system sh/exec_up.sh -n dnode2 -s stop -x SIGINT -sleep 5000 -system sh/exec_up.sh -n dnode2 -s start -sql create dnode $hostname2 -sleep 9000 - -$x = 0 -show5: - $x = $x + 1 - sleep 2000 - if $x == 20 then - return -1 - endi -sql show dnodes -x show5 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes - -if $dnode1Vnodes != 2 then - goto show5 -endi -if $dnode2Vnodes != 3 then - goto show5 -endi - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -print ============================== step6 -print ========= drop dnode1 -system sh/exec_up.sh -n dnode1 -s stop -x SIGINT -print stop dnode1 and sleep 10000 -sleep 10000 - -sql drop dnode $hostname1 -print drop dnode1 and sleep 9000 -sleep 9000 - -$x = 0 -show6: - $x = $x + 1 - sleep 2000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show6 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes - -if $dnode1Vnodes != null then - goto show6 -endi -if $dnode2Vnodes != 1 then - goto show6 -endi - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -print ============================== step7 -print ========= add dnode1 -sql create dnode $hostname1 -sleep 23000 -system sh/exec_up.sh -n dnode1 -s start -sleep 14000 - -$x = 0 -show7: - $x = $x + 1 - sleep 2000 - if $x == 20 then - return -1 - endi -sql show dnodes -x show7 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes - -if $dnode1Vnodes != 3 then - goto show7 -endi -if $dnode2Vnodes != 2 then - goto show7 -endi - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -print ============================== step8 -print ========= drop dnode2 -system sh/exec_up.sh -n dnode2 -s stop -x SIGINT -print stop dnode2 and sleep 10000 -sleep 20000 -sql drop dnode $hostname2 -print drop dnode2 and sleep 9000 -sleep 19000 - -$x = 0 -show8: - $x = $x + 1 - sleep 2000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show8 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes - -if $dnode1Vnodes != 1 then - goto show8 -endi -if $dnode2Vnodes != null then - goto show8 -endi - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -if $dnode1Role != master then - return -1 -endi - -print ============================== step9 -print ========= add dnode2 -sql create dnode $hostname2 -system sh/exec_up.sh -n dnode2 -s start -sleep 9000 - -$x = 0 -show9: - $x = $x + 1 - sleep 2000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show9 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes - -if $dnode1Vnodes != 2 then - goto show9 -endi -if $dnode2Vnodes != 3 then - goto show9 -endi - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -print ============================== step10 -print ========= add db4 -sql create database c_b1_d4 tables 4 -sql use c_b1_d4 -sql create table c_b1_t4 (t timestamp, i int) -sql insert into c_b1_t4 values(now+1s, 45) -sql insert into c_b1_t4 values(now+2s, 44) -sql insert into c_b1_t4 values(now+3s, 43) -sql insert into c_b1_t4 values(now+4s, 42) -sql insert into c_b1_t4 values(now+5s, 41) - -$x = 0 -show10: - $x = $x + 1 - sleep 2000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show10 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes - -if $dnode1Vnodes != 2 then - goto show10 -endi -if $dnode2Vnodes != 2 then - goto show10 -endi - -sql use c_b1_d3 -sql insert into c_b1_t3 values(now+1s, 35) - -sql use c_b1_d2 -sql insert into c_b1_t2 values(now+1s, 25) - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role - -if $dnode1Role != master then - return -1 -endi - -print ============================== step11 -print ========= drop dnode2 -sleep 2000 -sql drop dnode $hostname2 -sleep 9000 - -$x = 0 -show11: - $x = $x + 1 - sleep 2000 - if $x == 20 then - return -1 - endi -sql show dnodes -x show11 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes - -if $dnode1Vnodes != 0 then - goto show11 -endi -if $dnode2Vnodes != null then - goto show11 -endi - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -system sh/exec_up.sh -n dnode2 -s stop -x SIGINT - -print ============================== step12 -print ========= add db5 -sql create database c_b1_d5 tables 4 -sql use c_b1_d5 -sql create table c_b1_t5 (t timestamp, i int) -x error3 -print no enough vnodes, but create success -return -1 -error3: - -print ============================== step13 -print ========= add dnode2 -sql create dnode $hostname2 -system sh/exec_up.sh -n dnode2 -s start -sleep 9000 - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -sql use c_b1_d5; -$x = 0 -create5: - $x = $x + 1 - sleep 1000 - if $x == 50 then - return -1 - endi -sql create table c_b1_t5 (t timestamp, i int) -x create5 -sql insert into c_b1_t5 values(now+1s, 55) -sql insert into c_b1_t5 values(now+2s, 54) -sql insert into c_b1_t5 values(now+3s, 53) -sql insert into c_b1_t5 values(now+4s, 52) -sql insert into c_b1_t5 values(now+5s, 51) - -sql create database c_b1_d6 -sql use c_b1_d6 -$x = 0 -create6: - $x = $x + 1 - sleep 1000 - if $x == 50 then - return -1 - endi -sql create table c_b1_t6 (t timestamp, i int) -x create6 -sql insert into c_b1_t6 values(now+1s, 65) -sql insert into c_b1_t6 values(now+2s, 64) -sql insert into c_b1_t6 values(now+3s, 63) -sql insert into c_b1_t6 values(now+4s, 62) -sql insert into c_b1_t6 values(now+5s, 61) - -sql show dnodes -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes - -#if $dnode1Vnodes != 1 then -# return -1 -#endi -#if $dnode2Vnodes != 1 then -# return -1 -#endi - -print ============================== step14 -print ========= add dnode3 - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -sleep 2000 -sql create dnode $hostname3 -system sh/exec_up.sh -n dnode3 -s start -sleep 15000 - -$x = 0 -show14: - $x = $x + 1 - sleep 2000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show14 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes - -if $dnode1Vnodes != 2 then - goto show14 -endi -if $dnode2Vnodes != 2 then - goto show14 -endi -if $dnode3Vnodes != 2 then - goto show14 -endi - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role - -print ============================== step15 -print ========= create db7 db8 - -sql create database c_b1_d7 tables 4 -sql use c_b1_d7 -sql create table c_b1_t7 (t timestamp, i int) -sql insert into c_b1_t7 values(now+1s, 75) -sql insert into c_b1_t7 values(now+2s, 74) -sql insert into c_b1_t7 values(now+3s, 73) -sql insert into c_b1_t7 values(now+4s, 72) -sql insert into c_b1_t7 values(now+5s, 71) - -sql create database c_b1_d8 -sql use c_b1_d8 -sql create table c_b1_t8 (t timestamp, i int) -sql insert into c_b1_t8 values(now+1s, 85) -sql insert into c_b1_t8 values(now+2s, 84) -sql insert into c_b1_t8 values(now+3s, 83) -sql insert into c_b1_t8 values(now+4s, 82) -sql insert into c_b1_t8 values(now+5s, 81) - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -print ========== add dnode4 -sleep 2000 -sql create dnode $hostname4 -print sql create dnode $hostname4 over -system sh/exec_up.sh -n dnode4 -s start -print sleep 12000 -sleep 12000 -print sleep 12000 over - -$x = 0 -show15: - $x = $x + 1 - sleep 2000 - if $x == 15 then - return -1 - endi -sql show dnodes -x show15 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes -$dnode4Vnodes = $data2_4 -print dnode4 $dnode4Vnodes - -if $dnode1Vnodes != 2 then - goto show15 -endi -if $dnode2Vnodes != 2 then - goto show15 -endi -if $dnode3Vnodes != 2 then - goto show15 -endi -if $dnode4Vnodes != 2 then - goto show15 -endi - -print ============================== step16 -print ========= drop dnode4, create db9 - -sql drop dnode $hostname4 -sleep 10000 -sql create database c_b1_d9 tables 4 -sql use c_b1_d9 -sql create table c_b1_t9 (t timestamp, i int) -sql insert into c_b1_t9 values(now+1s, 95) -sql insert into c_b1_t9 values(now+2s, 94) -sql insert into c_b1_t9 values(now+3s, 93) -sql insert into c_b1_t9 values(now+4s, 92) -sql insert into c_b1_t9 values(now+5s, 91) - -system sh/exec_up.sh -n dnode4 -s stop -x SIGINT - -$x = 0 -show16: - $x = $x + 1 - sleep 2000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show16 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes - -if $dnode1Vnodes != 1 then - goto show16 -endi -if $dnode2Vnodes != 1 then - goto show16 -endi -if $dnode3Vnodes != 1 then - goto show16 -endi - -print ============================== step17 -print ========= check data - -sleep 2000 - -sql use c_b1_d1 -sql select * from c_b1_t1 order by t desc -x s1 -s1: - -sql use c_b1_d2 -sql select * from c_b1_t2 order by t desc -x s2 -print $data01 $data11 $data21 $data31 $data41 - -if $data01 != 25 then - return -1 -endi - -if $data11 != 21 then - return -1 -endi -if $data21 != 22 then - return -1 -endi -if $data31 != 23 then - return -1 -endi -if $data41 != 24 then - return -1 -endi -s2: - -sql use c_b1_d3 -sql select * from c_b1_t3 order by t desc -x s3 -print $data01 $data11 $data21 $data31 $data41 -if $data01 != 35 then - return -1 -endi -s3: - -sql use c_b1_d4 -sql select * from c_b1_d4.c_b1_t4 order by t desc -x s4 -print $data01 $data11 $data21 $data31 $data41 -s4: - - -sql use c_b1_d5 -sql select * from c_b1_d5.c_b1_t5 order by t desc -x s5 -print $data01 $data11 $data21 $data31 $data41 -if $data01 != 51 then - return -1 -endi -if $data11 != 52 then - return -1 -endi -if $data21 != 53 then - return -1 -endi -if $data31 != 54 then - return -1 -endi -if $data41 != 55 then - return -1 -endi -s5: - -sql use c_b1_d6 -sql select * from c_b1_d6.c_b1_t6 order by t desc -x s6 -print $data01 $data11 $data21 $data31 $data41 -if $data01 != 61 then - return -1 -endi -if $data11 != 62 then - return -1 -endi -if $data21 != 63 then - return -1 -endi -if $data31 != 64 then - return -1 -endi -if $data41 != 65 then - return -1 -endi -s6: - -sql use c_b1_d7 -sql select * from c_b1_d7.c_b1_t7 order by t desc -x s7 -print $data01 $data11 $data21 $data31 $data41 -if $data01 != 71 then - return -1 -endi -if $data11 != 72 then - return -1 -endi -if $data21 != 73 then - return -1 -endi -if $data31 != 74 then - return -1 -endi -if $data41 != 75 then - return -1 -endi -s7: - -sql use c_b1_d9 -sql select * from c_b1_t9 order by t desc -x s8 -print $data01 $data11 $data21 $data31 $data41 -if $data01 != 91 then - return -1 -endi -if $data11 != 92 then - return -1 -endi -if $data21 != 93 then - return -1 -endi -if $data31 != 94 then - return -1 -endi -if $data41 != 95 then - return -1 -endi -s8: - -print ============================================ over -system sh/exec_up.sh -n dnode1 -s stop -x SIGINT -system sh/exec_up.sh -n dnode2 -s stop -x SIGINT -system sh/exec_up.sh -n dnode3 -s stop -x SIGINT -system sh/exec_up.sh -n dnode4 -s stop -x SIGINT - - - diff --git a/tests/script/unique/cluster/balance1_single.sim b/tests/script/unique/cluster/balance1_single.sim deleted file mode 100644 index be46186a59..0000000000 --- a/tests/script/unique/cluster/balance1_single.sim +++ /dev/null @@ -1,716 +0,0 @@ -system sh/stop_dnodes.sh -system sh/deploy.sh -n dnode1 -i 1 -system sh/deploy.sh -n dnode2 -i 2 -system sh/deploy.sh -n dnode3 -i 3 -system sh/deploy.sh -n dnode4 -i 4 -system sh/deploy.sh -n dnode5 -i 5 - -system sh/cfg.sh -n dnode1 -c numOfMPeers -v 1 -system sh/cfg.sh -n dnode2 -c numOfMPeers -v 1 -system sh/cfg.sh -n dnode3 -c numOfMPeers -v 1 -system sh/cfg.sh -n dnode4 -c numOfMPeers -v 1 -system sh/cfg.sh -n dnode5 -c numOfMPeers -v 1 - -system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4 -system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4 -system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4 -system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4 -system sh/cfg.sh -n dnode5 -c numOfTotalVnodes -v 4 - -system sh/cfg.sh -n dnode1 -c clog -v 1 -system sh/cfg.sh -n dnode2 -c clog -v 1 -system sh/cfg.sh -n dnode3 -c clog -v 1 -system sh/cfg.sh -n dnode4 -c clog -v 1 -system sh/cfg.sh -n dnode5 -c clog -v 1 - -system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 4 -system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 4 -system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 4 -system sh/cfg.sh -n dnode4 -c mgmtEqualVnodeNum -v 4 -system sh/cfg.sh -n dnode5 -c mgmtEqualVnodeNum -v 4 - -print ============== step1 -print ========= start dnode1 -system sh/exec_up.sh -n dnode1 -s start -sleep 3000 -sql connect -sql create dnode $hostname2 -system sh/exec_up.sh -n dnode2 -s start - -$x = 0 -show1: - $x = $x + 1 - sleep 1000 - if $x == 50 then - return -1 - endi -sql show dnodes -x show1 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode2Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode3Vnodes - -if $dnode1Vnodes != 4 then - goto show1 -endi -if $dnode2Vnodes != 4 then - goto show1 -endi -sleep 1000 - -sql create database c_b1_d1 tables 4 -sql use c_b1_d1 - -sql create table c_b1_t1 (t timestamp, i int) -sql insert into c_b1_t1 values(now+1s, 15) -sql insert into c_b1_t1 values(now+2s, 14) -sql insert into c_b1_t1 values(now+2s, 13) -sql insert into c_b1_t1 values(now+3s, 12) -sql insert into c_b1_t1 values(now+4s, 11) - -sql create database c_b1_d2 tables 4 -sql use c_b1_d2 -sql create table c_b1_t2 (t timestamp, i int) -sql insert into c_b1_t2 values(now+1s, 25) -sql insert into c_b1_t2 values(now+2s, 24) -sql insert into c_b1_t2 values(now+3s, 23) -sql insert into c_b1_t2 values(now+4s, 22) -sql insert into c_b1_t2 values(now+5s, 21) - -sql show dnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes - -if $dnode2Vnodes != 2 then - return -1 -endi -if $dnode3Vnodes != null then - return -1 -endi - -print ============================== step2 -print ========= start dnode3 -sleep 3000 -sql create dnode $hostname3 -system sh/exec_up.sh -n dnode3 -s start -sleep 8000 - -$x = 0 -show2: - $x = $x + 1 - sleep 1000 - if $x == 50 then - return -1 - endi -sql show dnodes -x show2 -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes - -if $dnode2Vnodes != 3 then - goto show2 -endi -if $dnode3Vnodes != 3 then - goto show2 -endi - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -print ============================== step3 -print ========= add db3 -sql create database c_b1_d3 tables 4 -sql use c_b1_d3 -sql create table c_b1_t3 (t timestamp, i int) -sql insert into c_b1_t3 values(now+1s, 35) -sql insert into c_b1_t3 values(now+2s, 34) -sql insert into c_b1_t3 values(now+3s, 33) -sql insert into c_b1_t3 values(now+4s, 32) -sql insert into c_b1_t3 values(now+5s, 31) - - -print ============================== step4 -print ========= drop dnode3 -sql drop dnode $hostname3 -sleep 9000 - -$x = 0 -show4: - $x = $x + 1 - sleep 1000 - if $x == 50 then - return -1 - endi -sql show dnodes -x show4 -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes - -if $dnode2Vnodes != 1 then - goto show4 -endi -if $dnode3Vnodes != null then - goto show4 -endi - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -print ============================== step5 -print ========= add dnode3 -system sh/exec_up.sh -n dnode3 -s stop -x SIGINT -sleep 5000 -system sh/exec_up.sh -n dnode3 -s start -sql create dnode $hostname3 -sleep 9000 - -$x = 0 -show5: - $x = $x + 1 - sleep 1000 - if $x == 50 then - return -1 - endi -sql show dnodes -x show5 -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes - -if $dnode2Vnodes != 2 then - goto show5 -endi -if $dnode3Vnodes != 3 then - goto show5 -endi - -print ============================== step6 -print ========= drop dnode2 -system sh/exec_up.sh -n dnode2 -s stop -x SIGINT -print stop dnode2 and sleep 10000 -sleep 10000 - -sql drop dnode $hostname2 -print drop dnode2 and sleep 9000 -sleep 9000 - -$x = 0 -show6: - $x = $x + 1 - sleep 2000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show6 -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes - -if $dnode2Vnodes != null then - goto show6 -endi -if $dnode3Vnodes != 1 then - goto show6 -endi - -#only c_b2_d2 has data, c_b1_d1 and c_b1_d3 is null - -print ============================== step7 -print ========= add dnode2 -sql create dnode $hostname2 -system sh/exec_up.sh -n dnode2 -s start -sleep 9000 - -$x = 0 -show7: - $x = $x + 1 - sleep 1000 - if $x == 50 then - return -1 - endi -sql show dnodes -x show7 -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes - -if $dnode2Vnodes != 3 then - goto show7 -endi -if $dnode3Vnodes != 2 then - goto show7 -endi - -print ============================== step8 -print ========= drop dnode3 -system sh/exec_up.sh -n dnode3 -s stop -x SIGINT -print stop dnode3 and sleep 10000 -sleep 10000 -sql drop dnode $hostname3 -print drop dnode3 and sleep 9000 -sleep 9000 - -$x = 0 -show8: - $x = $x + 1 - sleep 1000 - if $x == 50 then - return -1 - endi -sql show dnodes -x show8 -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes - -if $dnode2Vnodes != 1 then - goto show8 -endi -if $dnode3Vnodes != null then - goto show8 -endi - -print ============================== step9 -print ========= add dnode3 -sql create dnode $hostname3 -system sh/exec_up.sh -n dnode3 -s start -sleep 9000 - -$x = 0 -show9: - $x = $x + 1 - sleep 1000 - if $x == 50 then - return -1 - endi -sql show dnodes -x show9 -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes - -if $dnode2Vnodes != 2 then - goto show9 -endi -if $dnode3Vnodes != 3 then - goto show9 -endi - -print ============================== step10 -print ========= add db4 -sql create database c_b1_d4 tables 4 -sql use c_b1_d4 -sql create table c_b1_t4 (t timestamp, i int) -sql insert into c_b1_t4 values(now+1s, 45) -sql insert into c_b1_t4 values(now+2s, 44) -sql insert into c_b1_t4 values(now+3s, 43) -sql insert into c_b1_t4 values(now+4s, 42) -sql insert into c_b1_t4 values(now+5s, 41) - -$x = 0 -show10: - $x = $x + 1 - sleep 1000 - if $x == 50 then - return -1 - endi -sql show dnodes -x show10 -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes - -if $dnode2Vnodes != 2 then - goto show10 -endi -if $dnode3Vnodes != 2 then - goto show10 -endi - -sql use c_b1_d3 -sql insert into c_b1_t3 values(now+1s, 35) - -sql use c_b1_d2 -sql insert into c_b1_t2 values(now+1s, 25) - -print ============================== step11 -print ========= drop dnode3 -sql drop dnode $hostname3 -sleep 9000 - -$x = 0 -show11: - $x = $x + 1 - sleep 1000 - if $x == 50 then - return -1 - endi -sql show dnodes -x show11 -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes - -if $dnode2Vnodes != 0 then - goto show11 -endi -if $dnode3Vnodes != null then - goto show11 -endi - -system sh/exec_up.sh -n dnode3 -s stop -x SIGINT - -print ============================== step12 -print ========= add db5 -sql create database c_b1_d5 tables 4 -sql use c_b1_d5 - -print ============================== step13 -print ========= add dnode3 -sql create dnode $hostname3 -system sh/exec_up.sh -n dnode3 -s start -sleep 9000 - -sql use c_b1_d5; -$x = 0 -create5: - $x = $x + 1 - sleep 1000 - if $x == 50 then - return -1 - endi -sql create table c_b1_t5 (t timestamp, i int) -x create5 -sql insert into c_b1_t5 values(now+1s, 55) -sql insert into c_b1_t5 values(now+2s, 54) -sql insert into c_b1_t5 values(now+3s, 53) -sql insert into c_b1_t5 values(now+4s, 52) -sql insert into c_b1_t5 values(now+5s, 51) - -sql create database c_b1_d6 tables 4 -sql use c_b1_d6 -$x = 0 -create6: - $x = $x + 1 - sleep 1000 - if $x == 20 then - return -1 - endi -sql create table c_b1_t6 (t timestamp, i int) -x create6 -sql insert into c_b1_t6 values(now+1s, 65) -sql insert into c_b1_t6 values(now+2s, 64) -sql insert into c_b1_t6 values(now+3s, 63) -sql insert into c_b1_t6 values(now+4s, 62) -sql insert into c_b1_t6 values(now+5s, 61) - -sql show dnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes - -#if $dnode2Vnodes != 1 then -# return -1 -#endi -#if $dnode3Vnodes != 1 then -# return -1 -#endi - -print ============================== step14 -print ========= add dnode4 -sql create dnode $hostname4 -system sh/exec_up.sh -n dnode4 -s start -sleep 10000 - -$x = 0 -show14: - $x = $x + 1 - sleep 1000 - if $x == 50 then - return -1 - endi -sql show dnodes -x show14 -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes -$dnode4Vnodes = $data2_4 -print dnode4 $dnode4Vnodes - -if $dnode2Vnodes != 2 then - goto show14 -endi -if $dnode3Vnodes != 2 then - goto show14 -endi -if $dnode4Vnodes != 2 then - goto show14 -endi - -print ============================== step15 -print ========= create db7 db8 - -sql create database c_b1_d7 tables 4 -sql use c_b1_d7 -sql create table c_b1_t7 (t timestamp, i int) -sql insert into c_b1_t7 values(now+1s, 75) -sql insert into c_b1_t7 values(now+2s, 74) -sql insert into c_b1_t7 values(now+3s, 73) -sql insert into c_b1_t7 values(now+4s, 72) -sql insert into c_b1_t7 values(now+5s, 71) - -sql create database c_b1_d8 tables 4 -sql use c_b1_d8 -sql create table c_b1_t8 (t timestamp, i int) -sql insert into c_b1_t8 values(now+1s, 85) -sql insert into c_b1_t8 values(now+2s, 84) -sql insert into c_b1_t8 values(now+3s, 83) -sql insert into c_b1_t8 values(now+4s, 82) -sql insert into c_b1_t8 values(now+5s, 81) - - -print ========== add dnode5 -sql create dnode $hostname5 -print sql create dnode $hostname5 over -system sh/exec_up.sh -n dnode5 -s start -print sleep 12000 -sleep 12000 -print sleep 12000 over - -$x = 0 -show15: - $x = $x + 1 - sleep 1000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show15 -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes -$dnode4Vnodes = $data2_4 -print dnode4 $dnode4Vnodes -$dnode5Vnodes = $data2_5 -print dnode5 $dnode5Vnodes - -if $dnode2Vnodes != 2 then - goto show15 -endi -if $dnode3Vnodes != 2 then - goto show15 -endi -if $dnode4Vnodes != 2 then - goto show15 -endi -if $dnode5Vnodes != 2 then - goto show15 -endi - -print ============================== step16 -print ========= drop dnode5, create db9 - -sql drop dnode $hostname5 -sleep 10000 -sql create database c_b1_d9 tables 4 -sql use c_b1_d9 -sql create table c_b1_t9 (t timestamp, i int) -sql insert into c_b1_t9 values(now+1s, 95) -sql insert into c_b1_t9 values(now+2s, 94) -sql insert into c_b1_t9 values(now+3s, 93) -sql insert into c_b1_t9 values(now+4s, 92) -sql insert into c_b1_t9 values(now+5s, 91) - -system sh/exec_up.sh -n dnode5 -s stop -x SIGINT - -$x = 0 -show16: - $x = $x + 1 - sleep 1000 - if $x == 50 then - return -1 - endi -sql show dnodes -x show16 -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes -$dnode4Vnodes = $data2_4 -print dnode4 $dnode4Vnodes - -if $dnode2Vnodes != 1 then - goto show16 -endi -if $dnode3Vnodes != 1 then - goto show16 -endi -if $dnode4Vnodes != 1 then - goto show16 -endi - -print ============================== step17 -print ========= check data - -sql use c_b1_d1 -sql select * from c_b1_t1 -if $rows != 0 then - return -1 -endi - -sql use c_b1_d2 -sql select * from c_b1_t2 -if $rows != 6 then - return -1 -endi - -sql use c_b1_d3 -sql select * from c_b1_t3 order by t desc -print $data01 $data11 $data21 $data31 $data41 -if $rows != 1 then - return -1 -endi -if $data01 != 35 then - return -1 -endi - -sql use c_b1_d4 -sql select * from c_b1_t4 order by t desc -print $data01 $data11 $data21 $data31 $data41 -if $data01 != 41 then - return -1 -endi -if $data11 != 42 then - return -1 -endi -if $data21 != 43 then - return -1 -endi -if $data31 != 44 then - return -1 -endi -if $data41 != 45 then - return -1 -endi - -sql use c_b1_d5 -sql select * from c_b1_t5 order by t desc -print $data01 $data11 $data21 $data31 $data41 -if $data01 != 51 then - return -1 -endi -if $data11 != 52 then - return -1 -endi -if $data21 != 53 then - return -1 -endi -if $data31 != 54 then - return -1 -endi -if $data41 != 55 then - return -1 -endi - -sql use c_b1_d6 -sql select * from c_b1_t6 order by t desc -print $data01 $data11 $data21 $data31 $data41 -if $data01 != 61 then - return -1 -endi -if $data11 != 62 then - return -1 -endi -if $data21 != 63 then - return -1 -endi -if $data31 != 64 then - return -1 -endi -if $data41 != 65 then - return -1 -endi - -sql use c_b1_d7 -sql select * from c_b1_t7 order by t desc -print $data01 $data11 $data21 $data31 $data41 -if $data01 != 71 then - return -1 -endi -if $data11 != 72 then - return -1 -endi -if $data21 != 73 then - return -1 -endi -if $data31 != 74 then - return -1 -endi -if $data41 != 75 then - return -1 -endi - -sql use c_b1_d8 -sql select * from c_b1_t8 order by t desc -print $data01 $data11 $data21 $data31 $data41 -if $data01 != 81 then - return -1 -endi -if $data11 != 82 then - return -1 -endi -if $data21 != 83 then - return -1 -endi -if $data31 != 84 then - return -1 -endi -if $data41 != 85 then - return -1 -endi - -sql use c_b1_d9 -sql select * from c_b1_t9 order by t desc -print $data01 $data11 $data21 $data31 $data41 -if $data01 != 91 then - return -1 -endi -if $data11 != 92 then - return -1 -endi -if $data21 != 93 then - return -1 -endi -if $data31 != 94 then - return -1 -endi -if $data41 != 95 then - return -1 -endi - - -print ============================================ over -#system sh/exec_up.sh -n dnode2 -s stop -x SIGINT -#system sh/exec_up.sh -n dnode3 -s stop -x SIGINT -#system sh/exec_up.sh -n dnode4 -s stop -x SIGINT -#system sh/exec_up.sh -n dnode5 -s stop -x SIGINT - - - diff --git a/tests/script/unique/cluster/balance2.sim b/tests/script/unique/cluster/balance2.sim index 907b344140..10de862b7f 100644 --- a/tests/script/unique/cluster/balance2.sim +++ b/tests/script/unique/cluster/balance2.sim @@ -128,13 +128,13 @@ print dnode2 $dnode2Vnodes $dnode3Vnodes = $data2_3 print dnode3 $dnode3Vnodes -if $dnode1Vnodes != 1 then +if $dnode1Vnodes != 3 then goto show2 endi if $dnode2Vnodes != null then goto show2 endi -if $dnode3Vnodes != 1 then +if $dnode3Vnodes != 3 then goto show2 endi @@ -151,18 +151,9 @@ print dnode4 ==> $dnode4Role system sh/exec_up.sh -n dnode2 -s stop -x SIGINT print ============================== step3 -print ========= start dnode2 -sql create dnode $hostname2 - -sleep 3000 -system sh/deploy.sh -n dnode2 -i 2 -system sh/cfg.sh -n dnode2 -c numOfMPeers -v 3 -system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4 -system sh/cfg.sh -n dnode2 -c clog -v 1 -system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 0 -sleep 3000 - -system sh/exec_up.sh -n dnode2 -s start +print ========= start dnode4 +sql create dnode $hostname4 +system sh/exec_up.sh -n dnode4 -s start sleep 10000 $x = 0 @@ -175,15 +166,15 @@ show3: sql show dnodes -x show3 $dnode1Vnodes = $data2_1 print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes +$dnode4Vnodes = $data2_4 +print dnode4 $dnode4Vnodes $dnode3Vnodes = $data2_3 print dnode3 $dnode3Vnodes if $dnode1Vnodes != 2 then goto show3 endi -if $dnode2Vnodes != 2 then +if $dnode4Vnodes != 2 then goto show3 endi if $dnode3Vnodes != 2 then @@ -200,6 +191,20 @@ print dnode2 ==> $dnode2Role print dnode3 ==> $dnode3Role print dnode4 ==> $dnode4Role +if $dnode1Role != master then + return -1 +endi +if $dnode2Role != null then + return -1 +endi +if $dnode3Role != slave then + return -1 +endi + +if $dnode4Role != slave then + return -1 +endi + print ============================== step4 print ========= drop dnode3 sql drop dnode $hostname3 @@ -215,15 +220,15 @@ show4: sql show dnodes -x show4 $dnode1Vnodes = $data2_1 print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes +$dnode4Vnodes = $data2_4 +print dnode4 $dnode4Vnodes $dnode3Vnodes = $data2_3 print dnode3 $dnode3Vnodes -if $dnode1Vnodes != 1 then +if $dnode1Vnodes != 3 then goto show4 endi -if $dnode2Vnodes != 1 then +if $dnode4Vnodes != 3 then goto show4 endi if $dnode3Vnodes != null then @@ -240,21 +245,26 @@ print dnode2 ==> $dnode2Role print dnode3 ==> $dnode3Role print dnode4 ==> $dnode4Role +if $dnode1Role != master then + return -1 +endi +if $dnode2Role != null then + return -1 +endi +if $dnode3Role != null then + return -1 +endi + +if $dnode4Role != slave then + return -1 +endi + system sh/exec_up.sh -n dnode3 -s stop -x SIGINT print ============================== step5 print ========= start dnode3 -sql create dnode $hostname3 - -sleep 3000 -system sh/deploy.sh -n dnode3 -i 3 -system sh/cfg.sh -n dnode3 -c numOfMPeers -v 3 -system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4 -system sh/cfg.sh -n dnode3 -c clog -v 1 -system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 0 -sleep 3000 - -system sh/exec_up.sh -n dnode3 -s start +sql create dnode $hostname5 +system sh/exec_up.sh -n dnode5 -s start sleep 9000 $x = 0 @@ -267,33 +277,30 @@ show5: sql show dnodes -x show5 $dnode1Vnodes = $data2_1 print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes +$dnode4Vnodes = $data2_4 +print dnode4 $dnode4Vnodes +$dnode5Vnodes = $data2_5 +print dnode5 $dnode5Vnodes if $dnode1Vnodes != 2 then goto show5 endi -if $dnode2Vnodes != 2 then +if $dnode4Vnodes != 2 then goto show5 endi -if $dnode3Vnodes != 2 then +if $dnode5Vnodes != 2 then goto show5 endi sql show mnodes $dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 $dnode4Role = $data2_4 +$dnode5Role = $data2_5 print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role print dnode4 ==> $dnode4Role +print dnode5 ==> $dnode5Role print ============================== step6 -print ========= drop dnode1 system sh/exec_up.sh -n dnode1 -s stop -x SIGINT print stop dnode1 and sleep 10000 sleep 10000 @@ -302,6 +309,21 @@ sql drop dnode $hostname1 print drop dnode1 and sleep 9000 sleep 9000 +sql show mnodes +$dnode1Role = $data2_1 +$dnode4Role = $data2_4 +$dnode5Role = $data2_5 +print dnode1 ==> $dnode1Role +print dnode4 ==> $dnode4Role +print dnode5 ==> $dnode5Role + +if $dnode1Role != offline then + return -1 +endi + +print ============================== step6.1 +system sh/exec_up.sh -n dnode1 -s start + $x = 0 show6: $x = $x + 1 @@ -312,337 +334,38 @@ show6: sql show dnodes -x show6 $dnode1Vnodes = $data2_1 print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes +$dnode4Vnodes = $data2_4 +print dnode4 $dnode4Vnodes +$dnode5Vnodes = $data2_5 +print dnode5 $dnode5Vnodes if $dnode1Vnodes != null then goto show6 endi -if $dnode2Vnodes != 1 then +if $dnode4Vnodes != 3 then goto show6 endi -if $dnode3Vnodes != 1 then +if $dnode5Vnodes != 3 then goto show6 endi sql show mnodes $dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 $dnode4Role = $data2_4 +$dnode5Role = $data2_5 print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role print dnode4 ==> $dnode4Role +print dnode5 ==> $dnode5Role -print ============================== step7 -print ========= start dnode1 -sql create dnode $hostname1 - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -sleep 3000 -system sh/deploy.sh -n dnode1 -i 1 -system sh/cfg.sh -n dnode1 -c numOfMPeers -v 3 -system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4 -system sh/cfg.sh -n dnode1 -c clog -v 1 -system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 0 -sleep 3000 - -system sh/exec_up.sh -n dnode1 -s start -sleep 9000 - -$x = 0 - -show7: - sql show mnodes - $dnode1Role = $data2_1 - $dnode2Role = $data2_2 - $dnode3Role = $data2_3 - $dnode4Role = $data2_4 - print dnode1 ==> $dnode1Role - print dnode2 ==> $dnode2Role - print dnode3 ==> $dnode3Role - print dnode4 ==> $dnode4Role - - $x = $x + 1 - sleep 2000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show7 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes - -if $dnode1Vnodes != 2 then - goto show7 -endi -if $dnode2Vnodes != 2 then - goto show7 -endi -if $dnode3Vnodes != 2 then - goto show7 -endi - -print ============================== step8 -print ========= add db4 - -sql create database c_b2_d4 replica 2 tables 4 -sql use c_b2_d4 -sql create table c_b2_t4 (t timestamp, i int) -sql insert into c_b2_t4 values(1520000020045, 45) -sql insert into c_b2_t4 values(1520000021044, 44) -sql insert into c_b2_t4 values(1520000022043, 43) -sql insert into c_b2_t4 values(1520000023042, 42) -sql insert into c_b2_t4 values(1520000024041, 41) - -sql create dnode $hostname4 -system sh/exec_up.sh -n dnode4 -s start -sleep 9000 - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -$x = 0 -show8: - $x = $x + 1 - sleep 2000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show8 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes -$dnode4Vnodes = $data2_4 -print dnode4 $dnode4Vnodes - -if $dnode1Vnodes != 2 then - goto show8 -endi -if $dnode2Vnodes != 2 then - goto show8 -endi -if $dnode3Vnodes != 2 then - goto show8 -endi -if $dnode4Vnodes != 2 then - goto show8 -endi - -print ============================== step9 -print ========= drop dnode1.4 -sql drop dnode $hostname1 -sql drop dnode $hostname4 -sleep 10000 - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -$x = 0 -show9: - $x = $x + 1 - sleep 2000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show9 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes -$dnode4Vnodes = $data2_4 -print dnode4 $dnode4Vnodes - -if $dnode1Vnodes != null then - goto show9 -endi -if $dnode2Vnodes != 0 then - goto show9 -endi -if $dnode3Vnodes != 0 then - goto show9 -endi -if $dnode4Vnodes != null then - goto show9 -endi - -system sh/exec_up.sh -n dnode1 -s stop -x SIGINT -system sh/exec_up.sh -n dnode4 -s stop -x SIGINT - -print ============================== step10 -print ========= start dnode1.4 -sql create dnode $hostname1 -sql create dnode $hostname4 - -sleep 3000 -system sh/deploy.sh -n dnode1 -i 1 -ssystem sh/cfg.sh -n dnode1 -c numOfMPeers -v 3 -system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4 -system sh/cfg.sh -n dnode1 -c clog -v 1 -system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 0 -sleep 3000 - -sleep 3000 -system sh/deploy.sh -n dnode4 -i 4 -system sh/cfg.sh -n dnode4 -c numOfMPeers -v 3 -system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4 -system sh/cfg.sh -n dnode4 -c clog -v 1 -system sh/cfg.sh -n dnode4 -c mgmtEqualVnodeNum -v 0 -sleep 3000 - -system sh/exec_up.sh -n dnode1 -s start -system sh/exec_up.sh -n dnode4 -s start -sleep 10000 - -$x = 0 -show10: - sql show mnodes - $dnode1Role = $data2_1 - $dnode2Role = $data2_2 - $dnode3Role = $data2_3 - $dnode4Role = $data2_4 - print dnode1 ==> $dnode1Role - print dnode2 ==> $dnode2Role - print dnode3 ==> $dnode3Role - print dnode4 ==> $dnode4Role - - $x = $x + 1 - sleep 2000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show10 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes -$dnode4Vnodes = $data2_4 -print dnode4 $dnode4Vnodes - -if $dnode1Vnodes != 2 then - goto show10 -endi -if $dnode2Vnodes != 2 then - goto show10 -endi -if $dnode3Vnodes != 2 then - goto show10 -endi -if $dnode4Vnodes != 2 then - goto show10 -endi - -print ============================== step11 - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role - -sql create database c_b2_d5 replica 2 tables 4 -sql use c_b2_d5; -sql create table c_b2_t5 (t timestamp, i int) -sql insert into c_b2_t5 values(1520000020055, 55) -sql insert into c_b2_t5 values(1520000021054, 54) -sql insert into c_b2_t5 values(1520000022053, 53) -sql insert into c_b2_t5 values(1520000023052, 52) -sql insert into c_b2_t5 values(1520000024051, 51) - -sql create database c_b2_d6 replica 2 tables 4 -sql use c_b2_d6 -sql create table c_b2_t6 (t timestamp, i int) -sql insert into c_b2_t6 values(1520000020065, 65) -sql insert into c_b2_t6 values(1520000021064, 64) -sql insert into c_b2_t6 values(1520000022063, 63) -sql insert into c_b2_t6 values(1520000023062, 62) -sql insert into c_b2_t6 values(1520000024061, 61) - -$x = 0 -show11: - $x = $x + 1 - sleep 2000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show11 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes -$dnode4Vnodes = $data2_4 -print dnode4 $dnode4Vnodes - -if $dnode1Vnodes != 1 then - goto show11 -endi -if $dnode2Vnodes != 1 then - goto show11 -endi -if $dnode3Vnodes != 1 then - goto show11 -endi -if $dnode4Vnodes != 1 then - goto show11 -endi - -sql show mnodes -$dnode1Role = $data2_1 -$dnode2Role = $data2_2 -$dnode3Role = $data2_3 -$dnode4Role = $data2_4 -print dnode1 ==> $dnode1Role -print dnode2 ==> $dnode2Role -print dnode3 ==> $dnode3Role -print dnode4 ==> $dnode4Role +#system sh/exec_up.sh -n dnode1 -s stop -x SIGINT print ============================== step12 print ========= check data -sql use c_b2_d1 -sql select * from c_b2_t1 order by t desc +sql reset query cache +sleep 1000 + +sql select * from c_b2_d1.c_b2_t1 order by t desc print $data01 $data11 $data21 $data31 $data41 if $data01 != 11 then return -1 @@ -660,28 +383,26 @@ if $data41 != 15 then return -1 endi -sql use c_b2_d2 -sql select * from c_b2_t2 order by t desc +sql select * from c_b2_d2.c_b2_t2 order by t desc print $data01 $data11 $data21 $data31 $data41 -#if $data01 != 21 then -# return -1 -#endi -#if $data11 != 22 then -# return -1 -#endi -#if $data21 != 23 then -# return -1 -#endi -#if $data31 != 24 then -# return -1 -#endi -#if $data41 != 25 then -# return -1 -#endi +if $data01 != 21 then + return -1 +endi +if $data11 != 22 then + return -1 +endi +if $data21 != 23 then + return -1 +endi +if $data31 != 24 then + return -1 +endi +if $data41 != 25 then + return -1 +endi -sql use c_b2_d3 -sql select * from c_b2_t3 order by t desc +sql select * from c_b2_d3.c_b2_t3 order by t desc print $data01 $data11 $data21 $data31 $data41 if $data01 != 31 then return -1 @@ -699,64 +420,6 @@ if $data41 != 35 then return -1 endi -sql use c_b2_d4 -sql select * from c_b2_t4 order by t desc -print $data01 $data11 $data21 $data31 $data41 -if $data01 != 41 then - return -1 -endi -if $data11 != 42 then - return -1 -endi -if $data21 != 43 then - return -1 -endi -if $data31 != 44 then - return -1 -endi -if $data41 != 45 then - return -1 -endi - -sql use c_b2_d5 -sql select * from c_b2_t5 order by t desc -print $data01 $data11 $data21 $data31 $data41 -if $data01 != 51 then - return -1 -endi -if $data11 != 52 then - return -1 -endi -if $data21 != 53 then - return -1 -endi -if $data31 != 54 then - return -1 -endi -if $data41 != 55 then - return -1 -endi - -sql use c_b2_d6 -sql select * from c_b2_t6 order by t desc -print $data01 $data11 $data21 $data31 $data41 -if $data01 != 61 then - return -1 -endi -if $data11 != 62 then - return -1 -endi -if $data21 != 63 then - return -1 -endi -if $data31 != 64 then - return -1 -endi -if $data41 != 65 then - return -1 -endi - - print ============================================ over system sh/exec_up.sh -n dnode1 -s stop -x SIGINT system sh/exec_up.sh -n dnode2 -s stop -x SIGINT @@ -766,5 +429,3 @@ system sh/exec_up.sh -n dnode5 -s stop -x SIGINT system sh/exec_up.sh -n dnode6 -s stop -x SIGINT system sh/exec_up.sh -n dnode7 -s stop -x SIGINT system sh/exec_up.sh -n dnode8 -s stop -x SIGINT - - diff --git a/tests/script/unique/cluster/balance3.sim b/tests/script/unique/cluster/balance3.sim index 76ea380e8e..cb453151e4 100644 --- a/tests/script/unique/cluster/balance3.sim +++ b/tests/script/unique/cluster/balance3.sim @@ -1,14 +1,5 @@ system sh/stop_dnodes.sh - - - - - - - - - system sh/deploy.sh -n dnode1 -i 1 system sh/deploy.sh -n dnode2 -i 2 system sh/deploy.sh -n dnode3 -i 3 @@ -97,7 +88,7 @@ $x = 0 show1: $x = $x + 1 sleep 2000 - if $x == 30 then + if $x == 20 then return -1 endi sql show dnodes -x show1 @@ -110,13 +101,13 @@ print dnode3 $dnode3Vnodes $dnode4Vnodes = $data2_4 print dnode4 $dnode4Vnodes -if $dnode1Vnodes != 1 then +if $dnode1Vnodes != 3 then goto show1 endi -if $dnode2Vnodes != 1 then +if $dnode2Vnodes != 3 then goto show1 endi -if $dnode3Vnodes != 1 then +if $dnode3Vnodes != 3 then goto show1 endi if $dnode4Vnodes != null then @@ -133,7 +124,7 @@ $x = 0 show2: $x = $x + 1 sleep 2000 - if $x == 30 then + if $x == 20 then return -1 endi sql show dnodes -x show2 @@ -159,7 +150,7 @@ $x = 0 show3: $x = $x + 1 sleep 2000 - if $x == 30 then + if $x == 20 then return -1 endi sql show dnodes -x show3 @@ -172,52 +163,44 @@ print dnode3 $dnode3Vnodes $dnode4Vnodes = $data2_4 print dnode4 $dnode4Vnodes -if $dnode1Vnodes != 1 then +if $dnode1Vnodes != 3 then goto show3 endi if $dnode2Vnodes != null then goto show3 endi -if $dnode3Vnodes != 1 then +if $dnode3Vnodes != 3 then goto show3 endi -if $dnode4Vnodes != 1 then +if $dnode4Vnodes != 3 then goto show3 endi system sh/exec_up.sh -n dnode2 -s stop -x SIGINT print ============================== step4 -print ========= start dnode2 -sleep 3000 -system sh/deploy.sh -n dnode2 -i 2 -system sh/cfg.sh -n dnode2 -c numOfMPeers -v 3 -system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 4 -system sh/cfg.sh -n dnode2 -c clog -v 1 -system sh/cfg.sh -n dnode2 -c mgmtEqualVnodeNum -v 0 -sleep 3000 -sql create dnode $hostname2 -system sh/exec_up.sh -n dnode2 -s start +sql create dnode $hostname5 +system sh/exec_up.sh -n dnode5 -s start sleep 10000 $x = 0 show4: $x = $x + 1 sleep 2000 - if $x == 30 then + if $x == 20 then return -1 endi sql show dnodes -x show4 $dnode1Vnodes = $data2_1 print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes +$dnode5Vnodes = $data2_5 +print dnode5 $dnode5Vnodes $dnode3Vnodes = $data2_3 print dnode3 $dnode3Vnodes $dnode4Vnodes = $data2_4 print dnode4 $dnode4Vnodes -if $dnode2Vnodes != 2 then +if $dnode5Vnodes != 2 then goto show4 endi @@ -230,66 +213,57 @@ $x = 0 show5: $x = $x + 1 sleep 2000 - if $x == 30 then + if $x == 20 then return -1 endi sql show dnodes -x show5 $dnode1Vnodes = $data2_1 print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes +$dnode5Vnodes = $data2_5 +print dnode5 $dnode5Vnodes $dnode3Vnodes = $data2_3 print dnode3 $dnode3Vnodes $dnode4Vnodes = $data2_4 print dnode4 $dnode4Vnodes -if $dnode1Vnodes != 1 then +if $dnode1Vnodes != 3 then goto show5 endi -if $dnode2Vnodes != 1 then +if $dnode5Vnodes != 3 then goto show5 endi if $dnode3Vnodes != null then goto show5 endi -if $dnode4Vnodes != 1 then +if $dnode4Vnodes != 3 then goto show5 endi - system sh/exec_up.sh -n dnode3 -s stop -x SIGINT print ============================== step6 -print ========= start dnode3 -sleep 3000 -system sh/deploy.sh -n dnode3 -i 3 -system sh/cfg.sh -n dnode3 -c numOfMPeers -v 3 -system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 4 -system sh/cfg.sh -n dnode3 -c clog -v 1 -system sh/cfg.sh -n dnode3 -c mgmtEqualVnodeNum -v 0 -sleep 3000 -sql create dnode $hostname3 -system sh/exec_up.sh -n dnode3 -s start +sql create dnode $hostname6 +system sh/exec_up.sh -n dnode6 -s start sleep 9000 $x = 0 show6: $x = $x + 1 sleep 2000 - if $x == 30 then + if $x == 20 then return -1 endi sql show dnodes -x show6 $dnode1Vnodes = $data2_1 print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes $dnode4Vnodes = $data2_4 print dnode4 $dnode4Vnodes +$dnode5Vnodes = $data2_5 +print dnode5 $dnode5Vnodes +$dnode6Vnodes = $data2_6 +print dnode6 $dnode6Vnodes -if $dnode3Vnodes != 2 then +if $dnode6Vnodes != 2 then goto show6 endi @@ -302,26 +276,26 @@ $x = 0 show7: $x = $x + 1 sleep 2000 - if $x == 30 then + if $x == 20 then return -1 endi sql show dnodes -x show7 $dnode1Vnodes = $data2_1 print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes $dnode4Vnodes = $data2_4 print dnode4 $dnode4Vnodes +$dnode5Vnodes = $data2_5 +print dnode5 $dnode5Vnodes +$dnode6Vnodes = $data2_6 +print dnode6 $dnode6Vnodes -if $dnode1Vnodes != 1 then +if $dnode1Vnodes != 3 then goto show7 endi -if $dnode2Vnodes != 1 then +if $dnode5Vnodes != 3 then goto show7 endi -if $dnode3Vnodes != 1 then +if $dnode6Vnodes != 3 then goto show7 endi if $dnode4Vnodes != null then @@ -331,36 +305,28 @@ endi system sh/exec_up.sh -n dnode4 -s stop -x SIGINT print ============================== step8 -print ========= start dnode4 -sleep 3000 -system sh/deploy.sh -n dnode4 -i 4 -system sh/cfg.sh -n dnode4 -c numOfMPeers -v 3 -system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 4 -system sh/cfg.sh -n dnode4 -c clog -v 1 -system sh/cfg.sh -n dnode4 -c mgmtEqualVnodeNum -v 0 -sleep 3000 -sql create dnode $hostname4 -system sh/exec_up.sh -n dnode4 -s start +sql create dnode $hostname7 +system sh/exec_up.sh -n dnode7 -s start sleep 9000 $x = 0 show8: $x = $x + 1 sleep 2000 - if $x == 30 then + if $x == 20 then return -1 endi sql show dnodes -x show8 $dnode1Vnodes = $data2_1 print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes -$dnode4Vnodes = $data2_4 -print dnode4 $dnode4Vnodes +$dnode5Vnodes = $data2_5 +print dnode5 $dnode5Vnodes +$dnode6Vnodes = $data2_6 +print dnode6 $dnode6Vnodes +$dnode7Vnodes = $data2_7 +print dnode7 $dnode7Vnodes -if $dnode4Vnodes != 2 then +if $dnode7Vnodes != 2 then goto show8 endi @@ -378,65 +344,26 @@ $x = 0 show9: $x = $x + 1 sleep 2000 - if $x == 30 then + if $x == 20 then return -1 endi sql show dnodes -x show9 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes -$dnode4Vnodes = $data2_4 -print dnode4 $dnode4Vnodes +$dnode5Vnodes = $data2_5 +print dnode5 $dnode5Vnodes +$dnode6Vnodes = $data2_6 +print dnode6 $dnode6Vnodes +$dnode7Vnodes = $data2_7 +print dnode7 $dnode7Vnodes -if $dnode1Vnodes != null then +if $dnode5Vnodes != 3 then goto show9 endi -if $dnode2Vnodes != 1 then +if $dnode6Vnodes != 3 then goto show9 endi -if $dnode3Vnodes != 1 then +if $dnode7Vnodes != 3 then goto show9 endi -if $dnode4Vnodes != 1 then - goto show9 -endi - -print ============================== step10 -print ========= start dnode1 -sleep 3000 -system sh/deploy.sh -n dnode1 -i 1 -system sh/cfg.sh -n dnode1 -c numOfMPeers -v 3 -system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 4 -system sh/cfg.sh -n dnode1 -c clog -v 1 -system sh/cfg.sh -n dnode1 -c mgmtEqualVnodeNum -v 0 -sleep 3000 -sql create dnode $hostname1 -system sh/exec_up.sh -n dnode1 -s start -sleep 9000 - -$x = 0 -show10: - $x = $x + 1 - sleep 2000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show10 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes -$dnode4Vnodes = $data2_4 -print dnode4 $dnode4Vnodes - -if $dnode1Vnodes != 2 then - goto show10 -endi print ============================== step11 print ========= add db4 @@ -447,7 +374,7 @@ $x = 0 create4: $x = $x + 1 sleep 2000 - if $x == 30 then + if $x == 20 then return -1 endi sql create table c_b3_t4 (t timestamp, i int) -x create4 @@ -456,80 +383,42 @@ sql insert into c_b3_t4 values(1520000021044, 44) sql insert into c_b3_t4 values(1520000022043, 43) sql insert into c_b3_t4 values(1520000023042, 42) sql insert into c_b3_t4 values(1520000024041, 41) -sleep 9000 + +sleep 3000 $x = 0 show11: $x = $x + 1 sleep 2000 - if $x == 30 then + if $x == 20 then return -1 endi -sql show dnodes -x show11 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes -$dnode4Vnodes = $data2_4 -print dnode4 $dnode4Vnodes +$dnode5Vnodes = $data2_5 +print dnode5 $dnode5Vnodes +$dnode6Vnodes = $data2_6 +print dnode6 $dnode6Vnodes +$dnode7Vnodes = $data2_7 +print dnode7 $dnode7Vnodes -if $dnode1Vnodes != 1 then +if $dnode5Vnodes != 4 then goto show11 endi -if $dnode2Vnodes != 1 then +if $dnode6Vnodes != 4 then goto show11 endi -#if $dnode3Vnodes != 1 then -# goto show11 -#endi -#if $dnode4Vnodes != 1 then -# goto show11 -#endi - -print ============================== step12 -print ========= drop dnode1 -sql drop dnode $hostname1 -sleep 10000 - -$x = 0 -show12: - $x = $x + 1 - sleep 2000 - if $x == 30 then - return -1 - endi -sql show dnodes -x show12 -$dnode1Vnodes = $data2_1 -print dnode1 $dnode1Vnodes -$dnode2Vnodes = $data2_2 -print dnode2 $dnode2Vnodes -$dnode3Vnodes = $data2_3 -print dnode3 $dnode3Vnodes -$dnode4Vnodes = $data2_4 -print dnode4 $dnode4Vnodes - -if $dnode1Vnodes != null then - goto show12 -endi -if $dnode2Vnodes != 0 then - goto show12 -endi -if $dnode3Vnodes != 0 then - goto show12 -endi -if $dnode4Vnodes != 0 then - goto show12 +if $dnode7Vnodes != 4 then + goto show11 endi system sh/exec_up.sh -n dnode1 -s stop -x SIGINT print ============================== step13 +sql reset query cache +sleep 1000 + print ========= check data -sql use c_b3_d1 -sql select * from c_b3_t1 order by t desc +sql select * from c_b3_d1.c_b3_t1 order by t desc print $data01 $data11 $data21 $data31 $data41 if $data01 != 11 then return -1 @@ -547,8 +436,7 @@ if $data41 != 15 then return -1 endi -sql use c_b3_d2 -sql select * from c_b3_t2 order by t desc +sql select * from c_b3_d2.c_b3_t2 order by t desc print $data01 $data11 $data21 $data31 $data41 if $data01 != 21 then @@ -567,8 +455,7 @@ if $data41 != 25 then return -1 endi -sql use c_b3_d3 -sql select * from c_b3_t3 order by t desc +sql select * from c_b3_d3.c_b3_t3 order by t desc print $data01 $data11 $data21 $data31 $data41 if $data01 != 31 then return -1 @@ -586,26 +473,6 @@ if $data41 != 35 then return -1 endi -sql use c_b3_d4 -sql select * from c_b3_t4 order by t desc -print $data01 $data11 $data21 $data31 $data41 -if $data01 != 41 then - return -1 -endi -if $data11 != 42 then - return -1 -endi -if $data21 != 43 then - return -1 -endi -if $data31 != 44 then - return -1 -endi -if $data41 != 45 then - return -1 -endi - - print ============================================ over system sh/exec_up.sh -n dnode1 -s stop -x SIGINT system sh/exec_up.sh -n dnode2 -s stop -x SIGINT @@ -615,5 +482,3 @@ system sh/exec_up.sh -n dnode5 -s stop -x SIGINT system sh/exec_up.sh -n dnode6 -s stop -x SIGINT system sh/exec_up.sh -n dnode7 -s stop -x SIGINT system sh/exec_up.sh -n dnode8 -s stop -x SIGINT - - diff --git a/tests/script/unique/cluster/testSuite.sim b/tests/script/unique/cluster/testSuite.sim index 74fa2cb271..34cdda85dd 100644 --- a/tests/script/unique/cluster/testSuite.sim +++ b/tests/script/unique/cluster/testSuite.sim @@ -1,5 +1,3 @@ run unique/cluster/balance1.sim run unique/cluster/balance2.sim run unique/cluster/balance3.sim -run unique/cluster/balance1_bug.sim -run unique/cluster/balance1_single.sim \ No newline at end of file diff --git a/tests/script/unique/column/replica3.sim b/tests/script/unique/column/replica3.sim index 1b4884cb90..6390578867 100644 --- a/tests/script/unique/column/replica3.sim +++ b/tests/script/unique/column/replica3.sim @@ -29,8 +29,11 @@ while $x < 1010 $x = $x + 1 endw -system sh/exec_up.sh -n dnode1 -s stop -system sh/exec_up.sh -n dnode2 -s stop -system sh/exec_up.sh -n dnode3 -s stop - - +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/db/replica_add12.sim b/tests/script/unique/db/replica_add12.sim index 6217a965c0..14956e56c2 100644 --- a/tests/script/unique/db/replica_add12.sim +++ b/tests/script/unique/db/replica_add12.sim @@ -281,4 +281,13 @@ endi sql select * from d4.t4 if $rows != 4 then return -1 -endi \ No newline at end of file +endi + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/db/replica_add13.sim b/tests/script/unique/db/replica_add13.sim index 193238f5c0..970545ae01 100644 --- a/tests/script/unique/db/replica_add13.sim +++ b/tests/script/unique/db/replica_add13.sim @@ -258,4 +258,13 @@ endi sql select * from d4.t4 if $rows != 6 then return -1 -endi \ No newline at end of file +endi + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/db/replica_add23.sim b/tests/script/unique/db/replica_add23.sim index 5cc0347ac7..d4aa85c05c 100644 --- a/tests/script/unique/db/replica_add23.sim +++ b/tests/script/unique/db/replica_add23.sim @@ -259,4 +259,13 @@ endi sql select * from d4.t4 if $rows != 6 then return -1 -endi \ No newline at end of file +endi + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/db/replica_part.sim b/tests/script/unique/db/replica_part.sim index 7fc81fbf5b..29b16c8018 100644 --- a/tests/script/unique/db/replica_part.sim +++ b/tests/script/unique/db/replica_part.sim @@ -145,3 +145,12 @@ sql select * from d1.t1 sql select * from d2.t2 sql select * from d3.t3 sql select * from d4.t4 + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/db/replica_reduce21.sim b/tests/script/unique/db/replica_reduce21.sim index eddcaf0e6c..e86ff9367f 100644 --- a/tests/script/unique/db/replica_reduce21.sim +++ b/tests/script/unique/db/replica_reduce21.sim @@ -144,3 +144,12 @@ sql select * from d4.t4 if $rows != 3 then return -1 endi + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/db/replica_reduce31.sim b/tests/script/unique/db/replica_reduce31.sim index 658110e83d..6b4264e9e1 100644 --- a/tests/script/unique/db/replica_reduce31.sim +++ b/tests/script/unique/db/replica_reduce31.sim @@ -182,3 +182,12 @@ sql select * from d1.t1 sql select * from d2.t2 sql select * from d3.t3 sql select * from d4.t4 + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/db/replica_reduce32.sim b/tests/script/unique/db/replica_reduce32.sim index 85f35f996c..d59fb1fc0a 100644 --- a/tests/script/unique/db/replica_reduce32.sim +++ b/tests/script/unique/db/replica_reduce32.sim @@ -155,3 +155,12 @@ print d3.t3 $rows sql select * from d4.t4 print d4.t4 $rows + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/dnode/balance1.sim b/tests/script/unique/dnode/balance1.sim index 72286aad90..5e5e9e097b 100644 --- a/tests/script/unique/dnode/balance1.sim +++ b/tests/script/unique/dnode/balance1.sim @@ -327,3 +327,12 @@ endi if $data41 != 45 then return -1 endi + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/dnode/balance2.sim b/tests/script/unique/dnode/balance2.sim index decec25683..e27262bf1d 100644 --- a/tests/script/unique/dnode/balance2.sim +++ b/tests/script/unique/dnode/balance2.sim @@ -268,3 +268,12 @@ endi if $data41 != 35 then return -1 endi + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/dnode/balance3.sim b/tests/script/unique/dnode/balance3.sim index 53fda28dc4..112afed6a1 100644 --- a/tests/script/unique/dnode/balance3.sim +++ b/tests/script/unique/dnode/balance3.sim @@ -298,3 +298,11 @@ if $data41 != 35 then return -1 endi +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/dnode/balancex.sim b/tests/script/unique/dnode/balancex.sim index 6c851b5559..af163ab5fa 100644 --- a/tests/script/unique/dnode/balancex.sim +++ b/tests/script/unique/dnode/balancex.sim @@ -199,3 +199,11 @@ if $data41 != 35 then return -1 endi +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/dnode/offline1.sim b/tests/script/unique/dnode/offline1.sim index c4751bb66b..64ba981d1f 100644 --- a/tests/script/unique/dnode/offline1.sim +++ b/tests/script/unique/dnode/offline1.sim @@ -67,3 +67,11 @@ if $data4_2 != null then return -1 endi +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/dnode/offline2.sim b/tests/script/unique/dnode/offline2.sim index b9a3464811..ae9b13079f 100644 --- a/tests/script/unique/dnode/offline2.sim +++ b/tests/script/unique/dnode/offline2.sim @@ -106,3 +106,11 @@ if $rows != 1 then return -1 endi +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/http/admin.sim b/tests/script/unique/http/admin.sim index 2b1c7e08c9..ca2adc29ab 100644 --- a/tests/script/unique/http/admin.sim +++ b/tests/script/unique/http/admin.sim @@ -177,4 +177,13 @@ print =============== step8 - monitor dbs #print 24-> $system_content #if $system_content != @[{"status":"succ","head":["IP","created time","open vnodes","free vnodes","status","balance state"],"data":[["127.0.0.1","2018-09-04 #11:16:13.985",1,3,"ready","balanced"]],"rows":1},{"status":"succ","head":["IP","created time","status","role"],"data":[["127.0.0.1","2018-09-04 11:16:13.371","serving","master"]],"rows":1}]@ then # return -1 -# endi \ No newline at end of file +# endi + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/mnode/mgmt22.sim b/tests/script/unique/mnode/mgmt22.sim index 05e636d0de..3275a233ad 100644 --- a/tests/script/unique/mnode/mgmt22.sim +++ b/tests/script/unique/mnode/mgmt22.sim @@ -104,6 +104,11 @@ if $data3_3 != null then goto show7 endi -system sh/exec_up.sh -n dnode1 -s stop -system sh/exec_up.sh -n dnode2 -s stop -system sh/exec_up.sh -n dnode3 -s stop \ No newline at end of file +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/mnode/mgmt23.sim b/tests/script/unique/mnode/mgmt23.sim index 07f8894769..8c144dd0c4 100644 --- a/tests/script/unique/mnode/mgmt23.sim +++ b/tests/script/unique/mnode/mgmt23.sim @@ -122,6 +122,11 @@ sql_error show mnodes print ============== step7 sql_error drop dnode $hostname1 -system sh/exec_up.sh -n dnode1 -s stop -system sh/exec_up.sh -n dnode2 -s stop -system sh/exec_up.sh -n dnode3 -s stop \ No newline at end of file +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/mnode/mgmt24.sim b/tests/script/unique/mnode/mgmt24.sim index 3598534504..4c61cbd7ae 100644 --- a/tests/script/unique/mnode/mgmt24.sim +++ b/tests/script/unique/mnode/mgmt24.sim @@ -73,6 +73,11 @@ if $data2_2 != slave then goto step5 endi -system sh/exec_up.sh -n dnode1 -s stop -system sh/exec_up.sh -n dnode2 -s stop -system sh/exec_up.sh -n dnode3 -s stop \ No newline at end of file +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/mnode/mgmt25.sim b/tests/script/unique/mnode/mgmt25.sim index cedfad4bd0..8c8eeba466 100644 --- a/tests/script/unique/mnode/mgmt25.sim +++ b/tests/script/unique/mnode/mgmt25.sim @@ -85,6 +85,11 @@ if $dnode3Role != slave then return -1 endi -system sh/exec_up.sh -n dnode1 -s stop -system sh/exec_up.sh -n dnode2 -s stop -system sh/exec_up.sh -n dnode3 -s stop \ No newline at end of file +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/mnode/mgmt26.sim b/tests/script/unique/mnode/mgmt26.sim index 105e753634..373a0abaed 100644 --- a/tests/script/unique/mnode/mgmt26.sim +++ b/tests/script/unique/mnode/mgmt26.sim @@ -113,6 +113,11 @@ if $dnode3Role != slave then return -1 endi -system sh/exec_up.sh -n dnode1 -s stop -system sh/exec_up.sh -n dnode2 -s stop -system sh/exec_up.sh -n dnode3 -s stop \ No newline at end of file +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/mnode/mgmt33.sim b/tests/script/unique/mnode/mgmt33.sim index ef9b0bbcc7..e3a62a2d22 100644 --- a/tests/script/unique/mnode/mgmt33.sim +++ b/tests/script/unique/mnode/mgmt33.sim @@ -166,6 +166,11 @@ endi # return -1 #endi -system sh/exec_up.sh -n dnode1 -s stop -system sh/exec_up.sh -n dnode2 -s stop -system sh/exec_up.sh -n dnode3 -s stop \ No newline at end of file +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/mnode/mgmt34.sim b/tests/script/unique/mnode/mgmt34.sim index af4353b563..4409c825c8 100644 --- a/tests/script/unique/mnode/mgmt34.sim +++ b/tests/script/unique/mnode/mgmt34.sim @@ -220,7 +220,11 @@ endi # return -1 #endi -system sh/exec_up.sh -n dnode1 -s stop -system sh/exec_up.sh -n dnode2 -s stop -system sh/exec_up.sh -n dnode3 -s stop -system sh/exec_up.sh -n dnode4 -s stop \ No newline at end of file +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/vnode/replica2_basic2.sim b/tests/script/unique/vnode/replica2_basic2.sim index 7a387d165e..dd0914549a 100644 --- a/tests/script/unique/vnode/replica2_basic2.sim +++ b/tests/script/unique/vnode/replica2_basic2.sim @@ -202,4 +202,13 @@ endi sql select * from d4.t4 if $rows != 3 then return -1 -endi \ No newline at end of file +endi + +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/unique/vnode/replica3_basic.sim b/tests/script/unique/vnode/replica3_basic.sim index 4da26a9349..542aa7803d 100644 --- a/tests/script/unique/vnode/replica3_basic.sim +++ b/tests/script/unique/vnode/replica3_basic.sim @@ -149,8 +149,11 @@ if $rows != $expect then return -1 endi -system sh/exec_up.sh -n dnode1 -s stop -system sh/exec_up.sh -n dnode2 -s stop -system sh/exec_up.sh -n dnode3 -s stop - - +system sh/exec_up.sh -n dnode1 -s stop -x SIGINT +system sh/exec_up.sh -n dnode2 -s stop -x SIGINT +system sh/exec_up.sh -n dnode3 -s stop -x SIGINT +system sh/exec_up.sh -n dnode4 -s stop -x SIGINT +system sh/exec_up.sh -n dnode5 -s stop -x SIGINT +system sh/exec_up.sh -n dnode6 -s stop -x SIGINT +system sh/exec_up.sh -n dnode7 -s stop -x SIGINT +system sh/exec_up.sh -n dnode8 -s stop -x SIGINT \ No newline at end of file diff --git a/tests/script/uniqueSuite.sim b/tests/script/uniqueSuite.sim deleted file mode 100644 index 0a3d57c27e..0000000000 --- a/tests/script/uniqueSuite.sim +++ /dev/null @@ -1,5 +0,0 @@ -################################# - -run unique/mnode/testSuite.sim - -################################## diff --git a/tests/tsim/src/simExe.c b/tests/tsim/src/simExe.c index aea295c563..d0d798343a 100644 --- a/tests/tsim/src/simExe.c +++ b/tests/tsim/src/simExe.c @@ -676,6 +676,8 @@ bool simExecuteNativeSqlCommand(SScript *script, char *rest, bool isSlow) { while ((row = taos_fetch_row(result))) { if (numOfRows < MAX_QUERY_ROW_NUM) { TAOS_FIELD *fields = taos_fetch_fields(result); + int* length = taos_fetch_lengths(result); + for (int i = 0; i < num_fields; i++) { char *value = NULL; if (i < MAX_QUERY_COL_NUM) { @@ -734,8 +736,8 @@ bool simExecuteNativeSqlCommand(SScript *script, char *rest, bool isSlow) { case TSDB_DATA_TYPE_BINARY: case TSDB_DATA_TYPE_NCHAR: memset(value, 0, MAX_QUERY_VALUE_LEN); - memcpy(value, row[i], fields[i].bytes); - value[fields[i].bytes] = 0; + memcpy(value, row[i], length[i]); + value[length[i]] = 0; // snprintf(value, fields[i].bytes, "%s", (char *)row[i]); break; case TSDB_DATA_TYPE_TIMESTAMP: