Merge branch '3.0' into fix/TD-20052
This commit is contained in:
commit
41c76d662f
|
@ -135,6 +135,9 @@ extern int32_t tsTtlPushInterval;
|
||||||
extern int32_t tsGrantHBInterval;
|
extern int32_t tsGrantHBInterval;
|
||||||
extern int32_t tsUptimeInterval;
|
extern int32_t tsUptimeInterval;
|
||||||
|
|
||||||
|
extern int32_t tsRpcRetryLimit;
|
||||||
|
extern int32_t tsRpcRetryInterval;
|
||||||
|
|
||||||
//#define NEEDTO_COMPRESSS_MSG(size) (tsCompressMsgSize != -1 && (size) > tsCompressMsgSize)
|
//#define NEEDTO_COMPRESSS_MSG(size) (tsCompressMsgSize != -1 && (size) > tsCompressMsgSize)
|
||||||
|
|
||||||
int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDir, const char **envCmd,
|
int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDir, const char **envCmd,
|
||||||
|
|
|
@ -174,61 +174,61 @@
|
||||||
#define TK_SUBSCRIPTIONS 156
|
#define TK_SUBSCRIPTIONS 156
|
||||||
#define TK_VNODES 157
|
#define TK_VNODES 157
|
||||||
#define TK_LIKE 158
|
#define TK_LIKE 158
|
||||||
#define TK_INDEX 159
|
#define TK_TBNAME 159
|
||||||
#define TK_FUNCTION 160
|
#define TK_QTAGS 160
|
||||||
#define TK_INTERVAL 161
|
#define TK_AS 161
|
||||||
#define TK_TOPIC 162
|
#define TK_INDEX 162
|
||||||
#define TK_AS 163
|
#define TK_FUNCTION 163
|
||||||
#define TK_WITH 164
|
#define TK_INTERVAL 164
|
||||||
#define TK_META 165
|
#define TK_TOPIC 165
|
||||||
#define TK_CONSUMER 166
|
#define TK_WITH 166
|
||||||
#define TK_GROUP 167
|
#define TK_META 167
|
||||||
#define TK_DESC 168
|
#define TK_CONSUMER 168
|
||||||
#define TK_DESCRIBE 169
|
#define TK_GROUP 169
|
||||||
#define TK_RESET 170
|
#define TK_DESC 170
|
||||||
#define TK_QUERY 171
|
#define TK_DESCRIBE 171
|
||||||
#define TK_CACHE 172
|
#define TK_RESET 172
|
||||||
#define TK_EXPLAIN 173
|
#define TK_QUERY 173
|
||||||
#define TK_ANALYZE 174
|
#define TK_CACHE 174
|
||||||
#define TK_VERBOSE 175
|
#define TK_EXPLAIN 175
|
||||||
#define TK_NK_BOOL 176
|
#define TK_ANALYZE 176
|
||||||
#define TK_RATIO 177
|
#define TK_VERBOSE 177
|
||||||
#define TK_NK_FLOAT 178
|
#define TK_NK_BOOL 178
|
||||||
#define TK_OUTPUTTYPE 179
|
#define TK_RATIO 179
|
||||||
#define TK_AGGREGATE 180
|
#define TK_NK_FLOAT 180
|
||||||
#define TK_BUFSIZE 181
|
#define TK_OUTPUTTYPE 181
|
||||||
#define TK_STREAM 182
|
#define TK_AGGREGATE 182
|
||||||
#define TK_INTO 183
|
#define TK_BUFSIZE 183
|
||||||
#define TK_TRIGGER 184
|
#define TK_STREAM 184
|
||||||
#define TK_AT_ONCE 185
|
#define TK_INTO 185
|
||||||
#define TK_WINDOW_CLOSE 186
|
#define TK_TRIGGER 186
|
||||||
#define TK_IGNORE 187
|
#define TK_AT_ONCE 187
|
||||||
#define TK_EXPIRED 188
|
#define TK_WINDOW_CLOSE 188
|
||||||
#define TK_FILL_HISTORY 189
|
#define TK_IGNORE 189
|
||||||
#define TK_SUBTABLE 190
|
#define TK_EXPIRED 190
|
||||||
#define TK_KILL 191
|
#define TK_FILL_HISTORY 191
|
||||||
#define TK_CONNECTION 192
|
#define TK_SUBTABLE 192
|
||||||
#define TK_TRANSACTION 193
|
#define TK_KILL 193
|
||||||
#define TK_BALANCE 194
|
#define TK_CONNECTION 194
|
||||||
#define TK_VGROUP 195
|
#define TK_TRANSACTION 195
|
||||||
#define TK_MERGE 196
|
#define TK_BALANCE 196
|
||||||
#define TK_REDISTRIBUTE 197
|
#define TK_VGROUP 197
|
||||||
#define TK_SPLIT 198
|
#define TK_MERGE 198
|
||||||
#define TK_DELETE 199
|
#define TK_REDISTRIBUTE 199
|
||||||
#define TK_INSERT 200
|
#define TK_SPLIT 200
|
||||||
#define TK_NULL 201
|
#define TK_DELETE 201
|
||||||
#define TK_NK_QUESTION 202
|
#define TK_INSERT 202
|
||||||
#define TK_NK_ARROW 203
|
#define TK_NULL 203
|
||||||
#define TK_ROWTS 204
|
#define TK_NK_QUESTION 204
|
||||||
#define TK_TBNAME 205
|
#define TK_NK_ARROW 205
|
||||||
#define TK_QSTART 206
|
#define TK_ROWTS 206
|
||||||
#define TK_QEND 207
|
#define TK_QSTART 207
|
||||||
#define TK_QDURATION 208
|
#define TK_QEND 208
|
||||||
#define TK_WSTART 209
|
#define TK_QDURATION 209
|
||||||
#define TK_WEND 210
|
#define TK_WSTART 210
|
||||||
#define TK_WDURATION 211
|
#define TK_WEND 211
|
||||||
#define TK_IROWTS 212
|
#define TK_WDURATION 212
|
||||||
#define TK_QTAGS 213
|
#define TK_IROWTS 213
|
||||||
#define TK_CAST 214
|
#define TK_CAST 214
|
||||||
#define TK_NOW 215
|
#define TK_NOW 215
|
||||||
#define TK_TODAY 216
|
#define TK_TODAY 216
|
||||||
|
|
|
@ -284,6 +284,13 @@ typedef struct SShowVnodesStmt {
|
||||||
SNode* pDnodeEndpoint;
|
SNode* pDnodeEndpoint;
|
||||||
} SShowVnodesStmt;
|
} SShowVnodesStmt;
|
||||||
|
|
||||||
|
typedef struct SShowTableTagsStmt {
|
||||||
|
ENodeType type;
|
||||||
|
SNode* pDbName; // SValueNode
|
||||||
|
SNode* pTbName; // SValueNode
|
||||||
|
SNodeList* pTags;
|
||||||
|
} SShowTableTagsStmt;
|
||||||
|
|
||||||
typedef enum EIndexType { INDEX_TYPE_SMA = 1, INDEX_TYPE_FULLTEXT } EIndexType;
|
typedef enum EIndexType { INDEX_TYPE_SMA = 1, INDEX_TYPE_FULLTEXT } EIndexType;
|
||||||
|
|
||||||
typedef struct SIndexOptions {
|
typedef struct SIndexOptions {
|
||||||
|
|
|
@ -297,6 +297,7 @@ typedef struct SSelectStmt {
|
||||||
bool hasStateKey;
|
bool hasStateKey;
|
||||||
bool onlyHasKeepOrderFunc;
|
bool onlyHasKeepOrderFunc;
|
||||||
bool groupSort;
|
bool groupSort;
|
||||||
|
bool tagScan;
|
||||||
} SSelectStmt;
|
} SSelectStmt;
|
||||||
|
|
||||||
typedef enum ESetOperatorType { SET_OP_TYPE_UNION_ALL = 1, SET_OP_TYPE_UNION } ESetOperatorType;
|
typedef enum ESetOperatorType { SET_OP_TYPE_UNION_ALL = 1, SET_OP_TYPE_UNION } ESetOperatorType;
|
||||||
|
|
|
@ -82,6 +82,8 @@ typedef struct SRpcInit {
|
||||||
int32_t sessions; // number of sessions allowed
|
int32_t sessions; // number of sessions allowed
|
||||||
int8_t connType; // TAOS_CONN_UDP, TAOS_CONN_TCPC, TAOS_CONN_TCPS
|
int8_t connType; // TAOS_CONN_UDP, TAOS_CONN_TCPC, TAOS_CONN_TCPS
|
||||||
int32_t idleTime; // milliseconds, 0 means idle timer is disabled
|
int32_t idleTime; // milliseconds, 0 means idle timer is disabled
|
||||||
|
int32_t retryLimit; // retry limit
|
||||||
|
int32_t retryInterval; // retry interval ms
|
||||||
|
|
||||||
int32_t compressSize; // -1: no compress, 0 : all data compressed, size: compress data if larger than size
|
int32_t compressSize; // -1: no compress, 0 : all data compressed, size: compress data if larger than size
|
||||||
int8_t encryption; // encrypt or not
|
int8_t encryption; // encrypt or not
|
||||||
|
|
|
@ -26,7 +26,7 @@ extern "C" {
|
||||||
|
|
||||||
#define TSKEY int64_t
|
#define TSKEY int64_t
|
||||||
#define TSKEY_MIN INT64_MIN
|
#define TSKEY_MIN INT64_MIN
|
||||||
#define TSKEY_MAX (INT64_MAX - 1)
|
#define TSKEY_MAX INT64_MAX
|
||||||
#define TSKEY_INITIAL_VAL TSKEY_MIN
|
#define TSKEY_INITIAL_VAL TSKEY_MIN
|
||||||
|
|
||||||
#define TD_VER_MAX UINT64_MAX // TODO: use the real max version from query handle
|
#define TD_VER_MAX UINT64_MAX // TODO: use the real max version from query handle
|
||||||
|
|
|
@ -146,6 +146,8 @@ void *openTransporter(const char *user, const char *auth, int32_t numOfThread) {
|
||||||
rpcInit.idleTime = tsShellActivityTimer * 1000;
|
rpcInit.idleTime = tsShellActivityTimer * 1000;
|
||||||
rpcInit.compressSize = tsCompressMsgSize;
|
rpcInit.compressSize = tsCompressMsgSize;
|
||||||
rpcInit.dfp = destroyAhandle;
|
rpcInit.dfp = destroyAhandle;
|
||||||
|
rpcInit.retryLimit = tsRpcRetryLimit;
|
||||||
|
rpcInit.retryInterval = tsRpcRetryInterval;
|
||||||
|
|
||||||
void *pDnodeConn = rpcOpen(&rpcInit);
|
void *pDnodeConn = rpcOpen(&rpcInit);
|
||||||
if (pDnodeConn == NULL) {
|
if (pDnodeConn == NULL) {
|
||||||
|
|
|
@ -1971,6 +1971,8 @@ TSDB_SERVER_STATUS taos_check_server_status(const char* fqdn, int port, char* de
|
||||||
rpcInit.idleTime = tsShellActivityTimer * 1000;
|
rpcInit.idleTime = tsShellActivityTimer * 1000;
|
||||||
rpcInit.compressSize = tsCompressMsgSize;
|
rpcInit.compressSize = tsCompressMsgSize;
|
||||||
rpcInit.user = "_dnd";
|
rpcInit.user = "_dnd";
|
||||||
|
rpcInit.retryLimit = tsRpcRetryLimit;
|
||||||
|
rpcInit.retryInterval = tsRpcRetryInterval;
|
||||||
|
|
||||||
clientRpc = rpcOpen(&rpcInit);
|
clientRpc = rpcOpen(&rpcInit);
|
||||||
if (clientRpc == NULL) {
|
if (clientRpc == NULL) {
|
||||||
|
|
|
@ -167,6 +167,8 @@ int32_t tsUptimeInterval = 300; // seconds
|
||||||
char tsUdfdResFuncs[512] = ""; // udfd resident funcs that teardown when udfd exits
|
char tsUdfdResFuncs[512] = ""; // udfd resident funcs that teardown when udfd exits
|
||||||
char tsUdfdLdLibPath[512] = "";
|
char tsUdfdLdLibPath[512] = "";
|
||||||
|
|
||||||
|
int32_t tsRpcRetryLimit = 100;
|
||||||
|
int32_t tsRpcRetryInterval = 15;
|
||||||
#ifndef _STORAGE
|
#ifndef _STORAGE
|
||||||
int32_t taosSetTfsCfg(SConfig *pCfg) {
|
int32_t taosSetTfsCfg(SConfig *pCfg) {
|
||||||
SConfigItem *pItem = cfgGetItem(pCfg, "dataDir");
|
SConfigItem *pItem = cfgGetItem(pCfg, "dataDir");
|
||||||
|
@ -297,6 +299,8 @@ static int32_t taosAddClientCfg(SConfig *pCfg) {
|
||||||
if (cfgAddString(pCfg, "smlTagName", tsSmlTagName, 1) != 0) return -1;
|
if (cfgAddString(pCfg, "smlTagName", tsSmlTagName, 1) != 0) return -1;
|
||||||
if (cfgAddBool(pCfg, "smlDataFormat", tsSmlDataFormat, 1) != 0) return -1;
|
if (cfgAddBool(pCfg, "smlDataFormat", tsSmlDataFormat, 1) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "maxMemUsedByInsert", tsMaxMemUsedByInsert, 1, INT32_MAX, true) != 0) return -1;
|
if (cfgAddInt32(pCfg, "maxMemUsedByInsert", tsMaxMemUsedByInsert, 1, INT32_MAX, true) != 0) return -1;
|
||||||
|
if (cfgAddInt32(pCfg, "rpcRetryLimit", tsRpcRetryLimit, 1, 100000, 0) != 0) return -1;
|
||||||
|
if (cfgAddInt32(pCfg, "rpcRetryInterval", tsRpcRetryInterval, 1, 100000, 0) != 0) return -1;
|
||||||
|
|
||||||
tsNumOfTaskQueueThreads = tsNumOfCores / 2;
|
tsNumOfTaskQueueThreads = tsNumOfCores / 2;
|
||||||
tsNumOfTaskQueueThreads = TMAX(tsNumOfTaskQueueThreads, 4);
|
tsNumOfTaskQueueThreads = TMAX(tsNumOfTaskQueueThreads, 4);
|
||||||
|
@ -422,6 +426,10 @@ static int32_t taosAddServerCfg(SConfig *pCfg) {
|
||||||
if (cfgAddBool(pCfg, "udf", tsStartUdfd, 0) != 0) return -1;
|
if (cfgAddBool(pCfg, "udf", tsStartUdfd, 0) != 0) return -1;
|
||||||
if (cfgAddString(pCfg, "udfdResFuncs", tsUdfdResFuncs, 0) != 0) return -1;
|
if (cfgAddString(pCfg, "udfdResFuncs", tsUdfdResFuncs, 0) != 0) return -1;
|
||||||
if (cfgAddString(pCfg, "udfdLdLibPath", tsUdfdLdLibPath, 0) != 0) return -1;
|
if (cfgAddString(pCfg, "udfdLdLibPath", tsUdfdLdLibPath, 0) != 0) return -1;
|
||||||
|
|
||||||
|
if (cfgAddInt32(pCfg, "rpcRetryLimit", tsRpcRetryLimit, 1, 100000, 0) != 0) return -1;
|
||||||
|
if (cfgAddInt32(pCfg, "rpcRetryInterval", tsRpcRetryInterval, 1, 100000, 0) != 0) return -1;
|
||||||
|
|
||||||
GRANT_CFG_ADD;
|
GRANT_CFG_ADD;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -634,6 +642,9 @@ static int32_t taosSetClientCfg(SConfig *pCfg) {
|
||||||
tsQueryNodeChunkSize = cfgGetItem(pCfg, "queryNodeChunkSize")->i32;
|
tsQueryNodeChunkSize = cfgGetItem(pCfg, "queryNodeChunkSize")->i32;
|
||||||
tsQueryUseNodeAllocator = cfgGetItem(pCfg, "queryUseNodeAllocator")->bval;
|
tsQueryUseNodeAllocator = cfgGetItem(pCfg, "queryUseNodeAllocator")->bval;
|
||||||
tsKeepColumnName = cfgGetItem(pCfg, "keepColumnName")->bval;
|
tsKeepColumnName = cfgGetItem(pCfg, "keepColumnName")->bval;
|
||||||
|
|
||||||
|
tsRpcRetryLimit = cfgGetItem(pCfg, "rpcRetryLimit")->i32;
|
||||||
|
tsRpcRetryInterval = cfgGetItem(pCfg, "rpcRetryInterval")->i32;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -708,6 +719,9 @@ static int32_t taosSetServerCfg(SConfig *pCfg) {
|
||||||
if (tsQueryBufferSize >= 0) {
|
if (tsQueryBufferSize >= 0) {
|
||||||
tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL;
|
tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tsRpcRetryLimit = cfgGetItem(pCfg, "rpcRetryLimit")->i32;
|
||||||
|
tsRpcRetryInterval = cfgGetItem(pCfg, "rpcRetryInterval")->i32;
|
||||||
GRANT_CFG_GET;
|
GRANT_CFG_GET;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -258,6 +258,8 @@ int32_t dmInitClient(SDnode *pDnode) {
|
||||||
rpcInit.parent = pDnode;
|
rpcInit.parent = pDnode;
|
||||||
rpcInit.rfp = rpcRfp;
|
rpcInit.rfp = rpcRfp;
|
||||||
rpcInit.compressSize = tsCompressMsgSize;
|
rpcInit.compressSize = tsCompressMsgSize;
|
||||||
|
rpcInit.retryLimit = tsRpcRetryLimit;
|
||||||
|
rpcInit.retryInterval = tsRpcRetryInterval;
|
||||||
|
|
||||||
pTrans->clientRpc = rpcOpen(&rpcInit);
|
pTrans->clientRpc = rpcOpen(&rpcInit);
|
||||||
if (pTrans->clientRpc == NULL) {
|
if (pTrans->clientRpc == NULL) {
|
||||||
|
|
|
@ -495,6 +495,10 @@ static int32_t tsdbCommitFileDataStart(SCommitter *pCommitter) {
|
||||||
pCommitter->commitFid = tsdbKeyFid(pCommitter->nextKey, pCommitter->minutes, pCommitter->precision);
|
pCommitter->commitFid = tsdbKeyFid(pCommitter->nextKey, pCommitter->minutes, pCommitter->precision);
|
||||||
tsdbFidKeyRange(pCommitter->commitFid, pCommitter->minutes, pCommitter->precision, &pCommitter->minKey,
|
tsdbFidKeyRange(pCommitter->commitFid, pCommitter->minutes, pCommitter->precision, &pCommitter->minKey,
|
||||||
&pCommitter->maxKey);
|
&pCommitter->maxKey);
|
||||||
|
#if 0
|
||||||
|
ASSERT(pCommitter->minKey <= pCommitter->nextKey && pCommitter->maxKey >= pCommitter->nextKey);
|
||||||
|
#endif
|
||||||
|
|
||||||
pCommitter->nextKey = TSKEY_MAX;
|
pCommitter->nextKey = TSKEY_MAX;
|
||||||
|
|
||||||
// Reader
|
// Reader
|
||||||
|
|
|
@ -505,8 +505,8 @@ int32_t tsdbKeyFid(TSKEY key, int32_t minutes, int8_t precision) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void tsdbFidKeyRange(int32_t fid, int32_t minutes, int8_t precision, TSKEY *minKey, TSKEY *maxKey) {
|
void tsdbFidKeyRange(int32_t fid, int32_t minutes, int8_t precision, TSKEY *minKey, TSKEY *maxKey) {
|
||||||
*minKey = fid * minutes * tsTickPerMin[precision];
|
*minKey = tsTickPerMin[precision] * fid * minutes;
|
||||||
*maxKey = *minKey + minutes * tsTickPerMin[precision] - 1;
|
*maxKey = *minKey + tsTickPerMin[precision] * minutes - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tsdbFidLevel(int32_t fid, STsdbKeepCfg *pKeepCfg, int64_t now) {
|
int32_t tsdbFidLevel(int32_t fid, STsdbKeepCfg *pKeepCfg, int64_t now) {
|
||||||
|
|
|
@ -15,6 +15,15 @@
|
||||||
|
|
||||||
#include "tsdb.h"
|
#include "tsdb.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief max key by precision
|
||||||
|
* approximately calculation:
|
||||||
|
* ms: 3600*1000*8765*1000 // 1970 + 1000 years
|
||||||
|
* us: 3600*1000000*8765*1000 // 1970 + 1000 years
|
||||||
|
* ns: 3600*1000000000*8765*292 // 1970 + 292 years
|
||||||
|
*/
|
||||||
|
static int64_t tsMaxKeyByPrecision[] = {31556995200000L, 31556995200000000L, 9214646400000000000L};
|
||||||
|
|
||||||
// static int tsdbScanAndConvertSubmitMsg(STsdb *pTsdb, SSubmitReq *pMsg);
|
// static int tsdbScanAndConvertSubmitMsg(STsdb *pTsdb, SSubmitReq *pMsg);
|
||||||
|
|
||||||
int tsdbInsertData(STsdb *pTsdb, int64_t version, SSubmitReq *pMsg, SSubmitRsp *pRsp) {
|
int tsdbInsertData(STsdb *pTsdb, int64_t version, SSubmitReq *pMsg, SSubmitRsp *pRsp) {
|
||||||
|
@ -97,7 +106,7 @@ int tsdbScanAndConvertSubmitMsg(STsdb *pTsdb, SSubmitReq *pMsg) {
|
||||||
STsdbKeepCfg *pCfg = &pTsdb->keepCfg;
|
STsdbKeepCfg *pCfg = &pTsdb->keepCfg;
|
||||||
TSKEY now = taosGetTimestamp(pCfg->precision);
|
TSKEY now = taosGetTimestamp(pCfg->precision);
|
||||||
TSKEY minKey = now - tsTickPerMin[pCfg->precision] * pCfg->keep2;
|
TSKEY minKey = now - tsTickPerMin[pCfg->precision] * pCfg->keep2;
|
||||||
TSKEY maxKey = now + tsTickPerMin[pCfg->precision] * pCfg->days;
|
TSKEY maxKey = tsMaxKeyByPrecision[pCfg->precision];
|
||||||
|
|
||||||
terrno = TSDB_CODE_SUCCESS;
|
terrno = TSDB_CODE_SUCCESS;
|
||||||
// pMsg->length = htonl(pMsg->length);
|
// pMsg->length = htonl(pMsg->length);
|
||||||
|
|
|
@ -1776,7 +1776,8 @@ SOperatorInfo* createIntervalOperatorInfo(SOperatorInfo* downstream, SIntervalPh
|
||||||
}
|
}
|
||||||
|
|
||||||
initResultRowInfo(&pInfo->binfo.resultRowInfo);
|
initResultRowInfo(&pInfo->binfo.resultRowInfo);
|
||||||
setOperatorInfo(pOperator, "TimeIntervalAggOperator", QUERY_NODE_PHYSICAL_PLAN_HASH_INTERVAL, true, OP_NOT_OPENED, pInfo, pTaskInfo);
|
setOperatorInfo(pOperator, "TimeIntervalAggOperator", QUERY_NODE_PHYSICAL_PLAN_HASH_INTERVAL, true, OP_NOT_OPENED,
|
||||||
|
pInfo, pTaskInfo);
|
||||||
|
|
||||||
pOperator->fpSet =
|
pOperator->fpSet =
|
||||||
createOperatorFpSet(doOpenIntervalAgg, doBuildIntervalResult, NULL, destroyIntervalOperatorInfo, NULL);
|
createOperatorFpSet(doOpenIntervalAgg, doBuildIntervalResult, NULL, destroyIntervalOperatorInfo, NULL);
|
||||||
|
@ -2551,9 +2552,9 @@ SOperatorInfo* createTimeSliceOperatorInfo(SOperatorInfo* downstream, SPhysiNode
|
||||||
pScanInfo->cond.twindows = pInfo->win;
|
pScanInfo->cond.twindows = pInfo->win;
|
||||||
pScanInfo->cond.type = TIMEWINDOW_RANGE_EXTERNAL;
|
pScanInfo->cond.type = TIMEWINDOW_RANGE_EXTERNAL;
|
||||||
|
|
||||||
setOperatorInfo(pOperator, "TimeSliceOperator", QUERY_NODE_PHYSICAL_PLAN_INTERP_FUNC, false, OP_NOT_OPENED, pInfo, pTaskInfo);
|
setOperatorInfo(pOperator, "TimeSliceOperator", QUERY_NODE_PHYSICAL_PLAN_INTERP_FUNC, false, OP_NOT_OPENED, pInfo,
|
||||||
pOperator->fpSet =
|
pTaskInfo);
|
||||||
createOperatorFpSet(operatorDummyOpenFn, doTimeslice, NULL, destroyTimeSliceOperatorInfo, NULL);
|
pOperator->fpSet = createOperatorFpSet(operatorDummyOpenFn, doTimeslice, NULL, destroyTimeSliceOperatorInfo, NULL);
|
||||||
|
|
||||||
blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity);
|
blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity);
|
||||||
|
|
||||||
|
@ -2622,7 +2623,8 @@ SOperatorInfo* createStatewindowOperatorInfo(SOperatorInfo* downstream, SStateWi
|
||||||
|
|
||||||
pInfo->tsSlotId = tsSlotId;
|
pInfo->tsSlotId = tsSlotId;
|
||||||
|
|
||||||
setOperatorInfo(pOperator, "StateWindowOperator", QUERY_NODE_PHYSICAL_PLAN_MERGE_STATE, true, OP_NOT_OPENED, pInfo, pTaskInfo);
|
setOperatorInfo(pOperator, "StateWindowOperator", QUERY_NODE_PHYSICAL_PLAN_MERGE_STATE, true, OP_NOT_OPENED, pInfo,
|
||||||
|
pTaskInfo);
|
||||||
pOperator->fpSet =
|
pOperator->fpSet =
|
||||||
createOperatorFpSet(openStateWindowAggOptr, doStateWindowAgg, NULL, destroyStateWindowOperatorInfo, NULL);
|
createOperatorFpSet(openStateWindowAggOptr, doStateWindowAgg, NULL, destroyStateWindowOperatorInfo, NULL);
|
||||||
|
|
||||||
|
@ -2694,7 +2696,8 @@ SOperatorInfo* createSessionAggOperatorInfo(SOperatorInfo* downstream, SSessionW
|
||||||
goto _error;
|
goto _error;
|
||||||
}
|
}
|
||||||
|
|
||||||
setOperatorInfo(pOperator, "SessionWindowAggOperator", QUERY_NODE_PHYSICAL_PLAN_MERGE_SESSION, true, OP_NOT_OPENED, pInfo, pTaskInfo);
|
setOperatorInfo(pOperator, "SessionWindowAggOperator", QUERY_NODE_PHYSICAL_PLAN_MERGE_SESSION, true, OP_NOT_OPENED,
|
||||||
|
pInfo, pTaskInfo);
|
||||||
pOperator->fpSet =
|
pOperator->fpSet =
|
||||||
createOperatorFpSet(operatorDummyOpenFn, doSessionWindowAgg, NULL, destroySWindowOperatorInfo, NULL);
|
createOperatorFpSet(operatorDummyOpenFn, doSessionWindowAgg, NULL, destroySWindowOperatorInfo, NULL);
|
||||||
pOperator->pTaskInfo = pTaskInfo;
|
pOperator->pTaskInfo = pTaskInfo;
|
||||||
|
@ -3822,7 +3825,7 @@ static int32_t copyUpdateResult(SSHashObj* pStUpdated, SArray* pUpdated) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void doBuildDeleteDataBlock(SSHashObj* pStDeleted, SSDataBlock* pBlock, void** Ite) {
|
void doBuildDeleteDataBlock(SOperatorInfo* pOp, SSHashObj* pStDeleted, SSDataBlock* pBlock, void** Ite) {
|
||||||
blockDataCleanup(pBlock);
|
blockDataCleanup(pBlock);
|
||||||
int32_t size = tSimpleHashGetSize(pStDeleted);
|
int32_t size = tSimpleHashGetSize(pStDeleted);
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
|
@ -3848,6 +3851,26 @@ void doBuildDeleteDataBlock(SSHashObj* pStDeleted, SSDataBlock* pBlock, void** I
|
||||||
colDataAppendNULL(pCalStCol, pBlock->info.rows);
|
colDataAppendNULL(pCalStCol, pBlock->info.rows);
|
||||||
SColumnInfoData* pCalEdCol = taosArrayGet(pBlock->pDataBlock, CALCULATE_END_TS_COLUMN_INDEX);
|
SColumnInfoData* pCalEdCol = taosArrayGet(pBlock->pDataBlock, CALCULATE_END_TS_COLUMN_INDEX);
|
||||||
colDataAppendNULL(pCalEdCol, pBlock->info.rows);
|
colDataAppendNULL(pCalEdCol, pBlock->info.rows);
|
||||||
|
|
||||||
|
SHashObj* pGroupIdTbNameMap = NULL;
|
||||||
|
if (pOp->operatorType == QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_SESSION ||
|
||||||
|
pOp->operatorType == QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_SESSION) {
|
||||||
|
SStreamSessionAggOperatorInfo* pInfo = pOp->info;
|
||||||
|
pGroupIdTbNameMap = pInfo->pGroupIdTbNameMap;
|
||||||
|
} else if (pOp->operatorType == QUERY_NODE_PHYSICAL_PLAN_STREAM_STATE) {
|
||||||
|
SStreamStateAggOperatorInfo* pInfo = pOp->info;
|
||||||
|
pGroupIdTbNameMap = pInfo->pGroupIdTbNameMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* tbname = taosHashGet(pGroupIdTbNameMap, &res->groupId, sizeof(int64_t));
|
||||||
|
SColumnInfoData* pTableCol = taosArrayGet(pBlock->pDataBlock, TABLE_NAME_COLUMN_INDEX);
|
||||||
|
if (tbname == NULL) {
|
||||||
|
colDataAppendNULL(pTableCol, pBlock->info.rows);
|
||||||
|
} else {
|
||||||
|
char parTbName[VARSTR_HEADER_SIZE + TSDB_TABLE_NAME_LEN];
|
||||||
|
STR_WITH_MAXSIZE_TO_VARSTR(parTbName, tbname, sizeof(parTbName));
|
||||||
|
colDataAppend(pTableCol, pBlock->info.rows, (const char*)parTbName, false);
|
||||||
|
}
|
||||||
pBlock->info.rows += 1;
|
pBlock->info.rows += 1;
|
||||||
}
|
}
|
||||||
if ((*Ite) == NULL) {
|
if ((*Ite) == NULL) {
|
||||||
|
@ -3994,7 +4017,7 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) {
|
||||||
if (pOperator->status == OP_EXEC_DONE) {
|
if (pOperator->status == OP_EXEC_DONE) {
|
||||||
return NULL;
|
return NULL;
|
||||||
} else if (pOperator->status == OP_RES_TO_RETURN) {
|
} else if (pOperator->status == OP_RES_TO_RETURN) {
|
||||||
doBuildDeleteDataBlock(pInfo->pStDeleted, pInfo->pDelRes, &pInfo->pDelIterator);
|
doBuildDeleteDataBlock(pOperator, pInfo->pStDeleted, pInfo->pDelRes, &pInfo->pDelIterator);
|
||||||
if (pInfo->pDelRes->info.rows > 0) {
|
if (pInfo->pDelRes->info.rows > 0) {
|
||||||
printDataBlock(pInfo->pDelRes, IS_FINAL_OP(pInfo) ? "final session" : "single session");
|
printDataBlock(pInfo->pDelRes, IS_FINAL_OP(pInfo) ? "final session" : "single session");
|
||||||
return pInfo->pDelRes;
|
return pInfo->pDelRes;
|
||||||
|
@ -4099,7 +4122,7 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) {
|
||||||
taosMemoryFree(pBuf);
|
taosMemoryFree(pBuf);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
doBuildDeleteDataBlock(pInfo->pStDeleted, pInfo->pDelRes, &pInfo->pDelIterator);
|
doBuildDeleteDataBlock(pOperator, pInfo->pStDeleted, pInfo->pDelRes, &pInfo->pDelIterator);
|
||||||
if (pInfo->pDelRes->info.rows > 0) {
|
if (pInfo->pDelRes->info.rows > 0) {
|
||||||
printDataBlock(pInfo->pDelRes, IS_FINAL_OP(pInfo) ? "final session" : "single session");
|
printDataBlock(pInfo->pDelRes, IS_FINAL_OP(pInfo) ? "final session" : "single session");
|
||||||
return pInfo->pDelRes;
|
return pInfo->pDelRes;
|
||||||
|
@ -4223,7 +4246,7 @@ static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) {
|
||||||
return pBInfo->pRes;
|
return pBInfo->pRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
doBuildDeleteDataBlock(pInfo->pStDeleted, pInfo->pDelRes, &pInfo->pDelIterator);
|
doBuildDeleteDataBlock(pOperator, pInfo->pStDeleted, pInfo->pDelRes, &pInfo->pDelIterator);
|
||||||
if (pInfo->pDelRes->info.rows > 0) {
|
if (pInfo->pDelRes->info.rows > 0) {
|
||||||
printDataBlock(pInfo->pDelRes, "semi session delete");
|
printDataBlock(pInfo->pDelRes, "semi session delete");
|
||||||
return pInfo->pDelRes;
|
return pInfo->pDelRes;
|
||||||
|
@ -4303,7 +4326,7 @@ static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) {
|
||||||
return pBInfo->pRes;
|
return pBInfo->pRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
doBuildDeleteDataBlock(pInfo->pStDeleted, pInfo->pDelRes, &pInfo->pDelIterator);
|
doBuildDeleteDataBlock(pOperator, pInfo->pStDeleted, pInfo->pDelRes, &pInfo->pDelIterator);
|
||||||
if (pInfo->pDelRes->info.rows > 0) {
|
if (pInfo->pDelRes->info.rows > 0) {
|
||||||
printDataBlock(pInfo->pDelRes, "semi session delete");
|
printDataBlock(pInfo->pDelRes, "semi session delete");
|
||||||
return pInfo->pDelRes;
|
return pInfo->pDelRes;
|
||||||
|
@ -4555,7 +4578,7 @@ static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) {
|
||||||
SOptrBasicInfo* pBInfo = &pInfo->binfo;
|
SOptrBasicInfo* pBInfo = &pInfo->binfo;
|
||||||
int64_t maxTs = INT64_MIN;
|
int64_t maxTs = INT64_MIN;
|
||||||
if (pOperator->status == OP_RES_TO_RETURN) {
|
if (pOperator->status == OP_RES_TO_RETURN) {
|
||||||
doBuildDeleteDataBlock(pInfo->pSeDeleted, pInfo->pDelRes, &pInfo->pDelIterator);
|
doBuildDeleteDataBlock(pOperator, pInfo->pSeDeleted, pInfo->pDelRes, &pInfo->pDelIterator);
|
||||||
if (pInfo->pDelRes->info.rows > 0) {
|
if (pInfo->pDelRes->info.rows > 0) {
|
||||||
printDataBlock(pInfo->pDelRes, "single state delete");
|
printDataBlock(pInfo->pDelRes, "single state delete");
|
||||||
return pInfo->pDelRes;
|
return pInfo->pDelRes;
|
||||||
|
@ -4622,7 +4645,7 @@ static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) {
|
||||||
initGroupResInfoFromArrayList(&pInfo->groupResInfo, pUpdated);
|
initGroupResInfoFromArrayList(&pInfo->groupResInfo, pUpdated);
|
||||||
blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity);
|
blockDataEnsureCapacity(pInfo->binfo.pRes, pOperator->resultInfo.capacity);
|
||||||
|
|
||||||
doBuildDeleteDataBlock(pInfo->pSeDeleted, pInfo->pDelRes, &pInfo->pDelIterator);
|
doBuildDeleteDataBlock(pOperator, pInfo->pSeDeleted, pInfo->pDelRes, &pInfo->pDelIterator);
|
||||||
if (pInfo->pDelRes->info.rows > 0) {
|
if (pInfo->pDelRes->info.rows > 0) {
|
||||||
printDataBlock(pInfo->pDelRes, "single state delete");
|
printDataBlock(pInfo->pDelRes, "single state delete");
|
||||||
return pInfo->pDelRes;
|
return pInfo->pDelRes;
|
||||||
|
@ -4698,7 +4721,8 @@ SOperatorInfo* createStreamStateAggOperatorInfo(SOperatorInfo* downstream, SPhys
|
||||||
pInfo->pGroupIdTbNameMap =
|
pInfo->pGroupIdTbNameMap =
|
||||||
taosHashInit(1024, taosGetDefaultHashFunction(TSDB_DATA_TYPE_UBIGINT), false, HASH_NO_LOCK);
|
taosHashInit(1024, taosGetDefaultHashFunction(TSDB_DATA_TYPE_UBIGINT), false, HASH_NO_LOCK);
|
||||||
|
|
||||||
setOperatorInfo(pOperator, "StreamStateAggOperator", QUERY_NODE_PHYSICAL_PLAN_STREAM_STATE, true, OP_NOT_OPENED, pInfo, pTaskInfo);
|
setOperatorInfo(pOperator, "StreamStateAggOperator", QUERY_NODE_PHYSICAL_PLAN_STREAM_STATE, true, OP_NOT_OPENED,
|
||||||
|
pInfo, pTaskInfo);
|
||||||
pOperator->fpSet =
|
pOperator->fpSet =
|
||||||
createOperatorFpSet(operatorDummyOpenFn, doStreamStateAgg, NULL, destroyStreamStateOperatorInfo, NULL);
|
createOperatorFpSet(operatorDummyOpenFn, doStreamStateAgg, NULL, destroyStreamStateOperatorInfo, NULL);
|
||||||
initDownStream(downstream, &pInfo->streamAggSup, pInfo->twAggSup.waterMark, pOperator->operatorType,
|
initDownStream(downstream, &pInfo->streamAggSup, pInfo->twAggSup.waterMark, pOperator->operatorType,
|
||||||
|
@ -4973,7 +4997,8 @@ SOperatorInfo* createMergeAlignedIntervalOperatorInfo(SOperatorInfo* downstream,
|
||||||
|
|
||||||
initResultRowInfo(&iaInfo->binfo.resultRowInfo);
|
initResultRowInfo(&iaInfo->binfo.resultRowInfo);
|
||||||
blockDataEnsureCapacity(iaInfo->binfo.pRes, pOperator->resultInfo.capacity);
|
blockDataEnsureCapacity(iaInfo->binfo.pRes, pOperator->resultInfo.capacity);
|
||||||
setOperatorInfo(pOperator, "TimeMergeAlignedIntervalAggOperator", QUERY_NODE_PHYSICAL_PLAN_MERGE_ALIGNED_INTERVAL, false, OP_NOT_OPENED, miaInfo, pTaskInfo);
|
setOperatorInfo(pOperator, "TimeMergeAlignedIntervalAggOperator", QUERY_NODE_PHYSICAL_PLAN_MERGE_ALIGNED_INTERVAL,
|
||||||
|
false, OP_NOT_OPENED, miaInfo, pTaskInfo);
|
||||||
|
|
||||||
pOperator->fpSet =
|
pOperator->fpSet =
|
||||||
createOperatorFpSet(operatorDummyOpenFn, mergeAlignedIntervalAgg, NULL, destroyMAIOperatorInfo, NULL);
|
createOperatorFpSet(operatorDummyOpenFn, mergeAlignedIntervalAgg, NULL, destroyMAIOperatorInfo, NULL);
|
||||||
|
@ -5279,7 +5304,8 @@ SOperatorInfo* createMergeIntervalOperatorInfo(SOperatorInfo* downstream, SMerge
|
||||||
}
|
}
|
||||||
|
|
||||||
initResultRowInfo(&pIntervalInfo->binfo.resultRowInfo);
|
initResultRowInfo(&pIntervalInfo->binfo.resultRowInfo);
|
||||||
setOperatorInfo(pOperator, "TimeMergeIntervalAggOperator", QUERY_NODE_PHYSICAL_PLAN_MERGE_INTERVAL, false, OP_NOT_OPENED, pMergeIntervalInfo, pTaskInfo);
|
setOperatorInfo(pOperator, "TimeMergeIntervalAggOperator", QUERY_NODE_PHYSICAL_PLAN_MERGE_INTERVAL, false,
|
||||||
|
OP_NOT_OPENED, pMergeIntervalInfo, pTaskInfo);
|
||||||
pOperator->fpSet =
|
pOperator->fpSet =
|
||||||
createOperatorFpSet(operatorDummyOpenFn, doMergeIntervalAgg, NULL, destroyMergeIntervalOperatorInfo, NULL);
|
createOperatorFpSet(operatorDummyOpenFn, doMergeIntervalAgg, NULL, destroyMergeIntervalOperatorInfo, NULL);
|
||||||
|
|
||||||
|
@ -5509,9 +5535,10 @@ SOperatorInfo* createStreamIntervalOperatorInfo(SOperatorInfo* downstream, SPhys
|
||||||
pInfo->pGroupIdTbNameMap =
|
pInfo->pGroupIdTbNameMap =
|
||||||
taosHashInit(1024, taosGetDefaultHashFunction(TSDB_DATA_TYPE_UBIGINT), false, HASH_NO_LOCK);
|
taosHashInit(1024, taosGetDefaultHashFunction(TSDB_DATA_TYPE_UBIGINT), false, HASH_NO_LOCK);
|
||||||
|
|
||||||
setOperatorInfo(pOperator, "StreamIntervalOperator", QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL, true, OP_NOT_OPENED, pInfo, pTaskInfo);
|
setOperatorInfo(pOperator, "StreamIntervalOperator", QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL, true, OP_NOT_OPENED,
|
||||||
pOperator->fpSet = createOperatorFpSet(operatorDummyOpenFn, doStreamIntervalAgg, NULL,
|
pInfo, pTaskInfo);
|
||||||
destroyStreamFinalIntervalOperatorInfo, NULL);
|
pOperator->fpSet =
|
||||||
|
createOperatorFpSet(operatorDummyOpenFn, doStreamIntervalAgg, NULL, destroyStreamFinalIntervalOperatorInfo, NULL);
|
||||||
|
|
||||||
initIntervalDownStream(downstream, pPhyNode->type, &pInfo->aggSup, &pInfo->interval, &pInfo->twAggSup);
|
initIntervalDownStream(downstream, pPhyNode->type, &pInfo->aggSup, &pInfo->interval, &pInfo->twAggSup);
|
||||||
code = appendDownstream(pOperator, &downstream, 1);
|
code = appendDownstream(pOperator, &downstream, 1);
|
||||||
|
|
|
@ -424,8 +424,9 @@ SNode* nodesMakeNode(ENodeType type) {
|
||||||
case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
|
case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
|
||||||
case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
|
case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
|
||||||
case QUERY_NODE_SHOW_TAGS_STMT:
|
case QUERY_NODE_SHOW_TAGS_STMT:
|
||||||
case QUERY_NODE_SHOW_TABLE_TAGS_STMT:
|
|
||||||
return makeNode(type, sizeof(SShowStmt));
|
return makeNode(type, sizeof(SShowStmt));
|
||||||
|
case QUERY_NODE_SHOW_TABLE_TAGS_STMT:
|
||||||
|
return makeNode(type, sizeof(SShowTableTagsStmt));
|
||||||
case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
|
case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
|
||||||
return makeNode(type, sizeof(SShowDnodeVariablesStmt));
|
return makeNode(type, sizeof(SShowDnodeVariablesStmt));
|
||||||
case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
|
case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
|
||||||
|
@ -942,13 +943,19 @@ void nodesDestroyNode(SNode* pNode) {
|
||||||
case QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT:
|
case QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT:
|
||||||
case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
|
case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
|
||||||
case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
|
case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
|
||||||
case QUERY_NODE_SHOW_TAGS_STMT:
|
case QUERY_NODE_SHOW_TAGS_STMT: {
|
||||||
case QUERY_NODE_SHOW_TABLE_TAGS_STMT: {
|
|
||||||
SShowStmt* pStmt = (SShowStmt*)pNode;
|
SShowStmt* pStmt = (SShowStmt*)pNode;
|
||||||
nodesDestroyNode(pStmt->pDbName);
|
nodesDestroyNode(pStmt->pDbName);
|
||||||
nodesDestroyNode(pStmt->pTbName);
|
nodesDestroyNode(pStmt->pTbName);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case QUERY_NODE_SHOW_TABLE_TAGS_STMT: {
|
||||||
|
SShowTableTagsStmt* pStmt = (SShowTableTagsStmt*)pNode;
|
||||||
|
nodesDestroyNode(pStmt->pDbName);
|
||||||
|
nodesDestroyNode(pStmt->pTbName);
|
||||||
|
nodesDestroyList(pStmt->pTags);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
|
case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
|
||||||
nodesDestroyNode(((SShowDnodeVariablesStmt*)pNode)->pDnodeId);
|
nodesDestroyNode(((SShowDnodeVariablesStmt*)pNode)->pDnodeId);
|
||||||
nodesDestroyNode(((SShowDnodeVariablesStmt*)pNode)->pLikePattern);
|
nodesDestroyNode(((SShowDnodeVariablesStmt*)pNode)->pLikePattern);
|
||||||
|
|
|
@ -178,6 +178,7 @@ SNode* createShowCreateTableStmt(SAstCreateContext* pCxt, ENodeType type, SNode*
|
||||||
SNode* createShowTableDistributedStmt(SAstCreateContext* pCxt, SNode* pRealTable);
|
SNode* createShowTableDistributedStmt(SAstCreateContext* pCxt, SNode* pRealTable);
|
||||||
SNode* createShowDnodeVariablesStmt(SAstCreateContext* pCxt, SNode* pDnodeId, SNode* pLikePattern);
|
SNode* createShowDnodeVariablesStmt(SAstCreateContext* pCxt, SNode* pDnodeId, SNode* pLikePattern);
|
||||||
SNode* createShowVnodesStmt(SAstCreateContext* pCxt, SNode* pDnodeId, SNode* pDnodeEndpoint);
|
SNode* createShowVnodesStmt(SAstCreateContext* pCxt, SNode* pDnodeId, SNode* pDnodeEndpoint);
|
||||||
|
SNode* createShowTableTagsStmt(SAstCreateContext* pCxt, SNode* pTbName, SNode* pDbName, SNodeList* pTags);
|
||||||
SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo);
|
SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo);
|
||||||
SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t alterType, const SToken* pVal);
|
SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t alterType, const SToken* pVal);
|
||||||
SNode* createDropUserStmt(SAstCreateContext* pCxt, SToken* pUserName);
|
SNode* createDropUserStmt(SAstCreateContext* pCxt, SToken* pUserName);
|
||||||
|
|
|
@ -426,7 +426,7 @@ cmd ::= SHOW TABLE DISTRIBUTED full_table_name(A).
|
||||||
cmd ::= SHOW CONSUMERS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONSUMERS_STMT); }
|
cmd ::= SHOW CONSUMERS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONSUMERS_STMT); }
|
||||||
cmd ::= SHOW SUBSCRIPTIONS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT); }
|
cmd ::= SHOW SUBSCRIPTIONS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT); }
|
||||||
cmd ::= SHOW TAGS FROM table_name_cond(A) from_db_opt(B). { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, B, A, OP_TYPE_EQUAL); }
|
cmd ::= SHOW TAGS FROM table_name_cond(A) from_db_opt(B). { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, B, A, OP_TYPE_EQUAL); }
|
||||||
cmd ::= SHOW TABLE TAGS FROM table_name_cond(A) from_db_opt(B). { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLE_TAGS_STMT, B, A, OP_TYPE_EQUAL); }
|
cmd ::= SHOW TABLE TAGS tag_list_opt(C) FROM table_name_cond(A) from_db_opt(B). { pCxt->pRootNode = createShowTableTagsStmt(pCxt, A, B, C); }
|
||||||
cmd ::= SHOW VNODES NK_INTEGER(A). { pCxt->pRootNode = createShowVnodesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A), NULL); }
|
cmd ::= SHOW VNODES NK_INTEGER(A). { pCxt->pRootNode = createShowVnodesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A), NULL); }
|
||||||
cmd ::= SHOW VNODES NK_STRING(A). { pCxt->pRootNode = createShowVnodesStmt(pCxt, NULL, createValueNode(pCxt, TSDB_DATA_TYPE_VARCHAR, &A)); }
|
cmd ::= SHOW VNODES NK_STRING(A). { pCxt->pRootNode = createShowVnodesStmt(pCxt, NULL, createValueNode(pCxt, TSDB_DATA_TYPE_VARCHAR, &A)); }
|
||||||
|
|
||||||
|
@ -441,6 +441,18 @@ table_name_cond(A) ::= table_name(B).
|
||||||
from_db_opt(A) ::= . { A = createDefaultDatabaseCondValue(pCxt); }
|
from_db_opt(A) ::= . { A = createDefaultDatabaseCondValue(pCxt); }
|
||||||
from_db_opt(A) ::= FROM db_name(B). { A = createIdentifierValueNode(pCxt, &B); }
|
from_db_opt(A) ::= FROM db_name(B). { A = createIdentifierValueNode(pCxt, &B); }
|
||||||
|
|
||||||
|
%type tag_list_opt { SNodeList* }
|
||||||
|
%destructor tag_list_opt { nodesDestroyList($$); }
|
||||||
|
tag_list_opt(A) ::= . { A = NULL; }
|
||||||
|
tag_list_opt(A) ::= tag_item(B). { A = createNodeList(pCxt, B); }
|
||||||
|
tag_list_opt(A) ::= tag_list_opt(B) NK_COMMA tag_item(C). { A = addNodeToList(pCxt, B, C); }
|
||||||
|
|
||||||
|
tag_item(A) ::= TBNAME(B). { A = setProjectionAlias(pCxt, createFunctionNode(pCxt, &B, NULL), &B); }
|
||||||
|
tag_item(A) ::= QTAGS(B). { A = createFunctionNode(pCxt, &B, NULL); }
|
||||||
|
tag_item(A) ::= column_name(B). { A = createColumnNode(pCxt, NULL, &B); }
|
||||||
|
tag_item(A) ::= column_name(B) column_alias(C). { A = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &B), &C); }
|
||||||
|
tag_item(A) ::= column_name(B) AS column_alias(C). { A = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &B), &C); }
|
||||||
|
|
||||||
/************************************************ create index ********************************************************/
|
/************************************************ create index ********************************************************/
|
||||||
cmd ::= CREATE SMA INDEX not_exists_opt(D)
|
cmd ::= CREATE SMA INDEX not_exists_opt(D)
|
||||||
full_table_name(A) ON full_table_name(B) index_options(C). { pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_SMA, D, A, B, NULL, C); }
|
full_table_name(A) ON full_table_name(B) index_options(C). { pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_SMA, D, A, B, NULL, C); }
|
||||||
|
|
|
@ -1390,6 +1390,21 @@ SNode* createShowVnodesStmt(SAstCreateContext* pCxt, SNode* pDnodeId, SNode* pDn
|
||||||
return (SNode*)pStmt;
|
return (SNode*)pStmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SNode* createShowTableTagsStmt(SAstCreateContext* pCxt, SNode* pTbName, SNode* pDbName, SNodeList* pTags) {
|
||||||
|
CHECK_PARSER_STATUS(pCxt);
|
||||||
|
if (NULL == pDbName) {
|
||||||
|
snprintf(pCxt->pQueryCxt->pMsg, pCxt->pQueryCxt->msgLen, "database not specified");
|
||||||
|
pCxt->errCode = TSDB_CODE_PAR_SYNTAX_ERROR;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
SShowTableTagsStmt* pStmt = (SShowTableTagsStmt*)nodesMakeNode(QUERY_NODE_SHOW_TABLE_TAGS_STMT);
|
||||||
|
CHECK_OUT_OF_MEM(pStmt);
|
||||||
|
pStmt->pDbName = pDbName;
|
||||||
|
pStmt->pTbName = pTbName;
|
||||||
|
pStmt->pTags = pTags;
|
||||||
|
return (SNode*)pStmt;
|
||||||
|
}
|
||||||
|
|
||||||
SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo) {
|
SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const SToken* pPassword, int8_t sysinfo) {
|
||||||
CHECK_PARSER_STATUS(pCxt);
|
CHECK_PARSER_STATUS(pCxt);
|
||||||
char password[TSDB_USET_PASSWORD_LEN] = {0};
|
char password[TSDB_USET_PASSWORD_LEN] = {0};
|
||||||
|
|
|
@ -440,7 +440,7 @@ static int32_t collectMetaKeyFromShowTags(SCollectMetaKeyCxt* pCxt, SShowStmt* p
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t collectMetaKeyFromShowStableTags(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
|
static int32_t collectMetaKeyFromShowStableTags(SCollectMetaKeyCxt* pCxt, SShowTableTagsStmt* pStmt) {
|
||||||
return collectMetaKeyFromRealTableImpl(pCxt, ((SValueNode*)pStmt->pDbName)->literal,
|
return collectMetaKeyFromRealTableImpl(pCxt, ((SValueNode*)pStmt->pDbName)->literal,
|
||||||
((SValueNode*)pStmt->pTbName)->literal, AUTH_TYPE_READ);
|
((SValueNode*)pStmt->pTbName)->literal, AUTH_TYPE_READ);
|
||||||
}
|
}
|
||||||
|
@ -627,7 +627,7 @@ static int32_t collectMetaKeyFromQuery(SCollectMetaKeyCxt* pCxt, SNode* pStmt) {
|
||||||
case QUERY_NODE_SHOW_TAGS_STMT:
|
case QUERY_NODE_SHOW_TAGS_STMT:
|
||||||
return collectMetaKeyFromShowTags(pCxt, (SShowStmt*)pStmt);
|
return collectMetaKeyFromShowTags(pCxt, (SShowStmt*)pStmt);
|
||||||
case QUERY_NODE_SHOW_TABLE_TAGS_STMT:
|
case QUERY_NODE_SHOW_TABLE_TAGS_STMT:
|
||||||
return collectMetaKeyFromShowStableTags(pCxt, (SShowStmt*)pStmt);
|
return collectMetaKeyFromShowStableTags(pCxt, (SShowTableTagsStmt*)pStmt);
|
||||||
case QUERY_NODE_SHOW_USERS_STMT:
|
case QUERY_NODE_SHOW_USERS_STMT:
|
||||||
return collectMetaKeyFromShowUsers(pCxt, (SShowStmt*)pStmt);
|
return collectMetaKeyFromShowUsers(pCxt, (SShowStmt*)pStmt);
|
||||||
case QUERY_NODE_SHOW_LICENCES_STMT:
|
case QUERY_NODE_SHOW_LICENCES_STMT:
|
||||||
|
|
|
@ -6288,21 +6288,29 @@ static SNode* createTagsFunction() {
|
||||||
return (SNode*)pFunc;
|
return (SNode*)pFunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t createShowTableTagsProjections(SNodeList** pProjections, SNodeList** pTags) {
|
||||||
|
if (NULL != *pTags) {
|
||||||
|
TSWAP(*pProjections, *pTags);
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
int32_t code = nodesListMakeStrictAppend(pProjections, createTbnameFunction());
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = nodesListStrictAppend(*pProjections, createTagsFunction());
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
static int32_t rewriteShowStableTags(STranslateContext* pCxt, SQuery* pQuery) {
|
static int32_t rewriteShowStableTags(STranslateContext* pCxt, SQuery* pQuery) {
|
||||||
const char* cols[] = {"tbname", "_tags"};
|
SShowTableTagsStmt* pShow = (SShowTableTagsStmt*)pQuery->pRoot;
|
||||||
SShowStmt* pShow = (SShowStmt*)pQuery->pRoot;
|
|
||||||
SSelectStmt* pSelect = NULL;
|
SSelectStmt* pSelect = NULL;
|
||||||
int32_t code = createSimpleSelectStmt(((SValueNode*)pShow->pDbName)->literal, ((SValueNode*)pShow->pTbName)->literal,
|
int32_t code = createSimpleSelectStmt(((SValueNode*)pShow->pDbName)->literal, ((SValueNode*)pShow->pTbName)->literal,
|
||||||
-1, NULL, &pSelect);
|
-1, NULL, &pSelect);
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = nodesListMakeStrictAppend(&pSelect->pProjectionList, createTbnameFunction());
|
code = createShowTableTagsProjections(&pSelect->pProjectionList, &pShow->pTags);
|
||||||
}
|
}
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = nodesListMakeStrictAppend(&pSelect->pProjectionList, createTagsFunction());
|
|
||||||
}
|
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
|
||||||
pSelect->isDistinct = true;
|
|
||||||
pQuery->showRewrite = true;
|
pQuery->showRewrite = true;
|
||||||
|
pSelect->tagScan = true;
|
||||||
nodesDestroyNode(pQuery->pRoot);
|
nodesDestroyNode(pQuery->pRoot);
|
||||||
pQuery->pRoot = (SNode*)pSelect;
|
pQuery->pRoot = (SNode*)pSelect;
|
||||||
} else {
|
} else {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -192,6 +192,16 @@ TEST_F(ParserShowToUseTest, showTableDistributed) {
|
||||||
run("SHOW TABLE DISTRIBUTED st1");
|
run("SHOW TABLE DISTRIBUTED st1");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(ParserShowToUseTest, showTableTags) {
|
||||||
|
useDb("root", "test");
|
||||||
|
|
||||||
|
run("SHOW TABLE TAGS FROM st1");
|
||||||
|
|
||||||
|
run("SHOW TABLE TAGS tag1, tag2 FROM st1");
|
||||||
|
|
||||||
|
run("SHOW TABLE TAGS TBNAME, _TAGS, tag3 FROM st1");
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(ParserShowToUseTest, showTags) {
|
TEST_F(ParserShowToUseTest, showTags) {
|
||||||
useDb("root", "test");
|
useDb("root", "test");
|
||||||
|
|
||||||
|
|
|
@ -189,7 +189,7 @@ static int32_t createSelectRootLogicNode(SLogicPlanContext* pCxt, SSelectStmt* p
|
||||||
}
|
}
|
||||||
|
|
||||||
static EScanType getScanType(SLogicPlanContext* pCxt, SNodeList* pScanPseudoCols, SNodeList* pScanCols,
|
static EScanType getScanType(SLogicPlanContext* pCxt, SNodeList* pScanPseudoCols, SNodeList* pScanCols,
|
||||||
int8_t tableType) {
|
int8_t tableType, bool tagScan) {
|
||||||
if (pCxt->pPlanCxt->topicQuery || pCxt->pPlanCxt->streamQuery) {
|
if (pCxt->pPlanCxt->topicQuery || pCxt->pPlanCxt->streamQuery) {
|
||||||
return SCAN_TYPE_STREAM;
|
return SCAN_TYPE_STREAM;
|
||||||
}
|
}
|
||||||
|
@ -198,6 +198,10 @@ static EScanType getScanType(SLogicPlanContext* pCxt, SNodeList* pScanPseudoCols
|
||||||
return SCAN_TYPE_SYSTEM_TABLE;
|
return SCAN_TYPE_SYSTEM_TABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tagScan) {
|
||||||
|
return SCAN_TYPE_TAG;
|
||||||
|
}
|
||||||
|
|
||||||
if (NULL == pScanCols) {
|
if (NULL == pScanCols) {
|
||||||
return NULL == pScanPseudoCols
|
return NULL == pScanPseudoCols
|
||||||
? SCAN_TYPE_TABLE
|
? SCAN_TYPE_TABLE
|
||||||
|
@ -310,7 +314,7 @@ static int32_t createScanLogicNode(SLogicPlanContext* pCxt, SSelectStmt* pSelect
|
||||||
code = rewriteExprsForSelect(pScan->pScanPseudoCols, pSelect, SQL_CLAUSE_FROM);
|
code = rewriteExprsForSelect(pScan->pScanPseudoCols, pSelect, SQL_CLAUSE_FROM);
|
||||||
}
|
}
|
||||||
|
|
||||||
pScan->scanType = getScanType(pCxt, pScan->pScanPseudoCols, pScan->pScanCols, pScan->tableType);
|
pScan->scanType = getScanType(pCxt, pScan->pScanPseudoCols, pScan->pScanCols, pScan->tableType, pSelect->tagScan);
|
||||||
|
|
||||||
if (NULL != pScan->pScanCols) {
|
if (NULL != pScan->pScanCols) {
|
||||||
pScan->hasNormalCols = true;
|
pScan->hasNormalCols = true;
|
||||||
|
|
|
@ -187,11 +187,9 @@ int32_t streamMetaRemoveTask(SStreamMeta* pMeta, int32_t taskId) {
|
||||||
while (1) {
|
while (1) {
|
||||||
int8_t schedStatus =
|
int8_t schedStatus =
|
||||||
atomic_val_compare_exchange_8(&pTask->schedStatus, TASK_SCHED_STATUS__INACTIVE, TASK_SCHED_STATUS__DROPPING);
|
atomic_val_compare_exchange_8(&pTask->schedStatus, TASK_SCHED_STATUS__INACTIVE, TASK_SCHED_STATUS__DROPPING);
|
||||||
if (schedStatus == TASK_SCHED_STATUS__INACTIVE) {
|
if (schedStatus != TASK_SCHED_STATUS__ACTIVE) {
|
||||||
tFreeSStreamTask(pTask);
|
tFreeSStreamTask(pTask);
|
||||||
break;
|
break;
|
||||||
} else if (schedStatus == TASK_SCHED_STATUS__DROPPING) {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
taosMsleep(10);
|
taosMsleep(10);
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,8 +94,8 @@ typedef void* queue[2];
|
||||||
/* Return the structure holding the given element. */
|
/* Return the structure holding the given element. */
|
||||||
#define QUEUE_DATA(e, type, field) ((type*)((void*)((char*)(e)-offsetof(type, field))))
|
#define QUEUE_DATA(e, type, field) ((type*)((void*)((char*)(e)-offsetof(type, field))))
|
||||||
|
|
||||||
#define TRANS_RETRY_COUNT_LIMIT 100 // retry count limit
|
//#define TRANS_RETRY_COUNT_LIMIT 100 // retry count limit
|
||||||
#define TRANS_RETRY_INTERVAL 15 // retry interval (ms)
|
//#define TRANS_RETRY_INTERVAL 15 // retry interval (ms)
|
||||||
#define TRANS_CONN_TIMEOUT 3 // connect timeout (s)
|
#define TRANS_CONN_TIMEOUT 3 // connect timeout (s)
|
||||||
#define TRANS_READ_TIMEOUT 3000 // read timeout (ms)
|
#define TRANS_READ_TIMEOUT 3000 // read timeout (ms)
|
||||||
#define TRANS_PACKET_LIMIT 1024 * 1024 * 512
|
#define TRANS_PACKET_LIMIT 1024 * 1024 * 512
|
||||||
|
|
|
@ -49,6 +49,8 @@ typedef struct {
|
||||||
|
|
||||||
int32_t compressSize; // -1: no compress, 0 : all data compressed, size: compress data if larger than size
|
int32_t compressSize; // -1: no compress, 0 : all data compressed, size: compress data if larger than size
|
||||||
int8_t encryption; // encrypt or not
|
int8_t encryption; // encrypt or not
|
||||||
|
int32_t retryLimit; // retry limit
|
||||||
|
int32_t retryInterval; // retry interval ms
|
||||||
|
|
||||||
void (*cfp)(void* parent, SRpcMsg*, SEpSet*);
|
void (*cfp)(void* parent, SRpcMsg*, SEpSet*);
|
||||||
bool (*retry)(int32_t code, tmsg_t msgType);
|
bool (*retry)(int32_t code, tmsg_t msgType);
|
||||||
|
|
|
@ -48,6 +48,8 @@ void* rpcOpen(const SRpcInit* pInit) {
|
||||||
|
|
||||||
pRpc->compressSize = pInit->compressSize;
|
pRpc->compressSize = pInit->compressSize;
|
||||||
pRpc->encryption = pInit->encryption;
|
pRpc->encryption = pInit->encryption;
|
||||||
|
pRpc->retryLimit = pInit->retryLimit;
|
||||||
|
pRpc->retryInterval = pInit->retryInterval;
|
||||||
|
|
||||||
// register callback handle
|
// register callback handle
|
||||||
pRpc->cfp = pInit->cfp;
|
pRpc->cfp = pInit->cfp;
|
||||||
|
|
|
@ -1288,6 +1288,7 @@ static void doCloseIdleConn(void* param) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cliSchedMsgToNextNode(SCliMsg* pMsg, SCliThrd* pThrd) {
|
static void cliSchedMsgToNextNode(SCliMsg* pMsg, SCliThrd* pThrd) {
|
||||||
|
STrans* pTransInst = pThrd->pTransInst;
|
||||||
STransConnCtx* pCtx = pMsg->ctx;
|
STransConnCtx* pCtx = pMsg->ctx;
|
||||||
|
|
||||||
STraceId* trace = &pMsg->msg.info.traceId;
|
STraceId* trace = &pMsg->msg.info.traceId;
|
||||||
|
@ -1299,7 +1300,7 @@ static void cliSchedMsgToNextNode(SCliMsg* pMsg, SCliThrd* pThrd) {
|
||||||
STaskArg* arg = taosMemoryMalloc(sizeof(STaskArg));
|
STaskArg* arg = taosMemoryMalloc(sizeof(STaskArg));
|
||||||
arg->param1 = pMsg;
|
arg->param1 = pMsg;
|
||||||
arg->param2 = pThrd;
|
arg->param2 = pThrd;
|
||||||
transDQSched(pThrd->delayQueue, doDelayTask, arg, TRANS_RETRY_INTERVAL);
|
transDQSched(pThrd->delayQueue, doDelayTask, arg, pTransInst->retryInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE void cliCompareAndSwap(int8_t* val, int8_t exp, int8_t newVal) {
|
FORCE_INLINE void cliCompareAndSwap(int8_t* val, int8_t exp, int8_t newVal) {
|
||||||
|
@ -1351,7 +1352,7 @@ int cliAppCb(SCliConn* pConn, STransMsg* pResp, SCliMsg* pMsg) {
|
||||||
pMsg->sent = 0;
|
pMsg->sent = 0;
|
||||||
pCtx->retryCnt += 1;
|
pCtx->retryCnt += 1;
|
||||||
if (code == TSDB_CODE_RPC_NETWORK_UNAVAIL || code == TSDB_CODE_RPC_BROKEN_LINK) {
|
if (code == TSDB_CODE_RPC_NETWORK_UNAVAIL || code == TSDB_CODE_RPC_BROKEN_LINK) {
|
||||||
cliCompareAndSwap(&pCtx->retryLimit, TRANS_RETRY_COUNT_LIMIT, EPSET_GET_SIZE(&pCtx->epSet) * 3);
|
cliCompareAndSwap(&pCtx->retryLimit, pTransInst->retryLimit, EPSET_GET_SIZE(&pCtx->epSet) * 3);
|
||||||
if (pCtx->retryCnt < pCtx->retryLimit) {
|
if (pCtx->retryCnt < pCtx->retryLimit) {
|
||||||
transUnrefCliHandle(pConn);
|
transUnrefCliHandle(pConn);
|
||||||
EPSET_FORWARD_INUSE(&pCtx->epSet);
|
EPSET_FORWARD_INUSE(&pCtx->epSet);
|
||||||
|
@ -1360,7 +1361,7 @@ int cliAppCb(SCliConn* pConn, STransMsg* pResp, SCliMsg* pMsg) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
cliCompareAndSwap(&pCtx->retryLimit, TRANS_RETRY_COUNT_LIMIT, TRANS_RETRY_COUNT_LIMIT);
|
cliCompareAndSwap(&pCtx->retryLimit, pTransInst->retryLimit, pTransInst->retryLimit);
|
||||||
if (pCtx->retryCnt < pCtx->retryLimit) {
|
if (pCtx->retryCnt < pCtx->retryLimit) {
|
||||||
if (pResp->contLen == 0) {
|
if (pResp->contLen == 0) {
|
||||||
EPSET_FORWARD_INUSE(&pCtx->epSet);
|
EPSET_FORWARD_INUSE(&pCtx->epSet);
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
,,y,unit-test,bash test.sh
|
,,y,unit-test,bash test.sh
|
||||||
|
|
||||||
#tsim test
|
#tsim test
|
||||||
,,y,script,./test.sh -f tsim/user/basic.sim
|
,,,script,./test.sh -f tsim/user/basic.sim
|
||||||
,,y,script,./test.sh -f tsim/user/password.sim
|
,,,script,./test.sh -f tsim/user/password.sim
|
||||||
,,,script,./test.sh -f tsim/user/privilege_db.sim
|
,,,script,./test.sh -f tsim/user/privilege_db.sim
|
||||||
,,,script,./test.sh -f tsim/user/privilege_sysinfo.sim
|
,,,script,./test.sh -f tsim/user/privilege_sysinfo.sim
|
||||||
,,,script,./test.sh -f tsim/db/alter_option.sim
|
,,,script,./test.sh -f tsim/db/alter_option.sim
|
||||||
|
|
|
@ -54,7 +54,7 @@ fi
|
||||||
date
|
date
|
||||||
docker run \
|
docker run \
|
||||||
-v $REP_MOUNT_PARAM \
|
-v $REP_MOUNT_PARAM \
|
||||||
--rm --ulimit core=-1 taos_test:v1.0 sh -c "cd $REP_DIR;rm -rf debug;mkdir -p debug;cd debug;cmake .. -DBUILD_HTTP=false -DBUILD_TOOLS=true -DBUILD_TEST=true -DWEBSOCKET=true;make -j $THREAD_COUNT"
|
--rm --ulimit core=-1 taos_test:v1.0 sh -c "cd $REP_DIR;rm -rf debug;mkdir -p debug;cd debug;cmake .. -DBUILD_HTTP=false -DBUILD_TOOLS=true -DBUILD_TEST=true -DWEBSOCKET=true;make -j $THREAD_COUNT || exit 1"
|
||||||
|
|
||||||
if [[ -d ${WORKDIR}/debugNoSan ]] ;then
|
if [[ -d ${WORKDIR}/debugNoSan ]] ;then
|
||||||
echo "delete ${WORKDIR}/debugNoSan"
|
echo "delete ${WORKDIR}/debugNoSan"
|
||||||
|
@ -69,7 +69,7 @@ mv ${REP_REAL_PATH}/debug ${WORKDIR}/debugNoSan
|
||||||
date
|
date
|
||||||
docker run \
|
docker run \
|
||||||
-v $REP_MOUNT_PARAM \
|
-v $REP_MOUNT_PARAM \
|
||||||
--rm --ulimit core=-1 taos_test:v1.0 sh -c "cd $REP_DIR;rm -rf debug;mkdir -p debug;cd debug;cmake .. -DBUILD_HTTP=false -DBUILD_TOOLS=true -DBUILD_TEST=true -DWEBSOCKET=true -DSANITIZER=true;make -j $THREAD_COUNT"
|
--rm --ulimit core=-1 taos_test:v1.0 sh -c "cd $REP_DIR;rm -rf debug;mkdir -p debug;cd debug;cmake .. -DBUILD_HTTP=false -DBUILD_TOOLS=true -DBUILD_TEST=true -DWEBSOCKET=true -DSANITIZER=true;make -j $THREAD_COUNT || exit 1 "
|
||||||
|
|
||||||
mv ${REP_REAL_PATH}/debug ${WORKDIR}/debugSan
|
mv ${REP_REAL_PATH}/debug ${WORKDIR}/debugSan
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set +e
|
||||||
|
#set -x
|
||||||
|
|
||||||
|
SCRIPT_DIR=`dirname $0`
|
||||||
|
cd $SCRIPT_DIR/../
|
||||||
|
SCRIPT_DIR=`pwd`
|
||||||
|
|
||||||
|
IN_TDINTERNAL="community"
|
||||||
|
if [[ "$SCRIPT_DIR" == *"$IN_TDINTERNAL"* ]]; then
|
||||||
|
cd ../../..
|
||||||
|
else
|
||||||
|
cd ../../
|
||||||
|
fi
|
||||||
|
|
||||||
|
TAOS_DIR=`pwd`
|
||||||
|
LOG_DIR=$TAOS_DIR/sim/tsim/asan
|
||||||
|
|
||||||
|
error_num=`cat ${LOG_DIR}/tsim.asan | grep "ERROR" | wc -l`
|
||||||
|
memory_leak=`cat ${LOG_DIR}/tsim.asan | grep "Direct leak" | wc -l`
|
||||||
|
indirect_leak=`cat ${LOG_DIR}/tsim.asan | grep "Indirect leak" | wc -l`
|
||||||
|
runtime_error=`cat ${LOG_DIR}/tsim.asan | grep "runtime error" | wc -l`
|
||||||
|
|
||||||
|
echo -e "\033[44;32;1m"asan error_num: $error_num"\033[0m"
|
||||||
|
echo -e "\033[44;32;1m"asan memory_leak: $memory_leak"\033[0m"
|
||||||
|
echo -e "\033[44;32;1m"asan indirect_leak: $indirect_leak"\033[0m"
|
||||||
|
echo -e "\033[44;32;1m"asan runtime error: $runtime_error"\033[0m"
|
||||||
|
|
||||||
|
let "errors=$error_num+$memory_leak+$indirect_leak+$runtime_error"
|
||||||
|
|
||||||
|
if [ $errors -eq 0 ]; then
|
||||||
|
echo -e "\033[44;32;1m"no asan errors"\033[0m"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echo -e "\033[44;31;1m"asan total errors: $errors"\033[0m"
|
||||||
|
cat ${LOG_DIR}/tsim.asan
|
||||||
|
exit 1
|
||||||
|
fi
|
|
@ -80,7 +80,7 @@ LOG_DIR=$NODE_DIR/log
|
||||||
DATA_DIR=$NODE_DIR/data
|
DATA_DIR=$NODE_DIR/data
|
||||||
MGMT_DIR=$NODE_DIR/data/mgmt
|
MGMT_DIR=$NODE_DIR/data/mgmt
|
||||||
TSDB_DIR=$NODE_DIR/data/tsdb
|
TSDB_DIR=$NODE_DIR/data/tsdb
|
||||||
|
ASAN_DIR=$SIM_DIR/tsim/asan
|
||||||
TAOS_CFG=$NODE_DIR/cfg/taos.cfg
|
TAOS_CFG=$NODE_DIR/cfg/taos.cfg
|
||||||
|
|
||||||
echo ------------ $EXEC_OPTON $NODE_NAME
|
echo ------------ $EXEC_OPTON $NODE_NAME
|
||||||
|
@ -105,7 +105,7 @@ if [ "$EXEC_OPTON" = "start" ]; then
|
||||||
nohup valgrind --log-file=${LOG_DIR}/valgrind-taosd-${NODE_NAME}-${TT}.log --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all --num-callers=20 -v -v --workaround-gcc296-bugs=yes $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2>&1 &
|
nohup valgrind --log-file=${LOG_DIR}/valgrind-taosd-${NODE_NAME}-${TT}.log --tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all --num-callers=20 -v -v --workaround-gcc296-bugs=yes $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2>&1 &
|
||||||
else
|
else
|
||||||
echo "nohup $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2>&1 &"
|
echo "nohup $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2>&1 &"
|
||||||
nohup $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2>&1 &
|
nohup $EXE_DIR/taosd -c $CFG_DIR > /dev/null 2> $ASAN_DIR/$NODE_NAME.asan &
|
||||||
fi
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
|
@ -74,6 +74,7 @@ PRG_DIR=$SIM_DIR/tsim
|
||||||
CFG_DIR=$PRG_DIR/cfg
|
CFG_DIR=$PRG_DIR/cfg
|
||||||
LOG_DIR=$PRG_DIR/log
|
LOG_DIR=$PRG_DIR/log
|
||||||
DATA_DIR=$PRG_DIR/data
|
DATA_DIR=$PRG_DIR/data
|
||||||
|
ASAN_DIR=$PRG_DIR/asan
|
||||||
|
|
||||||
chmod -R 777 $PRG_DIR
|
chmod -R 777 $PRG_DIR
|
||||||
echo "------------------------------------------------------------------------"
|
echo "------------------------------------------------------------------------"
|
||||||
|
@ -82,14 +83,17 @@ echo "BUILD_DIR: $BUILD_DIR"
|
||||||
echo "SIM_DIR : $SIM_DIR"
|
echo "SIM_DIR : $SIM_DIR"
|
||||||
echo "CODE_DIR : $CODE_DIR"
|
echo "CODE_DIR : $CODE_DIR"
|
||||||
echo "CFG_DIR : $CFG_DIR"
|
echo "CFG_DIR : $CFG_DIR"
|
||||||
|
echo "ASAN_DIR : $ASAN_DIR"
|
||||||
|
|
||||||
rm -rf $SIM_DIR/*
|
rm -rf $SIM_DIR/*
|
||||||
rm -rf $LOG_DIR
|
rm -rf $LOG_DIR
|
||||||
rm -rf $CFG_DIR
|
rm -rf $CFG_DIR
|
||||||
|
rm -rf $ASAN_DIR
|
||||||
|
|
||||||
mkdir -p $PRG_DIR
|
mkdir -p $PRG_DIR
|
||||||
mkdir -p $LOG_DIR
|
mkdir -p $LOG_DIR
|
||||||
mkdir -p $CFG_DIR
|
mkdir -p $CFG_DIR
|
||||||
|
mkdir -p $ASAN_DIR
|
||||||
|
|
||||||
TAOS_CFG=$PRG_DIR/cfg/taos.cfg
|
TAOS_CFG=$PRG_DIR/cfg/taos.cfg
|
||||||
touch -f $TAOS_CFG
|
touch -f $TAOS_CFG
|
||||||
|
@ -133,7 +137,8 @@ if [ -n "$FILE_NAME" ]; then
|
||||||
$PROGRAM -c $CFG_DIR -f $FILE_NAME -v
|
$PROGRAM -c $CFG_DIR -f $FILE_NAME -v
|
||||||
else
|
else
|
||||||
echo "ExcuteCmd:" $PROGRAM -c $CFG_DIR -f $FILE_NAME
|
echo "ExcuteCmd:" $PROGRAM -c $CFG_DIR -f $FILE_NAME
|
||||||
$PROGRAM -c $CFG_DIR -f $FILE_NAME
|
$PROGRAM -c $CFG_DIR -f $FILE_NAME 2> $ASAN_DIR/tsim.asan
|
||||||
|
$CODE_DIR/sh/checkAsan.sh
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "ExcuteCmd:" $PROGRAM -c $CFG_DIR -f basicSuite.sim
|
echo "ExcuteCmd:" $PROGRAM -c $CFG_DIR -f basicSuite.sim
|
||||||
|
|
|
@ -89,8 +89,8 @@ if $data01 != 40 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print ======== step4 import new data
|
print ======== step4 import new data
|
||||||
sql_error import into tb values (now + 30d , 30 )
|
#sql_error import into tb values (now + 30d , 30 )
|
||||||
sql_error import into tb values (now + 31d , 31 )
|
#sql_error import into tb values (now + 31d , 31 )
|
||||||
|
|
||||||
sql select * from tb order by ts desc
|
sql select * from tb order by ts desc
|
||||||
print ===> rows $rows
|
print ===> rows $rows
|
||||||
|
|
|
@ -9,7 +9,7 @@ $tbPrefix = lm_da_tb
|
||||||
$db = $dbPrefix . $i
|
$db = $dbPrefix . $i
|
||||||
$tb = $tbPrefix . $i
|
$tb = $tbPrefix . $i
|
||||||
|
|
||||||
print =============== step1
|
print =============== step1 ms db
|
||||||
sql create database $db
|
sql create database $db
|
||||||
sql use $db
|
sql use $db
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ if $data00 != @17-01-01 08:00:00.001@ then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print =============== step2
|
print =============== step2 ms db
|
||||||
sql_error insert into $tb values ('2017-08-28 00:23:46.429+ 1a', 2)
|
sql_error insert into $tb values ('2017-08-28 00:23:46.429+ 1a', 2)
|
||||||
sql_error insert into $tb values ('2017-08-28 00:23:46cd .429', 2)
|
sql_error insert into $tb values ('2017-08-28 00:23:46cd .429', 2)
|
||||||
sql select ts from $tb
|
sql select ts from $tb
|
||||||
|
@ -31,7 +31,7 @@ if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print =============== step3
|
print =============== step3 ms db
|
||||||
sql_error insert into $tb values ('1970-01-01 08:00:00.000', 3)
|
sql_error insert into $tb values ('1970-01-01 08:00:00.000', 3)
|
||||||
sql_error insert into $tb values ('1970-01-01 08:00:00.000', 3)
|
sql_error insert into $tb values ('1970-01-01 08:00:00.000', 3)
|
||||||
sql select ts from $tb
|
sql select ts from $tb
|
||||||
|
@ -39,39 +39,48 @@ if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print =============== step4
|
print =============== step4 ms db
|
||||||
sql insert into $tb values(now, 4);
|
sql insert into $tb values(now, 4);
|
||||||
sql insert into $tb values(now+1a, 5);
|
sql insert into $tb values(now+1a, 5);
|
||||||
sql insert into $tb values(now+1s, 6);
|
sql insert into $tb values(now+1s, 6);
|
||||||
sql insert into $tb values(now+1m, 7);
|
sql insert into $tb values(now+1m, 7);
|
||||||
sql insert into $tb values(now+1h, 8);
|
sql insert into $tb values(now+1h, 8);
|
||||||
sql insert into $tb values(now+1d, 9);
|
sql insert into $tb values(now+1d, 9);
|
||||||
sql_error insert into $tb values(now+3w, 10);
|
sql insert into $tb values(now+3w, 10);
|
||||||
sql_error insert into $tb values(now+1n, 11);
|
sql insert into $tb values(31556995200000, 11);
|
||||||
sql_error insert into $tb values(now+1y, 12);
|
sql insert into $tb values('2970-01-01 00:00:00.000', 12);
|
||||||
|
|
||||||
print =============== step5
|
sql_error insert into $tb values(now+1n, 20);
|
||||||
sql_error insert into $tb values ('9999-12-31 213:59:59.999', 13)
|
sql_error insert into $tb values(now+1y, 21);
|
||||||
|
sql_error insert into $tb values(31556995200001, 22);
|
||||||
|
sql_error insert into $tb values('2970-01-02 00:00:00.000', 23);
|
||||||
|
sql_error insert into $tb values(9223372036854775807, 24);
|
||||||
|
sql_error insert into $tb values(9223372036854775808, 25);
|
||||||
|
sql_error insert into $tb values(92233720368547758088, 26);
|
||||||
|
|
||||||
|
|
||||||
|
print =============== step5 ms db
|
||||||
|
sql_error insert into $tb values ('9999-12-31 213:59:59.999', 27)
|
||||||
sql select ts from $tb
|
sql select ts from $tb
|
||||||
print $rows
|
print $rows
|
||||||
if $rows != 7 then
|
if $rows != 10 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print =============== step6
|
print =============== step6 ms db
|
||||||
sql_error insert into $tb values ('9999-12-99 23:59:59.999', 13)
|
sql_error insert into $tb values ('9999-12-99 23:59:59.999', 28)
|
||||||
|
|
||||||
sql select ts from $tb
|
sql select ts from $tb
|
||||||
if $rows != 7 then
|
if $rows != 10 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print =============== step7
|
print =============== step7 ms db
|
||||||
$i = 1
|
$i = 1
|
||||||
$tb = $tbPrefix . $i
|
$tb = $tbPrefix . $i
|
||||||
sql create table $tb (ts timestamp, ts2 timestamp)
|
sql create table $tb (ts timestamp, ts2 timestamp)
|
||||||
|
|
||||||
print =============== step8
|
print =============== step8 ms db
|
||||||
sql insert into $tb values (now, now)
|
sql insert into $tb values (now, now)
|
||||||
sql select * from $tb
|
sql select * from $tb
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
|
@ -84,4 +93,131 @@ if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
print =============== step20 us db
|
||||||
|
sql create database $db precision 'us' keep 365000d;
|
||||||
|
|
||||||
|
sql create table $tb (ts timestamp, speed int)
|
||||||
|
sql insert into $tb values ('2017-01-01 08:00:00.001', 1)
|
||||||
|
sql select ts from $tb
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data00 != @17-01-01 08:00:00.001000@ then
|
||||||
|
print data00 = $data00
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =============== step21 us db
|
||||||
|
sql_error insert into $tb values ('2017-08-28 00:23:46.429+ 1a', 2)
|
||||||
|
sql_error insert into $tb values ('2017-08-28 00:23:46cd .429', 2)
|
||||||
|
sql select ts from $tb
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =============== step22 us db
|
||||||
|
sql_error insert into $tb values ('970-01-01 08:00:00.000', 3)
|
||||||
|
sql_error insert into $tb values ('970-01-01 08:00:00.000', 3)
|
||||||
|
sql select ts from $tb
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =============== step23 us db
|
||||||
|
sql insert into $tb values(now, 4);
|
||||||
|
sql insert into $tb values(now+1a, 5);
|
||||||
|
sql insert into $tb values(now+1s, 6);
|
||||||
|
sql insert into $tb values(now+1m, 7);
|
||||||
|
sql insert into $tb values(now+1h, 8);
|
||||||
|
sql insert into $tb values(now+1d, 9);
|
||||||
|
sql insert into $tb values(now+3w, 10);
|
||||||
|
sql insert into $tb values(31556995200000000, 11);
|
||||||
|
sql insert into $tb values('2970-01-01 00:00:00.000000', 12);
|
||||||
|
|
||||||
|
sql_error insert into $tb values(now+1n, 20);
|
||||||
|
sql_error insert into $tb values(now+1y, 21);
|
||||||
|
sql_error insert into $tb values(31556995200000001, 22);
|
||||||
|
sql_error insert into $tb values('2970-01-02 00:00:00.000000', 23);
|
||||||
|
sql_error insert into $tb values(9223372036854775807, 24);
|
||||||
|
sql_error insert into $tb values(9223372036854775808, 25);
|
||||||
|
sql_error insert into $tb values(92233720368547758088, 26);
|
||||||
|
sql_error insert into $tb values ('9999-12-31 213:59:59.999', 27)
|
||||||
|
|
||||||
|
print =============== step24 us db
|
||||||
|
sql select ts from $tb
|
||||||
|
print $rows
|
||||||
|
if $rows != 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql drop database $db
|
||||||
|
sql select * from information_schema.ins_databases
|
||||||
|
if $rows != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =============== step30 ns db
|
||||||
|
sql create database $db precision 'ns' keep 36500d;
|
||||||
|
|
||||||
|
sql create table $tb (ts timestamp, speed int)
|
||||||
|
sql insert into $tb values ('2017-01-01 08:00:00.001', 1)
|
||||||
|
sql select ts from $tb
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data00 != @17-01-01 08:00:00.001000000@ then
|
||||||
|
print data00 = $data00
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =============== step31 ns db
|
||||||
|
sql_error insert into $tb values ('2017-08-28 00:23:46.429+ 1a', 2)
|
||||||
|
sql_error insert into $tb values ('2017-08-28 00:23:46cd .429', 2)
|
||||||
|
sql select ts from $tb
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =============== step32 ns db
|
||||||
|
#sql_error insert into $tb values ('970-01-01 08:00:00.000000000', 3)
|
||||||
|
#sql_error insert into $tb values ('970-01-01 08:00:00.000000000', 3)
|
||||||
|
sql select ts from $tb
|
||||||
|
if $rows != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print =============== step33 ns db
|
||||||
|
sql insert into $tb values(now, 4);
|
||||||
|
sql insert into $tb values(now+1a, 5);
|
||||||
|
sql insert into $tb values(now+1s, 6);
|
||||||
|
sql insert into $tb values(now+1m, 7);
|
||||||
|
sql insert into $tb values(now+1h, 8);
|
||||||
|
sql insert into $tb values(now+1d, 9);
|
||||||
|
sql insert into $tb values(now+3w, 10);
|
||||||
|
sql insert into $tb values(9214646400000000000, 11);
|
||||||
|
sql insert into $tb values('2262-01-01 00:00:00.000000000', 12);
|
||||||
|
|
||||||
|
sql_error insert into $tb values(now+1n, 20);
|
||||||
|
sql_error insert into $tb values(now+1y, 21);
|
||||||
|
sql_error insert into $tb values(9214646400000000001, 22);
|
||||||
|
sql_error insert into $tb values('2262-01-02 00:00:00.000000000', 23);
|
||||||
|
sql_error insert into $tb values(9223372036854775807, 24);
|
||||||
|
sql_error insert into $tb values(9223372036854775808, 25);
|
||||||
|
sql_error insert into $tb values(92233720368547758088, 26);
|
||||||
|
sql_error insert into $tb values ('9999-12-31 213:59:59.999', 27)
|
||||||
|
|
||||||
|
print =============== step34 ns db
|
||||||
|
sql select ts from $tb
|
||||||
|
print $rows
|
||||||
|
if $rows != 10 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql drop database $db
|
||||||
|
sql select * from information_schema.ins_databases
|
||||||
|
if $rows != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
|
@ -2,6 +2,7 @@
|
||||||
import taos
|
import taos
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
|
from datetime import datetime
|
||||||
import socket
|
import socket
|
||||||
import os
|
import os
|
||||||
import platform
|
import platform
|
||||||
|
@ -100,8 +101,11 @@ class TDTestCase:
|
||||||
processName="taosd"
|
processName="taosd"
|
||||||
taosdCmd = taosdCmdRun + startAction
|
taosdCmd = taosdCmdRun + startAction
|
||||||
tdLog.printNoPrefix("%s"%taosdCmd)
|
tdLog.printNoPrefix("%s"%taosdCmd)
|
||||||
os.system(f"nohup {taosdCmd} & ")
|
logTime=datetime.now().strftime('%Y%m%d_%H%M%S_%f')
|
||||||
|
os.system(f"nohup {taosdCmd} > {logTime}.log 2>&1 & ")
|
||||||
self.checkAndstopPro(processName,startAction)
|
self.checkAndstopPro(processName,startAction)
|
||||||
|
os.system(f"rm -rf {logTime}.log")
|
||||||
|
|
||||||
|
|
||||||
def taosdCommandExe(self,startAction,taosdCmdRun):
|
def taosdCommandExe(self,startAction,taosdCmdRun):
|
||||||
taosdCmd = taosdCmdRun + startAction
|
taosdCmd = taosdCmdRun + startAction
|
||||||
|
@ -207,7 +211,7 @@ class TDTestCase:
|
||||||
os.system(" mkdir -p taosdCaseTmp ")
|
os.system(" mkdir -p taosdCaseTmp ")
|
||||||
os.system("echo \'TAOS_QUERY_POLICY=3\' > taosdCaseTmp/.env ")
|
os.system("echo \'TAOS_QUERY_POLICY=3\' > taosdCaseTmp/.env ")
|
||||||
self.taosdCommandStop(startAction,taosdCmdRun)
|
self.taosdCommandStop(startAction,taosdCmdRun)
|
||||||
os.system(" rm -rf taosdCaseTmp/.env ")
|
os.system(" rm -rf taosdCaseTmp ")
|
||||||
|
|
||||||
startAction = " -V"
|
startAction = " -V"
|
||||||
tdLog.printNoPrefix("================================ parameter: %s"%startAction)
|
tdLog.printNoPrefix("================================ parameter: %s"%startAction)
|
||||||
|
|
Loading…
Reference in New Issue