[TD-5534]<fix>:merge from develop
This commit is contained in:
commit
f5a4e42225
|
@ -111,7 +111,7 @@ TDengine采取的是Master-Slave模式进行同步,与流行的RAFT一致性
|
|||
2. 应用将打上版本号的写请求封装一个WAL Head, 写入WAL(Write Ahead Log)
|
||||
3. 应用调用API syncForwardToPeer,如果vnode B是slave状态,sync模块将包含WAL Head的数据包通过Forward消息发送给vnode B,否则就不转发。
|
||||
4. vnode B收到Forward消息后,调用回调函数writeToCache, 交给应用处理
|
||||
5. vnode B应用在写入成功后,都需要调用syncAckForward通知sync模块已经写入成功。
|
||||
5. vnode B应用在写入成功后,都需要调用syncConfirmForward通知sync模块已经写入成功。
|
||||
6. 如果quorum大于1,vnode B需要等待应用的回复确认,收到确认后,vnode B发送Forward Response消息给node A。
|
||||
7. 如果quorum大于1,vnode A需要等待vnode B或其他副本对Forward消息的确认。
|
||||
8. 如果quorum大于1,vnode A收到quorum-1条确认消息后,调用回调函数confirmForward,通知应用写入成功。
|
||||
|
|
|
@ -323,8 +323,6 @@ Vnode会保持一个数据版本号(Version),对内存数据进行持久化存
|
|||
|
||||
采用同步复制,系统的性能会有所下降,而且latency会增加。因为元数据要强一致,mnode之间的数据同步缺省就是采用的同步复制。
|
||||
|
||||
注:vnode之间的同步复制仅仅企业版支持
|
||||
|
||||
## <a class="anchor" id="persistence"></a>缓存与持久化
|
||||
|
||||
### 缓存
|
||||
|
|
|
@ -48,7 +48,7 @@ TDengine 缺省的时间戳是毫秒精度,但通过在 CREATE DATABASE 时传
|
|||
| 3 | BIGINT | 8 | 长整型,范围 [-2^63+1, 2^63-1], -2^63 用于 NULL |
|
||||
| 4 | FLOAT | 4 | 浮点型,有效位数 6-7,范围 [-3.4E38, 3.4E38] |
|
||||
| 5 | DOUBLE | 8 | 双精度浮点型,有效位数 15-16,范围 [-1.7E308, 1.7E308] |
|
||||
| 6 | BINARY | 自定义 | 记录单字节字符串,建议只用于处理 ASCII 可见字符,中文等多字节字符需使用 nchar。理论上,最长可以有 16374 字节,但由于每行数据最多 16K 字节,实际上限一般小于理论值。binary 仅支持字符串输入,字符串两端需使用单引号引用。使用时须指定大小,如 binary(20) 定义了最长为 20 个单字节字符的字符串,每个字符占 1 byte 的存储空间,此时如果用户字符串超出 20 字节将会报错。对于字符串内的单引号,可以用转义字符反斜线加单引号来表示,即 `\’`。 |
|
||||
| 6 | BINARY | 自定义 | 记录单字节字符串,建议只用于处理 ASCII 可见字符,中文等多字节字符需使用 nchar。理论上,最长可以有 16374 字节,但由于每行数据最多 16K 字节,实际上限一般小于理论值。binary 仅支持字符串输入,字符串两端需使用单引号引用。使用时须指定大小,如 binary(20) 定义了最长为 20 个单字节字符的字符串,每个字符占 1 byte 的存储空间,总共固定占用 20 bytes 的空间,此时如果用户字符串超出 20 字节将会报错。对于字符串内的单引号,可以用转义字符反斜线加单引号来表示,即 `\’`。 |
|
||||
| 7 | SMALLINT | 2 | 短整型, 范围 [-32767, 32767], -32768 用于 NULL |
|
||||
| 8 | TINYINT | 1 | 单字节整型,范围 [-127, 127], -128 用于 NULL |
|
||||
| 9 | BOOL | 1 | 布尔型,{true, false} |
|
||||
|
|
|
@ -322,8 +322,6 @@ For scenarios with higher data consistency requirements, asynchronous data repli
|
|||
|
||||
With synchronous replication, performance of system will decrease and latency will increase. Because metadata needs strong consistent, the default for data synchronization between mnodes is synchronous replication.
|
||||
|
||||
Note: synchronous replication between vnodes is only supported in Enterprise Edition
|
||||
|
||||
## <a class="anchor" id="persistence"></a> Caching and Persistence
|
||||
|
||||
### Caching
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
static SBnThread tsBnThread;
|
||||
|
||||
static void *bnThreadFunc(void *arg) {
|
||||
setThreadName("bnThreadd");
|
||||
setThreadName("balance");
|
||||
|
||||
while (1) {
|
||||
pthread_mutex_lock(&tsBnThread.mutex);
|
||||
|
|
|
@ -355,6 +355,8 @@ char* strdup_throw(const char* str);
|
|||
bool vgroupInfoIdentical(SNewVgroupInfo *pExisted, SVgroupMsg* src);
|
||||
SNewVgroupInfo createNewVgroupInfo(SVgroupMsg *pVgroupMsg);
|
||||
|
||||
void tscRemoveTableMetaBuf(STableMetaInfo* pTableMetaInfo, uint64_t id);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -151,7 +151,8 @@ typedef struct STableDataBlocks {
|
|||
|
||||
typedef struct {
|
||||
STableMeta *pTableMeta;
|
||||
SVgroupsInfo *pVgroupInfo;
|
||||
SArray *vgroupIdList;
|
||||
// SVgroupsInfo *pVgroupsInfo;
|
||||
} STableMetaVgroupInfo;
|
||||
|
||||
typedef struct SInsertStatementParam {
|
||||
|
@ -375,6 +376,8 @@ void tscResetSqlCmd(SSqlCmd *pCmd, bool removeMeta);
|
|||
*/
|
||||
void tscFreeSqlResult(SSqlObj *pSql);
|
||||
|
||||
void* tscCleanupTableMetaMap(SHashObj* pTableMetaMap);
|
||||
|
||||
/**
|
||||
* free sql object, release allocated resource
|
||||
* @param pObj
|
||||
|
@ -415,7 +418,8 @@ int32_t tscValidateSqlInfo(SSqlObj *pSql, struct SSqlInfo *pInfo);
|
|||
int32_t tsSetBlockInfo(SSubmitBlk *pBlocks, const STableMeta *pTableMeta, int32_t numOfRows);
|
||||
extern int32_t sentinel;
|
||||
extern SHashObj *tscVgroupMap;
|
||||
extern SHashObj *tscTableMetaInfo;
|
||||
extern SHashObj *tscTableMetaMap;
|
||||
extern SCacheObj *tscVgroupListBuf;
|
||||
|
||||
extern int tscObjRef;
|
||||
extern void *tscTmr;
|
||||
|
|
|
@ -325,61 +325,6 @@ void tscAsyncResultOnError(SSqlObj* pSql) {
|
|||
|
||||
int tscSendMsgToServer(SSqlObj *pSql);
|
||||
|
||||
static int32_t updateMetaBeforeRetryQuery(SSqlObj* pSql, STableMetaInfo* pTableMetaInfo, SQueryInfo* pQueryInfo) {
|
||||
// handle the invalid table error code for super table.
|
||||
// update the pExpr info, colList info, number of table columns
|
||||
// TODO Re-parse this sql and issue the corresponding subquery as an alternative for this case.
|
||||
if (pSql->retryReason == TSDB_CODE_TDB_INVALID_TABLE_ID) {
|
||||
int32_t numOfExprs = (int32_t) tscNumOfExprs(pQueryInfo);
|
||||
int32_t numOfCols = tscGetNumOfColumns(pTableMetaInfo->pTableMeta);
|
||||
int32_t numOfTags = tscGetNumOfTags(pTableMetaInfo->pTableMeta);
|
||||
|
||||
SSchema *pSchema = tscGetTableSchema(pTableMetaInfo->pTableMeta);
|
||||
SSchema *pTagSchema = tscGetTableTagSchema(pTableMetaInfo->pTableMeta);
|
||||
|
||||
for (int32_t i = 0; i < numOfExprs; ++i) {
|
||||
SSqlExpr *pExpr = &(tscExprGet(pQueryInfo, i)->base);
|
||||
|
||||
// update the table uid
|
||||
pExpr->uid = pTableMetaInfo->pTableMeta->id.uid;
|
||||
|
||||
if (pExpr->colInfo.colIndex >= 0) {
|
||||
int32_t index = pExpr->colInfo.colIndex;
|
||||
|
||||
if ((TSDB_COL_IS_NORMAL_COL(pExpr->colInfo.flag) && index >= numOfCols) ||
|
||||
(TSDB_COL_IS_TAG(pExpr->colInfo.flag) && (index < 0 || index >= numOfTags))) {
|
||||
return pSql->retryReason;
|
||||
}
|
||||
|
||||
if (TSDB_COL_IS_TAG(pExpr->colInfo.flag)) {
|
||||
if ((pTagSchema[pExpr->colInfo.colIndex].colId != pExpr->colInfo.colId) &&
|
||||
strcasecmp(pExpr->colInfo.name, pTagSchema[pExpr->colInfo.colIndex].name) != 0) {
|
||||
return pSql->retryReason;
|
||||
}
|
||||
} else if (TSDB_COL_IS_NORMAL_COL(pExpr->colInfo.flag)) {
|
||||
if ((pSchema[pExpr->colInfo.colIndex].colId != pExpr->colInfo.colId) &&
|
||||
strcasecmp(pExpr->colInfo.name, pSchema[pExpr->colInfo.colIndex].name) != 0) {
|
||||
return pSql->retryReason;
|
||||
}
|
||||
} else { // do nothing for udc
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// validate the table columns information
|
||||
for (int32_t i = 0; i < taosArrayGetSize(pQueryInfo->colList); ++i) {
|
||||
SColumn *pCol = taosArrayGetP(pQueryInfo->colList, i);
|
||||
if (pCol->columnIndex >= numOfCols) {
|
||||
return pSql->retryReason;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
|
||||
SSqlObj* pSql = (SSqlObj*)taosAcquireRef(tscObjRef, (int64_t)param);
|
||||
if (pSql == NULL) return;
|
||||
|
@ -391,7 +336,7 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
|
|||
pRes->code = code;
|
||||
|
||||
SSqlObj *sub = (SSqlObj*) res;
|
||||
const char* msg = (sub->cmd.command == TSDB_SQL_STABLEVGROUP)? "vgroup-list":"table-meta";
|
||||
const char* msg = (sub->cmd.command == TSDB_SQL_STABLEVGROUP)? "vgroup-list":"multi-tableMeta";
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
tscError("0x%"PRIx64" get %s failed, code:%s", pSql->self, msg, tstrerror(code));
|
||||
goto _error;
|
||||
|
@ -401,85 +346,56 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
|
|||
if (pSql->pStream == NULL) {
|
||||
SQueryInfo *pQueryInfo = tscGetQueryInfo(pCmd);
|
||||
|
||||
// check if it is a sub-query of super table query first, if true, enter another routine
|
||||
if (TSDB_QUERY_HAS_TYPE(pQueryInfo->type, (TSDB_QUERY_TYPE_STABLE_SUBQUERY | TSDB_QUERY_TYPE_SUBQUERY |
|
||||
TSDB_QUERY_TYPE_TAG_FILTER_QUERY))) {
|
||||
tscDebug("0x%" PRIx64 " update cached table-meta, continue to process sql and send the corresponding query", pSql->self);
|
||||
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
||||
|
||||
code = tscGetTableMeta(pSql, pTableMetaInfo);
|
||||
assert(code == TSDB_CODE_TSC_ACTION_IN_PROGRESS || code == TSDB_CODE_SUCCESS);
|
||||
if (TSDB_QUERY_HAS_TYPE(pQueryInfo->type, TSDB_QUERY_TYPE_INSERT)) {
|
||||
tscDebug("0x%" PRIx64 " continue parse sql after get table-meta", pSql->self);
|
||||
|
||||
code = tsParseSql(pSql, false);
|
||||
if (code == TSDB_CODE_TSC_ACTION_IN_PROGRESS) {
|
||||
taosReleaseRef(tscObjRef, pSql->self);
|
||||
return;
|
||||
}
|
||||
|
||||
assert((tscGetNumOfTags(pTableMetaInfo->pTableMeta) != 0));
|
||||
code = updateMetaBeforeRetryQuery(pSql, pTableMetaInfo, pQueryInfo);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
} else if (code != TSDB_CODE_SUCCESS) {
|
||||
goto _error;
|
||||
}
|
||||
|
||||
// tscBuildAndSendRequest can add error into async res
|
||||
tscBuildAndSendRequest(pSql, NULL);
|
||||
taosReleaseRef(tscObjRef, pSql->self);
|
||||
return;
|
||||
} else { // continue to process normal async query
|
||||
if (TSDB_QUERY_HAS_TYPE(pQueryInfo->type, TSDB_QUERY_TYPE_INSERT)) {
|
||||
tscDebug("0x%" PRIx64 " continue parse sql after get table-meta", pSql->self);
|
||||
|
||||
code = tsParseSql(pSql, false);
|
||||
if (TSDB_QUERY_HAS_TYPE(pCmd->insertParam.insertType, TSDB_QUERY_TYPE_STMT_INSERT)) { // stmt insert
|
||||
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
||||
code = tscGetTableMeta(pSql, pTableMetaInfo);
|
||||
if (code == TSDB_CODE_TSC_ACTION_IN_PROGRESS) {
|
||||
taosReleaseRef(tscObjRef, pSql->self);
|
||||
return;
|
||||
} else if (code != TSDB_CODE_SUCCESS) {
|
||||
goto _error;
|
||||
}
|
||||
|
||||
if (TSDB_QUERY_HAS_TYPE(pCmd->insertParam.insertType, TSDB_QUERY_TYPE_STMT_INSERT)) {
|
||||
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
||||
code = tscGetTableMeta(pSql, pTableMetaInfo);
|
||||
if (code == TSDB_CODE_TSC_ACTION_IN_PROGRESS) {
|
||||
taosReleaseRef(tscObjRef, pSql->self);
|
||||
return;
|
||||
} else {
|
||||
assert(code == TSDB_CODE_SUCCESS);
|
||||
}
|
||||
|
||||
(*pSql->fp)(pSql->param, pSql, code);
|
||||
} else {
|
||||
if (TSDB_QUERY_HAS_TYPE(pCmd->insertParam.insertType, TSDB_QUERY_TYPE_FILE_INSERT)) {
|
||||
tscImportDataFromFile(pSql);
|
||||
} else {
|
||||
tscHandleMultivnodeInsert(pSql);
|
||||
}
|
||||
assert(code == TSDB_CODE_SUCCESS);
|
||||
}
|
||||
|
||||
(*pSql->fp)(pSql->param, pSql, code);
|
||||
} else if (TSDB_QUERY_HAS_TYPE(pCmd->insertParam.insertType, TSDB_QUERY_TYPE_FILE_INSERT)) { // file insert
|
||||
tscImportDataFromFile(pSql);
|
||||
} else { // sql string insert
|
||||
tscHandleMultivnodeInsert(pSql);
|
||||
}
|
||||
} else {
|
||||
if (pSql->retryReason != TSDB_CODE_SUCCESS) {
|
||||
tscDebug("0x%" PRIx64 " update cached table-meta, re-validate sql statement and send query again", pSql->self);
|
||||
tscResetSqlCmd(pCmd, false);
|
||||
pSql->retryReason = TSDB_CODE_SUCCESS;
|
||||
} else {
|
||||
if (pSql->retryReason != TSDB_CODE_SUCCESS) {
|
||||
tscDebug("0x%" PRIx64 " update cached table-meta, re-validate sql statement and send query again",
|
||||
pSql->self);
|
||||
tscResetSqlCmd(pCmd, false);
|
||||
pSql->retryReason = TSDB_CODE_SUCCESS;
|
||||
} else {
|
||||
tscDebug("0x%" PRIx64 " cached table-meta, continue validate sql statement and send query", pSql->self);
|
||||
}
|
||||
|
||||
code = tsParseSql(pSql, true);
|
||||
if (code == TSDB_CODE_TSC_ACTION_IN_PROGRESS) {
|
||||
taosReleaseRef(tscObjRef, pSql->self);
|
||||
return;
|
||||
} else if (code != TSDB_CODE_SUCCESS) {
|
||||
goto _error;
|
||||
}
|
||||
|
||||
SQueryInfo *pQueryInfo1 = tscGetQueryInfo(pCmd);
|
||||
executeQuery(pSql, pQueryInfo1);
|
||||
tscDebug("0x%" PRIx64 " cached table-meta, continue validate sql statement and send query", pSql->self);
|
||||
}
|
||||
|
||||
taosReleaseRef(tscObjRef, pSql->self);
|
||||
return;
|
||||
code = tsParseSql(pSql, true);
|
||||
if (code == TSDB_CODE_TSC_ACTION_IN_PROGRESS) {
|
||||
taosReleaseRef(tscObjRef, pSql->self);
|
||||
return;
|
||||
} else if (code != TSDB_CODE_SUCCESS) {
|
||||
goto _error;
|
||||
}
|
||||
|
||||
SQueryInfo *pQueryInfo1 = tscGetQueryInfo(pCmd);
|
||||
executeQuery(pSql, pQueryInfo1);
|
||||
}
|
||||
|
||||
taosReleaseRef(tscObjRef, pSql->self);
|
||||
return;
|
||||
} else { // stream computing
|
||||
tscDebug("0x%"PRIx64" stream:%p meta is updated, start new query, command:%d", pSql->self, pSql->pStream, pCmd->command);
|
||||
|
||||
|
|
|
@ -924,7 +924,8 @@ int tscProcessLocalCmd(SSqlObj *pSql) {
|
|||
} else if (pCmd->command == TSDB_SQL_SHOW_CREATE_DATABASE) {
|
||||
pRes->code = tscProcessShowCreateDatabase(pSql);
|
||||
} else if (pCmd->command == TSDB_SQL_RESET_CACHE) {
|
||||
taosHashClear(tscTableMetaInfo);
|
||||
taosHashClear(tscTableMetaMap);
|
||||
taosCacheEmpty(tscVgroupListBuf);
|
||||
pRes->code = TSDB_CODE_SUCCESS;
|
||||
} else if (pCmd->command == TSDB_SQL_SERV_VERSION) {
|
||||
pRes->code = tscProcessServerVer(pSql);
|
||||
|
|
|
@ -460,7 +460,7 @@ int32_t loadTableMeta(TAOS* taos, char* tableName, SSmlSTableSchema* schema, SSm
|
|||
|
||||
uint32_t size = tscGetTableMetaMaxSize();
|
||||
STableMeta* tableMeta = calloc(1, size);
|
||||
taosHashGetClone(tscTableMetaInfo, fullTableName, strlen(fullTableName), NULL, tableMeta, -1);
|
||||
taosHashGetClone(tscTableMetaMap, fullTableName, strlen(fullTableName), NULL, tableMeta);
|
||||
|
||||
tstrncpy(schema->sTableName, tableName, strlen(tableName)+1);
|
||||
schema->precision = tableMeta->tableInfo.precision;
|
||||
|
|
|
@ -80,8 +80,8 @@ static void getColumnName(tSqlExprItem* pItem, char* resultFieldName, char* rawN
|
|||
|
||||
static int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t colIndex, tSqlExprItem* pItem,
|
||||
bool finalResult, SUdfInfo* pUdfInfo);
|
||||
static int32_t insertResultField(SQueryInfo* pQueryInfo, int32_t outputIndex, SColumnList* pIdList, int16_t bytes,
|
||||
int8_t type, char* fieldName, SExprInfo* pSqlExpr);
|
||||
static int32_t insertResultField(SQueryInfo* pQueryInfo, int32_t outputIndex, SColumnList* pColList, int16_t bytes,
|
||||
int8_t type, char* fieldName, SExprInfo* pSqlExpr);
|
||||
|
||||
static uint8_t convertRelationalOperator(SStrToken *pToken);
|
||||
|
||||
|
@ -7251,7 +7251,7 @@ void tscPrintSelNodeList(SSqlObj* pSql, int32_t subClauseIndex) {
|
|||
}
|
||||
|
||||
tmpLen =
|
||||
sprintf(tmpBuf, "%s(uid:%" PRId64 ", %d)", name, pExpr->base.uid, pExpr->base.colInfo.colId);
|
||||
sprintf(tmpBuf, "%s(uid:%" PRIu64 ", %d)", name, pExpr->base.uid, pExpr->base.colInfo.colId);
|
||||
|
||||
if (tmpLen + offset >= totalBufSize - 1) break;
|
||||
|
||||
|
@ -8128,6 +8128,7 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
goto _end;
|
||||
}
|
||||
}
|
||||
|
||||
pTableMeta = calloc(1, maxSize);
|
||||
|
||||
plist = taosArrayInit(4, POINTER_BYTES);
|
||||
|
@ -8143,9 +8144,13 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
|
||||
size_t len = strlen(name);
|
||||
memset(pTableMeta, 0, maxSize);
|
||||
taosHashGetClone(tscTableMetaInfo, name, len, NULL, pTableMeta, -1);
|
||||
taosHashGetClone(tscTableMetaMap, name, len, NULL, pTableMeta);
|
||||
|
||||
if (pTableMeta->id.uid > 0) {
|
||||
tscDebug("0x%"PRIx64" retrieve table meta %s from local buf", pSql->self, name);
|
||||
|
||||
// avoid mem leak, may should update pTableMeta
|
||||
void* pVgroupIdList = NULL;
|
||||
if (pTableMeta->tableType == TSDB_CHILD_TABLE) {
|
||||
code = tscCreateTableMetaFromSTableMeta(pTableMeta, name, pSql->pBuf);
|
||||
|
||||
|
@ -8157,23 +8162,34 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
}
|
||||
} else if (pTableMeta->tableType == TSDB_SUPER_TABLE) {
|
||||
// the vgroup list of super table is not kept in local buffer, so here need retrieve it from the mnode each time
|
||||
char* t = strdup(name);
|
||||
taosArrayPush(pVgroupList, &t);
|
||||
tscDebug("0x%"PRIx64" try to acquire cached super table %s vgroup id list", pSql->self, name);
|
||||
void* pv = taosCacheAcquireByKey(tscVgroupListBuf, name, len);
|
||||
if (pv == NULL) {
|
||||
char* t = strdup(name);
|
||||
taosArrayPush(pVgroupList, &t);
|
||||
tscDebug("0x%"PRIx64" failed to retrieve stable %s vgroup id list in cache, try fetch from mnode", pSql->self, name);
|
||||
} else {
|
||||
tFilePage* pdata = (tFilePage*) pv;
|
||||
pVgroupIdList = taosArrayInit((size_t) pdata->num, sizeof(int32_t));
|
||||
if (pVgroupIdList == NULL) {
|
||||
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
taosArrayAddBatch(pVgroupIdList, pdata->data, (int32_t) pdata->num);
|
||||
taosCacheRelease(tscVgroupListBuf, &pv, false);
|
||||
}
|
||||
}
|
||||
|
||||
//STableMeta* pMeta = tscTableMetaDup(pTableMeta);
|
||||
//STableMetaVgroupInfo p = { .pTableMeta = pMeta };
|
||||
|
||||
//const char* px = tNameGetTableName(pname);
|
||||
//taosHashPut(pCmd->pTableMetaMap, px, strlen(px), &p, sizeof(STableMetaVgroupInfo));
|
||||
// avoid mem leak, may should update pTableMeta
|
||||
const char* px = tNameGetTableName(pname);
|
||||
if (taosHashGet(pCmd->pTableMetaMap, px, strlen(px)) == NULL) {
|
||||
if (taosHashGet(pCmd->pTableMetaMap, name, len) == NULL) {
|
||||
STableMeta* pMeta = tscTableMetaDup(pTableMeta);
|
||||
STableMetaVgroupInfo p = { .pTableMeta = pMeta, .pVgroupInfo = NULL};
|
||||
taosHashPut(pCmd->pTableMetaMap, px, strlen(px), &p, sizeof(STableMetaVgroupInfo));
|
||||
STableMetaVgroupInfo tvi = { .pTableMeta = pMeta, .vgroupIdList = pVgroupIdList};
|
||||
taosHashPut(pCmd->pTableMetaMap, name, len, &tvi, sizeof(STableMetaVgroupInfo));
|
||||
}
|
||||
} else { // add to the retrieve table meta array list.
|
||||
} else {
|
||||
// Add to the retrieve table meta array list.
|
||||
// If the tableMeta is missing, the cached vgroup list for the corresponding super table will be ignored.
|
||||
tscDebug("0x%"PRIx64" failed to retrieve table meta %s from local buf", pSql->self, name);
|
||||
|
||||
char* t = strdup(name);
|
||||
taosArrayPush(plist, &t);
|
||||
}
|
||||
|
@ -8287,21 +8303,44 @@ static int32_t doLoadAllTableMeta(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNod
|
|||
strncpy(pTableMetaInfo->aliasName, tNameGetTableName(&pTableMetaInfo->name), tListLen(pTableMetaInfo->aliasName));
|
||||
}
|
||||
|
||||
const char* name = tNameGetTableName(&pTableMetaInfo->name);
|
||||
STableMetaVgroupInfo* p = taosHashGet(pCmd->pTableMetaMap, name, strlen(name));
|
||||
if(!p){
|
||||
tscError("taosHashGet meta null. name:%s", name);
|
||||
return TSDB_CODE_TSC_APP_ERROR;
|
||||
}
|
||||
char fname[TSDB_TABLE_FNAME_LEN] = {0};
|
||||
tNameExtractFullName(&pTableMetaInfo->name, fname);
|
||||
STableMetaVgroupInfo* p = taosHashGet(pCmd->pTableMetaMap, fname, strnlen(fname, TSDB_TABLE_FNAME_LEN));
|
||||
|
||||
pTableMetaInfo->pTableMeta = tscTableMetaDup(p->pTableMeta);
|
||||
assert(pTableMetaInfo->pTableMeta != NULL);
|
||||
|
||||
if (p->pVgroupInfo != NULL) {
|
||||
pTableMetaInfo->vgroupList = tscVgroupsInfoDup(p->pVgroupInfo);
|
||||
if (p->vgroupIdList != NULL) {
|
||||
size_t s = taosArrayGetSize(p->vgroupIdList);
|
||||
|
||||
size_t vgroupsz = sizeof(SVgroupInfo) * s + sizeof(SVgroupsInfo);
|
||||
pTableMetaInfo->vgroupList = calloc(1, vgroupsz);
|
||||
if (pTableMetaInfo->vgroupList == NULL) {
|
||||
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
pTableMetaInfo->vgroupList->numOfVgroups = (int32_t) s;
|
||||
for(int32_t j = 0; j < s; ++j) {
|
||||
int32_t* id = taosArrayGet(p->vgroupIdList, j);
|
||||
|
||||
// check if current buffer contains the vgroup info. If not, add it
|
||||
SNewVgroupInfo existVgroupInfo = {.inUse = -1,};
|
||||
taosHashGetClone(tscVgroupMap, id, sizeof(*id), NULL, &existVgroupInfo);
|
||||
|
||||
assert(existVgroupInfo.inUse >= 0);
|
||||
SVgroupInfo *pVgroup = &pTableMetaInfo->vgroupList->vgroups[j];
|
||||
|
||||
pVgroup->numOfEps = existVgroupInfo.numOfEps;
|
||||
pVgroup->vgId = existVgroupInfo.vgId;
|
||||
for (int32_t k = 0; k < existVgroupInfo.numOfEps; ++k) {
|
||||
pVgroup->epAddr[k].port = existVgroupInfo.ep[k].port;
|
||||
pVgroup->epAddr[k].fqdn = strndup(existVgroupInfo.ep[k].fqdn, TSDB_FQDN_LEN);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
return code;
|
||||
}
|
||||
|
||||
static STableMeta* extractTempTableMetaFromSubquery(SQueryInfo* pUpstream) {
|
||||
|
|
|
@ -157,7 +157,7 @@ static void tscUpdateVgroupInfo(SSqlObj *pSql, SRpcEpSet *pEpSet) {
|
|||
assert(vgId > 0);
|
||||
|
||||
SNewVgroupInfo vgroupInfo = {.vgId = -1};
|
||||
taosHashGetClone(tscVgroupMap, &vgId, sizeof(vgId), NULL, &vgroupInfo, sizeof(SNewVgroupInfo));
|
||||
taosHashGetClone(tscVgroupMap, &vgId, sizeof(vgId), NULL, &vgroupInfo);
|
||||
assert(vgroupInfo.numOfEps > 0 && vgroupInfo.vgId > 0);
|
||||
|
||||
tscDebug("before: Endpoint in use:%d, numOfEps:%d", vgroupInfo.inUse, vgroupInfo.numOfEps);
|
||||
|
@ -344,6 +344,7 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) {
|
|||
rpcFreeCont(rpcMsg->pCont);
|
||||
return;
|
||||
}
|
||||
|
||||
assert(pSql->self == handle);
|
||||
|
||||
STscObj *pObj = pSql->pTscObj;
|
||||
|
@ -389,33 +390,40 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) {
|
|||
pSql->cmd.insertParam.schemaAttached = 1;
|
||||
}
|
||||
|
||||
// single table query error need to be handled here.
|
||||
if ((cmd == TSDB_SQL_SELECT || cmd == TSDB_SQL_UPDATE_TAGS_VAL) &&
|
||||
(rpcMsg->code == TSDB_CODE_TDB_INVALID_TABLE_ID ||
|
||||
rpcMsg->code == TSDB_CODE_VND_INVALID_VGROUP_ID ||
|
||||
rpcMsg->code == TSDB_CODE_RPC_NETWORK_UNAVAIL ||
|
||||
(((rpcMsg->code == TSDB_CODE_TDB_INVALID_TABLE_ID || // change the retry procedure
|
||||
rpcMsg->code == TSDB_CODE_VND_INVALID_VGROUP_ID)) ||
|
||||
rpcMsg->code == TSDB_CODE_RPC_NETWORK_UNAVAIL || // change the retry procedure
|
||||
rpcMsg->code == TSDB_CODE_APP_NOT_READY)) {
|
||||
|
||||
pSql->retry++;
|
||||
tscWarn("0x%"PRIx64" it shall renew table meta, code:%s, retry:%d", pSql->self, tstrerror(rpcMsg->code), pSql->retry);
|
||||
if (TSDB_QUERY_HAS_TYPE(pQueryInfo->type, (TSDB_QUERY_TYPE_STABLE_SUBQUERY | TSDB_QUERY_TYPE_SUBQUERY |
|
||||
TSDB_QUERY_TYPE_TAG_FILTER_QUERY)) &&
|
||||
!TSDB_QUERY_HAS_TYPE(pQueryInfo->type, TSDB_QUERY_TYPE_PROJECTION_QUERY)) {
|
||||
// do nothing in case of super table subquery
|
||||
} else {
|
||||
pSql->retry += 1;
|
||||
tscWarn("0x%" PRIx64 " it shall renew table meta, code:%s, retry:%d", pSql->self, tstrerror(rpcMsg->code), pSql->retry);
|
||||
|
||||
pSql->res.code = rpcMsg->code; // keep the previous error code
|
||||
if (pSql->retry > pSql->maxRetry) {
|
||||
tscError("0x%"PRIx64" max retry %d reached, give up", pSql->self, pSql->maxRetry);
|
||||
} else {
|
||||
// wait for a little bit moment and then retry
|
||||
// todo do not sleep in rpc callback thread, add this process into queueu to process
|
||||
if (rpcMsg->code == TSDB_CODE_APP_NOT_READY || rpcMsg->code == TSDB_CODE_VND_INVALID_VGROUP_ID) {
|
||||
int32_t duration = getWaitingTimeInterval(pSql->retry);
|
||||
taosMsleep(duration);
|
||||
}
|
||||
pSql->res.code = rpcMsg->code; // keep the previous error code
|
||||
if (pSql->retry > pSql->maxRetry) {
|
||||
tscError("0x%" PRIx64 " max retry %d reached, give up", pSql->self, pSql->maxRetry);
|
||||
} else {
|
||||
// wait for a little bit moment and then retry
|
||||
// todo do not sleep in rpc callback thread, add this process into queue to process
|
||||
if (rpcMsg->code == TSDB_CODE_APP_NOT_READY || rpcMsg->code == TSDB_CODE_VND_INVALID_VGROUP_ID) {
|
||||
int32_t duration = getWaitingTimeInterval(pSql->retry);
|
||||
taosMsleep(duration);
|
||||
}
|
||||
|
||||
pSql->retryReason = rpcMsg->code;
|
||||
rpcMsg->code = tscRenewTableMeta(pSql, 0);
|
||||
// if there is an error occurring, proceed to the following error handling procedure.
|
||||
if (rpcMsg->code == TSDB_CODE_TSC_ACTION_IN_PROGRESS) {
|
||||
taosReleaseRef(tscObjRef, handle);
|
||||
rpcFreeCont(rpcMsg->pCont);
|
||||
return;
|
||||
pSql->retryReason = rpcMsg->code;
|
||||
rpcMsg->code = tscRenewTableMeta(pSql, 0);
|
||||
// if there is an error occurring, proceed to the following error handling procedure.
|
||||
if (rpcMsg->code == TSDB_CODE_TSC_ACTION_IN_PROGRESS) {
|
||||
taosReleaseRef(tscObjRef, handle);
|
||||
rpcFreeCont(rpcMsg->pCont);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -614,7 +622,7 @@ int tscBuildSubmitMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
|||
pSql->cmd.msgType = TSDB_MSG_TYPE_SUBMIT;
|
||||
|
||||
SNewVgroupInfo vgroupInfo = {0};
|
||||
taosHashGetClone(tscVgroupMap, &pTableMeta->vgId, sizeof(pTableMeta->vgId), NULL, &vgroupInfo, sizeof(SNewVgroupInfo));
|
||||
taosHashGetClone(tscVgroupMap, &pTableMeta->vgId, sizeof(pTableMeta->vgId), NULL, &vgroupInfo);
|
||||
tscDumpEpSetFromVgroupInfo(&pSql->epSet, &vgroupInfo);
|
||||
|
||||
tscDebug("0x%"PRIx64" submit msg built, numberOfEP:%d", pSql->self, pSql->epSet.numOfEps);
|
||||
|
@ -687,7 +695,7 @@ static char *doSerializeTableInfo(SQueryTableMsg *pQueryMsg, SSqlObj *pSql, STab
|
|||
vgId = pTableMeta->vgId;
|
||||
|
||||
SNewVgroupInfo vgroupInfo = {0};
|
||||
taosHashGetClone(tscVgroupMap, &pTableMeta->vgId, sizeof(pTableMeta->vgId), NULL, &vgroupInfo, sizeof(SNewVgroupInfo));
|
||||
taosHashGetClone(tscVgroupMap, &pTableMeta->vgId, sizeof(pTableMeta->vgId), NULL, &vgroupInfo);
|
||||
tscDumpEpSetFromVgroupInfo(&pSql->epSet, &vgroupInfo);
|
||||
}
|
||||
|
||||
|
@ -1584,7 +1592,7 @@ int tscBuildUpdateTagMsg(SSqlObj* pSql, SSqlInfo *pInfo) {
|
|||
STableMeta *pTableMeta = tscGetMetaInfo(pQueryInfo, 0)->pTableMeta;
|
||||
|
||||
SNewVgroupInfo vgroupInfo = {.vgId = -1};
|
||||
taosHashGetClone(tscVgroupMap, &pTableMeta->vgId, sizeof(pTableMeta->vgId), NULL, &vgroupInfo, sizeof(SNewVgroupInfo));
|
||||
taosHashGetClone(tscVgroupMap, &pTableMeta->vgId, sizeof(pTableMeta->vgId), NULL, &vgroupInfo);
|
||||
assert(vgroupInfo.vgId > 0);
|
||||
|
||||
tscDumpEpSetFromVgroupInfo(&pSql->epSet, &vgroupInfo);
|
||||
|
@ -1811,34 +1819,6 @@ int tscBuildConnectMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
|||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
int tscBuildTableMetaMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
||||
#if 0
|
||||
SSqlCmd *pCmd = &pSql->cmd;
|
||||
SQueryInfo *pQueryInfo = tscGetQueryInfo(&pSql->cmd);
|
||||
|
||||
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
||||
STableInfoMsg *pInfoMsg = (STableInfoMsg *)pCmd->payload;
|
||||
|
||||
int32_t code = tNameExtractFullName(&pTableMetaInfo->name, pInfoMsg->tableFname);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
return TSDB_CODE_TSC_INVALID_OPERATION;
|
||||
}
|
||||
|
||||
pInfoMsg->createFlag = htons(pSql->cmd.autoCreated ? 1 : 0);
|
||||
|
||||
char *pMsg = (char *)pInfoMsg + sizeof(STableInfoMsg);
|
||||
|
||||
if (pCmd->autoCreated && pCmd->tagData.dataLen != 0) {
|
||||
pMsg = serializeTagData(&pCmd->tagData, pMsg);
|
||||
}
|
||||
|
||||
pCmd->payloadLen = (int32_t)(pMsg - (char*)pInfoMsg);
|
||||
pCmd->msgType = TSDB_MSG_TYPE_CM_TABLE_META;
|
||||
#endif
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* multi table meta req pkg format:
|
||||
* |SMultiTableInfoMsg | tableId0 | tableId1 | tableId2 | ......
|
||||
|
@ -1998,20 +1978,17 @@ static int32_t tableMetaMsgConvert(STableMetaMsg* pMetaMsg) {
|
|||
}
|
||||
|
||||
// update the vgroupInfo if needed
|
||||
static void doUpdateVgroupInfo(STableMeta *pTableMeta, SVgroupMsg *pVgroupMsg) {
|
||||
if (pTableMeta->vgId > 0) {
|
||||
int32_t vgId = pTableMeta->vgId;
|
||||
assert(pTableMeta->tableType != TSDB_SUPER_TABLE);
|
||||
static void doUpdateVgroupInfo(int32_t vgId, SVgroupMsg *pVgroupMsg) {
|
||||
assert(vgId > 0);
|
||||
|
||||
SNewVgroupInfo vgroupInfo = {.inUse = -1};
|
||||
taosHashGetClone(tscVgroupMap, &vgId, sizeof(vgId), NULL, &vgroupInfo, sizeof(SNewVgroupInfo));
|
||||
SNewVgroupInfo vgroupInfo = {.inUse = -1};
|
||||
taosHashGetClone(tscVgroupMap, &vgId, sizeof(vgId), NULL, &vgroupInfo);
|
||||
|
||||
// vgroup info exists, compare with it
|
||||
if (((vgroupInfo.inUse >= 0) && !vgroupInfoIdentical(&vgroupInfo, pVgroupMsg)) || (vgroupInfo.inUse < 0)) {
|
||||
vgroupInfo = createNewVgroupInfo(pVgroupMsg);
|
||||
taosHashPut(tscVgroupMap, &vgId, sizeof(vgId), &vgroupInfo, sizeof(vgroupInfo));
|
||||
tscDebug("add new VgroupInfo, vgId:%d, total cached:%d", vgId, (int32_t) taosHashGetSize(tscVgroupMap));
|
||||
}
|
||||
// vgroup info exists, compare with it
|
||||
if (((vgroupInfo.inUse >= 0) && !vgroupInfoIdentical(&vgroupInfo, pVgroupMsg)) || (vgroupInfo.inUse < 0)) {
|
||||
vgroupInfo = createNewVgroupInfo(pVgroupMsg);
|
||||
taosHashPut(tscVgroupMap, &vgId, sizeof(vgId), &vgroupInfo, sizeof(vgroupInfo));
|
||||
tscDebug("add/update new VgroupInfo, vgId:%d, total cached:%d", vgId, (int32_t) taosHashGetSize(tscVgroupMap));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2024,18 +2001,18 @@ static void doAddTableMetaToLocalBuf(STableMeta* pTableMeta, STableMetaMsg* pMet
|
|||
if (updateSTable) {
|
||||
STableMeta* pSupTableMeta = createSuperTableMeta(pMetaMsg);
|
||||
uint32_t size = tscGetTableMetaSize(pSupTableMeta);
|
||||
int32_t code = taosHashPut(tscTableMetaInfo, pTableMeta->sTableName, len, pSupTableMeta, size);
|
||||
int32_t code = taosHashPut(tscTableMetaMap, pTableMeta->sTableName, len, pSupTableMeta, size);
|
||||
assert(code == TSDB_CODE_SUCCESS);
|
||||
|
||||
tfree(pSupTableMeta);
|
||||
}
|
||||
|
||||
CChildTableMeta* cMeta = tscCreateChildMeta(pTableMeta);
|
||||
taosHashPut(tscTableMetaInfo, pMetaMsg->tableFname, strlen(pMetaMsg->tableFname), cMeta, sizeof(CChildTableMeta));
|
||||
taosHashPut(tscTableMetaMap, pMetaMsg->tableFname, strlen(pMetaMsg->tableFname), cMeta, sizeof(CChildTableMeta));
|
||||
tfree(cMeta);
|
||||
} else {
|
||||
uint32_t s = tscGetTableMetaSize(pTableMeta);
|
||||
taosHashPut(tscTableMetaInfo, pMetaMsg->tableFname, strlen(pMetaMsg->tableFname), pTableMeta, s);
|
||||
taosHashPut(tscTableMetaMap, pMetaMsg->tableFname, strlen(pMetaMsg->tableFname), pTableMeta, s);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2064,7 +2041,9 @@ int tscProcessTableMetaRsp(SSqlObj *pSql) {
|
|||
assert(strncmp(pMetaMsg->tableFname, name, tListLen(pMetaMsg->tableFname)) == 0);
|
||||
|
||||
doAddTableMetaToLocalBuf(pTableMeta, pMetaMsg, true);
|
||||
doUpdateVgroupInfo(pTableMeta, &pMetaMsg->vgroup);
|
||||
if (pTableMeta->tableType != TSDB_SUPER_TABLE) {
|
||||
doUpdateVgroupInfo(pTableMeta->vgId, &pMetaMsg->vgroup);
|
||||
}
|
||||
|
||||
tscDebug("0x%"PRIx64" recv table meta, uid:%" PRIu64 ", tid:%d, name:%s, numOfCols:%d, numOfTags:%d", pSql->self,
|
||||
pTableMeta->id.uid, pTableMeta->id.tid, tNameGetTableName(&pTableMetaInfo->name), pTableMeta->tableInfo.numOfColumns,
|
||||
|
@ -2074,6 +2053,37 @@ int tscProcessTableMetaRsp(SSqlObj *pSql) {
|
|||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
static SArray* createVgroupIdListFromMsg(char* pMsg, SHashObj* pSet, char* name, int32_t* size, uint64_t id) {
|
||||
SVgroupsMsg *pVgroupMsg = (SVgroupsMsg *)pMsg;
|
||||
|
||||
pVgroupMsg->numOfVgroups = htonl(pVgroupMsg->numOfVgroups);
|
||||
*size = (int32_t)(sizeof(SVgroupMsg) * pVgroupMsg->numOfVgroups + sizeof(SVgroupsMsg));
|
||||
|
||||
SArray* vgroupIdList = taosArrayInit(pVgroupMsg->numOfVgroups, sizeof(int32_t));
|
||||
|
||||
if (pVgroupMsg->numOfVgroups <= 0) {
|
||||
tscDebug("0x%" PRIx64 " empty vgroup id list, no corresponding tables for stable:%s", id, name);
|
||||
} else {
|
||||
// just init, no need to lock
|
||||
for (int32_t j = 0; j < pVgroupMsg->numOfVgroups; ++j) {
|
||||
SVgroupMsg *vmsg = &pVgroupMsg->vgroups[j];
|
||||
vmsg->vgId = htonl(vmsg->vgId);
|
||||
for (int32_t k = 0; k < vmsg->numOfEps; ++k) {
|
||||
vmsg->epAddr[k].port = htons(vmsg->epAddr[k].port);
|
||||
}
|
||||
|
||||
taosArrayPush(vgroupIdList, &vmsg->vgId);
|
||||
|
||||
if (taosHashGet(pSet, &vmsg->vgId, sizeof(vmsg->vgId)) == NULL) {
|
||||
taosHashPut(pSet, &vmsg->vgId, sizeof(vmsg->vgId), "", 0);
|
||||
doUpdateVgroupInfo(vmsg->vgId, vmsg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return vgroupIdList;
|
||||
}
|
||||
|
||||
static SVgroupsInfo* createVgroupInfoFromMsg(char* pMsg, int32_t* size, uint64_t id) {
|
||||
SVgroupsMsg *pVgroupMsg = (SVgroupsMsg *)pMsg;
|
||||
pVgroupMsg->numOfVgroups = htonl(pVgroupMsg->numOfVgroups);
|
||||
|
@ -2098,24 +2108,14 @@ static SVgroupsInfo* createVgroupInfoFromMsg(char* pMsg, int32_t* size, uint64_t
|
|||
vmsg->epAddr[k].port = htons(vmsg->epAddr[k].port);
|
||||
}
|
||||
|
||||
SNewVgroupInfo newVi = createNewVgroupInfo(vmsg);
|
||||
pVgroup->numOfEps = newVi.numOfEps;
|
||||
pVgroup->vgId = newVi.vgId;
|
||||
pVgroup->numOfEps = vmsg->numOfEps;
|
||||
pVgroup->vgId = vmsg->vgId;
|
||||
for (int32_t k = 0; k < vmsg->numOfEps; ++k) {
|
||||
pVgroup->epAddr[k].port = newVi.ep[k].port;
|
||||
pVgroup->epAddr[k].fqdn = strndup(newVi.ep[k].fqdn, TSDB_FQDN_LEN);
|
||||
pVgroup->epAddr[k].port = vmsg->epAddr[k].port;
|
||||
pVgroup->epAddr[k].fqdn = strndup(vmsg->epAddr[k].fqdn, TSDB_FQDN_LEN);
|
||||
}
|
||||
|
||||
// check if current buffer contains the vgroup info.
|
||||
// If not, add it
|
||||
SNewVgroupInfo existVgroupInfo = {.inUse = -1};
|
||||
taosHashGetClone(tscVgroupMap, &newVi.vgId, sizeof(newVi.vgId), NULL, &existVgroupInfo, sizeof(SNewVgroupInfo));
|
||||
|
||||
if (((existVgroupInfo.inUse >= 0) && !vgroupInfoIdentical(&existVgroupInfo, vmsg)) ||
|
||||
(existVgroupInfo.inUse < 0)) { // vgroup info exists, compare with it
|
||||
taosHashPut(tscVgroupMap, &newVi.vgId, sizeof(newVi.vgId), &newVi, sizeof(newVi));
|
||||
tscDebug("0x%" PRIx64 " add new VgroupInfo, vgId:%d, total cached:%d", id, newVi.vgId, (int32_t)taosHashGetSize(tscVgroupMap));
|
||||
}
|
||||
doUpdateVgroupInfo(pVgroup->vgId, vmsg);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2193,6 +2193,8 @@ int tscProcessMultiTableMetaRsp(SSqlObj *pSql) {
|
|||
|
||||
char* buf = NULL;
|
||||
char* pMsg = pMultiMeta->meta;
|
||||
|
||||
// decompresss the message payload
|
||||
if (pMultiMeta->compressed) {
|
||||
buf = malloc(pMultiMeta->rawLen - sizeof(SMultiTableMeta));
|
||||
int32_t len = tsDecompressString(pMultiMeta->meta, pMultiMeta->contLen - sizeof(SMultiTableMeta), 1,
|
||||
|
@ -2225,15 +2227,13 @@ int tscProcessMultiTableMetaRsp(SSqlObj *pSql) {
|
|||
return TSDB_CODE_TSC_INVALID_VALUE;
|
||||
}
|
||||
|
||||
SName sn = {0};
|
||||
tNameFromString(&sn, pMetaMsg->tableFname, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE);
|
||||
|
||||
if (pMultiMeta->metaClone == 1 || pTableMeta->tableType == TSDB_SUPER_TABLE) {
|
||||
STableMetaVgroupInfo p = {.pTableMeta = pTableMeta,};
|
||||
size_t keyLen = strnlen(pMetaMsg->tableFname, TSDB_TABLE_FNAME_LEN);
|
||||
void* t = taosHashGet(pParentCmd->pTableMetaMap, pMetaMsg->tableFname, keyLen);
|
||||
assert(t == NULL);
|
||||
|
||||
const char* tableName = tNameGetTableName(&sn);
|
||||
size_t keyLen = strlen(tableName);
|
||||
taosHashPut(pParentCmd->pTableMetaMap, tableName, keyLen, &p, sizeof(STableMetaVgroupInfo));
|
||||
taosHashPut(pParentCmd->pTableMetaMap, pMetaMsg->tableFname, keyLen, &p, sizeof(STableMetaVgroupInfo));
|
||||
} else {
|
||||
freeMeta = true;
|
||||
}
|
||||
|
@ -2251,7 +2251,7 @@ int tscProcessMultiTableMetaRsp(SSqlObj *pSql) {
|
|||
// for each vgroup, only update the information once.
|
||||
int64_t vgId = pMetaMsg->vgroup.vgId;
|
||||
if (pTableMeta->tableType != TSDB_SUPER_TABLE && taosHashGet(pSet, &vgId, sizeof(vgId)) == NULL) {
|
||||
doUpdateVgroupInfo(pTableMeta, &pMetaMsg->vgroup);
|
||||
doUpdateVgroupInfo((int32_t) vgId, &pMetaMsg->vgroup);
|
||||
taosHashPut(pSet, &vgId, sizeof(vgId), "", 0);
|
||||
}
|
||||
|
||||
|
@ -2262,18 +2262,33 @@ int tscProcessMultiTableMetaRsp(SSqlObj *pSql) {
|
|||
}
|
||||
|
||||
for(int32_t i = 0; i < pMultiMeta->numOfVgroup; ++i) {
|
||||
char* name = pMsg;
|
||||
pMsg += TSDB_TABLE_NAME_LEN;
|
||||
char fname[TSDB_TABLE_FNAME_LEN] = {0};
|
||||
tstrncpy(fname, pMsg, TSDB_TABLE_FNAME_LEN);
|
||||
size_t len = strnlen(fname, TSDB_TABLE_FNAME_LEN);
|
||||
|
||||
STableMetaVgroupInfo* p = taosHashGet(pParentCmd->pTableMetaMap, name, strnlen(name, TSDB_TABLE_NAME_LEN));
|
||||
pMsg += TSDB_TABLE_FNAME_LEN;
|
||||
|
||||
STableMetaVgroupInfo* p = taosHashGet(pParentCmd->pTableMetaMap, fname, len);
|
||||
assert(p != NULL);
|
||||
|
||||
int32_t size = 0;
|
||||
if (p->pVgroupInfo!= NULL) {
|
||||
tscVgroupInfoClear(p->pVgroupInfo);
|
||||
//tfree(p->pTableMeta);
|
||||
if (p->vgroupIdList!= NULL) {
|
||||
taosArrayDestroy(p->vgroupIdList);
|
||||
}
|
||||
p->pVgroupInfo = createVgroupInfoFromMsg(pMsg, &size, pSql->self);
|
||||
|
||||
p->vgroupIdList = createVgroupIdListFromMsg(pMsg, pSet, fname, &size, pSql->self);
|
||||
|
||||
int32_t numOfVgId = (int32_t) taosArrayGetSize(p->vgroupIdList);
|
||||
int32_t s = sizeof(tFilePage) + numOfVgId * sizeof(int32_t);
|
||||
|
||||
tFilePage* idList = calloc(1, s);
|
||||
idList->num = numOfVgId;
|
||||
memcpy(idList->data, TARRAY_GET_START(p->vgroupIdList), numOfVgId * sizeof(int32_t));
|
||||
|
||||
void* idListInst = taosCachePut(tscVgroupListBuf, fname, len, idList, s, 5000);
|
||||
taosCacheRelease(tscVgroupListBuf, (void*) &idListInst, false);
|
||||
|
||||
tfree(idList);
|
||||
pMsg += size;
|
||||
}
|
||||
|
||||
|
@ -2338,14 +2353,18 @@ int tscProcessSTableVgroupRsp(SSqlObj *pSql) {
|
|||
SSqlCmd* pCmd = &parent->cmd;
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfo(pCmd);
|
||||
|
||||
char fName[TSDB_TABLE_FNAME_LEN] = {0};
|
||||
for(int32_t i = 0; i < pStableVgroup->numOfTables; ++i) {
|
||||
char* name = pMsg;
|
||||
pMsg += TSDB_TABLE_NAME_LEN;
|
||||
pMsg += TSDB_TABLE_FNAME_LEN;
|
||||
|
||||
STableMetaInfo *pInfo = NULL;
|
||||
for(int32_t j = 0; j < pQueryInfo->numOfTables; ++j) {
|
||||
STableMetaInfo *pInfo1 = tscGetTableMetaInfoFromCmd(pCmd, j);
|
||||
if (strcmp(name, tNameGetTableName(&pInfo1->name)) != 0) {
|
||||
memset(fName, 0, tListLen(fName));
|
||||
|
||||
tNameExtractFullName(&pInfo1->name, fName);
|
||||
if (strcmp(name, fName) != 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -2508,24 +2527,20 @@ int tscProcessUseDbRsp(SSqlObj *pSql) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
//todo only invalid the buffered data that belongs to dropped databases
|
||||
int tscProcessDropDbRsp(SSqlObj *pSql) {
|
||||
//TODO LOCK DB WHEN MODIFY IT
|
||||
//pSql->pTscObj->db[0] = 0;
|
||||
|
||||
taosHashClear(tscTableMetaInfo);
|
||||
taosHashClear(tscTableMetaMap);
|
||||
taosHashClear(tscVgroupMap);
|
||||
taosCacheEmpty(tscVgroupListBuf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tscProcessDropTableRsp(SSqlObj *pSql) {
|
||||
STableMetaInfo *pTableMetaInfo = tscGetTableMetaInfoFromCmd(&pSql->cmd, 0);
|
||||
|
||||
//The cached tableMeta is expired in this case, so clean it in hash table
|
||||
char name[TSDB_TABLE_FNAME_LEN] = {0};
|
||||
tNameExtractFullName(&pTableMetaInfo->name, name);
|
||||
|
||||
taosHashRemove(tscTableMetaInfo, name, strnlen(name, TSDB_TABLE_FNAME_LEN));
|
||||
tscDebug("0x%"PRIx64" remove table meta after drop table:%s, numOfRemain:%d", pSql->self, name, (int32_t) taosHashGetSize(tscTableMetaInfo));
|
||||
|
||||
tscRemoveTableMetaBuf(pTableMetaInfo, pSql->self);
|
||||
tfree(pTableMetaInfo->pTableMeta);
|
||||
return 0;
|
||||
}
|
||||
|
@ -2539,11 +2554,11 @@ int tscProcessAlterTableMsgRsp(SSqlObj *pSql) {
|
|||
tscDebug("0x%"PRIx64" remove tableMeta in hashMap after alter-table: %s", pSql->self, name);
|
||||
|
||||
bool isSuperTable = UTIL_TABLE_IS_SUPER_TABLE(pTableMetaInfo);
|
||||
taosHashRemove(tscTableMetaInfo, name, strnlen(name, TSDB_TABLE_FNAME_LEN));
|
||||
taosHashRemove(tscTableMetaMap, name, strnlen(name, TSDB_TABLE_FNAME_LEN));
|
||||
tfree(pTableMetaInfo->pTableMeta);
|
||||
|
||||
if (isSuperTable) { // if it is a super table, iterate the hashTable and remove all the childTableMeta
|
||||
taosHashClear(tscTableMetaInfo);
|
||||
taosHashClear(tscTableMetaMap);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -2810,7 +2825,7 @@ int32_t tscGetTableMetaImpl(SSqlObj* pSql, STableMetaInfo *pTableMetaInfo, bool
|
|||
tNameExtractFullName(&pTableMetaInfo->name, name);
|
||||
|
||||
size_t len = strlen(name);
|
||||
taosHashGetClone(tscTableMetaInfo, name, len, NULL, pTableMetaInfo->pTableMeta, -1);
|
||||
taosHashGetClone(tscTableMetaMap, name, len, NULL, pTableMetaInfo->pTableMeta);
|
||||
|
||||
// TODO resize the tableMeta
|
||||
assert(size < 80 * TSDB_MAX_COLUMNS);
|
||||
|
@ -2901,6 +2916,10 @@ int32_t tscGetUdfFromNode(SSqlObj *pSql, SQueryInfo* pQueryInfo) {
|
|||
return code;
|
||||
}
|
||||
|
||||
static void freeElem(void* p) {
|
||||
tfree(*(char**)p);
|
||||
}
|
||||
|
||||
/**
|
||||
* retrieve table meta from mnode, and then update the local table meta hashmap.
|
||||
* @param pSql sql object
|
||||
|
@ -2908,7 +2927,7 @@ int32_t tscGetUdfFromNode(SSqlObj *pSql, SQueryInfo* pQueryInfo) {
|
|||
* @return status code
|
||||
*/
|
||||
int tscRenewTableMeta(SSqlObj *pSql, int32_t tableIndex) {
|
||||
SSqlCmd *pCmd = &pSql->cmd;
|
||||
SSqlCmd* pCmd = &pSql->cmd;
|
||||
|
||||
SQueryInfo *pQueryInfo = tscGetQueryInfo(pCmd);
|
||||
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, tableIndex);
|
||||
|
@ -2922,15 +2941,26 @@ int tscRenewTableMeta(SSqlObj *pSql, int32_t tableIndex) {
|
|||
|
||||
STableMeta* pTableMeta = pTableMetaInfo->pTableMeta;
|
||||
if (pTableMeta) {
|
||||
tscDebug("0x%"PRIx64" update table meta:%s, old meta numOfTags:%d, numOfCols:%d, uid:%" PRId64, pSql->self, name,
|
||||
tscDebug("0x%"PRIx64" update table meta:%s, old meta numOfTags:%d, numOfCols:%d, uid:%" PRIu64, pSql->self, name,
|
||||
tscGetNumOfTags(pTableMeta), tscGetNumOfColumns(pTableMeta), pTableMeta->id.uid);
|
||||
}
|
||||
|
||||
// remove stored tableMeta info in hash table
|
||||
size_t len = strlen(name);
|
||||
taosHashRemove(tscTableMetaInfo, name, len);
|
||||
tscRemoveTableMetaBuf(pTableMetaInfo, pSql->self);
|
||||
|
||||
return getTableMetaFromMnode(pSql, pTableMetaInfo, false);
|
||||
pCmd->pTableMetaMap = tscCleanupTableMetaMap(pCmd->pTableMetaMap);
|
||||
pCmd->pTableMetaMap = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK);
|
||||
|
||||
SArray* pNameList = taosArrayInit(1, POINTER_BYTES);
|
||||
SArray* vgroupList = taosArrayInit(1, POINTER_BYTES);
|
||||
|
||||
char* n = strdup(name);
|
||||
taosArrayPush(pNameList, &n);
|
||||
code = getMultiTableMetaFromMnode(pSql, pNameList, vgroupList, NULL, tscTableMetaCallBack, true);
|
||||
taosArrayDestroyEx(pNameList, freeElem);
|
||||
taosArrayDestroyEx(vgroupList, freeElem);
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
static bool allVgroupInfoRetrieved(SQueryInfo* pQueryInfo) {
|
||||
|
@ -2980,8 +3010,6 @@ int tscGetSTableVgroupInfo(SSqlObj *pSql, SQueryInfo* pQueryInfo) {
|
|||
tscDebug("0x%"PRIx64" svgroupRid from %" PRId64 " to %" PRId64 , pSql->self, pSql->svgroupRid, pNew->self);
|
||||
|
||||
pSql->svgroupRid = pNew->self;
|
||||
|
||||
|
||||
tscDebug("0x%"PRIx64" new sqlObj:%p to get vgroupInfo, numOfTables:%d", pSql->self, pNew, pNewQueryInfo->numOfTables);
|
||||
|
||||
pNew->fp = tscTableMetaCallBack;
|
||||
|
@ -3024,7 +3052,6 @@ void tscInitMsgsFp() {
|
|||
|
||||
tscBuildMsg[TSDB_SQL_CONNECT] = tscBuildConnectMsg;
|
||||
tscBuildMsg[TSDB_SQL_USE_DB] = tscBuildUseDbMsg;
|
||||
// tscBuildMsg[TSDB_SQL_META] = tscBuildTableMetaMsg;
|
||||
tscBuildMsg[TSDB_SQL_STABLEVGROUP] = tscBuildSTableVgroupMsg;
|
||||
tscBuildMsg[TSDB_SQL_RETRIEVE_FUNC] = tscBuildRetrieveFuncMsg;
|
||||
|
||||
|
|
|
@ -206,7 +206,7 @@ static void tscProcessStreamQueryCallback(void *param, TAOS_RES *tres, int numOf
|
|||
char name[TSDB_TABLE_FNAME_LEN] = {0};
|
||||
tNameExtractFullName(&pTableMetaInfo->name, name);
|
||||
|
||||
taosHashRemove(tscTableMetaInfo, name, strnlen(name, TSDB_TABLE_FNAME_LEN));
|
||||
taosHashRemove(tscTableMetaMap, name, strnlen(name, TSDB_TABLE_FNAME_LEN));
|
||||
|
||||
tfree(pTableMetaInfo->pTableMeta);
|
||||
|
||||
|
|
|
@ -2705,8 +2705,7 @@ void tscHandleSubqueryError(SRetrieveSupport *trsupport, SSqlObj *pSql, int numO
|
|||
tstrerror(pParentSql->res.code));
|
||||
|
||||
// release allocated resource
|
||||
tscDestroyGlobalMergerEnv(trsupport->pExtMemBuffer, trsupport->pOrderDescriptor,
|
||||
pState->numOfSub);
|
||||
tscDestroyGlobalMergerEnv(trsupport->pExtMemBuffer, trsupport->pOrderDescriptor, pState->numOfSub);
|
||||
|
||||
tscFreeRetrieveSup(pSql);
|
||||
|
||||
|
@ -2714,7 +2713,35 @@ void tscHandleSubqueryError(SRetrieveSupport *trsupport, SSqlObj *pSql, int numO
|
|||
SQueryInfo *pQueryInfo = tscGetQueryInfo(&pParentSql->cmd);
|
||||
|
||||
if (!TSDB_QUERY_HAS_TYPE(pQueryInfo->type, TSDB_QUERY_TYPE_JOIN_SEC_STAGE)) {
|
||||
(*pParentSql->fp)(pParentSql->param, pParentSql, pParentSql->res.code);
|
||||
|
||||
int32_t code = pParentSql->res.code;
|
||||
if ((code == TSDB_CODE_TDB_INVALID_TABLE_ID || code == TSDB_CODE_VND_INVALID_VGROUP_ID) && pParentSql->retry < pParentSql->maxRetry) {
|
||||
// remove the cached tableMeta and vgroup id list, and then parse the sql again
|
||||
STableMetaInfo* pTableMetaInfo = tscGetTableMetaInfoFromCmd(&pParentSql->cmd, 0);
|
||||
tscRemoveTableMetaBuf(pTableMetaInfo, pParentSql->self);
|
||||
|
||||
tscResetSqlCmd(&pParentSql->cmd, true);
|
||||
pParentSql->res.code = TSDB_CODE_SUCCESS;
|
||||
pParentSql->retry++;
|
||||
|
||||
tscDebug("0x%"PRIx64" retry parse sql and send query, prev error: %s, retry:%d", pParentSql->self,
|
||||
tstrerror(code), pParentSql->retry);
|
||||
|
||||
code = tsParseSql(pParentSql, true);
|
||||
if (code == TSDB_CODE_TSC_ACTION_IN_PROGRESS) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
pParentSql->res.code = code;
|
||||
tscAsyncResultOnError(pParentSql);
|
||||
return;
|
||||
}
|
||||
|
||||
executeQuery(pParentSql, pQueryInfo);
|
||||
} else {
|
||||
(*pParentSql->fp)(pParentSql->param, pParentSql, pParentSql->res.code);
|
||||
}
|
||||
} else { // regular super table query
|
||||
if (pParentSql->res.code != TSDB_CODE_SUCCESS) {
|
||||
tscAsyncResultOnError(pParentSql);
|
||||
|
@ -3000,7 +3027,7 @@ void tscRetrieveDataRes(void *param, TAOS_RES *tres, int code) {
|
|||
if (taos_errno(pSql) != TSDB_CODE_SUCCESS) {
|
||||
assert(code == taos_errno(pSql));
|
||||
|
||||
if (trsupport->numOfRetry++ < MAX_NUM_OF_SUBQUERY_RETRY) {
|
||||
if (trsupport->numOfRetry++ < MAX_NUM_OF_SUBQUERY_RETRY && (code != TSDB_CODE_TDB_INVALID_TABLE_ID)) {
|
||||
tscError("0x%"PRIx64" sub:0x%"PRIx64" failed code:%s, retry:%d", pParentSql->self, pSql->self, tstrerror(code), trsupport->numOfRetry);
|
||||
|
||||
int32_t sent = 0;
|
||||
|
@ -3009,7 +3036,7 @@ void tscRetrieveDataRes(void *param, TAOS_RES *tres, int code) {
|
|||
return;
|
||||
}
|
||||
} else {
|
||||
tscError("0x%"PRIx64" sub:0x%"PRIx64" reach the max retry times, set global code:%s", pParentSql->self, pSql->self, tstrerror(code));
|
||||
tscError("0x%"PRIx64" sub:0x%"PRIx64" reach the max retry times or no need to retry, set global code:%s", pParentSql->self, pSql->self, tstrerror(code));
|
||||
atomic_val_compare_exchange_32(&pParentSql->res.code, TSDB_CODE_SUCCESS, code); // set global code and abort
|
||||
}
|
||||
|
||||
|
@ -3129,12 +3156,10 @@ static void multiVnodeInsertFinalize(void* param, TAOS_RES* tres, int numOfRows)
|
|||
for(int32_t i = 0; i < pParentObj->cmd.insertParam.numOfTables; ++i) {
|
||||
char name[TSDB_TABLE_FNAME_LEN] = {0};
|
||||
tNameExtractFullName(pParentObj->cmd.insertParam.pTableNameList[i], name);
|
||||
taosHashRemove(tscTableMetaInfo, name, strnlen(name, TSDB_TABLE_FNAME_LEN));
|
||||
taosHashRemove(tscTableMetaMap, name, strnlen(name, TSDB_TABLE_FNAME_LEN));
|
||||
}
|
||||
|
||||
pParentObj->res.code = TSDB_CODE_SUCCESS;
|
||||
// pParentObj->cmd.parseFinished = false;
|
||||
|
||||
tscResetSqlCmd(&pParentObj->cmd, false);
|
||||
|
||||
// in case of insert, redo parsing the sql string and build new submit data block for two reasons:
|
||||
|
|
|
@ -19,15 +19,12 @@
|
|||
#include "trpc.h"
|
||||
#include "tnote.h"
|
||||
#include "ttimer.h"
|
||||
#include "tutil.h"
|
||||
#include "tsched.h"
|
||||
#include "tscLog.h"
|
||||
#include "tscUtil.h"
|
||||
#include "tsclient.h"
|
||||
#include "tglobal.h"
|
||||
#include "tconfig.h"
|
||||
#include "ttimezone.h"
|
||||
#include "tlocale.h"
|
||||
#include "qScript.h"
|
||||
|
||||
// global, not configurable
|
||||
|
@ -36,8 +33,10 @@
|
|||
|
||||
int32_t sentinel = TSC_VAR_NOT_RELEASE;
|
||||
|
||||
SHashObj *tscVgroupMap; // hash map to keep the global vgroup info
|
||||
SHashObj *tscTableMetaInfo; // table meta info
|
||||
SHashObj *tscVgroupMap; // hash map to keep the vgroup info from mnode
|
||||
SHashObj *tscTableMetaMap; // table meta info buffer
|
||||
SCacheObj *tscVgroupListBuf; // super table vgroup list information, only survives 5 seconds for each super table vgroup list
|
||||
|
||||
int32_t tscObjRef = -1;
|
||||
void *tscTmr;
|
||||
void *tscQhandle;
|
||||
|
@ -45,17 +44,21 @@ int32_t tscRefId = -1;
|
|||
int32_t tscNumOfObj = 0; // number of sqlObj in current process.
|
||||
static void *tscCheckDiskUsageTmr;
|
||||
void *tscRpcCache; // cache to keep rpc obj
|
||||
int32_t tscNumOfThreads = 1; // num of rpc threads
|
||||
char tscLogFileName[12] = "taoslog";
|
||||
int tscLogFileNum = 10;
|
||||
static pthread_mutex_t rpcObjMutex; // mutex to protect open the rpc obj concurrently
|
||||
static pthread_once_t tscinit = PTHREAD_ONCE_INIT;
|
||||
int32_t tscNumOfThreads = 1; // num of rpc threads
|
||||
char tscLogFileName[12] = "taoslog";
|
||||
int tscLogFileNum = 10;
|
||||
|
||||
static pthread_mutex_t rpcObjMutex; // mutex to protect open the rpc obj concurrently
|
||||
static pthread_once_t tscinit = PTHREAD_ONCE_INIT;
|
||||
|
||||
// pthread_once can not return result code, so result code is set to a global variable.
|
||||
static volatile int tscInitRes = 0;
|
||||
|
||||
void tscCheckDiskUsage(void *UNUSED_PARAM(para), void *UNUSED_PARAM(param)) {
|
||||
taosGetDisk();
|
||||
taosTmrReset(tscCheckDiskUsage, 20 * 1000, NULL, tscTmr, &tscCheckDiskUsageTmr);
|
||||
}
|
||||
|
||||
void tscFreeRpcObj(void *param) {
|
||||
assert(param);
|
||||
SRpcObj *pRpcObj = (SRpcObj *)(param);
|
||||
|
@ -67,9 +70,8 @@ void tscReleaseRpc(void *param) {
|
|||
if (param == NULL) {
|
||||
return;
|
||||
}
|
||||
pthread_mutex_lock(&rpcObjMutex);
|
||||
|
||||
taosCacheRelease(tscRpcCache, (void *)¶m, false);
|
||||
pthread_mutex_unlock(&rpcObjMutex);
|
||||
}
|
||||
|
||||
int32_t tscAcquireRpc(const char *key, const char *user, const char *secretEncrypt, void **ppRpcObj) {
|
||||
|
@ -105,6 +107,7 @@ int32_t tscAcquireRpc(const char *key, const char *user, const char *secretEncry
|
|||
tscError("failed to init connection to TDengine");
|
||||
return -1;
|
||||
}
|
||||
|
||||
pRpcObj = taosCachePut(tscRpcCache, rpcObj.key, strlen(rpcObj.key), &rpcObj, sizeof(rpcObj), 1000*5);
|
||||
if (pRpcObj == NULL) {
|
||||
rpcClose(rpcObj.pDnodeConn);
|
||||
|
@ -118,7 +121,7 @@ int32_t tscAcquireRpc(const char *key, const char *user, const char *secretEncry
|
|||
}
|
||||
|
||||
void taos_init_imp(void) {
|
||||
char temp[128] = {0};
|
||||
char temp[128] = {0};
|
||||
|
||||
errno = TSDB_CODE_SUCCESS;
|
||||
srand(taosGetTimestampSec());
|
||||
|
@ -151,36 +154,41 @@ void taos_init_imp(void) {
|
|||
rpcInit();
|
||||
|
||||
scriptEnvPoolInit();
|
||||
|
||||
tscDebug("starting to initialize TAOS client ...");
|
||||
tscDebug("Local End Point is:%s", tsLocalEp);
|
||||
}
|
||||
|
||||
taosSetCoreDump();
|
||||
tscInitMsgsFp();
|
||||
int queueSize = tsMaxConnections*2;
|
||||
|
||||
double factor = (tscEmbedded == 0)? 2.0:4.0;
|
||||
tscNumOfThreads = (int)(tsNumOfCores * tsNumOfThreadsPerCore / factor);
|
||||
if (tscNumOfThreads < 2) {
|
||||
tscNumOfThreads = 2;
|
||||
}
|
||||
|
||||
int32_t queueSize = tsMaxConnections*2;
|
||||
tscQhandle = taosInitScheduler(queueSize, tscNumOfThreads, "tsc");
|
||||
if (NULL == tscQhandle) {
|
||||
tscError("failed to init scheduler");
|
||||
tscError("failed to init task queue");
|
||||
tscInitRes = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
tscDebug("client task queue is initialized, numOfWorkers: %d", tscNumOfThreads);
|
||||
|
||||
tscTmr = taosTmrInit(tsMaxConnections * 2, 200, 60000, "TSC");
|
||||
if(0 == tscEmbedded){
|
||||
taosTmrReset(tscCheckDiskUsage, 20 * 1000, NULL, tscTmr, &tscCheckDiskUsageTmr);
|
||||
}
|
||||
|
||||
if (tscTableMetaInfo == NULL) {
|
||||
tscObjRef = taosOpenRef(40960, tscFreeRegisteredSqlObj);
|
||||
tscVgroupMap = taosHashInit(256, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, HASH_ENTRY_LOCK);
|
||||
tscTableMetaInfo = taosHashInit(1024, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK);
|
||||
tscDebug("TableMeta:%p", tscTableMetaInfo);
|
||||
if (tscTableMetaMap == NULL) {
|
||||
tscObjRef = taosOpenRef(40960, tscFreeRegisteredSqlObj);
|
||||
tscVgroupMap = taosHashInit(256, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true, HASH_ENTRY_LOCK);
|
||||
tscTableMetaMap = taosHashInit(1024, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK);
|
||||
tscVgroupListBuf = taosCacheInit(TSDB_DATA_TYPE_BINARY, 5, false, NULL, "stable-vgroup-list");
|
||||
tscDebug("TableMeta:%p, vgroup:%p is initialized", tscTableMetaMap, tscVgroupMap);
|
||||
}
|
||||
|
||||
int refreshTime = 5;
|
||||
|
@ -189,14 +197,17 @@ void taos_init_imp(void) {
|
|||
|
||||
tscRefId = taosOpenRef(200, tscCloseTscObj);
|
||||
|
||||
// in other language APIs, taos_cleanup is not available yet.
|
||||
// So, to make sure taos_cleanup will be invoked to clean up the allocated
|
||||
// resource to suppress the valgrind warning.
|
||||
// In the APIs of other program language, taos_cleanup is not available yet.
|
||||
// So, to make sure taos_cleanup will be invoked to clean up the allocated resource to suppress the valgrind warning.
|
||||
atexit(taos_cleanup);
|
||||
|
||||
tscDebug("client is initialized successfully");
|
||||
}
|
||||
|
||||
int taos_init() { pthread_once(&tscinit, taos_init_imp); return tscInitRes;}
|
||||
int taos_init() {
|
||||
pthread_once(&tscinit, taos_init_imp);
|
||||
return tscInitRes;
|
||||
}
|
||||
|
||||
// this function may be called by user or system, or by both simultaneously.
|
||||
void taos_cleanup(void) {
|
||||
|
@ -205,11 +216,13 @@ void taos_cleanup(void) {
|
|||
if (atomic_val_compare_exchange_32(&sentinel, TSC_VAR_NOT_RELEASE, TSC_VAR_RELEASED) != TSC_VAR_NOT_RELEASE) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (tscEmbedded == 0) {
|
||||
scriptEnvPoolCleanup();
|
||||
}
|
||||
taosHashCleanup(tscTableMetaInfo);
|
||||
tscTableMetaInfo = NULL;
|
||||
|
||||
taosHashCleanup(tscTableMetaMap);
|
||||
tscTableMetaMap = NULL;
|
||||
|
||||
taosHashCleanup(tscVgroupMap);
|
||||
tscVgroupMap = NULL;
|
||||
|
@ -236,6 +249,9 @@ void taos_cleanup(void) {
|
|||
pthread_mutex_destroy(&rpcObjMutex);
|
||||
}
|
||||
|
||||
taosCacheCleanup(tscVgroupListBuf);
|
||||
tscVgroupListBuf = NULL;
|
||||
|
||||
if (tscEmbedded == 0) {
|
||||
rpcCleanup();
|
||||
taosCloseLog();
|
||||
|
|
|
@ -1378,7 +1378,7 @@ void tscResetSqlCmd(SSqlCmd* pCmd, bool clearCachedMeta) {
|
|||
if (pCmd->pTableMetaMap != NULL) {
|
||||
STableMetaVgroupInfo* p = taosHashIterate(pCmd->pTableMetaMap, NULL);
|
||||
while (p) {
|
||||
tscVgroupInfoClear(p->pVgroupInfo);
|
||||
taosArrayDestroy(p->vgroupIdList);
|
||||
tfree(p->pTableMeta);
|
||||
p = taosHashIterate(pCmd->pTableMetaMap, p);
|
||||
}
|
||||
|
@ -1388,6 +1388,22 @@ void tscResetSqlCmd(SSqlCmd* pCmd, bool clearCachedMeta) {
|
|||
}
|
||||
}
|
||||
|
||||
void* tscCleanupTableMetaMap(SHashObj* pTableMetaMap) {
|
||||
if (pTableMetaMap == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
STableMetaVgroupInfo* p = taosHashIterate(pTableMetaMap, NULL);
|
||||
while (p) {
|
||||
taosArrayDestroy(p->vgroupIdList);
|
||||
tfree(p->pTableMeta);
|
||||
p = taosHashIterate(pTableMetaMap, p);
|
||||
}
|
||||
|
||||
taosHashCleanup(pTableMetaMap);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void tscFreeSqlResult(SSqlObj* pSql) {
|
||||
SSqlRes* pRes = &pSql->res;
|
||||
|
||||
|
@ -1512,7 +1528,7 @@ void tscDestroyDataBlock(STableDataBlocks* pDataBlock, bool removeMeta) {
|
|||
char name[TSDB_TABLE_FNAME_LEN] = {0};
|
||||
tNameExtractFullName(&pDataBlock->tableName, name);
|
||||
|
||||
taosHashRemove(tscTableMetaInfo, name, strnlen(name, TSDB_TABLE_FNAME_LEN));
|
||||
taosHashRemove(tscTableMetaMap, name, strnlen(name, TSDB_TABLE_FNAME_LEN));
|
||||
}
|
||||
|
||||
if (!pDataBlock->cloned) {
|
||||
|
@ -3355,7 +3371,7 @@ void clearAllTableMetaInfo(SQueryInfo* pQueryInfo, bool removeMeta) {
|
|||
if (removeMeta) {
|
||||
char name[TSDB_TABLE_FNAME_LEN] = {0};
|
||||
tNameExtractFullName(&pTableMetaInfo->name, name);
|
||||
taosHashRemove(tscTableMetaInfo, name, strnlen(name, TSDB_TABLE_FNAME_LEN));
|
||||
taosHashRemove(tscTableMetaMap, name, strnlen(name, TSDB_TABLE_FNAME_LEN));
|
||||
}
|
||||
|
||||
tscFreeVgroupTableInfo(pTableMetaInfo->pVgroupTables);
|
||||
|
@ -3471,11 +3487,9 @@ SSqlObj* createSimpleSubObj(SSqlObj* pSql, __async_cb_func_t fp, void* param, in
|
|||
|
||||
SSqlCmd* pCmd = &pNew->cmd;
|
||||
pCmd->command = cmd;
|
||||
tsem_init(&pNew->rspSem, 0 ,0);
|
||||
|
||||
if (tscAddQueryInfo(pCmd) != TSDB_CODE_SUCCESS) {
|
||||
#ifdef __APPLE__
|
||||
// to satisfy later tsem_destroy in taos_free_result
|
||||
tsem_init(&pNew->rspSem, 0, 0);
|
||||
#endif // __APPLE__
|
||||
tscFreeSqlObj(pNew);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -4351,7 +4365,7 @@ int32_t tscCreateTableMetaFromSTableMeta(STableMeta* pChild, const char* name, v
|
|||
assert(pChild != NULL && buf != NULL);
|
||||
|
||||
STableMeta* p = buf;
|
||||
taosHashGetClone(tscTableMetaInfo, pChild->sTableName, strnlen(pChild->sTableName, TSDB_TABLE_FNAME_LEN), NULL, p, -1);
|
||||
taosHashGetClone(tscTableMetaMap, pChild->sTableName, strnlen(pChild->sTableName, TSDB_TABLE_FNAME_LEN), NULL, p);
|
||||
|
||||
// tableMeta exists, build child table meta according to the super table meta
|
||||
// the uid need to be checked in addition to the general name of the super table.
|
||||
|
@ -4365,7 +4379,7 @@ int32_t tscCreateTableMetaFromSTableMeta(STableMeta* pChild, const char* name, v
|
|||
memcpy(pChild->schema, p->schema, sizeof(SSchema) *total);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
} else { // super table has been removed, current tableMeta is also expired. remove it here
|
||||
taosHashRemove(tscTableMetaInfo, name, strnlen(name, TSDB_TABLE_FNAME_LEN));
|
||||
taosHashRemove(tscTableMetaMap, name, strnlen(name, TSDB_TABLE_FNAME_LEN));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
@ -4864,3 +4878,19 @@ SNewVgroupInfo createNewVgroupInfo(SVgroupMsg *pVgroupMsg) {
|
|||
|
||||
return info;
|
||||
}
|
||||
|
||||
void tscRemoveTableMetaBuf(STableMetaInfo* pTableMetaInfo, uint64_t id) {
|
||||
char fname[TSDB_TABLE_FNAME_LEN] = {0};
|
||||
tNameExtractFullName(&pTableMetaInfo->name, fname);
|
||||
|
||||
int32_t len = (int32_t) strnlen(fname, TSDB_TABLE_FNAME_LEN);
|
||||
if (UTIL_TABLE_IS_SUPER_TABLE(pTableMetaInfo)) {
|
||||
void* pv = taosCacheAcquireByKey(tscVgroupListBuf, fname, len);
|
||||
if (pv != NULL) {
|
||||
taosCacheRelease(tscVgroupListBuf, &pv, true);
|
||||
}
|
||||
}
|
||||
|
||||
taosHashRemove(tscTableMetaMap, fname, len);
|
||||
tscDebug("0x%"PRIx64" remove table meta %s, numOfRemain:%d", id, fname, (int32_t) taosHashGetSize(tscTableMetaMap));
|
||||
}
|
|
@ -88,10 +88,7 @@ enum {
|
|||
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_SHOW_CREATE_STABLE, "show-create-stable")
|
||||
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_SHOW_CREATE_DATABASE, "show-create-database")
|
||||
|
||||
/*
|
||||
* build empty result instead of accessing dnode to fetch result
|
||||
* reset the client cache
|
||||
*/
|
||||
// build empty result instead of accessing dnode to fetch result reset the client cache
|
||||
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_RETRIEVE_EMPTY_RESULT, "retrieve-empty-result" )
|
||||
|
||||
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_RESET_CACHE, "reset-cache" )
|
||||
|
|
|
@ -55,7 +55,7 @@ extern "C" {
|
|||
typedef struct {
|
||||
int8_t type; // Column type
|
||||
int16_t colId; // column ID
|
||||
uint16_t bytes; // column bytes
|
||||
int16_t bytes; // column bytes (restore to int16_t in case of misuse)
|
||||
uint16_t offset; // point offset in SDataRow after the header part.
|
||||
} STColumn;
|
||||
|
||||
|
@ -366,6 +366,7 @@ typedef struct {
|
|||
#define kvRowColIdxAt(r, i) (kvRowColIdx(r) + (i))
|
||||
#define kvRowFree(r) tfree(r)
|
||||
#define kvRowEnd(r) POINTER_SHIFT(r, kvRowLen(r))
|
||||
#define kvRowValLen(r) (kvRowLen(r) - TD_KV_ROW_HEAD_SIZE - sizeof(SColIdx) * kvRowNCols(r))
|
||||
#define kvRowTKey(r) (*(TKEY *)(kvRowValues(r)))
|
||||
#define kvRowKey(r) tdGetKey(kvRowTKey(r))
|
||||
#define kvRowDeleted(r) TKEY_IS_DELETED(kvRowTKey(r))
|
||||
|
|
|
@ -634,42 +634,28 @@ int tdSetKVRowDataOfCol(SKVRow *orow, int16_t colId, int8_t type, void *value) {
|
|||
SKVRow nrow = NULL;
|
||||
void * ptr = taosbsearch(&colId, kvRowColIdx(row), kvRowNCols(row), sizeof(SColIdx), comparTagId, TD_GE);
|
||||
|
||||
if (ptr == NULL || ((SColIdx *)ptr)->colId > colId) { // need to add a column value to the row
|
||||
if (ptr == NULL || ((SColIdx *)ptr)->colId > colId) { // need to add a column value to the row
|
||||
int diff = IS_VAR_DATA_TYPE(type) ? varDataTLen(value) : TYPE_BYTES[type];
|
||||
nrow = malloc(kvRowLen(row) + sizeof(SColIdx) + diff);
|
||||
int nRowLen = kvRowLen(row) + sizeof(SColIdx) + diff;
|
||||
int oRowCols = kvRowNCols(row);
|
||||
|
||||
ASSERT(diff > 0);
|
||||
nrow = malloc(nRowLen);
|
||||
if (nrow == NULL) return -1;
|
||||
|
||||
kvRowSetLen(nrow, kvRowLen(row) + (uint16_t)sizeof(SColIdx) + diff);
|
||||
kvRowSetNCols(nrow, kvRowNCols(row) + 1);
|
||||
kvRowSetLen(nrow, nRowLen);
|
||||
kvRowSetNCols(nrow, oRowCols + 1);
|
||||
|
||||
if (ptr == NULL) {
|
||||
memcpy(kvRowColIdx(nrow), kvRowColIdx(row), sizeof(SColIdx) * kvRowNCols(row));
|
||||
memcpy(kvRowValues(nrow), kvRowValues(row), POINTER_DISTANCE(kvRowEnd(row), kvRowValues(row)));
|
||||
int colIdx = kvRowNCols(nrow) - 1;
|
||||
kvRowColIdxAt(nrow, colIdx)->colId = colId;
|
||||
kvRowColIdxAt(nrow, colIdx)->offset = (int16_t)(POINTER_DISTANCE(kvRowEnd(row), kvRowValues(row)));
|
||||
memcpy(kvRowColVal(nrow, kvRowColIdxAt(nrow, colIdx)), value, diff);
|
||||
} else {
|
||||
int16_t tlen = (int16_t)(POINTER_DISTANCE(ptr, kvRowColIdx(row)));
|
||||
if (tlen > 0) {
|
||||
memcpy(kvRowColIdx(nrow), kvRowColIdx(row), tlen);
|
||||
memcpy(kvRowValues(nrow), kvRowValues(row), ((SColIdx *)ptr)->offset);
|
||||
}
|
||||
memcpy(kvRowColIdx(nrow), kvRowColIdx(row), sizeof(SColIdx) * oRowCols);
|
||||
memcpy(kvRowValues(nrow), kvRowValues(row), kvRowValLen(row));
|
||||
|
||||
int colIdx = tlen / sizeof(SColIdx);
|
||||
kvRowColIdxAt(nrow, colIdx)->colId = colId;
|
||||
kvRowColIdxAt(nrow, colIdx)->offset = ((SColIdx *)ptr)->offset;
|
||||
memcpy(kvRowColVal(nrow, kvRowColIdxAt(nrow, colIdx)), value, diff);
|
||||
pColIdx = kvRowColIdxAt(nrow, oRowCols);
|
||||
pColIdx->colId = colId;
|
||||
pColIdx->offset = kvRowValLen(row);
|
||||
|
||||
for (int i = colIdx; i < kvRowNCols(row); i++) {
|
||||
kvRowColIdxAt(nrow, i + 1)->colId = kvRowColIdxAt(row, i)->colId;
|
||||
kvRowColIdxAt(nrow, i + 1)->offset = kvRowColIdxAt(row, i)->offset + diff;
|
||||
}
|
||||
memcpy(kvRowColVal(nrow, kvRowColIdxAt(nrow, colIdx + 1)), kvRowColVal(row, kvRowColIdxAt(row, colIdx)),
|
||||
POINTER_DISTANCE(kvRowEnd(row), kvRowColVal(row, kvRowColIdxAt(row, colIdx)))
|
||||
memcpy(kvRowColVal(nrow, pColIdx), value, diff); // copy new value
|
||||
|
||||
);
|
||||
}
|
||||
tdSortKVRowByColIdx(nrow);
|
||||
|
||||
*orow = nrow;
|
||||
free(row);
|
||||
|
@ -680,9 +666,8 @@ int tdSetKVRowDataOfCol(SKVRow *orow, int16_t colId, int8_t type, void *value) {
|
|||
|
||||
if (varDataTLen(value) == varDataTLen(pOldVal)) { // just update the column value in place
|
||||
memcpy(pOldVal, value, varDataTLen(value));
|
||||
} else { // need to reallocate the memory
|
||||
uint16_t diff = varDataTLen(value) - varDataTLen(pOldVal);
|
||||
uint16_t nlen = kvRowLen(row) + diff;
|
||||
} else { // need to reallocate the memory
|
||||
int16_t nlen = kvRowLen(row) + (varDataTLen(value) - varDataTLen(pOldVal));
|
||||
ASSERT(nlen > 0);
|
||||
nrow = malloc(nlen);
|
||||
if (nrow == NULL) return -1;
|
||||
|
@ -690,30 +675,22 @@ int tdSetKVRowDataOfCol(SKVRow *orow, int16_t colId, int8_t type, void *value) {
|
|||
kvRowSetLen(nrow, nlen);
|
||||
kvRowSetNCols(nrow, kvRowNCols(row));
|
||||
|
||||
// Copy part ahead
|
||||
nlen = (int16_t)(POINTER_DISTANCE(ptr, kvRowColIdx(row)));
|
||||
ASSERT(nlen % sizeof(SColIdx) == 0);
|
||||
if (nlen > 0) {
|
||||
ASSERT(((SColIdx *)ptr)->offset > 0);
|
||||
memcpy(kvRowColIdx(nrow), kvRowColIdx(row), nlen);
|
||||
memcpy(kvRowValues(nrow), kvRowValues(row), ((SColIdx *)ptr)->offset);
|
||||
int zsize = sizeof(SColIdx) * kvRowNCols(row) + ((SColIdx *)ptr)->offset;
|
||||
memcpy(kvRowColIdx(nrow), kvRowColIdx(row), zsize);
|
||||
memcpy(kvRowColVal(nrow, ((SColIdx *)ptr)), value, varDataTLen(value));
|
||||
// Copy left value part
|
||||
int lsize = kvRowLen(row) - TD_KV_ROW_HEAD_SIZE - zsize - varDataTLen(pOldVal);
|
||||
if (lsize > 0) {
|
||||
memcpy(POINTER_SHIFT(nrow, TD_KV_ROW_HEAD_SIZE + zsize + varDataTLen(value)),
|
||||
POINTER_SHIFT(row, TD_KV_ROW_HEAD_SIZE + zsize + varDataTLen(pOldVal)), lsize);
|
||||
}
|
||||
|
||||
// Construct current column value
|
||||
int colIdx = nlen / sizeof(SColIdx);
|
||||
pColIdx = kvRowColIdxAt(nrow, colIdx);
|
||||
pColIdx->colId = ((SColIdx *)ptr)->colId;
|
||||
pColIdx->offset = ((SColIdx *)ptr)->offset;
|
||||
memcpy(kvRowColVal(nrow, pColIdx), value, varDataTLen(value));
|
||||
for (int i = 0; i < kvRowNCols(nrow); i++) {
|
||||
pColIdx = kvRowColIdxAt(nrow, i);
|
||||
|
||||
// Construct columns after
|
||||
if (kvRowNCols(nrow) - colIdx - 1 > 0) {
|
||||
for (int i = colIdx + 1; i < kvRowNCols(nrow); i++) {
|
||||
kvRowColIdxAt(nrow, i)->colId = kvRowColIdxAt(row, i)->colId;
|
||||
kvRowColIdxAt(nrow, i)->offset = kvRowColIdxAt(row, i)->offset + diff;
|
||||
if (pColIdx->offset > ((SColIdx *)ptr)->offset) {
|
||||
pColIdx->offset = pColIdx->offset - varDataTLen(pOldVal) + varDataTLen(value);
|
||||
}
|
||||
memcpy(kvRowColVal(nrow, kvRowColIdxAt(nrow, colIdx + 1)), kvRowColVal(row, kvRowColIdxAt(row, colIdx + 1)),
|
||||
POINTER_DISTANCE(kvRowEnd(row), kvRowColVal(row, kvRowColIdxAt(row, colIdx + 1))));
|
||||
}
|
||||
|
||||
*orow = nrow;
|
||||
|
|
|
@ -245,7 +245,7 @@ static void* telemetryThread(void* param) {
|
|||
clock_gettime(CLOCK_REALTIME, &end);
|
||||
end.tv_sec += 300; // wait 5 minutes before send first report
|
||||
|
||||
setThreadName("telemetryThrd");
|
||||
setThreadName("telemetry");
|
||||
|
||||
while (!tsExit) {
|
||||
int r = 0;
|
||||
|
|
|
@ -118,10 +118,11 @@ static void *dnodeProcessReadQueue(void *wparam) {
|
|||
SVReadMsg * pRead;
|
||||
int32_t qtype;
|
||||
void * pVnode;
|
||||
char name[16];
|
||||
|
||||
memset(name, 0, 16);
|
||||
snprintf(name, 16, "%s-dnReadQ", pPool->name);
|
||||
char* threadname = strcmp(pPool->name, "vquery") == 0? "dnodeQueryQ":"dnodeFetchQ";
|
||||
|
||||
char name[16] = {0};
|
||||
snprintf(name, tListLen(name), "%s", threadname);
|
||||
setThreadName(name);
|
||||
|
||||
while (1) {
|
||||
|
|
|
@ -90,7 +90,6 @@ static void *dnodeOpenVnode(void *param) {
|
|||
char stepDesc[TSDB_STEP_DESC_LEN] = {0};
|
||||
|
||||
dDebug("thread:%d, start to open %d vnodes", pThread->threadIndex, pThread->vnodeNum);
|
||||
|
||||
setThreadName("dnodeOpenVnode");
|
||||
|
||||
for (int32_t v = 0; v < pThread->vnodeNum; ++v) {
|
||||
|
|
|
@ -809,7 +809,7 @@ typedef struct SMultiTableMeta {
|
|||
int32_t contLen;
|
||||
uint8_t compressed; // denote if compressed or not
|
||||
uint32_t rawLen; // size before compress
|
||||
uint8_t metaClone; // make meta clone after retrieve meta from mnode
|
||||
uint8_t metaClone; // make meta clone after retrieve meta from mnode
|
||||
char meta[];
|
||||
} SMultiTableMeta;
|
||||
|
||||
|
|
|
@ -92,7 +92,6 @@ extern char configDir[];
|
|||
#define MAX_SUPER_TABLE_COUNT 200
|
||||
|
||||
#define MAX_QUERY_SQL_COUNT 100
|
||||
#define MAX_QUERY_SQL_LENGTH BUFFER_SIZE
|
||||
|
||||
#define MAX_DATABASE_COUNT 256
|
||||
#define INPUT_BUF_LEN 256
|
||||
|
@ -383,7 +382,7 @@ typedef struct SpecifiedQueryInfo_S {
|
|||
uint64_t queryTimes;
|
||||
bool subscribeRestart;
|
||||
int subscribeKeepProgress;
|
||||
char sql[MAX_QUERY_SQL_COUNT][MAX_QUERY_SQL_LENGTH+1];
|
||||
char sql[MAX_QUERY_SQL_COUNT][BUFFER_SIZE+1];
|
||||
char result[MAX_QUERY_SQL_COUNT][MAX_FILE_NAME_LEN];
|
||||
int resubAfterConsume[MAX_QUERY_SQL_COUNT];
|
||||
int endAfterConsume[MAX_QUERY_SQL_COUNT];
|
||||
|
@ -406,7 +405,7 @@ typedef struct SuperQueryInfo_S {
|
|||
int64_t childTblCount;
|
||||
char childTblPrefix[TBNAME_PREFIX_LEN]; // 20 characters reserved for seq
|
||||
int sqlCount;
|
||||
char sql[MAX_QUERY_SQL_COUNT][MAX_QUERY_SQL_LENGTH+1];
|
||||
char sql[MAX_QUERY_SQL_COUNT][BUFFER_SIZE+1];
|
||||
char result[MAX_QUERY_SQL_COUNT][MAX_FILE_NAME_LEN];
|
||||
int resubAfterConsume;
|
||||
int endAfterConsume;
|
||||
|
@ -1253,14 +1252,14 @@ static void fetchResult(TAOS_RES *res, threadInfo* pThreadInfo) {
|
|||
|
||||
// fetch the records row by row
|
||||
while((row = taos_fetch_row(res))) {
|
||||
if (totalLen >= 100*1024*1024 - 32000) {
|
||||
if (totalLen >= (100*1024*1024 - HEAD_BUFF_LEN*2)) {
|
||||
if (strlen(pThreadInfo->filePath) > 0)
|
||||
appendResultBufToFile(databuf, pThreadInfo);
|
||||
totalLen = 0;
|
||||
memset(databuf, 0, 100*1024*1024);
|
||||
}
|
||||
num_rows++;
|
||||
char temp[16000] = {0};
|
||||
char temp[HEAD_BUFF_LEN] = {0};
|
||||
int len = taos_print_row(temp, row, fields, num_fields);
|
||||
len += sprintf(temp + len, "\n");
|
||||
//printf("query result:%s\n", temp);
|
||||
|
@ -2165,15 +2164,15 @@ static void printfDbInfoForQueryToFile(
|
|||
}
|
||||
|
||||
static void printfQuerySystemInfo(TAOS * taos) {
|
||||
char filename[MAX_QUERY_SQL_LENGTH+1] = {0};
|
||||
char buffer[MAX_QUERY_SQL_LENGTH+1] = {0};
|
||||
char filename[BUFFER_SIZE+1] = {0};
|
||||
char buffer[BUFFER_SIZE+1] = {0};
|
||||
TAOS_RES* res;
|
||||
|
||||
time_t t;
|
||||
struct tm* lt;
|
||||
time(&t);
|
||||
lt = localtime(&t);
|
||||
snprintf(filename, MAX_QUERY_SQL_LENGTH, "querySystemInfo-%d-%d-%d %d:%d:%d",
|
||||
snprintf(filename, BUFFER_SIZE, "querySystemInfo-%d-%d-%d %d:%d:%d",
|
||||
lt->tm_year+1900, lt->tm_mon, lt->tm_mday, lt->tm_hour, lt->tm_min,
|
||||
lt->tm_sec);
|
||||
|
||||
|
@ -2205,12 +2204,12 @@ static void printfQuerySystemInfo(TAOS * taos) {
|
|||
printfDbInfoForQueryToFile(filename, dbInfos[i], i);
|
||||
|
||||
// show db.vgroups
|
||||
snprintf(buffer, MAX_QUERY_SQL_LENGTH, "show %s.vgroups;", dbInfos[i]->name);
|
||||
snprintf(buffer, BUFFER_SIZE, "show %s.vgroups;", dbInfos[i]->name);
|
||||
res = taos_query(taos, buffer);
|
||||
xDumpResultToFile(filename, res);
|
||||
|
||||
// show db.stables
|
||||
snprintf(buffer, MAX_QUERY_SQL_LENGTH, "show %s.stables;", dbInfos[i]->name);
|
||||
snprintf(buffer, BUFFER_SIZE, "show %s.stables;", dbInfos[i]->name);
|
||||
res = taos_query(taos, buffer);
|
||||
xDumpResultToFile(filename, res);
|
||||
free(dbInfos[i]);
|
||||
|
@ -4549,7 +4548,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
|
|||
goto PARSE_OVER;
|
||||
}
|
||||
tstrncpy(g_queryInfo.specifiedQueryInfo.sql[j],
|
||||
sqlStr->valuestring, MAX_QUERY_SQL_LENGTH);
|
||||
sqlStr->valuestring, BUFFER_SIZE);
|
||||
|
||||
// default value is -1, which mean infinite loop
|
||||
g_queryInfo.specifiedQueryInfo.endAfterConsume[j] = -1;
|
||||
|
@ -4771,7 +4770,7 @@ static bool getMetaFromQueryJsonFile(cJSON* root) {
|
|||
goto PARSE_OVER;
|
||||
}
|
||||
tstrncpy(g_queryInfo.superQueryInfo.sql[j], sqlStr->valuestring,
|
||||
MAX_QUERY_SQL_LENGTH);
|
||||
BUFFER_SIZE);
|
||||
|
||||
cJSON *result = cJSON_GetObjectItem(sql, "result");
|
||||
if (result != NULL && result->type == cJSON_String
|
||||
|
@ -7425,14 +7424,14 @@ static void replaceChildTblName(char* inSql, char* outSql, int tblIndex) {
|
|||
|
||||
tstrncpy(outSql, inSql, pos - inSql + 1);
|
||||
//printf("1: %s\n", outSql);
|
||||
strncat(outSql, subTblName, MAX_QUERY_SQL_LENGTH - 1);
|
||||
strncat(outSql, subTblName, BUFFER_SIZE - 1);
|
||||
//printf("2: %s\n", outSql);
|
||||
strncat(outSql, pos+strlen(sourceString), MAX_QUERY_SQL_LENGTH - 1);
|
||||
strncat(outSql, pos+strlen(sourceString), BUFFER_SIZE - 1);
|
||||
//printf("3: %s\n", outSql);
|
||||
}
|
||||
|
||||
static void *superTableQuery(void *sarg) {
|
||||
char sqlstr[MAX_QUERY_SQL_LENGTH];
|
||||
char sqlstr[BUFFER_SIZE];
|
||||
threadInfo *pThreadInfo = (threadInfo *)sarg;
|
||||
|
||||
setThreadName("superTableQuery");
|
||||
|
@ -7735,7 +7734,7 @@ static TAOS_SUB* subscribeImpl(
|
|||
|
||||
static void *superSubscribe(void *sarg) {
|
||||
threadInfo *pThreadInfo = (threadInfo *)sarg;
|
||||
char subSqlstr[MAX_QUERY_SQL_LENGTH];
|
||||
char subSqlstr[BUFFER_SIZE];
|
||||
TAOS_SUB* tsub[MAX_QUERY_SQL_COUNT] = {0};
|
||||
uint64_t tsubSeq;
|
||||
|
||||
|
|
|
@ -1812,12 +1812,8 @@ static int32_t getVgroupInfoLength(SSTableVgroupMsg* pInfo, int32_t numOfTable)
|
|||
}
|
||||
|
||||
static char* serializeVgroupInfo(SSTableObj *pTable, char* name, char* msg, SMnodeMsg* pMsgBody, void* handle) {
|
||||
SName sn = {0};
|
||||
tNameFromString(&sn, name, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE);
|
||||
const char* tableName = tNameGetTableName(&sn);
|
||||
|
||||
strncpy(msg, tableName, TSDB_TABLE_NAME_LEN);
|
||||
msg += TSDB_TABLE_NAME_LEN;
|
||||
strncpy(msg, name, TSDB_TABLE_FNAME_LEN);
|
||||
msg += TSDB_TABLE_FNAME_LEN;
|
||||
|
||||
if (pTable->vgHash == NULL) {
|
||||
mDebug("msg:%p, app:%p stable:%s, no vgroup exist while get stable vgroup info", pMsgBody, handle, name);
|
||||
|
|
|
@ -264,7 +264,6 @@ void httpJsonUInt64(JsonBuf* buf, uint64_t num) {
|
|||
|
||||
void httpJsonTimestamp(JsonBuf* buf, int64_t t, int32_t timePrecision) {
|
||||
char ts[35] = {0};
|
||||
struct tm* ptm;
|
||||
|
||||
int32_t fractionLen;
|
||||
char* format = NULL;
|
||||
|
@ -301,8 +300,9 @@ void httpJsonTimestamp(JsonBuf* buf, int64_t t, int32_t timePrecision) {
|
|||
assert(false);
|
||||
}
|
||||
|
||||
ptm = localtime(");
|
||||
int32_t length = (int32_t)strftime(ts, 35, "%Y-%m-%d %H:%M:%S", ptm);
|
||||
struct tm ptm = {0};
|
||||
localtime_r(", &ptm);
|
||||
int32_t length = (int32_t)strftime(ts, 35, "%Y-%m-%d %H:%M:%S", &ptm);
|
||||
length += snprintf(ts + length, fractionLen, format, mod);
|
||||
|
||||
httpJsonString(buf, ts, length);
|
||||
|
|
|
@ -114,7 +114,7 @@ int32_t monStartSystem() {
|
|||
|
||||
static void *monThreadFunc(void *param) {
|
||||
monDebug("starting to initialize monitor module ...");
|
||||
setThreadName("monThrd");
|
||||
setThreadName("monitor");
|
||||
|
||||
while (1) {
|
||||
static int32_t accessTimes = 0;
|
||||
|
|
|
@ -185,12 +185,12 @@ static void getNextTimeWindow(SQueryAttr* pQueryAttr, STimeWindow* tw) {
|
|||
int mon = (int)(tm.tm_year * 12 + tm.tm_mon + interval * factor);
|
||||
tm.tm_year = mon / 12;
|
||||
tm.tm_mon = mon % 12;
|
||||
tw->skey = convertTimePrecision(mktime(&tm) * 1000L, TSDB_TIME_PRECISION_MILLI, pQueryAttr->precision);
|
||||
tw->skey = convertTimePrecision((int64_t)mktime(&tm) * 1000L, TSDB_TIME_PRECISION_MILLI, pQueryAttr->precision);
|
||||
|
||||
mon = (int)(mon + interval);
|
||||
tm.tm_year = mon / 12;
|
||||
tm.tm_mon = mon % 12;
|
||||
tw->ekey = convertTimePrecision(mktime(&tm) * 1000L, TSDB_TIME_PRECISION_MILLI, pQueryAttr->precision);
|
||||
tw->ekey = convertTimePrecision((int64_t)mktime(&tm) * 1000L, TSDB_TIME_PRECISION_MILLI, pQueryAttr->precision);
|
||||
|
||||
tw->ekey -= 1;
|
||||
}
|
||||
|
@ -6605,9 +6605,11 @@ static SSDataBlock* hashDistinct(void* param, bool* newgroup) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
SDistinctOperatorInfo* pInfo = pOperator->info;
|
||||
SSDataBlock* pRes = pInfo->pRes;
|
||||
|
||||
|
||||
pRes->info.rows = 0;
|
||||
SSDataBlock* pBlock = NULL;
|
||||
while(1) {
|
||||
|
|
|
@ -342,6 +342,7 @@ int32_t scriptEnvPoolInit() {
|
|||
env->lua_state = createLuaEnv();
|
||||
tdListAppend(pool->scriptEnvs, (void *)(&env));
|
||||
}
|
||||
|
||||
pool->mSize = size;
|
||||
pool->cSize = size;
|
||||
return 0;
|
||||
|
|
|
@ -529,10 +529,9 @@ static void *taosProcessTcpData(void *param) {
|
|||
SFdObj *pFdObj;
|
||||
struct epoll_event events[maxEvents];
|
||||
SRecvInfo recvInfo;
|
||||
char name[16];
|
||||
|
||||
memset(name, 0, sizeof(name));
|
||||
snprintf(name, 16, "%s-tcpData", pThreadObj->label);
|
||||
char name[16] = {0};
|
||||
snprintf(name, tListLen(name), "%s-tcp", pThreadObj->label);
|
||||
setThreadName(name);
|
||||
|
||||
while (1) {
|
||||
|
|
|
@ -48,8 +48,6 @@ static void *sendRequest(void *param) {
|
|||
SInfo *pInfo = (SInfo *)param;
|
||||
SRpcMsg rpcMsg = {0};
|
||||
|
||||
setThreadName("sendCliReq");
|
||||
|
||||
tDebug("thread:%d, start to send request", pInfo->index);
|
||||
|
||||
while ( pInfo->numOfReqs == 0 || pInfo->num < pInfo->numOfReqs) {
|
||||
|
|
|
@ -41,8 +41,6 @@ static void *sendRequest(void *param) {
|
|||
SInfo *pInfo = (SInfo *)param;
|
||||
SRpcMsg rpcMsg, rspMsg;
|
||||
|
||||
setThreadName("sendSrvReq");
|
||||
|
||||
tDebug("thread:%d, start to send request", pInfo->index);
|
||||
|
||||
while ( pInfo->numOfReqs == 0 || pInfo->num < pInfo->numOfReqs) {
|
||||
|
|
|
@ -415,7 +415,6 @@ static int32_t syncRetrieveDataStepByStep(SSyncPeer *pPeer) {
|
|||
}
|
||||
|
||||
void *syncRetrieveData(void *param) {
|
||||
setThreadName("syncRetrievData");
|
||||
int64_t rid = (int64_t)param;
|
||||
SSyncPeer *pPeer = syncAcquirePeer(rid);
|
||||
if (pPeer == NULL) {
|
||||
|
|
|
@ -48,8 +48,6 @@ void *sendRequest(void *param) {
|
|||
SInfo * pInfo = (SInfo *)param;
|
||||
SRpcMsg rpcMsg = {0};
|
||||
|
||||
setThreadName("sendCliReq");
|
||||
|
||||
uDebug("thread:%d, start to send request", pInfo->index);
|
||||
|
||||
while (pInfo->numOfReqs == 0 || pInfo->num < pInfo->numOfReqs) {
|
||||
|
|
|
@ -178,7 +178,7 @@ void *processWriteQueue(void *param) {
|
|||
int type;
|
||||
void *item;
|
||||
|
||||
setThreadName("writeQ");
|
||||
setThreadName("syncWrite");
|
||||
|
||||
while (1) {
|
||||
int ret = taosReadQitem(qhandle, &type, &item);
|
||||
|
|
|
@ -123,10 +123,9 @@ void *taosHashGet(SHashObj *pHashObj, const void *key, size_t keyLen);
|
|||
* @param keyLen
|
||||
* @param fp
|
||||
* @param d
|
||||
* @param dsize
|
||||
* @return
|
||||
*/
|
||||
void* taosHashGetClone(SHashObj *pHashObj, const void *key, size_t keyLen, void (*fp)(void *), void* d, size_t dsize);
|
||||
void* taosHashGetClone(SHashObj *pHashObj, const void *key, size_t keyLen, void (*fp)(void *), void* d);
|
||||
|
||||
/**
|
||||
* remove item with the specified key
|
||||
|
|
|
@ -294,10 +294,10 @@ int32_t taosHashPut(SHashObj *pHashObj, const void *key, size_t keyLen, void *da
|
|||
}
|
||||
|
||||
void *taosHashGet(SHashObj *pHashObj, const void *key, size_t keyLen) {
|
||||
return taosHashGetClone(pHashObj, key, keyLen, NULL, NULL, 0);
|
||||
return taosHashGetClone(pHashObj, key, keyLen, NULL, NULL);
|
||||
}
|
||||
|
||||
void* taosHashGetClone(SHashObj *pHashObj, const void *key, size_t keyLen, void (*fp)(void *), void* d, size_t dsize) {
|
||||
void* taosHashGetClone(SHashObj *pHashObj, const void *key, size_t keyLen, void (*fp)(void *), void* d) {
|
||||
if (taosHashTableEmpty(pHashObj) || keyLen == 0 || key == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -132,11 +132,11 @@ static FORCE_INLINE void taosCacheReleaseNode(SCacheObj *pCacheObj, SCacheDataNo
|
|||
return;
|
||||
}
|
||||
|
||||
pCacheObj->totalSize -= pNode->size;
|
||||
atomic_sub_fetch_64(&pCacheObj->totalSize, pNode->size);
|
||||
int32_t size = (int32_t)taosHashGetSize(pCacheObj->pHashTable);
|
||||
assert(size > 0);
|
||||
|
||||
uDebug("cache:%s, key:%p, %p is destroyed from cache, size:%dbytes, totalNum:%d size:%" PRId64 "bytes",
|
||||
uDebug("cache:%s, key:%p, %p is destroyed from cache, size:%dbytes, total num:%d size:%" PRId64 "bytes",
|
||||
pCacheObj->name, pNode->key, pNode->data, pNode->size, size - 1, pCacheObj->totalSize);
|
||||
|
||||
if (pCacheObj->freeFp) {
|
||||
|
@ -252,6 +252,7 @@ void *taosCachePut(SCacheObj *pCacheObj, const void *key, size_t keyLen, const v
|
|||
pCacheObj->freeFp(p->data);
|
||||
}
|
||||
|
||||
atomic_sub_fetch_64(&pCacheObj->totalSize, p->size);
|
||||
tfree(p);
|
||||
} else {
|
||||
taosAddToTrashcan(pCacheObj, p);
|
||||
|
@ -302,7 +303,7 @@ void *taosCacheAcquireByKey(SCacheObj *pCacheObj, const void *key, size_t keyLen
|
|||
}
|
||||
|
||||
SCacheDataNode* ptNode = NULL;
|
||||
taosHashGetClone(pCacheObj->pHashTable, key, keyLen, incRefFn, &ptNode, sizeof(void*));
|
||||
taosHashGetClone(pCacheObj->pHashTable, key, keyLen, incRefFn, &ptNode);
|
||||
|
||||
void* pData = (ptNode != NULL)? ptNode->data:NULL;
|
||||
|
||||
|
@ -679,7 +680,7 @@ void* taosCacheTimedRefresh(void *handle) {
|
|||
assert(pCacheArrayList != NULL);
|
||||
uDebug("cache refresh thread starts");
|
||||
|
||||
setThreadName("cacheTimedRefre");
|
||||
setThreadName("cacheRefresh");
|
||||
|
||||
const int32_t SLEEP_DURATION = 500; //500 ms
|
||||
int64_t count = 0;
|
||||
|
|
|
@ -178,8 +178,6 @@ static void *taosThreadToOpenNewFile(void *param) {
|
|||
char keepName[LOG_FILE_NAME_LEN + 20];
|
||||
sprintf(keepName, "%s.%d", tsLogObj.logName, tsLogObj.flag);
|
||||
|
||||
setThreadName("openNewFile");
|
||||
|
||||
tsLogObj.flag ^= 1;
|
||||
tsLogObj.lines = 0;
|
||||
char name[LOG_FILE_NAME_LEN + 20];
|
||||
|
@ -689,12 +687,9 @@ static void taosWriteLog(SLogBuff *tLogBuff) {
|
|||
|
||||
static void *taosAsyncOutputLog(void *param) {
|
||||
SLogBuff *tLogBuff = (SLogBuff *)param;
|
||||
|
||||
setThreadName("asyncOutputLog");
|
||||
setThreadName("log");
|
||||
|
||||
while (1) {
|
||||
//tsem_wait(&(tLogBuff->buffNotEmpty));
|
||||
|
||||
taosMsleep(writeInterval);
|
||||
|
||||
// Polling the buffer
|
||||
|
|
|
@ -122,7 +122,9 @@ void *taosProcessSchedQueue(void *scheduler) {
|
|||
SSchedQueue *pSched = (SSchedQueue *)scheduler;
|
||||
int ret = 0;
|
||||
|
||||
setThreadName("schedQ");
|
||||
char name[16] = {0};
|
||||
snprintf(name, tListLen(name), "%s-taskQ", pSched->label);
|
||||
setThreadName(name);
|
||||
|
||||
while (1) {
|
||||
if ((ret = tsem_wait(&pSched->fullSem)) != 0) {
|
||||
|
|
|
@ -35,8 +35,6 @@ void *addRef(void *param) {
|
|||
SRefSpace *pSpace = (SRefSpace *)param;
|
||||
int id;
|
||||
|
||||
setThreadName("addRef");
|
||||
|
||||
for (int i=0; i < pSpace->steps; ++i) {
|
||||
printf("a");
|
||||
id = random() % pSpace->refNum;
|
||||
|
@ -54,8 +52,6 @@ void *removeRef(void *param) {
|
|||
SRefSpace *pSpace = (SRefSpace *)param;
|
||||
int id, code;
|
||||
|
||||
setThreadName("removeRef");
|
||||
|
||||
for (int i=0; i < pSpace->steps; ++i) {
|
||||
printf("d");
|
||||
id = random() % pSpace->refNum;
|
||||
|
@ -74,8 +70,6 @@ void *acquireRelease(void *param) {
|
|||
SRefSpace *pSpace = (SRefSpace *)param;
|
||||
int id;
|
||||
|
||||
setThreadName("acquireRelease");
|
||||
|
||||
for (int i=0; i < pSpace->steps; ++i) {
|
||||
printf("a");
|
||||
|
||||
|
@ -97,8 +91,6 @@ void myfree(void *p) {
|
|||
void *openRefSpace(void *param) {
|
||||
SRefSpace *pSpace = (SRefSpace *)param;
|
||||
|
||||
setThreadName("openRefSpace");
|
||||
|
||||
printf("c");
|
||||
pSpace->rsetId = taosOpenRef(50, myfree);
|
||||
|
||||
|
|
|
@ -93,7 +93,7 @@ static void vnodeIncRef(void *ptNode) {
|
|||
void *vnodeAcquire(int32_t vgId) {
|
||||
SVnodeObj *pVnode = NULL;
|
||||
if (tsVnodesHash != NULL) {
|
||||
taosHashGetClone(tsVnodesHash, &vgId, sizeof(int32_t), vnodeIncRef, &pVnode, sizeof(void *));
|
||||
taosHashGetClone(tsVnodesHash, &vgId, sizeof(int32_t), vnodeIncRef, &pVnode);
|
||||
}
|
||||
|
||||
if (pVnode == NULL) {
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
typedef enum {
|
||||
VNODE_WORKER_ACTION_CLEANUP,
|
||||
VNODE_WORKER_ACTION_DESTROUY
|
||||
VNODE_WORKER_ACTION_DESTROY
|
||||
} EVMWorkerAction;
|
||||
|
||||
typedef struct {
|
||||
|
@ -155,7 +155,7 @@ int32_t vnodeCleanupInMWorker(SVnodeObj *pVnode) {
|
|||
|
||||
int32_t vnodeDestroyInMWorker(SVnodeObj *pVnode) {
|
||||
vTrace("vgId:%d, will destroy in vmworker", pVnode->vgId);
|
||||
return vnodeWriteIntoMWorker(pVnode, VNODE_WORKER_ACTION_DESTROUY, NULL);
|
||||
return vnodeWriteIntoMWorker(pVnode, VNODE_WORKER_ACTION_DESTROY, NULL);
|
||||
}
|
||||
|
||||
static void vnodeFreeMWorkerMsg(SVMWorkerMsg *pMsg) {
|
||||
|
@ -179,7 +179,7 @@ static void vnodeProcessMWorkerMsg(SVMWorkerMsg *pMsg) {
|
|||
case VNODE_WORKER_ACTION_CLEANUP:
|
||||
vnodeCleanUp(pMsg->pVnode);
|
||||
break;
|
||||
case VNODE_WORKER_ACTION_DESTROUY:
|
||||
case VNODE_WORKER_ACTION_DESTROY:
|
||||
vnodeDestroy(pMsg->pVnode);
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -192,7 +192,7 @@ static void walFsyncAll() {
|
|||
|
||||
static void *walThreadFunc(void *param) {
|
||||
int stop = 0;
|
||||
setThreadName("walThrd");
|
||||
setThreadName("wal");
|
||||
while (1) {
|
||||
walUpdateSeq();
|
||||
walFsyncAll();
|
||||
|
|
|
@ -1,5 +1,32 @@
|
|||
def pre_test(){
|
||||
|
||||
sh '''
|
||||
sudo rmtaos||echo 'no taosd installed'
|
||||
'''
|
||||
sh '''
|
||||
cd ${WKC}
|
||||
git reset --hard
|
||||
git checkout $BRANCH_NAME
|
||||
git pull
|
||||
git submodule update
|
||||
cd ${WK}
|
||||
git reset --hard
|
||||
git checkout $BRANCH_NAME
|
||||
git pull
|
||||
export TZ=Asia/Harbin
|
||||
date
|
||||
rm -rf ${WK}/debug
|
||||
mkdir debug
|
||||
cd debug
|
||||
cmake -DMEMORY_SANITIZER=true .. > /dev/null
|
||||
make > /dev/null
|
||||
make install > /dev/null
|
||||
pip3 install ${WKC}/src/connector/python
|
||||
'''
|
||||
return 1
|
||||
}
|
||||
def pre_test_p(){
|
||||
|
||||
sh '''
|
||||
sudo rmtaos||echo 'no taosd installed'
|
||||
'''
|
||||
|
@ -39,7 +66,7 @@ pipeline {
|
|||
stage('pytest') {
|
||||
agent{label 'slad1'}
|
||||
steps {
|
||||
pre_test()
|
||||
pre_test_p()
|
||||
sh '''
|
||||
cd ${WKC}/tests
|
||||
find pytest -name '*'sql|xargs rm -rf
|
||||
|
@ -48,7 +75,7 @@ pipeline {
|
|||
}
|
||||
}
|
||||
stage('test_b1') {
|
||||
agent{label 'master'}
|
||||
agent{label 'slad2'}
|
||||
steps {
|
||||
pre_test()
|
||||
|
||||
|
@ -62,7 +89,7 @@ pipeline {
|
|||
}
|
||||
|
||||
stage('test_crash_gen') {
|
||||
agent{label "slad2"}
|
||||
agent{label "slad3"}
|
||||
steps {
|
||||
pre_test()
|
||||
sh '''
|
||||
|
@ -92,7 +119,7 @@ pipeline {
|
|||
}
|
||||
|
||||
sh'''
|
||||
systemctl start taosd
|
||||
nohup taosd >/dev/null &
|
||||
sleep 10
|
||||
'''
|
||||
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
|
||||
|
@ -128,7 +155,7 @@ pipeline {
|
|||
'''
|
||||
}
|
||||
sh '''
|
||||
systemctl stop taosd
|
||||
pkill -9 taosd
|
||||
cd ${WKC}/tests
|
||||
./test-all.sh b2
|
||||
date
|
||||
|
@ -141,7 +168,7 @@ pipeline {
|
|||
}
|
||||
|
||||
stage('test_valgrind') {
|
||||
agent{label "slad3"}
|
||||
agent{label "slad4"}
|
||||
|
||||
steps {
|
||||
pre_test()
|
||||
|
|
|
@ -1031,7 +1031,7 @@ int main(int argc, char *argv[]) {
|
|||
info = taos_get_client_info(taos);
|
||||
printf("client info: %s\n", info);
|
||||
|
||||
printf("************ verify shemaless *************\n");
|
||||
printf("************ verify schema-less *************\n");
|
||||
verify_schema_less(taos);
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,32 @@
|
|||
def pre_test(){
|
||||
|
||||
sh '''
|
||||
sudo rmtaos||echo 'no taosd installed'
|
||||
'''
|
||||
sh '''
|
||||
cd ${WKC}
|
||||
git reset --hard
|
||||
git checkout $BRANCH_NAME
|
||||
git pull
|
||||
git submodule update
|
||||
cd ${WK}
|
||||
git reset --hard
|
||||
git checkout $BRANCH_NAME
|
||||
git pull
|
||||
export TZ=Asia/Harbin
|
||||
date
|
||||
rm -rf ${WK}/debug
|
||||
mkdir debug
|
||||
cd debug
|
||||
cmake -DMEMORY_SANITIZER=true .. > /dev/null
|
||||
make > /dev/null
|
||||
make install > /dev/null
|
||||
pip3 install ${WKC}/src/connector/python/ || echo 0
|
||||
'''
|
||||
return 1
|
||||
}
|
||||
def pre_test_p(){
|
||||
|
||||
sh '''
|
||||
sudo rmtaos||echo 'no taosd installed'
|
||||
'''
|
||||
|
@ -39,7 +66,7 @@ pipeline {
|
|||
stage('pytest') {
|
||||
agent{label 'slam1'}
|
||||
steps {
|
||||
pre_test()
|
||||
pre_test_p()
|
||||
sh '''
|
||||
cd ${WKC}/tests
|
||||
find pytest -name '*'sql|xargs rm -rf
|
||||
|
@ -92,7 +119,7 @@ pipeline {
|
|||
}
|
||||
|
||||
sh'''
|
||||
systemctl start taosd
|
||||
nohup taosd >/dev/null &
|
||||
sleep 10
|
||||
'''
|
||||
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
|
||||
|
@ -136,7 +163,7 @@ pipeline {
|
|||
'''
|
||||
}
|
||||
sh '''
|
||||
systemctl stop taosd
|
||||
pkill -9 taosd
|
||||
cd ${WKC}/tests
|
||||
./test-all.sh b2
|
||||
date
|
||||
|
|
|
@ -163,6 +163,11 @@ python3 test.py -f tools/taosdemoTestSampleData.py
|
|||
python3 test.py -f tools/taosdemoTestInterlace.py
|
||||
python3 test.py -f tools/taosdemoTestQuery.py
|
||||
|
||||
# nano support
|
||||
python3 test.py -f tools/taosdemoAllTest/taosdemoTestSupportNanoInsert.py
|
||||
python3 test.py -f tools/taosdemoAllTest/taosdemoTestSupportNanoQuery.py
|
||||
python3 test.py -f tools/taosdemoAllTest/taosdemoTestSupportNanosubscribe.py
|
||||
python3 test.py -f tools/taosdemoAllTest/taosdemoTestInsertTime_step.py
|
||||
python3 test.py -f tools/taosdumpTestNanoSupport.py
|
||||
|
||||
# update
|
||||
|
@ -247,6 +252,7 @@ python3 ./test.py -f query/queryStateWindow.py
|
|||
python3 ./test.py -f query/nestedQuery/queryWithOrderLimit.py
|
||||
python3 ./test.py -f query/nestquery_last_row.py
|
||||
python3 ./test.py -f query/queryCnameDisplay.py
|
||||
python3 ./test.py -f query/operator_cost.py
|
||||
python3 test.py -f query/nestedQuery/queryWithSpread.py
|
||||
|
||||
#stream
|
||||
|
@ -368,6 +374,15 @@ python3 test.py -f alter/alter_keep.py
|
|||
python3 test.py -f alter/alter_cacheLastRow.py
|
||||
python3 ./test.py -f query/querySession.py
|
||||
python3 test.py -f alter/alter_create_exception.py
|
||||
|
||||
python3 ./test.py -f insert/flushwhiledrop.py
|
||||
|
||||
#======================p4-end===============
|
||||
python3 test.py -f tools/taosdemoAllTest/pytest.py
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -77,6 +77,8 @@ class TDTestCase:
|
|||
"sth,t1=4i64,t2=5f64,t4=5f64,ID=\"childtable\" c1=3i64,c3=L\"passitagin_stf\",c2=false,c5=5f64,c6=7u64 1626006933641ms",
|
||||
"sth,t1=4i64,t2=5f64,t4=5f64 c1=3i64,c3=L\"passitagin_stf\",c2=false,c5=5f64,c6=7u64 1626006933654ms"
|
||||
])
|
||||
tdSql.execute('reset query cache')
|
||||
|
||||
tdSql.query('select tbname, * from sth')
|
||||
tdSql.checkRows(2)
|
||||
|
||||
|
|
|
@ -0,0 +1,536 @@
|
|||
###################################################################
|
||||
# Copyright (c) 2016 by TAOS Technologies, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# This file is proprietary and confidential to TAOS Technologies.
|
||||
# No part of this file may be reproduced, stored, transmitted,
|
||||
# disclosed or used in any form or by any means other than as
|
||||
# expressly provided by the written permission from Jianhui Tao
|
||||
#
|
||||
###################################################################
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import sys
|
||||
import taos
|
||||
from util.log import tdLog
|
||||
from util.cases import tdCases
|
||||
from util.sql import tdSql
|
||||
import random
|
||||
import time
|
||||
|
||||
|
||||
class TDTestCase:
|
||||
def init(self, conn, logSql):
|
||||
tdLog.debug("start to execute %s" % __file__)
|
||||
tdSql.init(conn.cursor(), logSql)
|
||||
|
||||
self.ts = 1600000000000
|
||||
self.num = 10
|
||||
|
||||
def run(self):
|
||||
tdSql.prepare()
|
||||
# test case for https://jira.taosdata.com:18080/browse/TD-5074
|
||||
|
||||
startTime = time.time()
|
||||
|
||||
tdSql.execute('''create stable stable_1
|
||||
(ts timestamp , q_int int , q_bigint bigint , q_smallint smallint , q_tinyint tinyint,
|
||||
q_bool bool , q_binary binary(20) , q_nchar nchar(20) ,
|
||||
q_float float , q_double double , q_ts timestamp)
|
||||
tags(loc nchar(20) , t_int int , t_bigint bigint , t_smallint smallint , t_tinyint tinyint,
|
||||
t_bool bool , t_binary binary(20) , t_nchar nchar(20) ,
|
||||
t_float float , t_double double , t_ts timestamp);''')
|
||||
tdSql.execute('''create stable stable_2
|
||||
(ts timestamp , q_int int , q_bigint bigint , q_smallint smallint , q_tinyint tinyint,
|
||||
q_bool bool , q_binary binary(20) , q_nchar nchar(20) ,
|
||||
q_float float , q_double double , q_ts timestamp)
|
||||
tags(loc nchar(20) , t_int int , t_bigint bigint , t_smallint smallint , t_tinyint tinyint,
|
||||
t_bool bool , t_binary binary(20) , t_nchar nchar(20) ,
|
||||
t_float float , t_double double , t_ts timestamp);''')
|
||||
tdSql.execute('''create table table_0 using stable_1
|
||||
tags('table_0' , '0' , '0' , '0' , '0' , 0 , '0' , '0' , '0' , '0' ,'0')''')
|
||||
tdSql.execute('''create table table_1 using stable_1
|
||||
tags('table_1' , '2147483647' , '9223372036854775807' , '32767' , '127' , 1 ,
|
||||
'binary1' , 'nchar1' , '1' , '11' , \'1999-09-09 09:09:09.090\')''')
|
||||
tdSql.execute('''create table table_2 using stable_1
|
||||
tags('table_2' , '-2147483647' , '-9223372036854775807' , '-32767' , '-127' , false ,
|
||||
'binary2' , 'nchar2nchar2' , '-2.2' , '-22.22' , \'2099-09-09 09:09:09.090\')''')
|
||||
tdSql.execute('''create table table_3 using stable_1
|
||||
tags('table_3' , '3' , '3' , '3' , '3' , true , 'binary3' , 'nchar3' , '33.33' , '3333.3333' , '0')''')
|
||||
tdSql.execute('''create table table_4 using stable_1
|
||||
tags('table_4' , '4' , '4' , '4' , '4' , false , 'binary4' , 'nchar4' , '-444.444' , '-444444.444444' , '0')''')
|
||||
tdSql.execute('''create table table_5 using stable_1
|
||||
tags('table_5' , '5' , '5' , '5' , '5' , true , 'binary5' , 'nchar5' , '5555.5555' , '55555555.55555555' , '0')''')
|
||||
tdSql.execute('''create table table_21 using stable_2
|
||||
tags('table_5' , '5' , '5' , '5' , '5' , true , 'binary5' , 'nchar5' , '5555.5555' , '55555555.55555555' , '0')''')
|
||||
#regular table
|
||||
tdSql.execute('''create table regular_table_1
|
||||
(ts timestamp , q_int int , q_bigint bigint , q_smallint smallint , q_tinyint tinyint,
|
||||
q_bool bool , q_binary binary(20) , q_nchar nchar(20) ,
|
||||
q_float float , q_double double , q_ts timestamp) ;''')
|
||||
|
||||
for i in range(self.num):
|
||||
tdSql.execute('''insert into table_0 values(%d, %d, %d, %d, %d, 0, 'binary.%s', 'nchar.%s', %f, %f, %d)'''
|
||||
% (self.ts + i, i, i, i, i, i, i, i, i, self.ts + i))
|
||||
tdSql.execute('''insert into table_1 values(%d, %d, %d, %d, %d, 1, 'binary1.%s', 'nchar1.%s', %f, %f, %d)'''
|
||||
% (self.ts + i, 2147483647-i, 9223372036854775807-i, 32767-i, 127-i,
|
||||
i, i, random.random(), random.random(), 1262304000001 + i))
|
||||
tdSql.execute('''insert into table_2 values(%d, %d, %d, %d, %d, true, 'binary2.%s', 'nchar2nchar2.%s', %f, %f, %d)'''
|
||||
% (self.ts + i, -2147483647+i, -9223372036854775807+i, -32767+i, -127+i,
|
||||
i, i, random.uniform(-1,0), random.uniform(-1,0), 1577836800001 + i))
|
||||
tdSql.execute('''insert into table_3 values(%d, %d, %d, %d, %d, false, 'binary3.%s', 'nchar3.%s', %f, %f, %d)'''
|
||||
% (self.ts + i, random.randint(-2147483647, 2147483647),
|
||||
random.randint(-9223372036854775807, 9223372036854775807), random.randint(-32767, 32767),
|
||||
random.randint(-127, 127), random.randint(-100, 100), random.randint(-10000, 10000),
|
||||
random.uniform(-100000,100000), random.uniform(-1000000000,1000000000), self.ts + i))
|
||||
tdSql.execute('''insert into table_4 values(%d, %d, %d, %d, %d, true, 'binary4.%s', 'nchar4.%s', %f, %f, %d)'''
|
||||
% (self.ts + i, i, i, i, i, i, i, i, i, self.ts + i))
|
||||
tdSql.execute('''insert into table_5 values(%d, %d, %d, %d, %d, false, 'binary5.%s', 'nchar5.%s', %f, %f, %d)'''
|
||||
% (self.ts + i, i, i, i, i, i, i, i, i, self.ts + i))
|
||||
tdSql.execute('''insert into table_21 values(%d, %d, %d, %d, %d, false, 'binary5.%s', 'nchar5.%s', %f, %f, %d)'''
|
||||
% (self.ts + i, i, i, i, i, i, i, i, i, self.ts + i))
|
||||
|
||||
tdSql.execute('''insert into regular_table_1 values(%d, %d, %d, %d, %d, 0, 'binary.%s', 'nchar.%s', %f, %f, %d)'''
|
||||
% (self.ts + i, i, i, i, i, i, i, i, i, self.ts + i))
|
||||
tdSql.execute('''insert into regular_table_1 values(%d, %d, %d, %d, %d, 1, 'binary1.%s', 'nchar1.%s', %f, %f, %d)'''
|
||||
% (self.ts + 100 + i, 2147483647-i, 9223372036854775807-i, 32767-i, 127-i,
|
||||
i, i, random.random(), random.random(), 1262304000001 + i))
|
||||
tdSql.execute('''insert into regular_table_1 values(%d, %d, %d, %d, %d, true, 'binary2.%s', 'nchar2nchar2.%s', %f, %f, %d)'''
|
||||
% (self.ts + 200 + i, -2147483647+i, -9223372036854775807+i, -32767+i, -127+i,
|
||||
i, i, random.uniform(-1,0), random.uniform(-1,0), 1577836800001 + i))
|
||||
tdSql.execute('''insert into regular_table_1 values(%d, %d, %d, %d, %d, false, 'binary3.%s', 'nchar3.%s', %f, %f, %d)'''
|
||||
% (self.ts + 300 + i, random.randint(-2147483647, 2147483647),
|
||||
random.randint(-9223372036854775807, 9223372036854775807), random.randint(-32767, 32767),
|
||||
random.randint(-127, 127), random.randint(-100, 100), random.randint(-10000, 10000),
|
||||
random.uniform(-100000,100000), random.uniform(-1000000000,1000000000), self.ts + i))
|
||||
tdSql.execute('''insert into regular_table_1 values(%d, %d, %d, %d, %d, true, 'binary4.%s', 'nchar4.%s', %f, %f, %d)'''
|
||||
% (self.ts + 400 + i, i, i, i, i, i, i, i, i, self.ts + i))
|
||||
tdSql.execute('''insert into regular_table_1 values(%d, %d, %d, %d, %d, false, 'binary5.%s', 'nchar5.%s', %f, %f, %d)'''
|
||||
% (self.ts + 500 + i, i, i, i, i, i, i, i, i, self.ts + i))
|
||||
|
||||
tdLog.info("========== operator=1(OP_TableScan) ==========")
|
||||
tdLog.info("========== operator=7(OP_Project) ==========")
|
||||
sql = '''select * from stable_1'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(6*self.num)
|
||||
sql = '''select * from regular_table_1'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(6*self.num)
|
||||
|
||||
tdLog.info("========== operator=14(OP_MultiTableAggregate ) ==========")
|
||||
sql = '''select last_row(*) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,1,self.num-1)
|
||||
|
||||
tdLog.info("========== operator=6(OP_Aggregate) ==========")
|
||||
sql = '''select last_row(*) from regular_table_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,1,self.num-1)
|
||||
|
||||
tdLog.info("========== operator=9(OP_Limit) ==========")
|
||||
sql = '''select * from stable_1 where loc = 'table_0' limit 5;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(5)
|
||||
sql = '''select last_row(*) from (select * from stable_1 where loc = 'table_0');'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
|
||||
sql = '''select * from regular_table_1 ;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(6*self.num)
|
||||
sql = '''select last_row(*) from (select * from regular_table_1);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
tdSql.checkData(0,1,self.num-1)
|
||||
|
||||
|
||||
sql = '''select last_row(*) from
|
||||
((select * from table_0) union all
|
||||
(select * from table_1) union all
|
||||
(select * from table_2));'''
|
||||
tdSql.error(sql)
|
||||
|
||||
tdLog.info("========== operator=16(OP_DummyInput) ==========")
|
||||
sql = '''select last_row(*) from
|
||||
((select last_row(*) from table_0) union all
|
||||
(select last_row(*) from table_1) union all
|
||||
(select last_row(*) from table_2));'''
|
||||
tdSql.error(sql)
|
||||
|
||||
sql = '''select last_row(*) from
|
||||
((select * from table_0 limit 5 offset 5) union all
|
||||
(select * from table_1 limit 5 offset 5) union all
|
||||
(select * from regular_table_1 limit 5 offset 5));'''
|
||||
tdSql.error(sql)
|
||||
|
||||
tdLog.info("========== operator=10(OP_SLimit) ==========")
|
||||
sql = '''select count(*) from stable_1 group by loc slimit 3 soffset 2 ;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(3)
|
||||
|
||||
sql = '''select last_row(*) from
|
||||
((select * from table_0) union all
|
||||
(select * from table_1) union all
|
||||
(select * from table_2));'''
|
||||
tdSql.error(sql)
|
||||
|
||||
tdLog.info("========== operator=20(OP_Distinct) ==========")
|
||||
tdLog.info("========== operator=4(OP_TagScan) ==========")
|
||||
sql = '''select distinct(t_bool) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(2)
|
||||
sql = '''select distinct(loc) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(6)
|
||||
sql = '''select distinct(t_int) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(6)
|
||||
sql = '''select distinct(t_bigint) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(6)
|
||||
sql = '''select distinct(t_smallint) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(6)
|
||||
sql = '''select distinct(t_tinyint) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(6)
|
||||
sql = '''select distinct(t_nchar) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(6)
|
||||
sql = '''select distinct(t_float) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(6)
|
||||
sql = '''select distinct(t_double) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(6)
|
||||
sql = '''select distinct(t_ts) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(3)
|
||||
# sql = '''select distinct(tbname) from stable_1;'''
|
||||
# tdSql.query(sql)
|
||||
# tdSql.checkRows(6)
|
||||
|
||||
tdLog.info("========== operator=2(OP_DataBlocksOptScan) ==========")
|
||||
sql = '''select last(q_int),first(q_int) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select last(q_bigint),first(q_bigint) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select last(q_smallint),first(q_smallint) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select last(q_tinyint),first(q_tinyint) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select last(q_bool),first(q_bool) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select last(q_binary),first(q_binary) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select last(q_nchar),first(q_nchar) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select last(q_float),first(q_float) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select last(q_double),first(q_double) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select last(q_ts),first(q_ts) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select last(q_int),last(q_bigint), last(q_smallint),last(q_tinyint),last(q_bool),last(q_binary),last(q_nchar),
|
||||
last(q_float),last(q_double),last(q_ts),first(q_int),first(q_bigint),first(q_smallint),first(q_tinyint),
|
||||
first(q_bool),first(q_binary),first(q_nchar),first(q_float),first(q_float),first(q_double),first(q_ts) from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select last(q_int),last(q_bigint), last(q_smallint),last(q_tinyint),last(q_bool),last(q_binary),last(q_nchar),
|
||||
last(q_float),last(q_double),last(q_ts),first(q_int),first(q_bigint),first(q_smallint),first(q_tinyint),first(q_bool),
|
||||
first(q_binary),first(q_nchar),first(q_float),first(q_float),first(q_double),first(q_ts) from regular_table_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
|
||||
tdLog.info("========== operator=8(OP_Groupby) ==========")
|
||||
sql = '''select stddev(q_int) from table_0 group by q_int;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select stddev(q_int),stddev(q_bigint),stddev(q_smallint),stddev(q_tinyint),stddev(q_float),stddev(q_double) from stable_1 group by q_int;'''
|
||||
tdSql.query(sql)
|
||||
sql = '''select stddev(q_int),stddev(q_bigint),stddev(q_smallint),stddev(q_tinyint),stddev(q_float),stddev(q_double) from table_1 group by q_bigint;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select stddev(q_int),stddev(q_bigint),stddev(q_smallint),stddev(q_tinyint),stddev(q_float),stddev(q_double) from regular_table_1 group by q_smallint;'''
|
||||
tdSql.query(sql)
|
||||
|
||||
tdLog.info("========== operator=11(OP_TimeWindow) ==========")
|
||||
sql = '''select last(q_int) from table_0 interval(1m);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select last(q_int),last(q_bigint), last(q_smallint),last(q_tinyint),
|
||||
first(q_int),first(q_bigint),first(q_smallint),first(q_tinyint) from table_1 interval(1m);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select last(q_int),last(q_bigint), last(q_smallint),last(q_tinyint),
|
||||
first(q_int),first(q_bigint),first(q_smallint),first(q_tinyint) from stable_1 interval(1m);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select last(q_int),last(q_bigint), last(q_smallint),last(q_tinyint),
|
||||
first(q_int),first(q_bigint),first(q_smallint),first(q_tinyint) from regular_table_1 interval(1m);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
|
||||
tdLog.info("========== operator=12(OP_SessionWindow) ==========")
|
||||
sql = '''select count(*) from table_1 session(ts,1s);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select count(*) from regular_table_1 session(ts,1s);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select count(*),sum(q_int), avg(q_int), min(q_int), max(q_int), first(q_int), last(q_int),
|
||||
sum(q_bigint), avg(q_bigint), min(q_bigint), max(q_bigint), first(q_bigint), last(q_bigint),
|
||||
sum(q_smallint), avg(q_smallint), min(q_smallint), max(q_smallint), first(q_smallint), last(q_smallint),
|
||||
sum(q_tinyint), avg(q_tinyint), min(q_tinyint), max(q_tinyint), first(q_tinyint), last(q_tinyint),
|
||||
sum(q_float), avg(q_float), min(q_float), max(q_float), first(q_float), last(q_float),
|
||||
sum(q_double), avg(q_double), min(q_double), max(q_double), first(q_double), last(q_double)
|
||||
from table_1 session(ts,1s);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select count(*),sum(q_int), avg(q_int), min(q_int), max(q_int), first(q_int), last(q_int),
|
||||
sum(q_bigint), avg(q_bigint), min(q_bigint), max(q_bigint), first(q_bigint), last(q_bigint),
|
||||
sum(q_smallint), avg(q_smallint), min(q_smallint), max(q_smallint), first(q_smallint), last(q_smallint),
|
||||
sum(q_tinyint), avg(q_tinyint), min(q_tinyint), max(q_tinyint), first(q_tinyint), last(q_tinyint),
|
||||
sum(q_float), avg(q_float), min(q_float), max(q_float), first(q_float), last(q_float),
|
||||
sum(q_double), avg(q_double), min(q_double), max(q_double), first(q_double), last(q_double)
|
||||
from regular_table_1 session(ts,1s);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
|
||||
tdLog.info("========== operator=13(OP_Fill) ==========")
|
||||
sql = '''select sum(q_int) from table_0
|
||||
where ts >='1970-10-01 00:00:00' and ts <=now interval(1n) fill(NULL);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,1,'None')
|
||||
sql = '''select sum(q_int), avg(q_int), min(q_int), max(q_int), first(q_int), last(q_int),
|
||||
sum(q_bigint), avg(q_bigint), min(q_bigint), max(q_bigint), first(q_bigint), last(q_bigint),
|
||||
sum(q_smallint), avg(q_smallint), min(q_smallint), max(q_smallint), first(q_smallint), last(q_smallint),
|
||||
sum(q_tinyint), avg(q_tinyint), min(q_tinyint), max(q_tinyint), first(q_tinyint), last(q_tinyint),
|
||||
sum(q_float), avg(q_float), min(q_float), max(q_float), first(q_float), last(q_float),
|
||||
sum(q_double), avg(q_double), min(q_double), max(q_double), first(q_double), last(q_double)
|
||||
from stable_1 where ts >='1970-10-01 00:00:00' and ts <=now interval(1n) fill(NULL);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,1,'None')
|
||||
sql = '''select sum(q_int), avg(q_int), min(q_int), max(q_int), first(q_int), last(q_int),
|
||||
sum(q_bigint), avg(q_bigint), min(q_bigint), max(q_bigint), first(q_bigint), last(q_bigint),
|
||||
sum(q_smallint), avg(q_smallint), min(q_smallint), max(q_smallint), first(q_smallint), last(q_smallint),
|
||||
sum(q_tinyint), avg(q_tinyint), min(q_tinyint), max(q_tinyint), first(q_tinyint), last(q_tinyint),
|
||||
sum(q_float), avg(q_float), min(q_float), max(q_float), first(q_float), last(q_float),
|
||||
sum(q_double), avg(q_double), min(q_double), max(q_double), first(q_double), last(q_double)
|
||||
from regular_table_1 where ts >='1970-10-01 00:00:00' and ts <=now interval(1n) fill(NULL);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,1,'None')
|
||||
sql = '''select sum(q_int), avg(q_int), min(q_int), max(q_int), first(q_int), last(q_int),
|
||||
sum(q_bigint), avg(q_bigint), min(q_bigint), max(q_bigint), first(q_bigint), last(q_bigint),
|
||||
sum(q_smallint), avg(q_smallint), min(q_smallint), max(q_smallint), first(q_smallint), last(q_smallint),
|
||||
sum(q_tinyint), avg(q_tinyint), min(q_tinyint), max(q_tinyint), first(q_tinyint), last(q_tinyint),
|
||||
sum(q_float), avg(q_float), min(q_float), max(q_float), first(q_float), last(q_float),
|
||||
sum(q_double), avg(q_double), min(q_double), max(q_double), first(q_double), last(q_double)
|
||||
from table_0 where ts >='1970-10-01 00:00:00' and ts <=now interval(1n) fill(NULL);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,1,'None')
|
||||
#TD-5190
|
||||
sql = '''select sum(q_tinyint),stddev(q_float) from stable_1
|
||||
where ts >='1970-10-01 00:00:00' and ts <=now interval(1n) fill(NULL);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,1,'None')
|
||||
|
||||
tdLog.info("========== operator=15(OP_MultiTableTimeInterval) ==========")
|
||||
sql = '''select avg(q_int) from stable_1 where ts<now interval(10m);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select sum(q_int), avg(q_int), min(q_int), max(q_int), first(q_int), last(q_int),
|
||||
sum(q_bigint), avg(q_bigint), min(q_bigint), max(q_bigint), first(q_bigint), last(q_bigint),
|
||||
sum(q_smallint), avg(q_smallint), min(q_smallint), max(q_smallint), first(q_smallint), last(q_smallint),
|
||||
sum(q_tinyint), avg(q_tinyint), min(q_tinyint), max(q_tinyint), first(q_tinyint), last(q_tinyint),
|
||||
sum(q_float), avg(q_float), min(q_float), max(q_float), first(q_float), last(q_float),
|
||||
sum(q_double), avg(q_double), min(q_double), max(q_double), first(q_double), last(q_double)
|
||||
from table_1 where ts<now interval(10m);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select sum(q_int), avg(q_int), min(q_int), max(q_int), first(q_int), last(q_int),
|
||||
sum(q_bigint), avg(q_bigint), min(q_bigint), max(q_bigint), first(q_bigint), last(q_bigint),
|
||||
sum(q_smallint), avg(q_smallint), min(q_smallint), max(q_smallint), first(q_smallint), last(q_smallint),
|
||||
sum(q_tinyint), avg(q_tinyint), min(q_tinyint), max(q_tinyint), first(q_tinyint), last(q_tinyint),
|
||||
sum(q_float), avg(q_float), min(q_float), max(q_float), first(q_float), last(q_float),
|
||||
sum(q_double), avg(q_double), min(q_double), max(q_double), first(q_double), last(q_double)
|
||||
from stable_1 where ts<now interval(10m);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select sum(q_int), avg(q_int), min(q_int), max(q_int), first(q_int), last(q_int),
|
||||
sum(q_bigint), avg(q_bigint), min(q_bigint), max(q_bigint), first(q_bigint), last(q_bigint),
|
||||
sum(q_smallint), avg(q_smallint), min(q_smallint), max(q_smallint), first(q_smallint), last(q_smallint),
|
||||
sum(q_tinyint), avg(q_tinyint), min(q_tinyint), max(q_tinyint), first(q_tinyint), last(q_tinyint),
|
||||
sum(q_float), avg(q_float), min(q_float), max(q_float), first(q_float), last(q_float),
|
||||
sum(q_double), avg(q_double), min(q_double), max(q_double), first(q_double), last(q_double)
|
||||
from regular_table_1 where ts<now interval(10m);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
|
||||
tdLog.info("========== operator=3(OP_TableSeqScan) ==========")
|
||||
tdLog.info("========== operator=6(OP_Aggregate) ==========")
|
||||
sql = '''select * from table_1,table_2
|
||||
where table_1.ts = table_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
#TD-5206
|
||||
sql = '''select * from stable_1,stable_2
|
||||
where stable_1.t_nchar = stable_2.t_nchar and stable_1.ts = stable_2.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
#TD-5139
|
||||
sql = '''select * from table_1,regular_table_1
|
||||
where table_1.ts = regular_table_1.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
|
||||
tdLog.info("========== operator=5(OP_TableBlockInfoScan) ==========")
|
||||
sql = '''select _block_dist() from stable_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select _block_dist() from table_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
sql = '''select _block_dist() from regular_table_1;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(1)
|
||||
|
||||
tdLog.info("========== operator=17(OP_MultiwayMergeSort) ==========")
|
||||
tdLog.info("========== operator=18(OP_GlobalAggregate) ==========")
|
||||
tdLog.info("========== operator=19(OP_Filter) ==========")
|
||||
sql = '''select loc,sum(q_int) from stable_1
|
||||
group by loc having sum(q_int)>=0;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'table_0')
|
||||
sql = '''select loc, sum(q_int), avg(q_int), min(q_int), max(q_int), first(q_int), last(q_int),
|
||||
sum(q_bigint), avg(q_bigint), min(q_bigint), max(q_bigint), first(q_bigint), last(q_bigint),
|
||||
sum(q_smallint), avg(q_smallint), min(q_smallint), max(q_smallint), first(q_smallint), last(q_smallint),
|
||||
sum(q_tinyint), avg(q_tinyint), min(q_tinyint), max(q_tinyint), first(q_tinyint), last(q_tinyint),
|
||||
sum(q_float), avg(q_float), min(q_float), max(q_float), first(q_float), last(q_float),
|
||||
sum(q_double), avg(q_double), min(q_double), max(q_double), first(q_double), last(q_double)
|
||||
from stable_1 group by loc having sum(q_int)>=0;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'table_0')
|
||||
sql = '''select loc, sum(q_int), avg(q_int), min(q_int), max(q_int), first(q_int), last(q_int),
|
||||
sum(q_bigint), avg(q_bigint), min(q_bigint), max(q_bigint), first(q_bigint), last(q_bigint),
|
||||
sum(q_smallint), avg(q_smallint), min(q_smallint), max(q_smallint), first(q_smallint), last(q_smallint),
|
||||
sum(q_tinyint), avg(q_tinyint), min(q_tinyint), max(q_tinyint), first(q_tinyint), last(q_tinyint),
|
||||
sum(q_float), avg(q_float), min(q_float), max(q_float), first(q_float), last(q_float),
|
||||
sum(q_double), avg(q_double), min(q_double), max(q_double), first(q_double), last(q_double)
|
||||
from stable_1 group by loc having avg(q_int)>=0;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'table_0')
|
||||
sql = '''select loc, sum(q_int), avg(q_int), min(q_int), max(q_int), first(q_int), last(q_int),
|
||||
sum(q_bigint), avg(q_bigint), min(q_bigint), max(q_bigint), first(q_bigint), last(q_bigint),
|
||||
sum(q_smallint), avg(q_smallint), min(q_smallint), max(q_smallint), first(q_smallint), last(q_smallint),
|
||||
sum(q_tinyint), avg(q_tinyint), min(q_tinyint), max(q_tinyint), first(q_tinyint), last(q_tinyint),
|
||||
sum(q_float), avg(q_float), min(q_float), max(q_float), first(q_float), last(q_float),
|
||||
sum(q_double), avg(q_double), min(q_double), max(q_double), first(q_double), last(q_double)
|
||||
from stable_1 group by loc having min(q_int)>=0;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'table_0')
|
||||
sql = '''select loc, sum(q_int), avg(q_int), min(q_int), max(q_int), first(q_int), last(q_int),
|
||||
sum(q_bigint), avg(q_bigint), min(q_bigint), max(q_bigint), first(q_bigint), last(q_bigint),
|
||||
sum(q_smallint), avg(q_smallint), min(q_smallint), max(q_smallint), first(q_smallint), last(q_smallint),
|
||||
sum(q_tinyint), avg(q_tinyint), min(q_tinyint), max(q_tinyint), first(q_tinyint), last(q_tinyint),
|
||||
sum(q_float), avg(q_float), min(q_float), max(q_float), first(q_float), last(q_float),
|
||||
sum(q_double), avg(q_double), min(q_double), max(q_double), first(q_double), last(q_double)
|
||||
from stable_1 group by loc having max(q_int)>=0;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'table_0')
|
||||
sql = '''select loc, sum(q_int), avg(q_int), min(q_int), max(q_int), first(q_int), last(q_int),
|
||||
sum(q_bigint), avg(q_bigint), min(q_bigint), max(q_bigint), first(q_bigint), last(q_bigint),
|
||||
sum(q_smallint), avg(q_smallint), min(q_smallint), max(q_smallint), first(q_smallint), last(q_smallint),
|
||||
sum(q_tinyint), avg(q_tinyint), min(q_tinyint), max(q_tinyint), first(q_tinyint), last(q_tinyint),
|
||||
sum(q_float), avg(q_float), min(q_float), max(q_float), first(q_float), last(q_float),
|
||||
sum(q_double), avg(q_double), min(q_double), max(q_double), first(q_double), last(q_double)
|
||||
from stable_1 group by loc having first(q_int)>=0;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'table_0')
|
||||
sql = '''select loc, sum(q_int), avg(q_int), min(q_int), max(q_int), first(q_int), last(q_int),
|
||||
sum(q_bigint), avg(q_bigint), min(q_bigint), max(q_bigint), first(q_bigint), last(q_bigint),
|
||||
sum(q_smallint), avg(q_smallint), min(q_smallint), max(q_smallint), first(q_smallint), last(q_smallint),
|
||||
sum(q_tinyint), avg(q_tinyint), min(q_tinyint), max(q_tinyint), first(q_tinyint), last(q_tinyint),
|
||||
sum(q_float), avg(q_float), min(q_float), max(q_float), first(q_float), last(q_float),
|
||||
sum(q_double), avg(q_double), min(q_double), max(q_double), first(q_double), last(q_double)
|
||||
from stable_1 group by loc having last(q_int)>=0;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'table_0')
|
||||
|
||||
tdLog.info("========== operator=21(OP_Join) ==========")
|
||||
sql = '''select t1.q_int,t2.q_int from
|
||||
(select ts,q_int from table_1) t1 , (select ts,q_int from table_2) t2
|
||||
where t2.ts = t1.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select t1.*,t2.* from
|
||||
(select * from table_1) t1 , (select * from table_2) t2
|
||||
where t2.ts = t1.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select t1.*,t2.* from
|
||||
(select * from regular_table_1) t1 , (select * from table_0) t2
|
||||
where t2.ts = t1.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select t1.*,t2.* from
|
||||
(select * from stable_1) t1 , (select * from table_2) t2
|
||||
where t2.ts = t1.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select t1.*,t2.* from
|
||||
(select * from regular_table_1) t1 , (select * from stable_1) t2
|
||||
where t2.ts = t1.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select t1.*,t2.*,t3.* from
|
||||
(select * from regular_table_1) t1 , (select * from stable_1) t2, (select * from table_0) t3
|
||||
where t2.ts = t1.ts and t3.ts = t1.ts and t2.ts = t3.ts;'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
|
||||
tdLog.info("========== operator=22(OP_StateWindow) ==========")
|
||||
sql = '''select avg(q_int),sum(q_smallint) from table_1 state_window(q_int);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select sum(q_int), avg(q_int), min(q_int), max(q_int), first(q_int), last(q_int),
|
||||
sum(q_bigint), avg(q_bigint), min(q_bigint), max(q_bigint), first(q_bigint), last(q_bigint),
|
||||
sum(q_smallint), avg(q_smallint), min(q_smallint), max(q_smallint), first(q_smallint), last(q_smallint),
|
||||
sum(q_tinyint), avg(q_tinyint), min(q_tinyint), max(q_tinyint), first(q_tinyint), last(q_tinyint),
|
||||
sum(q_float), avg(q_float), min(q_float), max(q_float), first(q_float), last(q_float),
|
||||
sum(q_double), avg(q_double), min(q_double), max(q_double), first(q_double), last(q_double)
|
||||
from table_1 state_window(q_bigint);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(self.num)
|
||||
sql = '''select sum(q_int), avg(q_int), min(q_int), max(q_int), first(q_int), last(q_int),
|
||||
sum(q_bigint), avg(q_bigint), min(q_bigint), max(q_bigint), first(q_bigint), last(q_bigint),
|
||||
sum(q_smallint), avg(q_smallint), min(q_smallint), max(q_smallint), first(q_smallint), last(q_smallint),
|
||||
sum(q_tinyint), avg(q_tinyint), min(q_tinyint), max(q_tinyint), first(q_tinyint), last(q_tinyint),
|
||||
sum(q_float), avg(q_float), min(q_float), max(q_float), first(q_float), last(q_float),
|
||||
sum(q_double), avg(q_double), min(q_double), max(q_double), first(q_double), last(q_double)
|
||||
from regular_table_1 state_window(q_smallint);'''
|
||||
tdSql.query(sql)
|
||||
tdSql.checkRows(6*self.num)
|
||||
|
||||
endTime = time.time()
|
||||
print("total time %ds" % (endTime - startTime))
|
||||
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
tdLog.success("%s successfully executed" % __file__)
|
||||
|
||||
|
||||
tdCases.addWindows(__file__, TDTestCase())
|
||||
tdCases.addLinux(__file__, TDTestCase())
|
|
@ -0,0 +1,100 @@
|
|||
8.855,"binary_str0" ,1626870128248246976
|
||||
8.75,"binary_str1" ,1626870128249060032
|
||||
5.44,"binary_str2" ,1626870128249067968
|
||||
8.45,"binary_str3" ,1626870128249072064
|
||||
4.07,"binary_str4" ,1626870128249075904
|
||||
6.97,"binary_str5" ,1626870128249078976
|
||||
6.86,"binary_str6" ,1626870128249082048
|
||||
1.585,"binary_str7" ,1626870128249085120
|
||||
1.4,"binary_str8" ,1626870128249087936
|
||||
5.135,"binary_str9" ,1626870128249092032
|
||||
3.15,"binary_str10" ,1626870128249095104
|
||||
1.765,"binary_str11" ,1626870128249097920
|
||||
7.71,"binary_str12" ,1626870128249100992
|
||||
3.91,"binary_str13" ,1626870128249104064
|
||||
5.615,"binary_str14" ,1626870128249106880
|
||||
9.495,"binary_str15" ,1626870128249109952
|
||||
3.825,"binary_str16" ,1626870128249113024
|
||||
1.94,"binary_str17" ,1626870128249117120
|
||||
5.385,"binary_str18" ,1626870128249119936
|
||||
7.075,"binary_str19" ,1626870128249123008
|
||||
5.715,"binary_str20" ,1626870128249126080
|
||||
1.83,"binary_str21" ,1626870128249128896
|
||||
6.365,"binary_str22" ,1626870128249131968
|
||||
6.55,"binary_str23" ,1626870128249135040
|
||||
6.315,"binary_str24" ,1626870128249138112
|
||||
3.82,"binary_str25" ,1626870128249140928
|
||||
2.455,"binary_str26" ,1626870128249145024
|
||||
7.795,"binary_str27" ,1626870128249148096
|
||||
2.47,"binary_str28" ,1626870128249150912
|
||||
1.37,"binary_str29" ,1626870128249155008
|
||||
5.39,"binary_str30" ,1626870128249158080
|
||||
5.13,"binary_str31" ,1626870128249160896
|
||||
4.09,"binary_str32" ,1626870128249163968
|
||||
5.855,"binary_str33" ,1626870128249167040
|
||||
0.17,"binary_str34" ,1626870128249170112
|
||||
1.955,"binary_str35" ,1626870128249173952
|
||||
0.585,"binary_str36" ,1626870128249178048
|
||||
0.33,"binary_str37" ,1626870128249181120
|
||||
7.925,"binary_str38" ,1626870128249183936
|
||||
9.685,"binary_str39" ,1626870128249187008
|
||||
2.6,"binary_str40" ,1626870128249191104
|
||||
5.705,"binary_str41" ,1626870128249193920
|
||||
3.965,"binary_str42" ,1626870128249196992
|
||||
4.43,"binary_str43" ,1626870128249200064
|
||||
8.73,"binary_str44" ,1626870128249202880
|
||||
3.105,"binary_str45" ,1626870128249205952
|
||||
9.39,"binary_str46" ,1626870128249209024
|
||||
2.825,"binary_str47" ,1626870128249212096
|
||||
9.675,"binary_str48" ,1626870128249214912
|
||||
9.99,"binary_str49" ,1626870128249217984
|
||||
4.51,"binary_str50" ,1626870128249221056
|
||||
4.94,"binary_str51" ,1626870128249223872
|
||||
7.72,"binary_str52" ,1626870128249226944
|
||||
4.135,"binary_str53" ,1626870128249231040
|
||||
2.325,"binary_str54" ,1626870128249234112
|
||||
4.585,"binary_str55" ,1626870128249236928
|
||||
8.76,"binary_str56" ,1626870128249240000
|
||||
4.715,"binary_str57" ,1626870128249243072
|
||||
0.56,"binary_str58" ,1626870128249245888
|
||||
5.35,"binary_str59" ,1626870128249249984
|
||||
5.075,"binary_str60" ,1626870128249253056
|
||||
6.665,"binary_str61" ,1626870128249256128
|
||||
7.13,"binary_str62" ,1626870128249258944
|
||||
2.775,"binary_str63" ,1626870128249262016
|
||||
5.775,"binary_str64" ,1626870128249265088
|
||||
1.62,"binary_str65" ,1626870128249267904
|
||||
1.625,"binary_str66" ,1626870128249270976
|
||||
8.15,"binary_str67" ,1626870128249274048
|
||||
0.75,"binary_str68" ,1626870128249277120
|
||||
3.265,"binary_str69" ,1626870128249280960
|
||||
8.585,"binary_str70" ,1626870128249284032
|
||||
1.88,"binary_str71" ,1626870128249287104
|
||||
8.44,"binary_str72" ,1626870128249289920
|
||||
5.12,"binary_str73" ,1626870128249295040
|
||||
2.58,"binary_str74" ,1626870128249298112
|
||||
9.42,"binary_str75" ,1626870128249300928
|
||||
1.765,"binary_str76" ,1626870128249304000
|
||||
2.66,"binary_str77" ,1626870128249308096
|
||||
1.405,"binary_str78" ,1626870128249310912
|
||||
5.595,"binary_str79" ,1626870128249315008
|
||||
2.28,"binary_str80" ,1626870128249318080
|
||||
9.24,"binary_str81" ,1626870128249320896
|
||||
9.03,"binary_str82" ,1626870128249323968
|
||||
6.055,"binary_str83" ,1626870128249327040
|
||||
1.74,"binary_str84" ,1626870128249330112
|
||||
5.77,"binary_str85" ,1626870128249332928
|
||||
1.97,"binary_str86" ,1626870128249336000
|
||||
0.3,"binary_str87" ,1626870128249339072
|
||||
7.145,"binary_str88" ,1626870128249342912
|
||||
0.88,"binary_str89" ,1626870128249345984
|
||||
8.025,"binary_str90" ,1626870128249349056
|
||||
4.81,"binary_str91" ,1626870128249351872
|
||||
0.725,"binary_str92" ,1626870128249355968
|
||||
3.85,"binary_str93" ,1626870128249359040
|
||||
9.455,"binary_str94" ,1626870128249362112
|
||||
2.265,"binary_str95" ,1626870128249364928
|
||||
3.985,"binary_str96" ,1626870128249368000
|
||||
9.375,"binary_str97" ,1626870128249371072
|
||||
0.2,"binary_str98" ,1626870128249373888
|
||||
6.95,"binary_str99" ,1626870128249377984
|
Can't render this file because it contains an unexpected character in line 1 and column 19.
|
|
@ -0,0 +1,100 @@
|
|||
"string0",7,8.615
|
||||
"string1",4,9.895
|
||||
"string2",3,2.92
|
||||
"string3",3,5.62
|
||||
"string4",7,1.615
|
||||
"string5",6,1.45
|
||||
"string6",5,7.48
|
||||
"string7",7,3.01
|
||||
"string8",5,4.76
|
||||
"string9",10,7.09
|
||||
"string10",2,8.38
|
||||
"string11",7,8.65
|
||||
"string12",5,5.025
|
||||
"string13",10,5.765
|
||||
"string14",2,4.57
|
||||
"string15",2,1.03
|
||||
"string16",7,6.98
|
||||
"string17",10,0.23
|
||||
"string18",7,5.815
|
||||
"string19",1,2.37
|
||||
"string20",10,8.865
|
||||
"string21",3,1.235
|
||||
"string22",2,8.62
|
||||
"string23",9,1.045
|
||||
"string24",8,4.34
|
||||
"string25",1,5.455
|
||||
"string26",2,4.475
|
||||
"string27",1,6.95
|
||||
"string28",2,3.39
|
||||
"string29",3,6.79
|
||||
"string30",7,9.735
|
||||
"string31",1,9.79
|
||||
"string32",10,9.955
|
||||
"string33",1,5.095
|
||||
"string34",3,3.86
|
||||
"string35",9,5.105
|
||||
"string36",10,4.22
|
||||
"string37",1,2.78
|
||||
"string38",9,6.345
|
||||
"string39",1,0.975
|
||||
"string40",5,6.16
|
||||
"string41",4,7.735
|
||||
"string42",5,6.6
|
||||
"string43",8,2.845
|
||||
"string44",1,0.655
|
||||
"string45",3,2.995
|
||||
"string46",9,3.6
|
||||
"string47",8,3.47
|
||||
"string48",3,7.98
|
||||
"string49",6,2.225
|
||||
"string50",9,5.44
|
||||
"string51",4,6.335
|
||||
"string52",3,2.955
|
||||
"string53",1,0.565
|
||||
"string54",6,5.575
|
||||
"string55",6,9.905
|
||||
"string56",9,6.025
|
||||
"string57",8,0.94
|
||||
"string58",10,0.15
|
||||
"string59",8,1.555
|
||||
"string60",4,2.28
|
||||
"string61",2,8.29
|
||||
"string62",9,6.22
|
||||
"string63",6,3.35
|
||||
"string64",10,6.7
|
||||
"string65",3,9.345
|
||||
"string66",7,9.815
|
||||
"string67",1,5.365
|
||||
"string68",10,3.81
|
||||
"string69",1,6.405
|
||||
"string70",8,2.715
|
||||
"string71",3,8.58
|
||||
"string72",8,6.34
|
||||
"string73",2,7.49
|
||||
"string74",4,8.64
|
||||
"string75",3,8.995
|
||||
"string76",7,3.465
|
||||
"string77",1,7.64
|
||||
"string78",6,3.65
|
||||
"string79",6,1.4
|
||||
"string80",6,5.875
|
||||
"string81",2,1.22
|
||||
"string82",5,7.87
|
||||
"string83",9,8.41
|
||||
"string84",9,8.9
|
||||
"string85",9,3.89
|
||||
"string86",2,5.0
|
||||
"string87",2,4.495
|
||||
"string88",4,2.835
|
||||
"string89",3,5.895
|
||||
"string90",7,8.41
|
||||
"string91",5,5.125
|
||||
"string92",7,9.165
|
||||
"string93",5,8.315
|
||||
"string94",10,7.485
|
||||
"string95",7,4.635
|
||||
"string96",2,6.015
|
||||
"string97",8,0.595
|
||||
"string98",3,8.79
|
||||
"string99",4,1.72
|
|
|
@ -7,7 +7,7 @@
|
|||
"password": "taosdata",
|
||||
"confirm_parameter_prompt": "no",
|
||||
"databases": "db",
|
||||
"query_times":3,
|
||||
"query_times": 3,
|
||||
"specified_table_query": {
|
||||
"query_interval": 0,
|
||||
"concurrent": 1,
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"password": "taosdata",
|
||||
"confirm_parameter_prompt": "no",
|
||||
"databases": "db",
|
||||
"query_times":3,
|
||||
"query_times": 3,
|
||||
"specified_table_query": {
|
||||
"query_interval": 0,
|
||||
"concurrent": 1,
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
{
|
||||
"filetype": "insert",
|
||||
"cfgdir": "/etc/taos",
|
||||
"host": "127.0.0.1",
|
||||
"port": 6030,
|
||||
"user": "root",
|
||||
"password": "taosdata",
|
||||
"thread_count": 10,
|
||||
"thread_count_create_tbl": 10,
|
||||
"result_file": "./insert_res.txt",
|
||||
"confirm_parameter_prompt": "no",
|
||||
"insert_interval": 0,
|
||||
"interlace_rows": 100,
|
||||
"num_of_records_per_req": 1000,
|
||||
"max_sql_len": 1024000,
|
||||
"databases": [{
|
||||
"dbinfo": {
|
||||
"name": "testdb3",
|
||||
"drop": "yes",
|
||||
"replica": 1,
|
||||
"days": 10,
|
||||
"cache": 50,
|
||||
"blocks": 8,
|
||||
"precision": "ms",
|
||||
"keep": 36,
|
||||
"minRows": 100,
|
||||
"maxRows": 4096,
|
||||
"comp":2,
|
||||
"walLevel":1,
|
||||
"cachelast":0,
|
||||
"quorum":1,
|
||||
"fsync":3000,
|
||||
"update": 0
|
||||
},
|
||||
"super_tables": [{
|
||||
"name": "stb0",
|
||||
"child_table_exists":"no",
|
||||
"childtable_count": 100,
|
||||
"childtable_prefix": "tb0_",
|
||||
"auto_create_table": "no",
|
||||
"batch_create_tbl_num": 20,
|
||||
"data_source": "rand",
|
||||
"insert_mode": "taosc",
|
||||
"insert_rows": 100,
|
||||
"childtable_offset":0,
|
||||
"multi_thread_write_one_tbl": "no",
|
||||
"insert_interval":0,
|
||||
"max_sql_len": 1024000,
|
||||
"disorder_ratio": 0,
|
||||
"disorder_range": 1000,
|
||||
"timestamp_step": 1000,
|
||||
"start_timestamp": "2021-07-01 00:00:00.000",
|
||||
"sample_format": "",
|
||||
"sample_file": "",
|
||||
"tags_file": "",
|
||||
"columns": [{"type": "INT"}, {"type": "DOUBLE", "count":3}, {"type": "BINARY", "len": 16, "count":2}, {"type": "BINARY", "len": 32, "count":2},
|
||||
{"type": "TIMESTAMP"}, {"type": "BIGINT", "count":3},{"type": "FLOAT", "count":1},{"type": "SMALLINT", "count":1},{"type": "TINYINT", "count":1},
|
||||
{"type": "BOOL"},{"type": "NCHAR","len":16}],
|
||||
"tags": [{"type": "TINYINT", "count":2}, {"type": "BINARY", "len": 16, "count":5},{"type": "NCHAR","len":16, "count":1}]
|
||||
}]
|
||||
}]
|
||||
}
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
{
|
||||
"filetype": "insert",
|
||||
"cfgdir": "/etc/taos",
|
||||
"host": "127.0.0.1",
|
||||
"port": 6030,
|
||||
"user": "root",
|
||||
"password": "taosdata",
|
||||
"thread_count": 10,
|
||||
"thread_count_create_tbl": 10,
|
||||
"result_file": "./insert_res.txt",
|
||||
"confirm_parameter_prompt": "no",
|
||||
"insert_interval": 0,
|
||||
"interlace_rows": 100,
|
||||
"num_of_records_per_req": 1000,
|
||||
"max_sql_len": 1024000,
|
||||
"databases": [{
|
||||
"dbinfo": {
|
||||
"name": "testdb1",
|
||||
"drop": "yes",
|
||||
"replica": 1,
|
||||
"days": 10,
|
||||
"cache": 50,
|
||||
"blocks": 8,
|
||||
"precision": "ns",
|
||||
"keep": 36,
|
||||
"minRows": 100,
|
||||
"maxRows": 4096,
|
||||
"comp":2,
|
||||
"walLevel":1,
|
||||
"cachelast":0,
|
||||
"quorum":1,
|
||||
"fsync":3000,
|
||||
"update": 0
|
||||
},
|
||||
"super_tables": [{
|
||||
"name": "stb0",
|
||||
"child_table_exists":"no",
|
||||
"childtable_count": 100,
|
||||
"childtable_prefix": "tb0_",
|
||||
"auto_create_table": "no",
|
||||
"batch_create_tbl_num": 20,
|
||||
"data_source": "rand",
|
||||
"insert_mode": "taosc",
|
||||
"insert_rows": 100,
|
||||
"childtable_offset":0,
|
||||
"multi_thread_write_one_tbl": "no",
|
||||
"insert_interval":0,
|
||||
"max_sql_len": 1024000,
|
||||
"disorder_ratio": 0,
|
||||
"disorder_range": 1000,
|
||||
"timestamp_step": 1000,
|
||||
"start_timestamp": "2021-07-01 00:00:00.000",
|
||||
"sample_format": "",
|
||||
"sample_file": "",
|
||||
"tags_file": "",
|
||||
"columns": [{"type": "INT"}, {"type": "DOUBLE", "count":3}, {"type": "BINARY", "len": 16, "count":2}, {"type": "BINARY", "len": 32, "count":2},
|
||||
{"type": "TIMESTAMP"}, {"type": "BIGINT", "count":3},{"type": "FLOAT", "count":1},{"type": "SMALLINT", "count":1},{"type": "TINYINT", "count":1},
|
||||
{"type": "BOOL"},{"type": "NCHAR","len":16}],
|
||||
"tags": [{"type": "TINYINT", "count":2}, {"type": "BINARY", "len": 16, "count":5},{"type": "NCHAR","len":16, "count":1}]
|
||||
}]
|
||||
}]
|
||||
}
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
{
|
||||
"filetype": "insert",
|
||||
"cfgdir": "/etc/taos",
|
||||
"host": "127.0.0.1",
|
||||
"port": 6030,
|
||||
"user": "root",
|
||||
"password": "taosdata",
|
||||
"thread_count": 10,
|
||||
"thread_count_create_tbl": 10,
|
||||
"result_file": "./insert_res.txt",
|
||||
"confirm_parameter_prompt": "no",
|
||||
"insert_interval": 0,
|
||||
"interlace_rows": 100,
|
||||
"num_of_records_per_req": 1000,
|
||||
"max_sql_len": 1024000,
|
||||
"databases": [{
|
||||
"dbinfo": {
|
||||
"name": "testdb2",
|
||||
"drop": "yes",
|
||||
"replica": 1,
|
||||
"days": 10,
|
||||
"cache": 50,
|
||||
"blocks": 8,
|
||||
"precision": "us",
|
||||
"keep": 36,
|
||||
"minRows": 100,
|
||||
"maxRows": 4096,
|
||||
"comp":2,
|
||||
"walLevel":1,
|
||||
"cachelast":0,
|
||||
"quorum":1,
|
||||
"fsync":3000,
|
||||
"update": 0
|
||||
},
|
||||
"super_tables": [{
|
||||
"name": "stb0",
|
||||
"child_table_exists":"no",
|
||||
"childtable_count": 100,
|
||||
"childtable_prefix": "tb0_",
|
||||
"auto_create_table": "no",
|
||||
"batch_create_tbl_num": 20,
|
||||
"data_source": "rand",
|
||||
"insert_mode": "taosc",
|
||||
"insert_rows": 100,
|
||||
"childtable_offset":0,
|
||||
"multi_thread_write_one_tbl": "no",
|
||||
"insert_interval":0,
|
||||
"max_sql_len": 1024000,
|
||||
"disorder_ratio": 0,
|
||||
"disorder_range": 1000,
|
||||
"timestamp_step": 1000,
|
||||
"start_timestamp": "2021-07-01 00:00:00.000",
|
||||
"sample_format": "",
|
||||
"sample_file": "",
|
||||
"tags_file": "",
|
||||
"columns": [{"type": "INT"}, {"type": "DOUBLE", "count":3}, {"type": "BINARY", "len": 16, "count":2}, {"type": "BINARY", "len": 32, "count":2},
|
||||
{"type": "TIMESTAMP"}, {"type": "BIGINT", "count":3},{"type": "FLOAT", "count":1},{"type": "SMALLINT", "count":1},{"type": "TINYINT", "count":1},
|
||||
{"type": "BOOL"},{"type": "NCHAR","len":16}],
|
||||
"tags": [{"type": "TINYINT", "count":2}, {"type": "BINARY", "len": 16, "count":5},{"type": "NCHAR","len":16, "count":1}]
|
||||
}]
|
||||
}]
|
||||
}
|
||||
|
|
@ -0,0 +1,115 @@
|
|||
###################################################################
|
||||
# Copyright (c) 2016 by TAOS Technologies, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# This file is proprietary and confidential to TAOS Technologies.
|
||||
# No part of this file may be reproduced, stored, transmitted,
|
||||
# disclosed or used in any form or by any means other than as
|
||||
# expressly provided by the written permission from Jianhui Tao
|
||||
#
|
||||
###################################################################
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import sys
|
||||
import os
|
||||
from util.log import *
|
||||
from util.cases import *
|
||||
from util.sql import *
|
||||
from util.dnodes import *
|
||||
|
||||
|
||||
class TDTestCase:
|
||||
def init(self, conn, logSql):
|
||||
tdLog.debug("start to execute %s" % __file__)
|
||||
tdSql.init(conn.cursor(), logSql)
|
||||
|
||||
def getBuildPath(self):
|
||||
selfPath = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
if ("community" in selfPath):
|
||||
projPath = selfPath[:selfPath.find("community")]
|
||||
else:
|
||||
projPath = selfPath[:selfPath.find("tests")]
|
||||
|
||||
for root, dirs, files in os.walk(projPath):
|
||||
if ("taosd" in files):
|
||||
rootRealPath = os.path.dirname(os.path.realpath(root))
|
||||
if ("packaging" not in rootRealPath):
|
||||
buildPath = root[:len(root)-len("/build/bin")]
|
||||
break
|
||||
return buildPath
|
||||
|
||||
def run(self):
|
||||
buildPath = self.getBuildPath()
|
||||
if (buildPath == ""):
|
||||
tdLog.exit("taosd not found!")
|
||||
else:
|
||||
tdLog.info("taosd found in %s" % buildPath)
|
||||
binPath = buildPath+ "/build/bin/"
|
||||
|
||||
# insert: create one or mutiple tables per sql and insert multiple rows per sql
|
||||
|
||||
# check the params of taosdemo about time_step is nano
|
||||
os.system("%staosdemo -f tools/taosdemoAllTest/taosdemoInsertNanoDB.json -y " % binPath)
|
||||
tdSql.execute("use testdb1")
|
||||
tdSql.query("show stables")
|
||||
tdSql.checkData(0, 4, 100)
|
||||
tdSql.query("select count (tbname) from stb0")
|
||||
tdSql.checkData(0, 0, 100)
|
||||
tdSql.query("select count(*) from tb0_0")
|
||||
tdSql.checkData(0, 0, 100)
|
||||
tdSql.query("select count(*) from stb0")
|
||||
tdSql.checkData(0, 0, 10000)
|
||||
tdSql.query("describe stb0")
|
||||
tdSql.getData(9, 1)
|
||||
tdSql.checkDataType(9, 1,"TIMESTAMP")
|
||||
tdSql.query("select last(ts) from stb0")
|
||||
tdSql.checkData(0, 0,"2021-07-01 00:00:00.000099000")
|
||||
|
||||
# check the params of taosdemo about time_step is us
|
||||
os.system("%staosdemo -f tools/taosdemoAllTest/taosdemoInsertUSDB.json -y " % binPath)
|
||||
tdSql.execute("use testdb2")
|
||||
tdSql.query("show stables")
|
||||
tdSql.checkData(0, 4, 100)
|
||||
tdSql.query("select count (tbname) from stb0")
|
||||
tdSql.checkData(0, 0, 100)
|
||||
tdSql.query("select count(*) from tb0_0")
|
||||
tdSql.checkData(0, 0, 100)
|
||||
tdSql.query("select count(*) from stb0")
|
||||
tdSql.checkData(0, 0, 10000)
|
||||
tdSql.query("describe stb0")
|
||||
tdSql.getData(9, 1)
|
||||
tdSql.checkDataType(9, 1,"TIMESTAMP")
|
||||
tdSql.query("select last(ts) from stb0")
|
||||
tdSql.checkData(0, 0,"2021-07-01 00:00:00.099000")
|
||||
|
||||
# check the params of taosdemo about time_step is ms
|
||||
os.system("%staosdemo -f tools/taosdemoAllTest/taosdemoInsertMSDB.json -y " % binPath)
|
||||
tdSql.execute("use testdb3")
|
||||
tdSql.query("show stables")
|
||||
tdSql.checkData(0, 4, 100)
|
||||
tdSql.query("select count (tbname) from stb0")
|
||||
tdSql.checkData(0, 0, 100)
|
||||
tdSql.query("select count(*) from tb0_0")
|
||||
tdSql.checkData(0, 0, 100)
|
||||
tdSql.query("select count(*) from stb0")
|
||||
tdSql.checkData(0, 0, 10000)
|
||||
tdSql.query("describe stb0")
|
||||
tdSql.checkDataType(9, 1,"TIMESTAMP")
|
||||
tdSql.query("select last(ts) from stb0")
|
||||
tdSql.checkData(0, 0,"2021-07-01 00:01:39.000")
|
||||
|
||||
|
||||
os.system("rm -rf ./res.txt")
|
||||
os.system("rm -rf ./*.py.sql")
|
||||
|
||||
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
tdLog.success("%s successfully executed" % __file__)
|
||||
|
||||
|
||||
tdCases.addWindows(__file__, TDTestCase())
|
||||
tdCases.addLinux(__file__, TDTestCase())
|
|
@ -244,17 +244,17 @@ class TDTestCase:
|
|||
tdSql.query("select count(*) from stb1")
|
||||
tdSql.checkData(0, 0, 10)
|
||||
|
||||
# # insert: sample json
|
||||
# os.system("%staosdemo -f tools/taosdemoAllTest/stmt/insert-sample-stmt.json -y " % binPath)
|
||||
# tdSql.execute("use dbtest123")
|
||||
# tdSql.query("select c2 from stb0")
|
||||
# tdSql.checkData(0, 0, 2147483647)
|
||||
# tdSql.query("select * from stb1 where t1=-127")
|
||||
# tdSql.checkRows(20)
|
||||
# tdSql.query("select * from stb1 where t2=127")
|
||||
# tdSql.checkRows(10)
|
||||
# tdSql.query("select * from stb1 where t2=126")
|
||||
# tdSql.checkRows(10)
|
||||
# insert: sample json
|
||||
os.system("%staosdemo -f tools/taosdemoAllTest/stmt/insert-sample-stmt.json -y " % binPath)
|
||||
tdSql.execute("use dbtest123")
|
||||
tdSql.query("select c2 from stb0")
|
||||
tdSql.checkData(0, 0, 2147483647)
|
||||
tdSql.query("select * from stb1 where t1=-127")
|
||||
tdSql.checkRows(20)
|
||||
tdSql.query("select * from stb1 where t2=127")
|
||||
tdSql.checkRows(10)
|
||||
tdSql.query("select * from stb1 where t2=126")
|
||||
tdSql.checkRows(10)
|
||||
|
||||
# insert: test interlace parament
|
||||
os.system("%staosdemo -f tools/taosdemoAllTest/stmt/insert-interlace-row-stmt.json -y " % binPath)
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
{
|
||||
"filetype": "insert",
|
||||
"cfgdir": "/etc/taos",
|
||||
"host": "127.0.0.1",
|
||||
"port": 6030,
|
||||
"user": "root",
|
||||
"password": "taosdata",
|
||||
"thread_count": 10,
|
||||
"thread_count_create_tbl": 10,
|
||||
"result_file": "./insert_res.txt",
|
||||
"confirm_parameter_prompt": "no",
|
||||
"insert_interval": 0,
|
||||
"interlace_rows": 100,
|
||||
"num_of_records_per_req": 1000,
|
||||
"max_sql_len": 1024000,
|
||||
"databases": [{
|
||||
"dbinfo": {
|
||||
"name": "nsdb",
|
||||
"drop": "yes",
|
||||
"replica": 1,
|
||||
"days": 10,
|
||||
"cache": 50,
|
||||
"blocks": 8,
|
||||
"precision": "ns",
|
||||
"keep": 36,
|
||||
"minRows": 100,
|
||||
"maxRows": 4096,
|
||||
"comp":2,
|
||||
"walLevel":1,
|
||||
"cachelast":0,
|
||||
"quorum":1,
|
||||
"fsync":3000,
|
||||
"update": 0
|
||||
},
|
||||
"super_tables": [{
|
||||
"name": "stb0",
|
||||
"child_table_exists":"no",
|
||||
"childtable_count": 100,
|
||||
"childtable_prefix": "tb0_",
|
||||
"auto_create_table": "no",
|
||||
"batch_create_tbl_num": 20,
|
||||
"data_source": "rand",
|
||||
"insert_mode": "taosc",
|
||||
"insert_rows": 100,
|
||||
"childtable_offset":0,
|
||||
"multi_thread_write_one_tbl": "no",
|
||||
"insert_interval":0,
|
||||
"max_sql_len": 1024000,
|
||||
"disorder_ratio": 0,
|
||||
"disorder_range": 1000,
|
||||
"timestamp_step": 10000000,
|
||||
"start_timestamp": "2021-07-01 00:00:00.000",
|
||||
"sample_format": "",
|
||||
"sample_file": "",
|
||||
"tags_file": "",
|
||||
"columns": [{"type": "INT"}, {"type": "DOUBLE", "count":3}, {"type": "BINARY", "len": 16, "count":2}, {"type": "BINARY", "len": 32, "count":2},
|
||||
{"type": "TIMESTAMP"}, {"type": "BIGINT", "count":3},{"type": "FLOAT", "count":1},{"type": "SMALLINT", "count":1},{"type": "TINYINT", "count":1},
|
||||
{"type": "BOOL"},{"type": "NCHAR","len":16}],
|
||||
"tags": [{"type": "TINYINT", "count":2}, {"type": "BINARY", "len": 16, "count":5},{"type": "NCHAR","len":16, "count":1}]
|
||||
},
|
||||
{
|
||||
"name": "stb1",
|
||||
"child_table_exists":"no",
|
||||
"childtable_count": 100,
|
||||
"childtable_prefix": "tb1_",
|
||||
"auto_create_table": "no",
|
||||
"batch_create_tbl_num": 20,
|
||||
"data_source": "rand",
|
||||
"insert_mode": "taosc",
|
||||
"insert_rows": 100,
|
||||
"childtable_offset":0,
|
||||
"multi_thread_write_one_tbl": "no",
|
||||
"insert_interval":0,
|
||||
"max_sql_len": 1024000,
|
||||
"disorder_ratio": 10,
|
||||
"disorder_range": 1000,
|
||||
"timestamp_step": 10000000,
|
||||
"start_timestamp": "2021-07-01 00:00:00.000",
|
||||
"sample_format": "",
|
||||
"sample_file": "",
|
||||
"tags_file": "",
|
||||
"columns": [{"type": "INT"}, {"type": "DOUBLE", "count":3}, {"type": "BINARY", "len": 16, "count":2}, {"type": "BINARY", "len": 32, "count":2},
|
||||
{"type": "TIMESTAMP"}, {"type": "BIGINT", "count":3},{"type": "FLOAT", "count":1},{"type": "SMALLINT", "count":1},{"type": "TINYINT", "count":1},
|
||||
{"type": "BOOL"},{"type": "NCHAR","len":16}],
|
||||
"tags": [{"type": "TINYINT", "count":2}, {"type": "BINARY", "len": 16, "count":5},{"type": "NCHAR","len":16, "count":1}]
|
||||
}]
|
||||
}]
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
{
|
||||
"filetype": "insert",
|
||||
"cfgdir": "/etc/taos",
|
||||
"host": "127.0.0.1",
|
||||
"port": 6030,
|
||||
"user": "root",
|
||||
"password": "taosdata",
|
||||
"thread_count": 10,
|
||||
"thread_count_create_tbl": 10,
|
||||
"result_file": "./insert_res.txt",
|
||||
"confirm_parameter_prompt": "no",
|
||||
"insert_interval": 0,
|
||||
"interlace_rows": 100,
|
||||
"num_of_records_per_req": 1000,
|
||||
"max_sql_len": 1024000,
|
||||
"databases": [{
|
||||
"dbinfo": {
|
||||
"name": "subnsdb",
|
||||
"drop": "yes",
|
||||
"replica": 1,
|
||||
"days": 10,
|
||||
"cache": 50,
|
||||
"blocks": 8,
|
||||
"precision": "ns",
|
||||
"keep": 36,
|
||||
"minRows": 100,
|
||||
"maxRows": 4096,
|
||||
"comp":2,
|
||||
"walLevel":1,
|
||||
"cachelast":0,
|
||||
"quorum":1,
|
||||
"fsync":3000,
|
||||
"update": 0
|
||||
},
|
||||
"super_tables": [{
|
||||
"name": "stb0",
|
||||
"child_table_exists":"no",
|
||||
"childtable_count": 10,
|
||||
"childtable_prefix": "tb0_",
|
||||
"auto_create_table": "no",
|
||||
"batch_create_tbl_num": 20,
|
||||
"data_source": "samples",
|
||||
"insert_mode": "taosc",
|
||||
"insert_rows": 10,
|
||||
"childtable_offset":0,
|
||||
"multi_thread_write_one_tbl": "no",
|
||||
"insert_interval":0,
|
||||
"max_sql_len": 1024000,
|
||||
"disorder_ratio": 0,
|
||||
"disorder_range": 1000,
|
||||
"timestamp_step": 10000000,
|
||||
"start_timestamp": "2021-07-01 00:00:00.000",
|
||||
"sample_format": "csv",
|
||||
"sample_file": "./tools/taosdemoAllTest/nano_samples.csv",
|
||||
"tags_file": "./tools/taosdemoAllTest/nano_sampletags.csv",
|
||||
"columns": [{"type": "DOUBLE"}, {"type": "BINARY", "len": 64, "count":1}, {"type": "TIMESTAMP", "count":1}],
|
||||
"tags": [{"type": "BINARY", "len": 16, "count":1},{"type": "INT"},{"type": "DOUBLE"}]
|
||||
},
|
||||
{
|
||||
"name": "stb1",
|
||||
"child_table_exists":"no",
|
||||
"childtable_count": 10,
|
||||
"childtable_prefix": "tb1_",
|
||||
"auto_create_table": "no",
|
||||
"batch_create_tbl_num": 20,
|
||||
"data_source": "samples",
|
||||
"insert_mode": "taosc",
|
||||
"insert_rows": 10,
|
||||
"childtable_offset":0,
|
||||
"multi_thread_write_one_tbl": "no",
|
||||
"insert_interval":0,
|
||||
"max_sql_len": 1024000,
|
||||
"disorder_ratio": 10,
|
||||
"disorder_range": 1000,
|
||||
"timestamp_step": 10000000,
|
||||
"start_timestamp": "2021-07-01 00:00:00.000",
|
||||
"sample_format": "csv",
|
||||
"sample_file": "./tools/taosdemoAllTest/nano_samples.csv",
|
||||
"tags_file": "./tools/taosdemoAllTest/nano_sampletags.csv",
|
||||
"columns": [{"type": "DOUBLE"}, {"type": "BINARY", "len": 64, "count":1}, {"type": "TIMESTAMP", "count":1}],
|
||||
"tags": [{"type": "BINARY", "len": 16, "count":1},{"type": "INT"},{"type": "DOUBLE"}]
|
||||
}]
|
||||
}]
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
{
|
||||
"filetype": "insert",
|
||||
"cfgdir": "/etc/taos",
|
||||
"host": "127.0.0.1",
|
||||
"port": 6030,
|
||||
"user": "root",
|
||||
"password": "taosdata",
|
||||
"thread_count": 10,
|
||||
"thread_count_create_tbl": 10,
|
||||
"result_file": "./insert_res.txt",
|
||||
"confirm_parameter_prompt": "no",
|
||||
"insert_interval": 0,
|
||||
"interlace_rows": 100,
|
||||
"num_of_records_per_req": 1000,
|
||||
"max_sql_len": 1024000,
|
||||
"databases": [{
|
||||
"dbinfo": {
|
||||
"name": "nsdb2",
|
||||
"drop": "yes",
|
||||
"replica": 1,
|
||||
"days": 10,
|
||||
"cache": 50,
|
||||
"blocks": 8,
|
||||
"precision": "ns",
|
||||
"keep": 36,
|
||||
"minRows": 100,
|
||||
"maxRows": 4096,
|
||||
"comp":2,
|
||||
"walLevel":1,
|
||||
"cachelast":0,
|
||||
"quorum":1,
|
||||
"fsync":3000,
|
||||
"update": 0
|
||||
},
|
||||
"super_tables": [{
|
||||
"name": "stb0",
|
||||
"child_table_exists":"no",
|
||||
"childtable_count": 100,
|
||||
"childtable_prefix": "tb0_",
|
||||
"auto_create_table": "no",
|
||||
"batch_create_tbl_num": 20,
|
||||
"data_source": "rand",
|
||||
"insert_mode": "taosc",
|
||||
"insert_rows": 100,
|
||||
"childtable_offset":0,
|
||||
"multi_thread_write_one_tbl": "no",
|
||||
"insert_interval":0,
|
||||
"max_sql_len": 1024000,
|
||||
"disorder_ratio": 0,
|
||||
"disorder_range": 1000,
|
||||
"timestamp_step": 10,
|
||||
"start_timestamp": "now",
|
||||
"sample_format": "",
|
||||
"sample_file": "",
|
||||
"tags_file": "",
|
||||
"columns": [{"type": "INT"}, {"type": "DOUBLE", "count":3}, {"type": "BINARY", "len": 16, "count":2}, {"type": "BINARY", "len": 32, "count":2},
|
||||
{"type": "TIMESTAMP"}, {"type": "BIGINT", "count":3},{"type": "FLOAT", "count":1},{"type": "SMALLINT", "count":1},{"type": "TINYINT", "count":1},
|
||||
{"type": "BOOL"},{"type": "NCHAR","len":16}],
|
||||
"tags": [{"type": "TINYINT", "count":2}, {"type": "BINARY", "len": 16, "count":5},{"type": "NCHAR","len":16, "count":1}]
|
||||
}]
|
||||
}]
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
{
|
||||
"filetype": "insert",
|
||||
"cfgdir": "/etc/taos",
|
||||
"host": "127.0.0.1",
|
||||
"port": 6030,
|
||||
"user": "root",
|
||||
"password": "taosdata",
|
||||
"thread_count": 10,
|
||||
"thread_count_create_tbl": 10,
|
||||
"result_file": "./insert_res.txt",
|
||||
"confirm_parameter_prompt": "no",
|
||||
"insert_interval": 0,
|
||||
"interlace_rows": 100,
|
||||
"num_of_records_per_req": 1000,
|
||||
"max_sql_len": 1024000,
|
||||
"databases": [{
|
||||
"dbinfo": {
|
||||
"name": "nsdbcsv",
|
||||
"drop": "yes",
|
||||
"replica": 1,
|
||||
"days": 10,
|
||||
"cache": 50,
|
||||
"blocks": 8,
|
||||
"precision": "ns",
|
||||
"keep": 36,
|
||||
"minRows": 100,
|
||||
"maxRows": 4096,
|
||||
"comp":2,
|
||||
"walLevel":1,
|
||||
"cachelast":0,
|
||||
"quorum":1,
|
||||
"fsync":3000,
|
||||
"update": 0
|
||||
},
|
||||
"super_tables": [{
|
||||
"name": "stb0",
|
||||
"child_table_exists":"no",
|
||||
"childtable_count": 100,
|
||||
"childtable_prefix": "tb0_",
|
||||
"auto_create_table": "no",
|
||||
"batch_create_tbl_num": 20,
|
||||
"data_source": "samples",
|
||||
"insert_mode": "taosc",
|
||||
"insert_rows": 100,
|
||||
"childtable_offset":0,
|
||||
"multi_thread_write_one_tbl": "no",
|
||||
"insert_interval":0,
|
||||
"max_sql_len": 1024000,
|
||||
"disorder_ratio": 0,
|
||||
"disorder_range": 1000,
|
||||
"timestamp_step": 10000000,
|
||||
"start_timestamp": "2021-07-01 00:00:00.000",
|
||||
"sample_format": "csv",
|
||||
"sample_file": "./tools/taosdemoAllTest/nano_samples.csv",
|
||||
"tags_file": "./tools/taosdemoAllTest/nano_sampletags.csv",
|
||||
"columns": [{"type": "DOUBLE"}, {"type": "BINARY", "len": 64, "count":1}, {"type": "TIMESTAMP", "count":1}],
|
||||
"tags": [{"type": "BINARY", "len": 16, "count":1},{"type": "INT"},{"type": "DOUBLE"}]
|
||||
},
|
||||
{
|
||||
"name": "stb1",
|
||||
"child_table_exists":"no",
|
||||
"childtable_count": 100,
|
||||
"childtable_prefix": "tb1_",
|
||||
"auto_create_table": "no",
|
||||
"batch_create_tbl_num": 20,
|
||||
"data_source": "samples",
|
||||
"insert_mode": "taosc",
|
||||
"insert_rows": 100,
|
||||
"childtable_offset":0,
|
||||
"multi_thread_write_one_tbl": "no",
|
||||
"insert_interval":0,
|
||||
"max_sql_len": 1024000,
|
||||
"disorder_ratio": 10,
|
||||
"disorder_range": 1000,
|
||||
"timestamp_step": 10000000,
|
||||
"start_timestamp": "2021-07-01 00:00:00.000",
|
||||
"sample_format": "csv",
|
||||
"sample_file": "./tools/taosdemoAllTest/nano_samples.csv",
|
||||
"tags_file": "./tools/taosdemoAllTest/nano_sampletags.csv",
|
||||
"columns": [{"type": "DOUBLE"}, {"type": "BINARY", "len": 64, "count":1}, {"type": "TIMESTAMP", "count":1}],
|
||||
"tags": [{"type": "BINARY", "len": 16, "count":1},{"type": "INT"},{"type": "DOUBLE"}]
|
||||
}]
|
||||
}]
|
||||
}
|
|
@ -0,0 +1,156 @@
|
|||
###################################################################
|
||||
# Copyright (c) 2016 by TAOS Technologies, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# This file is proprietary and confidential to TAOS Technologies.
|
||||
# No part of this file may be reproduced, stored, transmitted,
|
||||
# disclosed or used in any form or by any means other than as
|
||||
# expressly provided by the written permission from Jianhui Tao
|
||||
#
|
||||
###################################################################
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import sys
|
||||
import os
|
||||
from util.log import *
|
||||
from util.cases import *
|
||||
from util.sql import *
|
||||
from util.dnodes import *
|
||||
|
||||
|
||||
class TDTestCase:
|
||||
def init(self, conn, logSql):
|
||||
tdLog.debug("start to execute %s" % __file__)
|
||||
tdSql.init(conn.cursor(), logSql)
|
||||
|
||||
def getBuildPath(self):
|
||||
selfPath = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
if ("community" in selfPath):
|
||||
projPath = selfPath[:selfPath.find("community")]
|
||||
else:
|
||||
projPath = selfPath[:selfPath.find("tests")]
|
||||
|
||||
for root, dirs, files in os.walk(projPath):
|
||||
if ("taosd" in files):
|
||||
rootRealPath = os.path.dirname(os.path.realpath(root))
|
||||
if ("packaging" not in rootRealPath):
|
||||
buildPath = root[:len(root)-len("/build/bin")]
|
||||
break
|
||||
return buildPath
|
||||
|
||||
def run(self):
|
||||
buildPath = self.getBuildPath()
|
||||
if (buildPath == ""):
|
||||
tdLog.exit("taosd not found!")
|
||||
else:
|
||||
tdLog.info("taosd found in %s" % buildPath)
|
||||
binPath = buildPath+ "/build/bin/"
|
||||
|
||||
|
||||
# insert: create one or mutiple tables per sql and insert multiple rows per sql
|
||||
# insert data from a special timestamp
|
||||
# check stable stb0
|
||||
|
||||
os.system("%staosdemo -f tools/taosdemoAllTest/taosdemoTestNanoDatabase.json -y " % binPath)
|
||||
tdSql.execute("use nsdb")
|
||||
tdSql.query("show stables")
|
||||
tdSql.checkData(0, 4, 100)
|
||||
tdSql.query("select count (tbname) from stb0")
|
||||
tdSql.checkData(0, 0, 100)
|
||||
tdSql.query("select count(*) from tb0_0")
|
||||
tdSql.checkData(0, 0, 100)
|
||||
tdSql.query("select count(*) from stb0")
|
||||
tdSql.checkData(0, 0, 10000)
|
||||
tdSql.query("describe stb0")
|
||||
tdSql.checkDataType(9, 1,"TIMESTAMP")
|
||||
tdSql.query("select last(ts) from stb0")
|
||||
tdSql.checkData(0, 0,"2021-07-01 00:00:00.990000000")
|
||||
|
||||
# check stable stb1 which is insert with disord
|
||||
|
||||
tdSql.query("select count (tbname) from stb1")
|
||||
tdSql.checkData(0, 0, 100)
|
||||
tdSql.query("select count(*) from tb1_0")
|
||||
tdSql.checkData(0, 0, 100)
|
||||
tdSql.query("select count(*) from stb1")
|
||||
tdSql.checkData(0, 0, 10000)
|
||||
# check c8 is an nano timestamp
|
||||
tdSql.query("describe stb1")
|
||||
tdSql.checkDataType(9, 1,"TIMESTAMP")
|
||||
# check insert timestamp_step is nano_second
|
||||
tdSql.query("select last(ts) from stb1")
|
||||
tdSql.checkData(0, 0,"2021-07-01 00:00:00.990000000")
|
||||
|
||||
# insert data from now time
|
||||
|
||||
# check stable stb0
|
||||
os.system("%staosdemo -f tools/taosdemoAllTest/taosdemoTestNanoDatabaseNow.json -y " % binPath)
|
||||
|
||||
tdSql.execute("use nsdb2")
|
||||
tdSql.query("show stables")
|
||||
tdSql.checkData(0, 4, 100)
|
||||
tdSql.query("select count (tbname) from stb0")
|
||||
tdSql.checkData(0, 0, 100)
|
||||
tdSql.query("select count(*) from tb0_0")
|
||||
tdSql.checkData(0, 0, 100)
|
||||
tdSql.query("select count(*) from stb0")
|
||||
tdSql.checkData(0, 0, 10000)
|
||||
# check c8 is an nano timestamp
|
||||
tdSql.query("describe stb0")
|
||||
tdSql.checkDataType(9,1,"TIMESTAMP")
|
||||
|
||||
# insert by csv files and timetamp is long int , strings in ts and cols
|
||||
|
||||
os.system("%staosdemo -f tools/taosdemoAllTest/taosdemoTestNanoDatabasecsv.json -y " % binPath)
|
||||
tdSql.execute("use nsdbcsv")
|
||||
tdSql.query("show stables")
|
||||
tdSql.checkData(0, 4, 100)
|
||||
tdSql.query("select count(*) from stb0")
|
||||
tdSql.checkData(0, 0, 10000)
|
||||
tdSql.query("describe stb0")
|
||||
tdSql.checkDataType(3, 1, "TIMESTAMP")
|
||||
tdSql.query("select count(*) from stb0 where ts > \"2021-07-01 00:00:00.490000000\"")
|
||||
tdSql.checkData(0, 0, 5000)
|
||||
tdSql.query("select count(*) from stb0 where ts < 1626918583000000000")
|
||||
tdSql.checkData(0, 0, 10000)
|
||||
|
||||
os.system("rm -rf ./insert_res.txt")
|
||||
os.system("rm -rf tools/taosdemoAllTest/taosdemoTestSupportNano*.py.sql")
|
||||
|
||||
# taosdemo test insert with command and parameter , detals show taosdemo --help
|
||||
os.system("%staosdemo -u root -P taosdata -p 6030 -a 1 -m pre -n 10 -T 20 -t 60 -o res.txt -y " % binPath)
|
||||
tdSql.query("select count(*) from test.meters")
|
||||
tdSql.checkData(0, 0, 600)
|
||||
# check taosdemo -s
|
||||
|
||||
sqls_ls = ['drop database if exists nsdbsql;','create database nsdbsql precision "ns" keep 36 days 6 update 1;',
|
||||
'use nsdbsql;','CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupdId int);',
|
||||
'CREATE TABLE d1001 USING meters TAGS ("Beijing.Chaoyang", 2);',
|
||||
'INSERT INTO d1001 USING METERS TAGS ("Beijng.Chaoyang", 2) VALUES (now, 10.2, 219, 0.32);',
|
||||
'INSERT INTO d1001 USING METERS TAGS ("Beijng.Chaoyang", 2) VALUES (now, 85, 32, 0.76);']
|
||||
|
||||
with open("./taosdemoTestNanoCreateDB.sql",mode ="a" ) as sql_files:
|
||||
for sql in sqls_ls:
|
||||
sql_files.write(sql+"\n")
|
||||
sql_files.close()
|
||||
|
||||
sleep(10)
|
||||
|
||||
os.system("%staosdemo -s taosdemoTestNanoCreateDB.sql -y " % binPath)
|
||||
tdSql.query("select count(*) from nsdbsql.meters")
|
||||
tdSql.checkData(0, 0, 2)
|
||||
|
||||
os.system("rm -rf ./res.txt")
|
||||
os.system("rm -rf ./*.py.sql")
|
||||
os.system("rm -rf ./taosdemoTestNanoCreateDB.sql")
|
||||
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
tdLog.success("%s successfully executed" % __file__)
|
||||
|
||||
|
||||
tdCases.addWindows(__file__, TDTestCase())
|
||||
tdCases.addLinux(__file__, TDTestCase())
|
|
@ -0,0 +1,92 @@
|
|||
{
|
||||
"filetype": "query",
|
||||
"cfgdir": "/etc/taos",
|
||||
"host": "127.0.0.1",
|
||||
"port": 6030,
|
||||
"user": "root",
|
||||
"password": "taosdata",
|
||||
"confirm_parameter_prompt": "no",
|
||||
"databases": "nsdb",
|
||||
"query_times": 10,
|
||||
"query_mode": "taosc",
|
||||
"specified_table_query": {
|
||||
"query_interval": 1,
|
||||
"concurrent": 2,
|
||||
"sqls": [
|
||||
{
|
||||
"sql": "select count(*) from stb0 where ts>\"2021-07-01 00:01:00.000000000 \" ;",
|
||||
"result": "./query_res0.txt"
|
||||
},
|
||||
{
|
||||
"sql": "select count(*) from stb0 where ts>\"2021-07-01 00:01:00.000000000\" and ts <=\"2021-07-01 00:01:10.000000000\" ;",
|
||||
"result": "./query_res1.txt"
|
||||
},
|
||||
{
|
||||
"sql": "select count(*) from stb0 where ts>now-20d ;",
|
||||
"result": "./query_res2.txt"
|
||||
},
|
||||
{
|
||||
"sql": "select max(c10) from stb0;",
|
||||
"result": "./query_res3.txt"
|
||||
},
|
||||
{
|
||||
"sql": "select min(c1) from stb0;",
|
||||
"result": "./query_res4.txt"
|
||||
},
|
||||
{
|
||||
"sql": "select avg(c1) from stb0;",
|
||||
"result": "./query_res5.txt"
|
||||
},
|
||||
{
|
||||
"sql":"select count(*) from stb0 group by tbname;",
|
||||
"result":"./query_res6.txt"
|
||||
}
|
||||
|
||||
]
|
||||
},
|
||||
"super_table_query": {
|
||||
"stblname": "stb0",
|
||||
"query_interval": 0,
|
||||
"threads": 4,
|
||||
"sqls": [
|
||||
{
|
||||
"sql": "select count(*) from xxxx where ts>\"2021-07-01 00:01:00.000000000 \" ;",
|
||||
"result": "./query_res_tb0.txt"
|
||||
},
|
||||
{
|
||||
"sql":"select count(*) from xxxx where ts>\"2021-07-01 00:01:00.000000000\" and ts <=\"2021-07-01 00:01:10.000000000\" ;",
|
||||
"result": "./query_res_tb1.txt"
|
||||
},
|
||||
{
|
||||
"sql":"select first(*) from xxxx ;",
|
||||
"result": "./query_res_tb2.txt"
|
||||
},
|
||||
{
|
||||
"sql":"select last(*) from xxxx;",
|
||||
"result": "./query_res_tb3.txt"
|
||||
|
||||
},
|
||||
{
|
||||
"sql":"select last_row(*) from xxxx ;",
|
||||
"result": "./query_res_tb4.txt"
|
||||
|
||||
},
|
||||
{
|
||||
"sql":"select max(c10) from xxxx ;",
|
||||
"result": "./query_res_tb5.txt"
|
||||
|
||||
},
|
||||
{
|
||||
"sql":"select min(c1) from xxxx ;",
|
||||
"result": "./query_res_tb6.txt"
|
||||
|
||||
},
|
||||
{
|
||||
"sql":"select avg(c10) from xxxx ;",
|
||||
"result": "./query_res_tb7.txt"
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,157 @@
|
|||
###################################################################
|
||||
# Copyright (c) 2016 by TAOS Technologies, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# This file is proprietary and confidential to TAOS Technologies.
|
||||
# No part of this file may be reproduced, stored, transmitted,
|
||||
# disclosed or used in any form or by any means other than as
|
||||
# expressly provided by the written permission from Jianhui Tao
|
||||
#
|
||||
###################################################################
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import sys
|
||||
import os
|
||||
from util.log import *
|
||||
from util.cases import *
|
||||
from util.sql import *
|
||||
from util.dnodes import *
|
||||
|
||||
|
||||
class TDTestCase:
|
||||
def init(self, conn, logSql):
|
||||
tdLog.debug("start to execute %s" % __file__)
|
||||
tdSql.init(conn.cursor(), logSql)
|
||||
|
||||
def getBuildPath(self):
|
||||
selfPath = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
if ("community" in selfPath):
|
||||
projPath = selfPath[:selfPath.find("community")]
|
||||
else:
|
||||
projPath = selfPath[:selfPath.find("tests")]
|
||||
|
||||
for root, dirs, files in os.walk(projPath):
|
||||
if ("taosd" in files):
|
||||
rootRealPath = os.path.dirname(os.path.realpath(root))
|
||||
if ("packaging" not in rootRealPath):
|
||||
buildPath = root[:len(root)-len("/build/bin")]
|
||||
break
|
||||
return buildPath
|
||||
|
||||
def run(self):
|
||||
buildPath = self.getBuildPath()
|
||||
if (buildPath == ""):
|
||||
tdLog.exit("taosd not found!")
|
||||
else:
|
||||
tdLog.info("taosd found in %s" % buildPath)
|
||||
binPath = buildPath+ "/build/bin/"
|
||||
|
||||
# query: query test for nanoSecond with where and max min groupby order
|
||||
os.system("%staosdemo -f tools/taosdemoAllTest/taosdemoTestNanoDatabase.json -y " % binPath)
|
||||
|
||||
tdSql.execute("use nsdb")
|
||||
|
||||
# use where to filter
|
||||
|
||||
tdSql.query("select count(*) from stb0 where ts>\"2021-07-01 00:00:00.590000000 \" ")
|
||||
tdSql.checkData(0, 0, 4000)
|
||||
tdSql.query("select count(*) from stb0 where ts>\"2021-07-01 00:00:00.000000000\" and ts <=\"2021-07-01 00:00:00.590000000\" ")
|
||||
tdSql.checkData(0, 0, 5900)
|
||||
|
||||
tdSql.query("select count(*) from tb0_0 where ts>\"2021-07-01 00:00:00.590000000 \" ;")
|
||||
tdSql.checkData(0, 0, 40)
|
||||
tdSql.query("select count(*) from tb0_0 where ts>\"2021-07-01 00:00:00.000000000\" and ts <=\"2021-07-01 00:00:00.590000000\" ")
|
||||
tdSql.checkData(0, 0, 59)
|
||||
|
||||
|
||||
# select max min avg from special col
|
||||
tdSql.query("select max(c10) from stb0;")
|
||||
print("select max(c10) from stb0 : " , tdSql.getData(0, 0))
|
||||
|
||||
tdSql.query("select max(c10) from tb0_0;")
|
||||
print("select max(c10) from tb0_0 : " , tdSql.getData(0, 0))
|
||||
|
||||
|
||||
tdSql.query("select min(c1) from stb0;")
|
||||
print( "select min(c1) from stb0 : " , tdSql.getData(0, 0))
|
||||
|
||||
tdSql.query("select min(c1) from tb0_0;")
|
||||
print( "select min(c1) from tb0_0 : " , tdSql.getData(0, 0))
|
||||
|
||||
tdSql.query("select avg(c1) from stb0;")
|
||||
print( "select avg(c1) from stb0 : " , tdSql.getData(0, 0))
|
||||
|
||||
tdSql.query("select avg(c1) from tb0_0;")
|
||||
print( "select avg(c1) from tb0_0 : " , tdSql.getData(0, 0))
|
||||
|
||||
tdSql.query("select count(*) from stb0 group by tbname;")
|
||||
tdSql.checkData(0, 0, 100)
|
||||
tdSql.checkData(10, 0, 100)
|
||||
|
||||
# query : query above sqls by taosdemo and continuously
|
||||
|
||||
os.system("%staosdemo -f tools/taosdemoAllTest/taosdemoTestSupportNanoQuery.json -y " % binPath)
|
||||
|
||||
|
||||
os.system("%staosdemo -f tools/taosdemoAllTest/taosdemoTestNanoDatabasecsv.json -y " % binPath)
|
||||
tdSql.execute("use nsdbcsv")
|
||||
tdSql.query("show stables")
|
||||
tdSql.checkData(0, 4, 100)
|
||||
tdSql.query("select count(*) from stb0")
|
||||
tdSql.checkData(0, 0, 10000)
|
||||
tdSql.query("describe stb0")
|
||||
tdSql.checkDataType(3, 1, "TIMESTAMP")
|
||||
tdSql.query("select count(*) from stb0 where ts >\"2021-07-01 00:00:00.490000000\"")
|
||||
tdSql.checkData(0, 0, 5000)
|
||||
tdSql.query("select count(*) from stb0 where ts <now -1d-1h-3s")
|
||||
tdSql.checkData(0, 0, 10000)
|
||||
tdSql.query("select count(*) from stb0 where ts < 1626918583000000000")
|
||||
tdSql.checkData(0, 0, 10000)
|
||||
tdSql.execute('select count(*) from stb0 where c2 > 162687012800000000')
|
||||
tdSql.execute('select count(*) from stb0 where c2 < 162687012800000000')
|
||||
tdSql.execute('select count(*) from stb0 where c2 = 162687012800000000')
|
||||
tdSql.execute('select count(*) from stb0 where c2 != 162687012800000000')
|
||||
tdSql.execute('select count(*) from stb0 where c2 <> 162687012800000000')
|
||||
tdSql.execute('select count(*) from stb0 where c2 > "2021-07-21 20:22:08.248246976"')
|
||||
tdSql.execute('select count(*) from stb0 where c2 < "2021-07-21 20:22:08.248246976"')
|
||||
tdSql.execute('select count(*) from stb0 where c2 = "2021-07-21 20:22:08.248246976"')
|
||||
tdSql.execute('select count(*) from stb0 where c2 != "2021-07-21 20:22:08.248246976"')
|
||||
tdSql.execute('select count(*) from stb0 where c2 <> "2021-07-21 20:22:08.248246976"')
|
||||
tdSql.execute('select count(*) from stb0 where ts between "2021-07-01 00:00:00.000000000" and "2021-07-01 00:00:00.990000000"')
|
||||
tdSql.execute('select count(*) from stb0 where ts between 1625068800000000000 and 1625068801000000000')
|
||||
tdSql.query('select avg(c0) from stb0 interval(5000000000b)')
|
||||
tdSql.checkRows(1)
|
||||
|
||||
tdSql.query('select avg(c0) from stb0 interval(100000000b)')
|
||||
tdSql.checkRows(10)
|
||||
|
||||
tdSql.error('select avg(c0) from stb0 interval(1b)')
|
||||
tdSql.error('select avg(c0) from stb0 interval(999b)')
|
||||
|
||||
tdSql.query('select avg(c0) from stb0 interval(1000b)')
|
||||
tdSql.checkRows(100)
|
||||
|
||||
tdSql.query('select avg(c0) from stb0 interval(1u)')
|
||||
tdSql.checkRows(100)
|
||||
|
||||
tdSql.query('select avg(c0) from stb0 interval(100000000b) sliding (100000000b)')
|
||||
tdSql.checkRows(10)
|
||||
|
||||
# query : query above sqls by taosdemo and continuously
|
||||
os.system("%staosdemo -f tools/taosdemoAllTest/taosdemoTestSupportNanoQuerycsv.json -y " % binPath)
|
||||
|
||||
os.system("rm -rf ./query_res*.txt*")
|
||||
os.system("rm -rf tools/taosdemoAllTest/*.py.sql")
|
||||
|
||||
|
||||
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
tdLog.success("%s successfully executed" % __file__)
|
||||
|
||||
|
||||
tdCases.addWindows(__file__, TDTestCase())
|
||||
tdCases.addLinux(__file__, TDTestCase())
|
|
@ -0,0 +1,110 @@
|
|||
{
|
||||
"filetype": "query",
|
||||
"cfgdir": "/etc/taos",
|
||||
"host": "127.0.0.1",
|
||||
"port": 6030,
|
||||
"user": "root",
|
||||
"password": "taosdata",
|
||||
"confirm_parameter_prompt": "no",
|
||||
"databases": "nsdbcsv",
|
||||
"query_times": 10,
|
||||
"query_mode": "taosc",
|
||||
"specified_table_query": {
|
||||
"query_interval": 1,
|
||||
"concurrent": 2,
|
||||
"sqls": [
|
||||
{
|
||||
"sql": "select count(*) from stb0 where ts> \"2021-07-01 00:00:00.490000000\" ;",
|
||||
"result": "./query_res0.txt"
|
||||
},
|
||||
{
|
||||
"sql": "select count(*) from stb0 where ts < now -22d-1h-3s ;",
|
||||
"result": "./query_res1.txt"
|
||||
},
|
||||
{
|
||||
"sql": "select count(*) from stb0 where ts < 1626918583000000000 ;",
|
||||
"result": "./query_res2.txt"
|
||||
},
|
||||
{
|
||||
"sql": "select count(*) from stb0 where c2 <> 162687012800000000';",
|
||||
"result": "./query_res3.txt"
|
||||
},
|
||||
{
|
||||
"sql": "select count(*) from stb0 where c2 != \"2021-07-21 20:22:08.248246976\";",
|
||||
"result": "./query_res4.txt"
|
||||
},
|
||||
{
|
||||
"sql": "select count(*) from stb0 where ts between \"2021-07-01 00:00:00.000000000\" and \"2021-07-01 00:00:00.990000000\";",
|
||||
"result": "./query_res5.txt"
|
||||
},
|
||||
{
|
||||
"sql":"select count(*) from stb0 group by tbname;",
|
||||
"result":"./query_res6.txt"
|
||||
},
|
||||
{
|
||||
"sql":"select count(*) from stb0 where ts between 1625068800000000000 and 1625068801000000000;",
|
||||
"result":"./query_res7.txt"
|
||||
},
|
||||
{
|
||||
"sql":"select avg(c0) from stb0 interval(5000000000b);",
|
||||
"result":"./query_res8.txt"
|
||||
},
|
||||
{
|
||||
"sql":"select avg(c0) from stb0 interval(100000000b) sliding (100000000b);",
|
||||
"result":"./query_res9.txt"
|
||||
}
|
||||
|
||||
]
|
||||
},
|
||||
"super_table_query": {
|
||||
"stblname": "stb0",
|
||||
"query_interval": 0,
|
||||
"threads": 4,
|
||||
"sqls": [
|
||||
{
|
||||
"sql": "select count(*) from xxxx where ts > \"2021-07-01 00:00:00.490000000\" ;",
|
||||
"result": "./query_res_tb0.txt"
|
||||
},
|
||||
{
|
||||
"sql":"select count(*) from xxxx where ts between \"2021-07-01 00:00:00.000000000\" and \"2021-07-01 00:00:00.990000000\" ;",
|
||||
"result": "./query_res_tb1.txt"
|
||||
},
|
||||
{
|
||||
"sql":"select first(*) from xxxx ;",
|
||||
"result": "./query_res_tb2.txt"
|
||||
},
|
||||
{
|
||||
"sql":"select last(*) from xxxx;",
|
||||
"result": "./query_res_tb3.txt"
|
||||
|
||||
},
|
||||
{
|
||||
"sql":"select last_row(*) from xxxx ;",
|
||||
"result": "./query_res_tb4.txt"
|
||||
|
||||
},
|
||||
{
|
||||
"sql":"select max(c0) from xxxx ;",
|
||||
"result": "./query_res_tb5.txt"
|
||||
|
||||
},
|
||||
{
|
||||
"sql":"select min(c0) from xxxx ;",
|
||||
"result": "./query_res_tb6.txt"
|
||||
|
||||
},
|
||||
{
|
||||
"sql":"select avg(c0) from xxxx ;",
|
||||
"result": "./query_res_tb7.txt"
|
||||
|
||||
},
|
||||
{
|
||||
"sql":"select avg(c0) from xxxx interval(100000000b) sliding (100000000b) ;",
|
||||
"result": "./query_res_tb8.txt"
|
||||
|
||||
}
|
||||
|
||||
|
||||
]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"filetype":"subscribe",
|
||||
"cfgdir": "/etc/taos",
|
||||
"host": "127.0.0.1",
|
||||
"port": 6030,
|
||||
"user": "root",
|
||||
"password": "taosdata",
|
||||
"databases": "subnsdb",
|
||||
"confirm_parameter_prompt": "no",
|
||||
"specified_table_query":
|
||||
{
|
||||
"concurrent":2,
|
||||
"mode":"sync",
|
||||
"interval":10000,
|
||||
"restart":"yes",
|
||||
"keepProgress":"yes",
|
||||
"sqls": [
|
||||
{
|
||||
"sql": "select * from stb0 where ts>= \"2021-07-01 00:00:00.000000000\" ;",
|
||||
"result": "./subscribe_res0.txt"
|
||||
},
|
||||
{
|
||||
"sql": "select * from stb0 where ts < now -2d-1h-3s ;",
|
||||
"result": "./subscribe_res1.txt"
|
||||
},
|
||||
{
|
||||
"sql": "select * from stb0 where ts < 1626918583000000000 ;",
|
||||
"result": "./subscribe_res2.txt"
|
||||
}]
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,125 @@
|
|||
###################################################################
|
||||
# Copyright (c) 2016 by TAOS Technologies, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# This file is proprietary and confidential to TAOS Technologies.
|
||||
# No part of this file may be reproduced, stored, transmitted,
|
||||
# disclosed or used in any form or by any means other than as
|
||||
# expressly provided by the written permission from Jianhui Tao
|
||||
#
|
||||
###################################################################
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import sys
|
||||
import os
|
||||
from util.log import *
|
||||
from util.cases import *
|
||||
from util.sql import *
|
||||
from util.dnodes import *
|
||||
import time
|
||||
from datetime import datetime
|
||||
import subprocess
|
||||
|
||||
|
||||
class TDTestCase:
|
||||
def init(self, conn, logSql):
|
||||
tdLog.debug("start to execute %s" % __file__)
|
||||
tdSql.init(conn.cursor(), logSql)
|
||||
|
||||
def getBuildPath(self):
|
||||
selfPath = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
if ("community" in selfPath):
|
||||
projPath = selfPath[:selfPath.find("community")]
|
||||
else:
|
||||
projPath = selfPath[:selfPath.find("tests")]
|
||||
|
||||
for root, dirs, files in os.walk(projPath):
|
||||
if ("taosd" in files):
|
||||
rootRealPath = os.path.dirname(os.path.realpath(root))
|
||||
if ("packaging" not in rootRealPath):
|
||||
buildPath = root[:len(root)-len("/build/bin")]
|
||||
break
|
||||
return buildPath
|
||||
|
||||
# get the number of subscriptions
|
||||
def subTimes(self,filename):
|
||||
self.filename = filename
|
||||
command = 'cat %s |wc -l'% filename
|
||||
times = int(subprocess.getstatusoutput(command)[1])
|
||||
return times
|
||||
|
||||
# assert results
|
||||
def assertCheck(self,filename,subResult,expectResult):
|
||||
self.filename = filename
|
||||
self.subResult = subResult
|
||||
self.expectResult = expectResult
|
||||
args0 = (filename, subResult, expectResult)
|
||||
assert subResult == expectResult , "Queryfile:%s ,result is %s != expect: %s" % args0
|
||||
|
||||
def run(self):
|
||||
buildPath = self.getBuildPath()
|
||||
if (buildPath == ""):
|
||||
tdLog.exit("taosd not found!")
|
||||
else:
|
||||
tdLog.info("taosd found in %s" % buildPath)
|
||||
binPath = buildPath+ "/build/bin/"
|
||||
|
||||
# clear env
|
||||
os.system("ps -ef |grep 'taosdemoAllTest/taosdemoTestSupportNanoSubscribe.json' |grep -v 'grep' |awk '{print $2}'|xargs kill -9")
|
||||
os.system("rm -rf ./subscribe_res*")
|
||||
os.system("rm -rf ./all_subscribe_res*")
|
||||
|
||||
|
||||
# insert data
|
||||
os.system("%staosdemo -f tools/taosdemoAllTest/taosdemoTestNanoDatabaseInsertForSub.json" % binPath)
|
||||
os.system("nohup %staosdemo -f tools/taosdemoAllTest/taosdemoTestSupportNanoSubscribe.json &" % binPath)
|
||||
query_pid = int(subprocess.getstatusoutput('ps aux|grep "taosdemoAllTest/taosdemoTestSupportNanoSubscribe.json" |grep -v "grep"|awk \'{print $2}\'')[1])
|
||||
|
||||
|
||||
# merge result files
|
||||
sleep(10)
|
||||
os.system("cat subscribe_res0.txt* > all_subscribe_res0.txt")
|
||||
os.system("cat subscribe_res1.txt* > all_subscribe_res1.txt")
|
||||
os.system("cat subscribe_res2.txt* > all_subscribe_res2.txt")
|
||||
|
||||
|
||||
# correct subscribeTimes testcase
|
||||
subTimes0 = self.subTimes("all_subscribe_res0.txt")
|
||||
self.assertCheck("all_subscribe_res0.txt",subTimes0 ,200)
|
||||
|
||||
subTimes1 = self.subTimes("all_subscribe_res1.txt")
|
||||
self.assertCheck("all_subscribe_res1.txt",subTimes1 ,200)
|
||||
|
||||
subTimes2 = self.subTimes("all_subscribe_res2.txt")
|
||||
self.assertCheck("all_subscribe_res2.txt",subTimes2 ,200)
|
||||
|
||||
|
||||
# insert extral data
|
||||
tdSql.execute("use subnsdb")
|
||||
tdSql.execute("insert into tb0_0 values(now,100.1000,'subtest1',now-1s)")
|
||||
sleep(1)
|
||||
|
||||
os.system("cat subscribe_res0.txt* > all_subscribe_res0.txt")
|
||||
subTimes0 = self.subTimes("all_subscribe_res0.txt")
|
||||
print("pass")
|
||||
self.assertCheck("all_subscribe_res0.txt",subTimes0 ,202)
|
||||
|
||||
|
||||
|
||||
# correct data testcase
|
||||
os.system("kill -9 %d" % query_pid)
|
||||
sleep(3)
|
||||
os.system("rm -rf ./subscribe_res*")
|
||||
os.system("rm -rf ./all_subscribe*")
|
||||
os.system("rm -rf ./*.py.sql")
|
||||
|
||||
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
tdLog.success("%s successfully executed" % __file__)
|
||||
|
||||
tdCases.addWindows(__file__, TDTestCase())
|
||||
tdCases.addLinux(__file__, TDTestCase())
|
|
@ -86,7 +86,7 @@ class TwoClients:
|
|||
tdSql.execute("alter table stb2_0 add column col2 binary(4)")
|
||||
tdSql.execute("alter table stb2_0 drop column col1")
|
||||
tdSql.execute("insert into stb2_0 values(1614218422000,8638,'R')")
|
||||
tdSql.execute("drop dnode 2")
|
||||
tdSql.execute("drop dnode chenhaoran02")
|
||||
sleep(10)
|
||||
os.system("rm -rf /var/lib/taos/*")
|
||||
print("clear dnode chenhaoran02'data files")
|
||||
|
|
|
@ -14,7 +14,7 @@ while [ -n "$PID" ]; do
|
|||
echo kill -9 $PID
|
||||
pkill -9 taosd
|
||||
echo "Killing processes locking on port 6030"
|
||||
if [[ "$OS_TYPE" != "Darwin" ]]; then
|
||||
if [ "$OS_TYPE" != "Darwin" ]; then
|
||||
fuser -k -n tcp 6030
|
||||
else
|
||||
lsof -nti:6030 | xargs kill -9
|
||||
|
@ -26,7 +26,7 @@ PID=`ps -ef|grep -w tarbitrator | grep -v grep | awk '{print $2}'`
|
|||
while [ -n "$PID" ]; do
|
||||
echo kill -9 $PID
|
||||
pkill -9 tarbitrator
|
||||
if [[ "$OS_TYPE" != "Darwin" ]]; then
|
||||
if [ "$OS_TYPE" != "Darwin" ]; then
|
||||
fuser -k -n tcp 6040
|
||||
else
|
||||
lsof -nti:6040 | xargs kill -9
|
||||
|
|
Loading…
Reference in New Issue