Merge branch 'develop' into feature/crash_gen
This commit is contained in:
commit
cf2bdb4e83
|
@ -18,7 +18,7 @@ import (
|
|||
"sync"
|
||||
"time"
|
||||
|
||||
_ "github.com/taosdata/TDengine/src/connector/go/taosSql"
|
||||
_ "github.com/taosdata/driver-go/taosSql"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -320,6 +320,8 @@ typedef struct SSqlStream {
|
|||
SSqlObj *pSql;
|
||||
uint32_t streamId;
|
||||
char listed;
|
||||
bool isProject;
|
||||
int16_t precision;
|
||||
int64_t num; // number of computing count
|
||||
|
||||
/*
|
||||
|
@ -334,7 +336,6 @@ typedef struct SSqlStream {
|
|||
int64_t etime; // stream end query time, when time is larger then etime, the stream will be closed
|
||||
int64_t interval;
|
||||
int64_t slidingTime;
|
||||
int16_t precision;
|
||||
void * pTimer;
|
||||
|
||||
void (*fp)();
|
||||
|
|
|
@ -406,7 +406,7 @@ int tscProcessLocalCmd(SSqlObj *pSql) {
|
|||
pSql->res.qhandle = 0x1;
|
||||
pSql->res.numOfRows = 0;
|
||||
} else if (pCmd->command == TSDB_SQL_RESET_CACHE) {
|
||||
taosCacheEmpty(tscCacheHandle,false);
|
||||
taosCacheEmpty(tscCacheHandle);
|
||||
} else if (pCmd->command == TSDB_SQL_SERV_VERSION) {
|
||||
tscProcessServerVer(pSql);
|
||||
} else if (pCmd->command == TSDB_SQL_CLI_VERSION) {
|
||||
|
|
|
@ -90,6 +90,7 @@ static int32_t validateSqlFunctionInStreamSql(SSqlCmd* pCmd, SQueryInfo* pQueryI
|
|||
static int32_t buildArithmeticExprString(tSQLExpr* pExpr, char** exprString);
|
||||
static int32_t validateFunctionsInIntervalOrGroupbyQuery(SSqlCmd* pCmd, SQueryInfo* pQueryInfo);
|
||||
static int32_t validateArithmeticSQLExpr(SSqlCmd* pCmd, tSQLExpr* pExpr, SQueryInfo* pQueryInfo, SColumnList* pList, int32_t* type);
|
||||
static int32_t validateEp(char* ep);
|
||||
static int32_t validateDNodeConfig(tDCLSQL* pOptions);
|
||||
static int32_t validateLocalConfig(tDCLSQL* pOptions);
|
||||
static int32_t validateColumnName(char* name);
|
||||
|
@ -359,6 +360,7 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
|
||||
case TSDB_SQL_CFG_DNODE: {
|
||||
const char* msg2 = "invalid configure options or values";
|
||||
const char* msg3 = "invalid dnode ep";
|
||||
|
||||
/* validate the ip address */
|
||||
tDCLSQL* pDCL = pInfo->pDCLInfo;
|
||||
|
@ -375,6 +377,10 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
|||
|
||||
strncpy(pCfg->ep, pDCL->a[0].z, pDCL->a[0].n);
|
||||
|
||||
if (validateEp(pCfg->ep) != TSDB_CODE_SUCCESS) {
|
||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
|
||||
}
|
||||
|
||||
strncpy(pCfg->config, pDCL->a[1].z, pDCL->a[1].n);
|
||||
|
||||
if (pDCL->nTokens == 3) {
|
||||
|
@ -654,11 +660,14 @@ int32_t parseIntervalClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQ
|
|||
int32_t parseSlidingClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQuerySql) {
|
||||
const char* msg0 = "sliding value too small";
|
||||
const char* msg1 = "sliding value no larger than the interval value";
|
||||
const char* msg2 = "sliding value can not less than 1% of interval value";
|
||||
|
||||
const static int32_t INTERVAL_SLIDING_FACTOR = 100;
|
||||
|
||||
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
||||
SSQLToken* pSliding = &pQuerySql->sliding;
|
||||
STableComInfo tinfo = tscGetTableInfo(pTableMetaInfo->pTableMeta);
|
||||
|
||||
SSQLToken* pSliding = &pQuerySql->sliding;
|
||||
if (pSliding->n != 0) {
|
||||
getTimestampInUsFromStr(pSliding->z, pSliding->n, &pQueryInfo->slidingTime);
|
||||
if (tinfo.precision == TSDB_TIME_PRECISION_MILLI) {
|
||||
|
@ -676,6 +685,10 @@ int32_t parseSlidingClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQu
|
|||
pQueryInfo->slidingTime = pQueryInfo->intervalTime;
|
||||
}
|
||||
|
||||
if ((pQueryInfo->intervalTime != 0) && (pQueryInfo->intervalTime/pQueryInfo->slidingTime > INTERVAL_SLIDING_FACTOR)) {
|
||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg2);
|
||||
}
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -4629,6 +4642,24 @@ typedef struct SDNodeDynConfOption {
|
|||
int32_t len; // name string length
|
||||
} SDNodeDynConfOption;
|
||||
|
||||
|
||||
int32_t validateEp(char* ep) {
|
||||
char buf[TSDB_EP_LEN + 1] = {0};
|
||||
tstrncpy(buf, ep, TSDB_EP_LEN);
|
||||
|
||||
char *pos = strchr(buf, ':');
|
||||
if (NULL == pos) {
|
||||
return TSDB_CODE_TSC_INVALID_SQL;
|
||||
}
|
||||
|
||||
uint16_t port = atoi(pos+1);
|
||||
if (0 == port) {
|
||||
return TSDB_CODE_TSC_INVALID_SQL;
|
||||
}
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
int32_t validateDNodeConfig(tDCLSQL* pOptions) {
|
||||
if (pOptions->nTokens < 2 || pOptions->nTokens > 3) {
|
||||
return TSDB_CODE_TSC_INVALID_SQL;
|
||||
|
@ -6096,16 +6127,12 @@ int32_t exprTreeFromSqlExpr(SSqlCmd* pCmd, tExprNode **pExpr, const tSQLExpr* pS
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// NOTE: binary|nchar data allows the >|< type filter
|
||||
if ((*pExpr)->_node.optr != TSDB_RELATION_EQUAL && (*pExpr)->_node.optr != TSDB_RELATION_NOT_EQUAL) {
|
||||
if (pRight->nodeType == TSQL_NODE_VALUE) {
|
||||
if (pRight->pVal->nType == TSDB_DATA_TYPE_BOOL) {
|
||||
return TSDB_CODE_TSC_INVALID_SQL;
|
||||
}
|
||||
if ((pRight->pVal->nType == TSDB_DATA_TYPE_BINARY || pRight->pVal->nType == TSDB_DATA_TYPE_NCHAR)
|
||||
&& (*pExpr)->_node.optr != TSDB_RELATION_LIKE) {
|
||||
return TSDB_CODE_TSC_INVALID_SQL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1956,7 +1956,7 @@ int tscProcessUseDbRsp(SSqlObj *pSql) {
|
|||
}
|
||||
|
||||
int tscProcessDropDbRsp(SSqlObj *UNUSED_PARAM(pSql)) {
|
||||
taosCacheEmpty(tscCacheHandle, false);
|
||||
taosCacheEmpty(tscCacheHandle);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2002,7 +2002,7 @@ int tscProcessAlterTableMsgRsp(SSqlObj *pSql) {
|
|||
|
||||
if (isSuperTable) { // if it is a super table, reset whole query cache
|
||||
tscDebug("%p reset query cache since table:%s is stable", pSql, pTableMetaInfo->name);
|
||||
taosCacheEmpty(tscCacheHandle, false);
|
||||
taosCacheEmpty(tscCacheHandle);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -71,6 +71,7 @@ static void tscProcessStreamLaunchQuery(SSchedMsg *pMsg) {
|
|||
|
||||
pSql->fp = tscProcessStreamQueryCallback;
|
||||
pSql->param = pStream;
|
||||
pSql->res.completed = false;
|
||||
|
||||
SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
||||
|
@ -86,7 +87,7 @@ static void tscProcessStreamLaunchQuery(SSchedMsg *pMsg) {
|
|||
// failed to get meter/metric meta, retry in 10sec.
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
int64_t retryDelayTime = tscGetRetryDelayTime(pStream->slidingTime, pStream->precision);
|
||||
tscError("%p stream:%p,get metermeta failed, retry in %" PRId64 "ms", pStream->pSql, pStream, retryDelayTime);
|
||||
tscDebug("%p stream:%p,get metermeta failed, retry in %" PRId64 "ms", pStream->pSql, pStream, retryDelayTime);
|
||||
tscSetRetryTimer(pStream, pSql, retryDelayTime);
|
||||
|
||||
} else {
|
||||
|
@ -108,7 +109,7 @@ static void tscProcessStreamTimer(void *handle, void *tmrId) {
|
|||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
tscDebug("%p add into timer", pSql);
|
||||
|
||||
if (isProjectStream(pQueryInfo)) {
|
||||
if (pStream->isProject) {
|
||||
/*
|
||||
* pQueryInfo->window.ekey, which is the start time, does not change in case of
|
||||
* repeat first execution, once the first execution failed.
|
||||
|
@ -121,7 +122,19 @@ static void tscProcessStreamTimer(void *handle, void *tmrId) {
|
|||
}
|
||||
} else {
|
||||
pQueryInfo->window.skey = pStream->stime - pStream->interval;
|
||||
pQueryInfo->window.ekey = pStream->stime - 1;
|
||||
int64_t etime = taosGetTimestamp(pStream->precision);
|
||||
// delay to wait all data in last time window
|
||||
if (pStream->precision == TSDB_TIME_PRECISION_MICRO) {
|
||||
etime -= tsMaxStreamComputDelay * 1000l;
|
||||
} else {
|
||||
etime -= tsMaxStreamComputDelay;
|
||||
}
|
||||
if (etime > pStream->etime) {
|
||||
etime = pStream->etime;
|
||||
} else {
|
||||
etime = pStream->stime + (etime - pStream->stime) / pStream->interval * pStream->interval;
|
||||
}
|
||||
pQueryInfo->window.ekey = etime;
|
||||
}
|
||||
|
||||
// launch stream computing in a new thread
|
||||
|
@ -137,7 +150,7 @@ static void tscProcessStreamQueryCallback(void *param, TAOS_RES *tres, int numOf
|
|||
SSqlStream *pStream = (SSqlStream *)param;
|
||||
if (tres == NULL || numOfRows < 0) {
|
||||
int64_t retryDelay = tscGetRetryDelayTime(pStream->slidingTime, pStream->precision);
|
||||
tscError("%p stream:%p, query data failed, code:%d, retry in %" PRId64 "ms", pStream->pSql, pStream, numOfRows,
|
||||
tscError("%p stream:%p, query data failed, code:0x%08x, retry in %" PRId64 "ms", pStream->pSql, pStream, numOfRows,
|
||||
retryDelay);
|
||||
|
||||
STableMetaInfo* pTableMetaInfo = tscGetTableMetaInfoFromCmd(&pStream->pSql->cmd, 0, 0);
|
||||
|
@ -151,17 +164,45 @@ static void tscProcessStreamQueryCallback(void *param, TAOS_RES *tres, int numOf
|
|||
taos_fetch_rows_a(tres, tscProcessStreamRetrieveResult, param);
|
||||
}
|
||||
|
||||
static void tscSetTimestampForRes(SSqlStream *pStream, SSqlObj *pSql) {
|
||||
SSqlRes *pRes = &pSql->res;
|
||||
|
||||
int64_t timestamp = *(int64_t *)pRes->data;
|
||||
int64_t actualTimestamp = pStream->stime - pStream->interval;
|
||||
|
||||
if (timestamp != actualTimestamp) {
|
||||
// reset the timestamp of each agg point by using start time of each interval
|
||||
*((int64_t *)pRes->data) = actualTimestamp;
|
||||
tscWarn("%p stream:%p, timestamp of points is:%" PRId64 ", reset to %" PRId64, pSql, pStream, timestamp, actualTimestamp);
|
||||
// no need to be called as this is alreay done in the query
|
||||
static void tscStreamFillTimeGap(SSqlStream* pStream, TSKEY ts) {
|
||||
#if 0
|
||||
SSqlObj * pSql = pStream->pSql;
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
|
||||
if (pQueryInfo->fillType != TSDB_FILL_SET_VALUE && pQueryInfo->fillType != TSDB_FILL_NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
SSqlRes *pRes = &pSql->res;
|
||||
/* failed to retrieve any result in this retrieve */
|
||||
pSql->res.numOfRows = 1;
|
||||
void *row[TSDB_MAX_COLUMNS] = {0};
|
||||
char tmpRes[TSDB_MAX_BYTES_PER_ROW] = {0};
|
||||
void *oldPtr = pSql->res.data;
|
||||
pSql->res.data = tmpRes;
|
||||
int32_t rowNum = 0;
|
||||
|
||||
while (pStream->stime + pStream->slidingTime < ts) {
|
||||
pStream->stime += pStream->slidingTime;
|
||||
*(TSKEY*)row[0] = pStream->stime;
|
||||
for (int32_t i = 1; i < pQueryInfo->fieldsInfo.numOfOutput; ++i) {
|
||||
int16_t offset = tscFieldInfoGetOffset(pQueryInfo, i);
|
||||
TAOS_FIELD *pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, i);
|
||||
assignVal(pSql->res.data + offset, (char *)(&pQueryInfo->fillVal[i]), pField->bytes, pField->type);
|
||||
row[i] = pSql->res.data + offset;
|
||||
}
|
||||
(*pStream->fp)(pStream->param, pSql, row);
|
||||
++rowNum;
|
||||
}
|
||||
|
||||
if (rowNum > 0) {
|
||||
tscDebug("%p stream:%p %d rows padded", pSql, pStream, rowNum);
|
||||
}
|
||||
|
||||
pRes->numOfRows = 0;
|
||||
pRes->data = oldPtr;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void tscProcessStreamRetrieveResult(void *param, TAOS_RES *res, int numOfRows) {
|
||||
|
@ -170,7 +211,7 @@ static void tscProcessStreamRetrieveResult(void *param, TAOS_RES *res, int numOf
|
|||
|
||||
if (pSql == NULL || numOfRows < 0) {
|
||||
int64_t retryDelayTime = tscGetRetryDelayTime(pStream->slidingTime, pStream->precision);
|
||||
tscError("%p stream:%p, retrieve data failed, code:%d, retry in %" PRId64 "ms", pSql, pStream, numOfRows, retryDelayTime);
|
||||
tscError("%p stream:%p, retrieve data failed, code:0x%08x, retry in %" PRId64 "ms", pSql, pStream, numOfRows, retryDelayTime);
|
||||
|
||||
tscSetRetryTimer(pStream, pStream->pSql, retryDelayTime);
|
||||
return;
|
||||
|
@ -180,16 +221,11 @@ static void tscProcessStreamRetrieveResult(void *param, TAOS_RES *res, int numOf
|
|||
|
||||
if (numOfRows > 0) { // when reaching here the first execution of stream computing is successful.
|
||||
pStream->numOfRes += numOfRows;
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
|
||||
for(int32_t i = 0; i < numOfRows; ++i) {
|
||||
TAOS_ROW row = taos_fetch_row(res);
|
||||
tscDebug("%p stream:%p fetch result", pSql, pStream);
|
||||
if (isProjectStream(pQueryInfo)) {
|
||||
pStream->stime = *(TSKEY *)row[0];
|
||||
} else {
|
||||
tscSetTimestampForRes(pStream, pSql);
|
||||
}
|
||||
tscStreamFillTimeGap(pStream, *(TSKEY*)row[0]);
|
||||
pStream->stime = *(TSKEY *)row[0];
|
||||
|
||||
// user callback function
|
||||
(*pStream->fp)(pStream->param, res, row);
|
||||
|
@ -199,55 +235,18 @@ static void tscProcessStreamRetrieveResult(void *param, TAOS_RES *res, int numOf
|
|||
taos_fetch_rows_a(res, tscProcessStreamRetrieveResult, pStream);
|
||||
} else { // numOfRows == 0, all data has been retrieved
|
||||
pStream->useconds += pSql->res.useconds;
|
||||
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
|
||||
if (pStream->numOfRes == 0) {
|
||||
if (pQueryInfo->fillType == TSDB_FILL_SET_VALUE || pQueryInfo->fillType == TSDB_FILL_NULL) {
|
||||
SSqlRes *pRes = &pSql->res;
|
||||
|
||||
/* failed to retrieve any result in this retrieve */
|
||||
pSql->res.numOfRows = 1;
|
||||
void *row[TSDB_MAX_COLUMNS] = {0};
|
||||
char tmpRes[TSDB_MAX_BYTES_PER_ROW] = {0};
|
||||
|
||||
void *oldPtr = pSql->res.data;
|
||||
pSql->res.data = tmpRes;
|
||||
|
||||
for (int32_t i = 1; i < pQueryInfo->fieldsInfo.numOfOutput; ++i) {
|
||||
int16_t offset = tscFieldInfoGetOffset(pQueryInfo, i);
|
||||
TAOS_FIELD *pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, i);
|
||||
|
||||
assignVal(pSql->res.data + offset, (char *)(&pQueryInfo->fillVal[i]), pField->bytes, pField->type);
|
||||
row[i] = pSql->res.data + offset;
|
||||
}
|
||||
|
||||
tscSetTimestampForRes(pStream, pSql);
|
||||
row[0] = pRes->data;
|
||||
|
||||
// char result[512] = {0};
|
||||
// taos_print_row(result, row, pQueryInfo->fieldsInfo.pFields, pQueryInfo->fieldsInfo.numOfOutput);
|
||||
// tscInfo("%p stream:%p query result: %s", pSql, pStream, result);
|
||||
tscDebug("%p stream:%p fetch result", pSql, pStream);
|
||||
|
||||
// user callback function
|
||||
(*pStream->fp)(pStream->param, res, row);
|
||||
|
||||
pRes->numOfRows = 0;
|
||||
pRes->data = oldPtr;
|
||||
} else if (isProjectStream(pQueryInfo)) {
|
||||
if (pStream->isProject) {
|
||||
/* no resuls in the query range, retry */
|
||||
// todo set retry dynamic time
|
||||
int32_t retry = tsProjectExecInterval;
|
||||
tscError("%p stream:%p, retrieve no data, code:%d, retry in %" PRId32 "ms", pSql, pStream, numOfRows, retry);
|
||||
tscError("%p stream:%p, retrieve no data, code:0x%08x, retry in %" PRId32 "ms", pSql, pStream, numOfRows, retry);
|
||||
|
||||
tscSetRetryTimer(pStream, pStream->pSql, retry);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (isProjectStream(pQueryInfo)) {
|
||||
pStream->stime += 1;
|
||||
}
|
||||
} else if (pStream->isProject) {
|
||||
pStream->stime += 1;
|
||||
}
|
||||
|
||||
tscDebug("%p stream:%p, query on:%s, fetch result completed, fetched rows:%" PRId64, pSql, pStream, pTableMetaInfo->name,
|
||||
|
@ -262,10 +261,9 @@ static void tscProcessStreamRetrieveResult(void *param, TAOS_RES *res, int numOf
|
|||
}
|
||||
|
||||
static void tscSetRetryTimer(SSqlStream *pStream, SSqlObj *pSql, int64_t timer) {
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
int64_t delay = getDelayValueAfterTimewindowClosed(pStream, timer);
|
||||
|
||||
if (isProjectStream(pQueryInfo)) {
|
||||
if (pStream->isProject) {
|
||||
int64_t now = taosGetTimestamp(pStream->precision);
|
||||
int64_t etime = now > pStream->etime ? pStream->etime : now;
|
||||
|
||||
|
@ -323,8 +321,7 @@ static int64_t getLaunchTimeDelay(const SSqlStream* pStream) {
|
|||
static void tscSetNextLaunchTimer(SSqlStream *pStream, SSqlObj *pSql) {
|
||||
int64_t timer = 0;
|
||||
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
if (isProjectStream(pQueryInfo)) {
|
||||
if (pStream->isProject) {
|
||||
/*
|
||||
* for project query, no mater fetch data successfully or not, next launch will issue
|
||||
* more than the sliding time window
|
||||
|
@ -342,7 +339,6 @@ static void tscSetNextLaunchTimer(SSqlStream *pStream, SSqlObj *pSql) {
|
|||
return;
|
||||
}
|
||||
} else {
|
||||
pStream->stime += pStream->slidingTime;
|
||||
if ((pStream->stime - pStream->interval) >= pStream->etime) {
|
||||
tscDebug("%p stream:%p, stime:%" PRId64 " is larger than end time: %" PRId64 ", stop the stream", pStream->pSql, pStream,
|
||||
pStream->stime, pStream->etime);
|
||||
|
@ -409,14 +405,16 @@ static void tscSetSlidingWindowInfo(SSqlObj *pSql, SSqlStream *pStream) {
|
|||
|
||||
pStream->slidingTime = pQueryInfo->slidingTime;
|
||||
|
||||
pQueryInfo->intervalTime = 0; // clear the interval value to avoid the force time window split by query processor
|
||||
pQueryInfo->slidingTime = 0;
|
||||
if (pStream->isProject) {
|
||||
pQueryInfo->intervalTime = 0; // clear the interval value to avoid the force time window split by query processor
|
||||
pQueryInfo->slidingTime = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int64_t tscGetStreamStartTimestamp(SSqlObj *pSql, SSqlStream *pStream, int64_t stime) {
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
|
||||
if (isProjectStream(pQueryInfo)) {
|
||||
if (pStream->isProject) {
|
||||
// no data in table, flush all data till now to destination meter, 10sec delay
|
||||
pStream->interval = tsProjectExecInterval;
|
||||
pStream->slidingTime = tsProjectExecInterval;
|
||||
|
@ -489,7 +487,7 @@ TAOS_STREAM *taos_open_stream(TAOS *taos, const char *sqlstr, void (*fp)(void *p
|
|||
|
||||
SSqlStream *pStream = (SSqlStream *)calloc(1, sizeof(SSqlStream));
|
||||
if (pStream == NULL) {
|
||||
tscError("%p open stream failed, sql:%s, reason:%s, code:%d", pSql, sqlstr, pCmd->payload, pRes->code);
|
||||
tscError("%p open stream failed, sql:%s, reason:%s, code:0x%08x", pSql, sqlstr, pCmd->payload, pRes->code);
|
||||
tscFreeSqlObj(pSql);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -514,7 +512,7 @@ TAOS_STREAM *taos_open_stream(TAOS *taos, const char *sqlstr, void (*fp)(void *p
|
|||
if (pRes->code != TSDB_CODE_SUCCESS) {
|
||||
setErrorInfo(pSql, pRes->code, pCmd->payload);
|
||||
|
||||
tscError("%p open stream failed, sql:%s, reason:%s, code:%d", pSql, sqlstr, pCmd->payload, pRes->code);
|
||||
tscError("%p open stream failed, sql:%s, reason:%s, code:0x%08x", pSql, sqlstr, pCmd->payload, pRes->code);
|
||||
tscFreeSqlObj(pSql);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -523,6 +521,7 @@ TAOS_STREAM *taos_open_stream(TAOS *taos, const char *sqlstr, void (*fp)(void *p
|
|||
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
||||
STableComInfo tinfo = tscGetTableInfo(pTableMetaInfo->pTableMeta);
|
||||
|
||||
pStream->isProject = isProjectStream(pQueryInfo);
|
||||
pStream->fp = fp;
|
||||
pStream->callback = callback;
|
||||
pStream->param = param;
|
||||
|
@ -565,6 +564,8 @@ void taos_close_stream(TAOS_STREAM *handle) {
|
|||
taosTmrStopA(&(pStream->pTimer));
|
||||
|
||||
tscDebug("%p stream:%p is closed", pSql, pStream);
|
||||
// notify CQ to release the pStream object
|
||||
pStream->fp(pStream->param, NULL, NULL);
|
||||
|
||||
tscFreeSqlObj(pSql);
|
||||
pStream->pSql = NULL;
|
||||
|
|
|
@ -81,7 +81,7 @@ int64_t taosGetIntervalStartTimestamp(int64_t startTime, int64_t slidingTime, in
|
|||
return startTime;
|
||||
}
|
||||
|
||||
int64_t start = ((startTime - slidingTime) / slidingTime + 1) * slidingTime;
|
||||
int64_t start = ((startTime - intervalTime) / slidingTime + 1) * slidingTime;
|
||||
if (!(timeUnit == 'a' || timeUnit == 'm' || timeUnit == 's' || timeUnit == 'h')) {
|
||||
/*
|
||||
* here we revised the start time of day according to the local time zone,
|
||||
|
|
|
@ -109,6 +109,8 @@ void cqClose(void *handle) {
|
|||
while (pObj) {
|
||||
SCqObj *pTemp = pObj;
|
||||
pObj = pObj->next;
|
||||
tdFreeSchema(pTemp->pSchema);
|
||||
tfree(pTemp->sqlStr);
|
||||
free(pTemp);
|
||||
}
|
||||
|
||||
|
@ -242,6 +244,10 @@ static void cqCreateStream(SCqContext *pContext, SCqObj *pObj) {
|
|||
|
||||
static void cqProcessStreamRes(void *param, TAOS_RES *tres, TAOS_ROW row) {
|
||||
SCqObj *pObj = (SCqObj *)param;
|
||||
if (tres == NULL && row == NULL) {
|
||||
pObj->pStream = NULL;
|
||||
return;
|
||||
}
|
||||
SCqContext *pContext = pObj->pContext;
|
||||
STSchema *pSchema = pObj->pSchema;
|
||||
if (pObj->pStream == NULL) return;
|
||||
|
|
|
@ -402,6 +402,7 @@ static int32_t dnodeProcessCreateVnodeMsg(SRpcMsg *rpcMsg) {
|
|||
|
||||
void *pVnode = vnodeAcquireVnode(pCreate->cfg.vgId);
|
||||
if (pVnode != NULL) {
|
||||
dDebug("vgId:%d, already exist, processed as alter msg", pCreate->cfg.vgId);
|
||||
int32_t code = vnodeAlter(pVnode, pCreate);
|
||||
vnodeRelease(pVnode);
|
||||
return code;
|
||||
|
|
|
@ -87,8 +87,8 @@ int32_t qKillQuery(qinfo_t qinfo);
|
|||
void* qOpenQueryMgmt(int32_t vgId);
|
||||
void qSetQueryMgmtClosed(void* pExecutor);
|
||||
void qCleanupQueryMgmt(void* pExecutor);
|
||||
void** qRegisterQInfo(void* pMgmt, void* qInfo);
|
||||
void** qAcquireQInfo(void* pMgmt, void** key);
|
||||
void** qRegisterQInfo(void* pMgmt, uint64_t qInfo);
|
||||
void** qAcquireQInfo(void* pMgmt, uint64_t key);
|
||||
void** qReleaseQInfo(void* pMgmt, void* pQInfo, bool needFree);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -129,9 +129,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_CLUSTER_CFG_INCONSISTENT, 0, 0x0335, "mnode clus
|
|||
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_ACCT_ALREADY_EXIST, 0, 0x0340, "mnode accounts already exist")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_ACCT, 0, 0x0341, "mnode invalid account")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_ACCT_PARA, 0, 0x0342, "mnode invalid account parameter")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_ACCT_OPTION, 0, 0x0343, "mnode invalid acct option")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_TOO_MANY_ACCTS, 0, 0x0344, "mnode too many accounts")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_ACCT_OPTION, 0, 0x0342, "mnode invalid acct option")
|
||||
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_USER_ALREADY_EXIST, 0, 0x0350, "mnode user already exist")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_USER, 0, 0x0351, "mnode invalid user")
|
||||
|
@ -145,7 +143,6 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_TABLE_ID, 0, 0x0361, "mnode inva
|
|||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_TABLE_NAME, 0, 0x0362, "mnode invalid table name")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_TABLE_TYPE, 0, 0x0363, "mnode invalid table type")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_TOO_MANY_TAGS, 0, 0x0364, "mnode too many tags")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_TOO_MANY_TABLES, 0, 0x0365, "mnode too many tables")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_TOO_MANY_TIMESERIES, 0, 0x0366, "mnode not enough time series")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_NOT_SUPER_TABLE, 0, 0x0367, "mnode no super table") // operation only available for super table
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_COL_NAME_TOO_LONG, 0, 0x0368, "mnode column name too long")
|
||||
|
@ -161,13 +158,13 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_DB_OPTION, 0, 0x0382, "mnode inva
|
|||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_DB, 0, 0x0383, "mnode invalid database")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_MONITOR_DB_FORBIDDEN, 0, 0x0384, "mnode monitor db forbidden")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_TOO_MANY_DATABASES, 0, 0x0385, "mnode too many databases")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_MND_DB_IN_DROPPING, 0, 0x0386, "mnode db in dropping")
|
||||
|
||||
// dnode
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_MSG_NOT_PROCESSED, 0, 0x0400, "dnode message not processed")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_OUT_OF_MEMORY, 0, 0x0401, "dnode out of memory")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_NO_WRITE_ACCESS, 0, 0x0402, "dnode no disk write access")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_INVALID_MSG_LEN, 0, 0x0403, "dnode invalid message length")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_DND_INVALID_FILE_FORMAT, 0, 0x0404, "dnode invalid file format")
|
||||
|
||||
// vnode
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_VND_ACTION_IN_PROGRESS, 0, 0x0500, "vnode action in progress")
|
||||
|
|
|
@ -473,7 +473,7 @@ typedef struct {
|
|||
|
||||
typedef struct {
|
||||
int32_t code;
|
||||
uint64_t qhandle;
|
||||
uint64_t qhandle; // query handle
|
||||
} SQueryTableRsp;
|
||||
|
||||
typedef struct {
|
||||
|
@ -486,7 +486,7 @@ typedef struct SRetrieveTableRsp {
|
|||
int32_t numOfRows;
|
||||
int8_t completed; // all results are returned to client
|
||||
int16_t precision;
|
||||
int64_t offset; // updated offset value for multi-vnode projection query
|
||||
int64_t offset; // updated offset value for multi-vnode projection query
|
||||
int64_t useconds;
|
||||
char data[];
|
||||
} SRetrieveTableRsp;
|
||||
|
|
|
@ -852,7 +852,6 @@ void multiThreadCreateTable(char* cols, bool use_metric, int threads, int ntable
|
|||
|
||||
for (int i = 0; i < threads; i++) {
|
||||
info *t_info = infos + i;
|
||||
taos_close(t_info->taos);
|
||||
sem_destroy(&(t_info->mutex_sem));
|
||||
sem_destroy(&(t_info->lock_sem));
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ struct arguments {
|
|||
static error_t parse_opt(int key, char *arg, struct argp_state *state) {
|
||||
struct arguments *arguments = state->input;
|
||||
switch (key) {
|
||||
case 'w':
|
||||
case 'r':
|
||||
arguments->dataDir = arg;
|
||||
break;
|
||||
case 'd':
|
||||
|
|
|
@ -44,6 +44,7 @@ void mnodeDecMnodeRef(struct SMnodeObj *pMnode);
|
|||
char * mnodeGetMnodeRoleStr();
|
||||
void mnodeGetMnodeIpSetForPeer(SRpcIpSet *ipSet);
|
||||
void mnodeGetMnodeIpSetForShell(SRpcIpSet *ipSet);
|
||||
char* mnodeGetMnodeMasterEp();
|
||||
|
||||
void mnodeGetMnodeInfos(void *mnodes);
|
||||
void mnodeUpdateMnodeIpSet();
|
||||
|
|
|
@ -128,6 +128,7 @@ int32_t mnodeInitAccts() {
|
|||
void mnodeCleanupAccts() {
|
||||
acctCleanUp();
|
||||
sdbCloseTable(tsAcctSdb);
|
||||
tsAcctSdb = NULL;
|
||||
}
|
||||
|
||||
void *mnodeGetAcct(char *name) {
|
||||
|
|
|
@ -459,6 +459,7 @@ void mnodeMoveVgroupToHead(SVgObj *pVgroup) {
|
|||
|
||||
void mnodeCleanupDbs() {
|
||||
sdbCloseTable(tsDbSdb);
|
||||
tsDbSdb = NULL;
|
||||
}
|
||||
|
||||
static int32_t mnodeGetDbMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) {
|
||||
|
@ -964,6 +965,11 @@ static int32_t mnodeProcessAlterDbMsg(SMnodeMsg *pMsg) {
|
|||
mError("db:%s, failed to alter, invalid db", pAlter->db);
|
||||
return TSDB_CODE_MND_INVALID_DB;
|
||||
}
|
||||
|
||||
if (pMsg->pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pAlter->db, pMsg->pDb->status);
|
||||
return TSDB_CODE_MND_DB_IN_DROPPING;
|
||||
}
|
||||
|
||||
return mnodeAlterDb(pMsg->pDb, pAlter, pMsg);
|
||||
}
|
||||
|
|
|
@ -176,6 +176,7 @@ int32_t mnodeInitDnodes() {
|
|||
|
||||
void mnodeCleanupDnodes() {
|
||||
sdbCloseTable(tsDnodeSdb);
|
||||
tsDnodeSdb = NULL;
|
||||
}
|
||||
|
||||
void *mnodeGetNextDnode(void *pIter, SDnodeObj **pDnode) {
|
||||
|
@ -468,7 +469,7 @@ static int32_t mnodeDropDnodeByEp(char *ep, SMnodeMsg *pMsg) {
|
|||
}
|
||||
|
||||
mnodeDecDnodeRef(pDnode);
|
||||
if (strcmp(pDnode->dnodeEp, dnodeGetMnodeMasterEp()) == 0) {
|
||||
if (strcmp(pDnode->dnodeEp, mnodeGetMnodeMasterEp()) == 0) {
|
||||
mError("dnode:%d, can't drop dnode:%s which is master", pDnode->dnodeId, ep);
|
||||
return TSDB_CODE_MND_NO_REMOVE_MASTER;
|
||||
}
|
||||
|
|
|
@ -121,9 +121,9 @@ void mnodeCleanupSystem() {
|
|||
dnodeFreeMnodeWqueue();
|
||||
dnodeFreeMnodeRqueue();
|
||||
dnodeFreeMnodePqueue();
|
||||
mnodeCleanupComponents(sizeof(tsMnodeComponents) / sizeof(tsMnodeComponents[0]) - 1);
|
||||
mnodeCleanupTimer();
|
||||
|
||||
mnodeCleanupComponents(sizeof(tsMnodeComponents) / sizeof(tsMnodeComponents[0]) - 1);
|
||||
|
||||
mInfo("mnode is cleaned up");
|
||||
}
|
||||
|
||||
|
|
|
@ -165,6 +165,7 @@ int32_t mnodeInitMnodes() {
|
|||
|
||||
void mnodeCleanupMnodes() {
|
||||
sdbCloseTable(tsMnodeSdb);
|
||||
tsMnodeSdb = NULL;
|
||||
mnodeMnodeDestroyLock();
|
||||
}
|
||||
|
||||
|
@ -267,6 +268,10 @@ void mnodeGetMnodeIpSetForShell(SRpcIpSet *ipSet) {
|
|||
mnodeMnodeUnLock();
|
||||
}
|
||||
|
||||
char* mnodeGetMnodeMasterEp() {
|
||||
return tsMnodeInfos.nodeInfos[tsMnodeInfos.inUse].nodeEp;
|
||||
}
|
||||
|
||||
void mnodeGetMnodeInfos(void *mnodeInfos) {
|
||||
mnodeMnodeRdLock();
|
||||
*(SDMMnodeInfos *)mnodeInfos = tsMnodeInfos;
|
||||
|
|
|
@ -199,7 +199,7 @@ static void sdbRestoreTables() {
|
|||
sdbDebug("table:%s, is restored, numOfRows:%" PRId64, pTable->tableName, pTable->numOfRows);
|
||||
}
|
||||
|
||||
sdbInfo("sdb is restored, version:%" PRId64 " totalRows:%d numOfTables:%d", tsSdbObj.version, totalRows, numOfTables);
|
||||
sdbInfo("sdb is restored, ver:%" PRId64 " totalRows:%d numOfTables:%d", tsSdbObj.version, totalRows, numOfTables);
|
||||
}
|
||||
|
||||
void sdbUpdateMnodeRoles() {
|
||||
|
@ -373,7 +373,7 @@ void sdbCleanUp() {
|
|||
tsSdbObj.status = SDB_STATUS_CLOSING;
|
||||
|
||||
sdbCleanupWriteWorker();
|
||||
sdbDebug("sdb will be closed, version:%" PRId64, tsSdbObj.version);
|
||||
sdbDebug("sdb will be closed, ver:%" PRId64, tsSdbObj.version);
|
||||
|
||||
if (tsSdbObj.sync) {
|
||||
syncStop(tsSdbObj.sync);
|
||||
|
@ -471,8 +471,8 @@ static int32_t sdbInsertHash(SSdbTable *pTable, SSdbOper *pOper) {
|
|||
atomic_add_fetch_32(&pTable->autoIndex, 1);
|
||||
}
|
||||
|
||||
sdbDebug("table:%s, insert record:%s to hash, rowSize:%d numOfRows:%" PRId64 " version:%" PRIu64, pTable->tableName,
|
||||
sdbGetKeyStrFromObj(pTable, pOper->pObj), pOper->rowSize, pTable->numOfRows, sdbGetVersion());
|
||||
sdbDebug("table:%s, insert record:%s to hash, rowSize:%d numOfRows:%" PRId64 " ver:%" PRIu64 ", msg:%p", pTable->tableName,
|
||||
sdbGetKeyStrFromObj(pTable, pOper->pObj), pOper->rowSize, pTable->numOfRows, sdbGetVersion(), pOper->pMsg);
|
||||
|
||||
(*pTable->insertFp)(pOper);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
|
@ -490,8 +490,8 @@ static int32_t sdbDeleteHash(SSdbTable *pTable, SSdbOper *pOper) {
|
|||
taosHashRemove(pTable->iHandle, key, keySize);
|
||||
atomic_sub_fetch_32(&pTable->numOfRows, 1);
|
||||
|
||||
sdbDebug("table:%s, delete record:%s from hash, numOfRows:%" PRId64 " version:%" PRIu64, pTable->tableName,
|
||||
sdbGetKeyStrFromObj(pTable, pOper->pObj), pTable->numOfRows, sdbGetVersion());
|
||||
sdbDebug("table:%s, delete record:%s from hash, numOfRows:%" PRId64 " ver:%" PRIu64 ", msg:%p", pTable->tableName,
|
||||
sdbGetKeyStrFromObj(pTable, pOper->pObj), pTable->numOfRows, sdbGetVersion(), pOper->pMsg);
|
||||
|
||||
int8_t *updateEnd = pOper->pObj + pTable->refCountPos - 1;
|
||||
*updateEnd = 1;
|
||||
|
@ -501,8 +501,8 @@ static int32_t sdbDeleteHash(SSdbTable *pTable, SSdbOper *pOper) {
|
|||
}
|
||||
|
||||
static int32_t sdbUpdateHash(SSdbTable *pTable, SSdbOper *pOper) {
|
||||
sdbDebug("table:%s, update record:%s in hash, numOfRows:%" PRId64 " version:%" PRIu64, pTable->tableName,
|
||||
sdbGetKeyStrFromObj(pTable, pOper->pObj), pTable->numOfRows, sdbGetVersion());
|
||||
sdbDebug("table:%s, update record:%s in hash, numOfRows:%" PRId64 " ver:%" PRIu64 ", msg:%p", pTable->tableName,
|
||||
sdbGetKeyStrFromObj(pTable, pOper->pObj), pTable->numOfRows, sdbGetVersion(), pOper->pMsg);
|
||||
|
||||
(*pTable->updateFp)(pOper);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
|
@ -527,12 +527,12 @@ static int sdbWrite(void *param, void *data, int type) {
|
|||
// for data from WAL or forward, version may be smaller
|
||||
if (pHead->version <= tsSdbObj.version) {
|
||||
pthread_mutex_unlock(&tsSdbObj.mutex);
|
||||
sdbDebug("table:%s, failed to restore %s record:%s from source(%d), version:%" PRId64 " too large, sdb version:%" PRId64,
|
||||
sdbDebug("table:%s, failed to restore %s record:%s from source(%d), ver:%" PRId64 " too large, sdb ver:%" PRId64,
|
||||
pTable->tableName, sdbGetActionStr(action), sdbGetKeyStr(pTable, pHead->cont), type, pHead->version, tsSdbObj.version);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
} else if (pHead->version != tsSdbObj.version + 1) {
|
||||
pthread_mutex_unlock(&tsSdbObj.mutex);
|
||||
sdbError("table:%s, failed to restore %s record:%s from source(%d), version:%" PRId64 " too large, sdb version:%" PRId64,
|
||||
sdbError("table:%s, failed to restore %s record:%s from source(%d), ver:%" PRId64 " too large, sdb ver:%" PRId64,
|
||||
pTable->tableName, sdbGetActionStr(action), sdbGetKeyStr(pTable, pHead->cont), type, pHead->version, tsSdbObj.version);
|
||||
return TSDB_CODE_MND_APP_ERROR;
|
||||
} else {
|
||||
|
@ -556,19 +556,19 @@ static int sdbWrite(void *param, void *data, int type) {
|
|||
if (syncCode <= 0) pOper->processedCount = 1;
|
||||
|
||||
if (syncCode < 0) {
|
||||
sdbError("table:%s, failed to forward request, result:%s action:%s record:%s version:%" PRId64, pTable->tableName,
|
||||
tstrerror(syncCode), sdbGetActionStr(action), sdbGetKeyStr(pTable, pHead->cont), pHead->version);
|
||||
sdbError("table:%s, failed to forward request, result:%s action:%s record:%s ver:%" PRId64 ", msg:%p", pTable->tableName,
|
||||
tstrerror(syncCode), sdbGetActionStr(action), sdbGetKeyStr(pTable, pHead->cont), pHead->version, pOper->pMsg);
|
||||
} else if (syncCode > 0) {
|
||||
sdbDebug("table:%s, forward request is sent, action:%s record:%s version:%" PRId64, pTable->tableName,
|
||||
sdbGetActionStr(action), sdbGetKeyStr(pTable, pHead->cont), pHead->version);
|
||||
sdbDebug("table:%s, forward request is sent, action:%s record:%s ver:%" PRId64 ", msg:%p", pTable->tableName,
|
||||
sdbGetActionStr(action), sdbGetKeyStr(pTable, pHead->cont), pHead->version, pOper->pMsg);
|
||||
} else {
|
||||
sdbTrace("table:%s, no need to send fwd request, action:%s record:%s version:%" PRId64, pTable->tableName,
|
||||
sdbGetActionStr(action), sdbGetKeyStr(pTable, pHead->cont), pHead->version);
|
||||
sdbTrace("table:%s, no need to send fwd request, action:%s record:%s ver:%" PRId64 ", msg:%p", pTable->tableName,
|
||||
sdbGetActionStr(action), sdbGetKeyStr(pTable, pHead->cont), pHead->version, pOper->pMsg);
|
||||
}
|
||||
return syncCode;
|
||||
}
|
||||
|
||||
sdbDebug("table:%s, record from wal/fwd is disposed, action:%s record:%s version:%" PRId64, pTable->tableName,
|
||||
sdbDebug("table:%s, record from wal/fwd is disposed, action:%s record:%s ver:%" PRId64, pTable->tableName,
|
||||
sdbGetActionStr(action), sdbGetKeyStr(pTable, pHead->cont), pHead->version);
|
||||
|
||||
// even it is WAL/FWD, it shall be called to update version in sync
|
||||
|
@ -957,7 +957,7 @@ static void *sdbWorkerFp(void *param) {
|
|||
pOper->processedCount = 1;
|
||||
pHead = (void *)pOper + sizeof(SSdbOper) + SDB_SYNC_HACK;
|
||||
if (pOper->pMsg != NULL) {
|
||||
sdbDebug("app:%p:%p, table:%s record:%p:%s version:%" PRIu64 ", will be processed in sdb queue",
|
||||
sdbDebug("app:%p:%p, table:%s record:%p:%s ver:%" PRIu64 ", will be processed in sdb queue",
|
||||
pOper->pMsg->rpcMsg.ahandle, pOper->pMsg, ((SSdbTable *)pOper->table)->tableName, pOper->pObj,
|
||||
sdbGetKeyStr(pOper->table, pHead->cont), pHead->version);
|
||||
}
|
||||
|
|
|
@ -307,6 +307,11 @@ static int32_t mnodeProcessConnectMsg(SMnodeMsg *pMsg) {
|
|||
code = TSDB_CODE_MND_INVALID_DB;
|
||||
goto connect_over;
|
||||
}
|
||||
|
||||
if (pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
|
||||
return TSDB_CODE_MND_DB_IN_DROPPING;
|
||||
}
|
||||
mnodeDecDbRef(pDb);
|
||||
}
|
||||
|
||||
|
@ -352,6 +357,11 @@ static int32_t mnodeProcessUseMsg(SMnodeMsg *pMsg) {
|
|||
if (pMsg->pDb == NULL) {
|
||||
code = TSDB_CODE_MND_INVALID_DB;
|
||||
}
|
||||
|
||||
if (pMsg->pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pMsg->pDb->name, pMsg->pDb->status);
|
||||
return TSDB_CODE_MND_DB_IN_DROPPING;
|
||||
}
|
||||
|
||||
return code;
|
||||
}
|
||||
|
@ -403,4 +413,4 @@ void mnodeVacuumResult(char *data, int32_t numOfCols, int32_t rows, int32_t capa
|
|||
memmove(data + pShow->offset[i] * rows, data + pShow->offset[i] * capacity, pShow->bytes[i] * rows);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -116,6 +116,11 @@ static int32_t mnodeChildTableActionInsert(SSdbOper *pOper) {
|
|||
mError("ctable:%s, vgId:%d not in db:%s", pTable->info.tableId, pVgroup->vgId, pVgroup->dbName);
|
||||
return TSDB_CODE_MND_INVALID_DB;
|
||||
}
|
||||
|
||||
if (pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
|
||||
return TSDB_CODE_MND_DB_IN_DROPPING;
|
||||
}
|
||||
mnodeDecDbRef(pDb);
|
||||
|
||||
SAcctObj *pAcct = mnodeGetAcct(pDb->acct);
|
||||
|
@ -284,8 +289,8 @@ static int32_t mnodeChildTableActionRestored() {
|
|||
if (pTable == NULL) break;
|
||||
|
||||
SDbObj *pDb = mnodeGetDbByTableId(pTable->info.tableId);
|
||||
if (pDb == NULL) {
|
||||
mError("ctable:%s, failed to get db, discard it", pTable->info.tableId);
|
||||
if (pDb == NULL || pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("ctable:%s, failed to get db or db in dropping, discard it", pTable->info.tableId);
|
||||
SSdbOper desc = {.type = SDB_OPER_LOCAL, .pObj = pTable, .table = tsChildTableSdb};
|
||||
sdbDeleteRow(&desc);
|
||||
mnodeDecTableRef(pTable);
|
||||
|
@ -376,6 +381,7 @@ static int32_t mnodeInitChildTables() {
|
|||
|
||||
static void mnodeCleanupChildTables() {
|
||||
sdbCloseTable(tsChildTableSdb);
|
||||
tsChildTableSdb = NULL;
|
||||
}
|
||||
|
||||
static void mnodeAddTableIntoStable(SSuperTableObj *pStable, SChildTableObj *pCtable) {
|
||||
|
@ -422,7 +428,7 @@ static int32_t mnodeSuperTableActionDestroy(SSdbOper *pOper) {
|
|||
static int32_t mnodeSuperTableActionInsert(SSdbOper *pOper) {
|
||||
SSuperTableObj *pStable = pOper->pObj;
|
||||
SDbObj *pDb = mnodeGetDbByTableId(pStable->info.tableId);
|
||||
if (pDb != NULL) {
|
||||
if (pDb != NULL && pDb->status == TSDB_DB_STATUS_READY) {
|
||||
mnodeAddSuperTableIntoDb(pDb);
|
||||
}
|
||||
mnodeDecDbRef(pDb);
|
||||
|
@ -554,6 +560,7 @@ static int32_t mnodeInitSuperTables() {
|
|||
|
||||
static void mnodeCleanupSuperTables() {
|
||||
sdbCloseTable(tsSuperTableSdb);
|
||||
tsSuperTableSdb = NULL;
|
||||
}
|
||||
|
||||
int32_t mnodeInitTables() {
|
||||
|
@ -683,10 +690,15 @@ static int32_t mnodeProcessCreateTableMsg(SMnodeMsg *pMsg) {
|
|||
SCMCreateTableMsg *pCreate = pMsg->rpcMsg.pCont;
|
||||
|
||||
if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDb(pCreate->db);
|
||||
if (pMsg->pDb == NULL || pMsg->pDb->status != TSDB_DB_STATUS_READY) {
|
||||
if (pMsg->pDb == NULL) {
|
||||
mError("app:%p:%p, table:%s, failed to create, db not selected", pMsg->rpcMsg.ahandle, pMsg, pCreate->tableId);
|
||||
return TSDB_CODE_MND_DB_NOT_SELECTED;
|
||||
}
|
||||
|
||||
if (pMsg->pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pMsg->pDb->name, pMsg->pDb->status);
|
||||
return TSDB_CODE_MND_DB_IN_DROPPING;
|
||||
}
|
||||
|
||||
if (pMsg->pTable == NULL) pMsg->pTable = mnodeGetTable(pCreate->tableId);
|
||||
if (pMsg->pTable != NULL && pMsg->retry == 0) {
|
||||
|
@ -717,10 +729,15 @@ static int32_t mnodeProcessCreateTableMsg(SMnodeMsg *pMsg) {
|
|||
static int32_t mnodeProcessDropTableMsg(SMnodeMsg *pMsg) {
|
||||
SCMDropTableMsg *pDrop = pMsg->rpcMsg.pCont;
|
||||
if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDbByTableId(pDrop->tableId);
|
||||
if (pMsg->pDb == NULL || pMsg->pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("app:%p:%p, table:%s, failed to drop table, db not selected", pMsg->rpcMsg.ahandle, pMsg, pDrop->tableId);
|
||||
if (pMsg->pDb == NULL) {
|
||||
mError("app:%p:%p, table:%s, failed to drop table, db not selected or db in dropping", pMsg->rpcMsg.ahandle, pMsg, pDrop->tableId);
|
||||
return TSDB_CODE_MND_DB_NOT_SELECTED;
|
||||
}
|
||||
|
||||
if (pMsg->pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pMsg->pDb->name, pMsg->pDb->status);
|
||||
return TSDB_CODE_MND_DB_IN_DROPPING;
|
||||
}
|
||||
|
||||
if (mnodeCheckIsMonitorDB(pMsg->pDb->name, tsMonitorDbName)) {
|
||||
mError("app:%p:%p, table:%s, failed to drop table, in monitor database", pMsg->rpcMsg.ahandle, pMsg,
|
||||
|
@ -755,11 +772,16 @@ static int32_t mnodeProcessTableMetaMsg(SMnodeMsg *pMsg) {
|
|||
pInfo->tableId, pMsg->rpcMsg.handle, pInfo->createFlag);
|
||||
|
||||
if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDbByTableId(pInfo->tableId);
|
||||
if (pMsg->pDb == NULL || pMsg->pDb->status != TSDB_DB_STATUS_READY) {
|
||||
if (pMsg->pDb == NULL) {
|
||||
mError("app:%p:%p, table:%s, failed to get table meta, db not selected", pMsg->rpcMsg.ahandle, pMsg,
|
||||
pInfo->tableId);
|
||||
return TSDB_CODE_MND_DB_NOT_SELECTED;
|
||||
}
|
||||
|
||||
if (pMsg->pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pMsg->pDb->name, pMsg->pDb->status);
|
||||
return TSDB_CODE_MND_DB_IN_DROPPING;
|
||||
}
|
||||
|
||||
if (pMsg->pTable == NULL) pMsg->pTable = mnodeGetTable(pInfo->tableId);
|
||||
if (pMsg->pTable == NULL) {
|
||||
|
@ -1207,6 +1229,11 @@ static int32_t mnodeDropSuperTableColumn(SMnodeMsg *pMsg, char *colName) {
|
|||
static int32_t mnodeGetShowSuperTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) {
|
||||
SDbObj *pDb = mnodeGetDb(pShow->db);
|
||||
if (pDb == NULL) return TSDB_CODE_MND_DB_NOT_SELECTED;
|
||||
|
||||
if (pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
|
||||
return TSDB_CODE_MND_DB_IN_DROPPING;
|
||||
}
|
||||
|
||||
int32_t cols = 0;
|
||||
SSchema *pSchema = pMeta->schema;
|
||||
|
@ -1266,6 +1293,11 @@ int32_t mnodeRetrieveShowSuperTables(SShowObj *pShow, char *data, int32_t rows,
|
|||
|
||||
SDbObj *pDb = mnodeGetDb(pShow->db);
|
||||
if (pDb == NULL) return 0;
|
||||
|
||||
if (pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
|
||||
return 0;
|
||||
}
|
||||
|
||||
tstrncpy(prefix, pDb->name, 64);
|
||||
strcat(prefix, TS_PATH_DELIMITER);
|
||||
|
@ -2297,7 +2329,7 @@ static int32_t mnodeProcessMultiTableMetaMsg(SMnodeMsg *pMsg) {
|
|||
if (pTable == NULL) continue;
|
||||
|
||||
if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDbByTableId(tableId);
|
||||
if (pMsg->pDb == NULL) {
|
||||
if (pMsg->pDb == NULL || pMsg->pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mnodeDecTableRef(pTable);
|
||||
continue;
|
||||
}
|
||||
|
@ -2335,6 +2367,11 @@ static int32_t mnodeProcessMultiTableMetaMsg(SMnodeMsg *pMsg) {
|
|||
static int32_t mnodeGetShowTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) {
|
||||
SDbObj *pDb = mnodeGetDb(pShow->db);
|
||||
if (pDb == NULL) return TSDB_CODE_MND_DB_NOT_SELECTED;
|
||||
|
||||
if (pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
|
||||
return TSDB_CODE_MND_DB_IN_DROPPING;
|
||||
}
|
||||
|
||||
int32_t cols = 0;
|
||||
SSchema *pSchema = pMeta->schema;
|
||||
|
@ -2383,6 +2420,11 @@ static int32_t mnodeGetShowTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, void
|
|||
static int32_t mnodeRetrieveShowTables(SShowObj *pShow, char *data, int32_t rows, void *pConn) {
|
||||
SDbObj *pDb = mnodeGetDb(pShow->db);
|
||||
if (pDb == NULL) return 0;
|
||||
|
||||
if (pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t numOfRows = 0;
|
||||
SChildTableObj *pTable = NULL;
|
||||
|
@ -2474,10 +2516,15 @@ static int32_t mnodeProcessAlterTableMsg(SMnodeMsg *pMsg) {
|
|||
pAlter->tableId, pMsg->rpcMsg.handle);
|
||||
|
||||
if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDbByTableId(pAlter->tableId);
|
||||
if (pMsg->pDb == NULL || pMsg->pDb->status != TSDB_DB_STATUS_READY) {
|
||||
if (pMsg->pDb == NULL) {
|
||||
mError("app:%p:%p, table:%s, failed to alter table, db not selected", pMsg->rpcMsg.ahandle, pMsg, pAlter->tableId);
|
||||
return TSDB_CODE_MND_DB_NOT_SELECTED;
|
||||
}
|
||||
|
||||
if (pMsg->pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pMsg->pDb->name, pMsg->pDb->status);
|
||||
return TSDB_CODE_MND_DB_IN_DROPPING;
|
||||
}
|
||||
|
||||
if (mnodeCheckIsMonitorDB(pMsg->pDb->name, tsMonitorDbName)) {
|
||||
mError("app:%p:%p, table:%s, failed to alter table, its log db", pMsg->rpcMsg.ahandle, pMsg, pAlter->tableId);
|
||||
|
@ -2537,6 +2584,11 @@ static int32_t mnodeProcessAlterTableMsg(SMnodeMsg *pMsg) {
|
|||
static int32_t mnodeGetStreamTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) {
|
||||
SDbObj *pDb = mnodeGetDb(pShow->db);
|
||||
if (pDb == NULL) return TSDB_CODE_MND_DB_NOT_SELECTED;
|
||||
|
||||
if (pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
|
||||
return TSDB_CODE_MND_DB_IN_DROPPING;
|
||||
}
|
||||
|
||||
int32_t cols = 0;
|
||||
SSchema *pSchema = pMeta->schema;
|
||||
|
@ -2584,7 +2636,11 @@ static int32_t mnodeGetStreamTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, vo
|
|||
static int32_t mnodeRetrieveStreamTables(SShowObj *pShow, char *data, int32_t rows, void *pConn) {
|
||||
SDbObj *pDb = mnodeGetDb(pShow->db);
|
||||
if (pDb == NULL) return 0;
|
||||
|
||||
|
||||
if (pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t numOfRows = 0;
|
||||
SChildTableObj *pTable = NULL;
|
||||
|
|
|
@ -154,6 +154,7 @@ int32_t mnodeInitUsers() {
|
|||
|
||||
void mnodeCleanupUsers() {
|
||||
sdbCloseTable(tsUserSdb);
|
||||
tsUserSdb = NULL;
|
||||
}
|
||||
|
||||
SUserObj *mnodeGetUser(char *name) {
|
||||
|
|
|
@ -75,6 +75,11 @@ static int32_t mnodeVgroupActionInsert(SSdbOper *pOper) {
|
|||
if (pDb == NULL) {
|
||||
return TSDB_CODE_MND_INVALID_DB;
|
||||
}
|
||||
|
||||
if (pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
|
||||
return TSDB_CODE_MND_DB_IN_DROPPING;
|
||||
}
|
||||
|
||||
pVgroup->pDb = pDb;
|
||||
pVgroup->prev = NULL;
|
||||
|
@ -427,6 +432,7 @@ void mnodeDropVgroup(SVgObj *pVgroup, void *ahandle) {
|
|||
|
||||
void mnodeCleanupVgroups() {
|
||||
sdbCloseTable(tsVgroupSdb);
|
||||
tsVgroupSdb = NULL;
|
||||
}
|
||||
|
||||
int32_t mnodeGetVgroupMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) {
|
||||
|
@ -434,6 +440,11 @@ int32_t mnodeGetVgroupMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) {
|
|||
if (pDb == NULL) {
|
||||
return TSDB_CODE_MND_DB_NOT_SELECTED;
|
||||
}
|
||||
|
||||
if (pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
|
||||
return TSDB_CODE_MND_DB_IN_DROPPING;
|
||||
}
|
||||
|
||||
int32_t cols = 0;
|
||||
SSchema *pSchema = pMeta->schema;
|
||||
|
@ -522,6 +533,11 @@ int32_t mnodeRetrieveVgroups(SShowObj *pShow, char *data, int32_t rows, void *pC
|
|||
|
||||
SDbObj *pDb = mnodeGetDb(pShow->db);
|
||||
if (pDb == NULL) return 0;
|
||||
|
||||
if (pDb->status != TSDB_DB_STATUS_READY) {
|
||||
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
|
||||
return 0;
|
||||
}
|
||||
|
||||
pVgroup = pDb->pHead;
|
||||
while (pVgroup != NULL) {
|
||||
|
@ -696,9 +712,9 @@ static void mnodeProcessCreateVnodeRsp(SRpcMsg *rpcMsg) {
|
|||
if (rpcMsg->ahandle == NULL) return;
|
||||
|
||||
SMnodeMsg *mnodeMsg = rpcMsg->ahandle;
|
||||
mnodeMsg->received++;
|
||||
atomic_add_fetch_8(&mnodeMsg->received, 1);
|
||||
if (rpcMsg->code == TSDB_CODE_SUCCESS) {
|
||||
mnodeMsg->successed++;
|
||||
atomic_add_fetch_8(&mnodeMsg->successed, 1);
|
||||
} else {
|
||||
mnodeMsg->code = rpcMsg->code;
|
||||
}
|
||||
|
|
|
@ -943,7 +943,7 @@ static void blockwiseApplyFunctions(SQueryRuntimeEnv *pRuntimeEnv, SDataStatis *
|
|||
}
|
||||
|
||||
// null data, failed to allocate more memory buffer
|
||||
bool hasTimeWindow = false;
|
||||
hasTimeWindow = false;
|
||||
if (setWindowOutputBufByKey(pRuntimeEnv, pWindowResInfo, pDataBlockInfo->tid, &nextWin, masterScan, &hasTimeWindow) != TSDB_CODE_SUCCESS) {
|
||||
break;
|
||||
}
|
||||
|
@ -1710,28 +1710,21 @@ static bool onlyQueryTags(SQuery* pQuery) {
|
|||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void getAlignQueryTimeWindow(SQuery *pQuery, int64_t key, int64_t keyFirst, int64_t keyLast, STimeWindow *realWin, STimeWindow *win) {
|
||||
void getAlignQueryTimeWindow(SQuery *pQuery, int64_t key, int64_t keyFirst, int64_t keyLast, STimeWindow *win) {
|
||||
assert(key >= keyFirst && key <= keyLast && pQuery->slidingTime <= pQuery->intervalTime);
|
||||
|
||||
win->skey = taosGetIntervalStartTimestamp(key, pQuery->slidingTime, pQuery->intervalTime, pQuery->slidingTimeUnit, pQuery->precision);
|
||||
|
||||
/*
|
||||
* if the realSkey > INT64_MAX - pQuery->intervalTime, the query duration between
|
||||
* realSkey and realEkey must be less than one interval.Therefore, no need to adjust the query ranges.
|
||||
*/
|
||||
if (keyFirst > (INT64_MAX - pQuery->intervalTime)) {
|
||||
/*
|
||||
* if the realSkey > INT64_MAX - pQuery->intervalTime, the query duration between
|
||||
* realSkey and realEkey must be less than one interval.Therefore, no need to adjust the query ranges.
|
||||
*/
|
||||
assert(keyLast - keyFirst < pQuery->intervalTime);
|
||||
|
||||
realWin->skey = keyFirst;
|
||||
realWin->ekey = keyLast;
|
||||
|
||||
win->ekey = INT64_MAX;
|
||||
return;
|
||||
} else {
|
||||
win->ekey = win->skey + pQuery->intervalTime - 1;
|
||||
}
|
||||
|
||||
win->ekey = win->skey + pQuery->intervalTime - 1;
|
||||
|
||||
realWin->skey = (win->skey < keyFirst)? keyFirst : win->skey;
|
||||
realWin->ekey = (win->ekey < keyLast) ? win->ekey : keyLast;
|
||||
}
|
||||
|
||||
static void setScanLimitationByResultBuffer(SQuery *pQuery) {
|
||||
|
@ -2247,24 +2240,20 @@ static int64_t doScanAllDataBlocks(SQueryRuntimeEnv *pRuntimeEnv) {
|
|||
|
||||
// todo extract methods
|
||||
if (QUERY_IS_INTERVAL_QUERY(pQuery) && pRuntimeEnv->windowResInfo.prevSKey == TSKEY_INITIAL_VAL) {
|
||||
STimeWindow realWin = TSWINDOW_INITIALIZER, w = TSWINDOW_INITIALIZER;
|
||||
STimeWindow w = TSWINDOW_INITIALIZER;
|
||||
SWindowResInfo *pWindowResInfo = &pRuntimeEnv->windowResInfo;
|
||||
|
||||
if (QUERY_IS_ASC_QUERY(pQuery)) {
|
||||
getAlignQueryTimeWindow(pQuery, blockInfo.window.skey, blockInfo.window.skey, pQuery->window.ekey, &realWin, &w);
|
||||
getAlignQueryTimeWindow(pQuery, blockInfo.window.skey, blockInfo.window.skey, pQuery->window.ekey, &w);
|
||||
pWindowResInfo->startTime = w.skey;
|
||||
pWindowResInfo->prevSKey = w.skey;
|
||||
} else {
|
||||
// the start position of the first time window in the endpoint that spreads beyond the queried last timestamp
|
||||
getAlignQueryTimeWindow(pQuery, blockInfo.window.ekey, pQuery->window.ekey, blockInfo.window.ekey, &realWin, &w);
|
||||
getAlignQueryTimeWindow(pQuery, blockInfo.window.ekey, pQuery->window.ekey, blockInfo.window.ekey, &w);
|
||||
|
||||
pWindowResInfo->startTime = pQuery->window.skey;
|
||||
pWindowResInfo->prevSKey = w.skey;
|
||||
}
|
||||
|
||||
if (pRuntimeEnv->pFillInfo != NULL) {
|
||||
pRuntimeEnv->pFillInfo->start = w.skey;
|
||||
}
|
||||
}
|
||||
|
||||
// in case of prj/diff query, ensure the output buffer is sufficient to accommodate the results of current block
|
||||
|
@ -2294,10 +2283,10 @@ static int64_t doScanAllDataBlocks(SQueryRuntimeEnv *pRuntimeEnv) {
|
|||
|
||||
if (QUERY_IS_INTERVAL_QUERY(pQuery) && IS_MASTER_SCAN(pRuntimeEnv)) {
|
||||
if (Q_STATUS_EQUAL(pQuery->status, QUERY_COMPLETED)) {
|
||||
int32_t step = QUERY_IS_ASC_QUERY(pQuery) ? QUERY_ASC_FORWARD_STEP : QUERY_DESC_FORWARD_STEP;
|
||||
// int32_t step = QUERY_IS_ASC_QUERY(pQuery) ? QUERY_ASC_FORWARD_STEP : QUERY_DESC_FORWARD_STEP;
|
||||
|
||||
closeAllTimeWindow(&pRuntimeEnv->windowResInfo);
|
||||
removeRedundantWindow(&pRuntimeEnv->windowResInfo, pTableQueryInfo->lastKey - step, step);
|
||||
// removeRedundantWindow(&pRuntimeEnv->windowResInfo, pTableQueryInfo->lastKey - step, step);
|
||||
pRuntimeEnv->windowResInfo.curIndex = pRuntimeEnv->windowResInfo.size - 1; // point to the last time window
|
||||
} else {
|
||||
assert(Q_STATUS_EQUAL(pQuery->status, QUERY_RESBUF_FULL));
|
||||
|
@ -2914,6 +2903,9 @@ static void updateTableQueryInfoForReverseScan(SQuery *pQuery, STableQueryInfo *
|
|||
|
||||
SWITCH_ORDER(pTableQueryInfo->cur.order);
|
||||
pTableQueryInfo->cur.vgroupIndex = -1;
|
||||
|
||||
// set the index at the end of time window
|
||||
pTableQueryInfo->windowResInfo.curIndex = pTableQueryInfo->windowResInfo.size - 1;
|
||||
}
|
||||
|
||||
static void disableFuncInReverseScanImpl(SQInfo* pQInfo, SWindowResInfo *pWindowResInfo, int32_t order) {
|
||||
|
@ -3554,12 +3546,12 @@ void setIntervalQueryRange(SQInfo *pQInfo, TSKEY key) {
|
|||
* In ascending query, key is the first qualified timestamp. However, in the descending order query, additional
|
||||
* operations involve.
|
||||
*/
|
||||
STimeWindow w = TSWINDOW_INITIALIZER, realWin = TSWINDOW_INITIALIZER;
|
||||
STimeWindow w = TSWINDOW_INITIALIZER;
|
||||
SWindowResInfo *pWindowResInfo = &pTableQueryInfo->windowResInfo;
|
||||
|
||||
TSKEY sk = MIN(win.skey, win.ekey);
|
||||
TSKEY ek = MAX(win.skey, win.ekey);
|
||||
getAlignQueryTimeWindow(pQuery, win.skey, sk, ek, &realWin, &w);
|
||||
getAlignQueryTimeWindow(pQuery, win.skey, sk, ek, &w);
|
||||
pWindowResInfo->startTime = pTableQueryInfo->win.skey; // windowSKey may be 0 in case of 1970 timestamp
|
||||
|
||||
if (pWindowResInfo->prevSKey == TSKEY_INITIAL_VAL) {
|
||||
|
@ -3891,7 +3883,6 @@ static void queryCostStatis(SQInfo *pQInfo) {
|
|||
// double total = pSummary->fileTimeUs + pSummary->cacheTimeUs;
|
||||
// double io = pSummary->loadCompInfoUs + pSummary->loadBlocksUs + pSummary->loadFieldUs;
|
||||
|
||||
// todo add the intermediate result save cost!!
|
||||
// double computing = total - io;
|
||||
//
|
||||
// qDebug(
|
||||
|
@ -3989,7 +3980,7 @@ static bool skipTimeInterval(SQueryRuntimeEnv *pRuntimeEnv, TSKEY* start) {
|
|||
*/
|
||||
assert(pRuntimeEnv->windowResInfo.prevSKey == TSKEY_INITIAL_VAL);
|
||||
|
||||
STimeWindow w = TSWINDOW_INITIALIZER, realWin = TSWINDOW_INITIALIZER;
|
||||
STimeWindow w = TSWINDOW_INITIALIZER;
|
||||
|
||||
SWindowResInfo *pWindowResInfo = &pRuntimeEnv->windowResInfo;
|
||||
STableQueryInfo *pTableQueryInfo = pQuery->current;
|
||||
|
@ -4000,12 +3991,12 @@ static bool skipTimeInterval(SQueryRuntimeEnv *pRuntimeEnv, TSKEY* start) {
|
|||
|
||||
if (QUERY_IS_ASC_QUERY(pQuery)) {
|
||||
if (pWindowResInfo->prevSKey == TSKEY_INITIAL_VAL) {
|
||||
getAlignQueryTimeWindow(pQuery, blockInfo.window.skey, blockInfo.window.skey, pQuery->window.ekey, &realWin, &w);
|
||||
getAlignQueryTimeWindow(pQuery, blockInfo.window.skey, blockInfo.window.skey, pQuery->window.ekey, &w);
|
||||
pWindowResInfo->startTime = w.skey;
|
||||
pWindowResInfo->prevSKey = w.skey;
|
||||
}
|
||||
} else {
|
||||
getAlignQueryTimeWindow(pQuery, blockInfo.window.ekey, pQuery->window.ekey, blockInfo.window.ekey, &realWin, &w);
|
||||
getAlignQueryTimeWindow(pQuery, blockInfo.window.ekey, pQuery->window.ekey, blockInfo.window.ekey, &w);
|
||||
|
||||
pWindowResInfo->startTime = pQuery->window.skey;
|
||||
pWindowResInfo->prevSKey = w.skey;
|
||||
|
@ -4228,7 +4219,13 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, void *tsdb, int32_t vgId, bo
|
|||
|
||||
if (pQuery->fillType != TSDB_FILL_NONE && !isPointInterpoQuery(pQuery)) {
|
||||
SFillColInfo* pColInfo = taosCreateFillColInfo(pQuery);
|
||||
pRuntimeEnv->pFillInfo = taosInitFillInfo(pQuery->order.order, 0, 0, pQuery->rec.capacity, pQuery->numOfOutput,
|
||||
STimeWindow w = TSWINDOW_INITIALIZER;
|
||||
|
||||
TSKEY sk = MIN(pQuery->window.skey, pQuery->window.ekey);
|
||||
TSKEY ek = MAX(pQuery->window.skey, pQuery->window.ekey);
|
||||
getAlignQueryTimeWindow(pQuery, pQuery->window.skey, sk, ek, &w);
|
||||
|
||||
pRuntimeEnv->pFillInfo = taosInitFillInfo(pQuery->order.order, w.skey, 0, pQuery->rec.capacity, pQuery->numOfOutput,
|
||||
pQuery->slidingTime, pQuery->slidingTimeUnit, pQuery->precision,
|
||||
pQuery->fillType, pColInfo);
|
||||
}
|
||||
|
@ -4690,7 +4687,7 @@ static void doRestoreContext(SQInfo *pQInfo) {
|
|||
static void doCloseAllTimeWindowAfterScan(SQInfo *pQInfo) {
|
||||
SQuery *pQuery = pQInfo->runtimeEnv.pQuery;
|
||||
|
||||
int32_t step = GET_FORWARD_DIRECTION_FACTOR(pQuery->order.order);
|
||||
// int32_t step = GET_FORWARD_DIRECTION_FACTOR(pQuery->order.order);
|
||||
|
||||
if (QUERY_IS_INTERVAL_QUERY(pQuery)) {
|
||||
size_t numOfGroup = GET_NUM_OF_TABLEGROUP(pQInfo);
|
||||
|
@ -4701,7 +4698,7 @@ static void doCloseAllTimeWindowAfterScan(SQInfo *pQInfo) {
|
|||
for (int32_t j = 0; j < num; ++j) {
|
||||
STableQueryInfo* item = taosArrayGetP(group, j);
|
||||
closeAllTimeWindow(&item->windowResInfo);
|
||||
removeRedundantWindow(&item->windowResInfo, item->lastKey - step, step);
|
||||
// removeRedundantWindow(&item->windowResInfo, item->lastKey - step, step);
|
||||
}
|
||||
}
|
||||
} else { // close results for group result
|
||||
|
@ -4753,7 +4750,7 @@ static void multiTableQueryProcess(SQInfo *pQInfo) {
|
|||
el = scanMultiTableDataBlocks(pQInfo);
|
||||
qDebug("QInfo:%p reversed scan completed, elapsed time: %" PRId64 "ms", pQInfo, el);
|
||||
|
||||
doCloseAllTimeWindowAfterScan(pQInfo);
|
||||
// doCloseAllTimeWindowAfterScan(pQInfo);
|
||||
doRestoreContext(pQInfo);
|
||||
} else {
|
||||
qDebug("QInfo:%p no need to do reversed scan, query completed", pQInfo);
|
||||
|
@ -5825,7 +5822,7 @@ static int32_t initQInfo(SQueryTableMsg *pQueryMsg, void *tsdb, int32_t vgId, SQ
|
|||
qDebug("QInfo:%p no result in time range %" PRId64 "-%" PRId64 ", order %d", pQInfo, pQuery->window.skey,
|
||||
pQuery->window.ekey, pQuery->order.order);
|
||||
setQueryStatus(pQuery, QUERY_COMPLETED);
|
||||
|
||||
pQInfo->tableqinfoGroupInfo.numOfTables = 0;
|
||||
sem_post(&pQInfo->dataReady);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
@ -6497,7 +6494,7 @@ void qSetQueryMgmtClosed(void* pQMgmt) {
|
|||
pQueryMgmt->closed = true;
|
||||
pthread_mutex_unlock(&pQueryMgmt->lock);
|
||||
|
||||
taosCacheEmpty(pQueryMgmt->qinfoPool, true);
|
||||
taosCacheRefresh(pQueryMgmt->qinfoPool, freeqinfoFn);
|
||||
}
|
||||
|
||||
void qCleanupQueryMgmt(void* pQMgmt) {
|
||||
|
@ -6520,11 +6517,13 @@ void qCleanupQueryMgmt(void* pQMgmt) {
|
|||
qDebug("vgId:%d querymgmt cleanup completed", vgId);
|
||||
}
|
||||
|
||||
void** qRegisterQInfo(void* pMgmt, void* qInfo) {
|
||||
void** qRegisterQInfo(void* pMgmt, uint64_t qInfo) {
|
||||
if (pMgmt == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const int32_t DEFAULT_QHANDLE_LIFE_SPAN = tsShellActivityTimer * 2;
|
||||
|
||||
SQueryMgmt *pQueryMgmt = pMgmt;
|
||||
if (pQueryMgmt->qinfoPool == NULL) {
|
||||
return NULL;
|
||||
|
@ -6536,21 +6535,23 @@ void** qRegisterQInfo(void* pMgmt, void* qInfo) {
|
|||
|
||||
return NULL;
|
||||
} else {
|
||||
void** handle = taosCachePut(pQueryMgmt->qinfoPool, qInfo, POINTER_BYTES, &qInfo, POINTER_BYTES, tsShellActivityTimer*2);
|
||||
uint64_t handleVal = (uint64_t) qInfo;
|
||||
|
||||
void** handle = taosCachePut(pQueryMgmt->qinfoPool, &handleVal, sizeof(int64_t), &qInfo, POINTER_BYTES, DEFAULT_QHANDLE_LIFE_SPAN);
|
||||
pthread_mutex_unlock(&pQueryMgmt->lock);
|
||||
|
||||
return handle;
|
||||
}
|
||||
}
|
||||
|
||||
void** qAcquireQInfo(void* pMgmt, void** key) {
|
||||
void** qAcquireQInfo(void* pMgmt, uint64_t key) {
|
||||
SQueryMgmt *pQueryMgmt = pMgmt;
|
||||
|
||||
if (pQueryMgmt->qinfoPool == NULL || pQueryMgmt->closed) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void** handle = taosCacheAcquireByKey(pQueryMgmt->qinfoPool, key, POINTER_BYTES);
|
||||
void** handle = taosCacheAcquireByKey(pQueryMgmt->qinfoPool, &key, sizeof(uint64_t));
|
||||
if (handle == NULL || *handle == NULL) {
|
||||
return NULL;
|
||||
} else {
|
||||
|
|
|
@ -174,7 +174,7 @@ int32_t taosNumOfRemainRows(SFillInfo* pFillInfo) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
return FILL_IS_ASC_FILL(pFillInfo) ? (pFillInfo->numOfRows - pFillInfo->rowIdx) : pFillInfo->rowIdx + 1;
|
||||
return pFillInfo->numOfRows - pFillInfo->rowIdx;
|
||||
}
|
||||
|
||||
// todo: refactor
|
||||
|
|
|
@ -24,14 +24,13 @@ extern "C" {
|
|||
#include "tref.h"
|
||||
#include "hash.h"
|
||||
|
||||
typedef void (*__cache_freeres_fn_t)(void*);
|
||||
typedef void (*__cache_free_fn_t)(void*);
|
||||
|
||||
typedef struct SCacheStatis {
|
||||
int64_t missCount;
|
||||
int64_t hitCount;
|
||||
int64_t totalAccess;
|
||||
int64_t refreshCount;
|
||||
int32_t numOfCollision;
|
||||
} SCacheStatis;
|
||||
|
||||
typedef struct SCacheDataNode {
|
||||
|
@ -70,7 +69,7 @@ typedef struct {
|
|||
// void * pTimer;
|
||||
SCacheStatis statistics;
|
||||
SHashObj * pHashTable;
|
||||
__cache_freeres_fn_t freeFp;
|
||||
__cache_free_fn_t freeFp;
|
||||
uint32_t numOfElemsInTrash; // number of element in trash
|
||||
uint8_t deleting; // set the deleting flag to stop refreshing ASAP.
|
||||
pthread_t refreshWorker;
|
||||
|
@ -91,15 +90,7 @@ typedef struct {
|
|||
* @param fn free resource callback function
|
||||
* @return
|
||||
*/
|
||||
SCacheObj *taosCacheInit(int32_t keyType, int64_t refreshTimeInSeconds, bool extendLifespan, __cache_freeres_fn_t fn, const char *cacheName);
|
||||
|
||||
/**
|
||||
* initialize the cache object and set the free object callback function
|
||||
* @param refreshTimeInSeconds
|
||||
* @param freeCb
|
||||
* @return
|
||||
*/
|
||||
SCacheObj *taosCacheInitWithCb(int32_t keyType, int64_t refreshTimeInSeconds, bool extendLifespan, __cache_freeres_fn_t fn, const char *cacheName);
|
||||
SCacheObj *taosCacheInit(int32_t keyType, int64_t refreshTimeInSeconds, bool extendLifespan, __cache_free_fn_t fn, const char *cacheName);
|
||||
|
||||
/**
|
||||
* add data into cache
|
||||
|
@ -163,9 +154,8 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove);
|
|||
/**
|
||||
* move all data node into trash, clear node in trash can if it is not referenced by any clients
|
||||
* @param handle
|
||||
* @param _remove remove the data or not if refcount is greater than 0
|
||||
*/
|
||||
void taosCacheEmpty(SCacheObj *pCacheObj, bool _remove);
|
||||
void taosCacheEmpty(SCacheObj *pCacheObj);
|
||||
|
||||
/**
|
||||
* release all allocated memory and destroy the cache object.
|
||||
|
@ -180,6 +170,14 @@ void taosCacheEmpty(SCacheObj *pCacheObj, bool _remove);
|
|||
*/
|
||||
void taosCacheCleanup(SCacheObj *pCacheObj);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param pCacheObj
|
||||
* @param fp
|
||||
* @return
|
||||
*/
|
||||
void taosCacheRefresh(SCacheObj *pCacheObj, __cache_free_fn_t fp);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -51,6 +51,7 @@ typedef struct SSkipListNode {
|
|||
#define SL_GET_NODE_KEY(s, n) ((s)->keyFn(SL_GET_NODE_DATA(n)))
|
||||
|
||||
#define SL_GET_SL_MIN_KEY(s) (SL_GET_NODE_KEY((s), SL_GET_FORWARD_POINTER((s)->pHead, 0)))
|
||||
#define SL_GET_SL_MAX_KEY(s) (SL_GET_NODE_KEY((s), SL_GET_BACKWARD_POINTER((s)->pTail, 0)))
|
||||
|
||||
#define SL_GET_NODE_LEVEL(n) *(uint8_t *)((n))
|
||||
|
||||
|
@ -119,7 +120,6 @@ typedef struct SSkipList {
|
|||
pthread_rwlock_t *lock;
|
||||
SSkipListNode * pHead; // point to the first element
|
||||
SSkipListNode * pTail; // point to the last element
|
||||
void * lastKey; // last key in the skiplist
|
||||
#if SKIP_LIST_RECORD_PERFORMANCE
|
||||
tSkipListState state; // skiplist state
|
||||
#endif
|
||||
|
|
|
@ -223,9 +223,9 @@ static void doCleanupDataCache(SCacheObj *pCacheObj);
|
|||
* refresh cache to remove data in both hash list and trash, if any nodes' refcount == 0, every pCacheObj->refreshTime
|
||||
* @param handle Cache object handle
|
||||
*/
|
||||
static void* taosCacheRefresh(void *handle);
|
||||
static void* taosCacheTimedRefresh(void *pCacheObj);
|
||||
|
||||
SCacheObj *taosCacheInit(int32_t keyType, int64_t refreshTimeInSeconds, bool extendLifespan, __cache_freeres_fn_t fn, const char* cacheName) {
|
||||
SCacheObj *taosCacheInit(int32_t keyType, int64_t refreshTimeInSeconds, bool extendLifespan, __cache_free_fn_t fn, const char* cacheName) {
|
||||
if (refreshTimeInSeconds <= 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
@ -261,7 +261,7 @@ SCacheObj *taosCacheInit(int32_t keyType, int64_t refreshTimeInSeconds, bool ext
|
|||
pthread_attr_init(&thattr);
|
||||
pthread_attr_setdetachstate(&thattr, PTHREAD_CREATE_JOINABLE);
|
||||
|
||||
pthread_create(&pCacheObj->refreshWorker, &thattr, taosCacheRefresh, pCacheObj);
|
||||
pthread_create(&pCacheObj->refreshWorker, &thattr, taosCacheTimedRefresh, pCacheObj);
|
||||
|
||||
pthread_attr_destroy(&thattr);
|
||||
return pCacheObj;
|
||||
|
@ -450,7 +450,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) {
|
|||
}
|
||||
}
|
||||
|
||||
void taosCacheEmpty(SCacheObj *pCacheObj, bool _remove) {
|
||||
void taosCacheEmpty(SCacheObj *pCacheObj) {
|
||||
SHashMutableIterator *pIter = taosHashCreateIter(pCacheObj->pHashTable);
|
||||
|
||||
__cache_wr_lock(pCacheObj);
|
||||
|
@ -459,8 +459,8 @@ void taosCacheEmpty(SCacheObj *pCacheObj, bool _remove) {
|
|||
break;
|
||||
}
|
||||
|
||||
SCacheDataNode *pNode = *(SCacheDataNode **)taosHashIterGet(pIter);
|
||||
if (T_REF_VAL_GET(pNode) == 0 || _remove) {
|
||||
SCacheDataNode *pNode = *(SCacheDataNode **) taosHashIterGet(pIter);
|
||||
if (T_REF_VAL_GET(pNode) == 0) {
|
||||
taosCacheReleaseNode(pCacheObj, pNode);
|
||||
} else {
|
||||
taosCacheMoveToTrash(pCacheObj, pNode);
|
||||
|
@ -469,7 +469,7 @@ void taosCacheEmpty(SCacheObj *pCacheObj, bool _remove) {
|
|||
__cache_unlock(pCacheObj);
|
||||
|
||||
taosHashDestroyIter(pIter);
|
||||
taosTrashCanEmpty(pCacheObj, _remove);
|
||||
taosTrashCanEmpty(pCacheObj, false);
|
||||
}
|
||||
|
||||
void taosCacheCleanup(SCacheObj *pCacheObj) {
|
||||
|
@ -623,8 +623,29 @@ void doCleanupDataCache(SCacheObj *pCacheObj) {
|
|||
free(pCacheObj);
|
||||
}
|
||||
|
||||
void* taosCacheRefresh(void *handle) {
|
||||
SCacheObj *pCacheObj = (SCacheObj *)handle;
|
||||
static void doCacheRefresh(SCacheObj* pCacheObj, int64_t time, __cache_free_fn_t fp) {
|
||||
SHashMutableIterator *pIter = taosHashCreateIter(pCacheObj->pHashTable);
|
||||
|
||||
__cache_wr_lock(pCacheObj);
|
||||
while (taosHashIterNext(pIter)) {
|
||||
SCacheDataNode *pNode = *(SCacheDataNode **)taosHashIterGet(pIter);
|
||||
if ((pNode->addedTime + pNode->lifespan * pNode->extendFactor) <= time && T_REF_VAL_GET(pNode) <= 0) {
|
||||
taosCacheReleaseNode(pCacheObj, pNode);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fp) {
|
||||
fp(pNode->data);
|
||||
}
|
||||
}
|
||||
|
||||
__cache_unlock(pCacheObj);
|
||||
|
||||
taosHashDestroyIter(pIter);
|
||||
}
|
||||
|
||||
void* taosCacheTimedRefresh(void *handle) {
|
||||
SCacheObj* pCacheObj = handle;
|
||||
if (pCacheObj == NULL) {
|
||||
uDebug("object is destroyed. no refresh retry");
|
||||
return NULL;
|
||||
|
@ -657,21 +678,8 @@ void* taosCacheRefresh(void *handle) {
|
|||
|
||||
// refresh data in hash table
|
||||
if (elemInHash > 0) {
|
||||
int64_t expiredTime = taosGetTimestampMs();
|
||||
|
||||
SHashMutableIterator *pIter = taosHashCreateIter(pCacheObj->pHashTable);
|
||||
|
||||
__cache_wr_lock(pCacheObj);
|
||||
while (taosHashIterNext(pIter)) {
|
||||
SCacheDataNode *pNode = *(SCacheDataNode **)taosHashIterGet(pIter);
|
||||
if ((pNode->addedTime + pNode->lifespan * pNode->extendFactor) <= expiredTime && T_REF_VAL_GET(pNode) <= 0) {
|
||||
taosCacheReleaseNode(pCacheObj, pNode);
|
||||
}
|
||||
}
|
||||
|
||||
__cache_unlock(pCacheObj);
|
||||
|
||||
taosHashDestroyIter(pIter);
|
||||
int64_t now = taosGetTimestampMs();
|
||||
doCacheRefresh(pCacheObj, now, NULL);
|
||||
}
|
||||
|
||||
taosTrashCanEmpty(pCacheObj, false);
|
||||
|
@ -679,3 +687,12 @@ void* taosCacheRefresh(void *handle) {
|
|||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void taosCacheRefresh(SCacheObj *pCacheObj, __cache_free_fn_t fp) {
|
||||
if (pCacheObj == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
int64_t now = taosGetTimestampMs();
|
||||
doCacheRefresh(pCacheObj, now, fp);
|
||||
}
|
||||
|
|
|
@ -93,16 +93,18 @@ void taosCloseQueue(taos_queue param) {
|
|||
|
||||
void *taosAllocateQitem(int size) {
|
||||
STaosQnode *pNode = (STaosQnode *)calloc(sizeof(STaosQnode) + size, 1);
|
||||
|
||||
if (pNode == NULL) return NULL;
|
||||
uTrace("item:%p, node:%p is allocated", pNode->item, pNode);
|
||||
return (void *)pNode->item;
|
||||
}
|
||||
|
||||
void taosFreeQitem(void *param) {
|
||||
if (param == NULL) return;
|
||||
|
||||
uTrace("item:%p is freed", param);
|
||||
char *temp = (char *)param;
|
||||
temp -= sizeof(STaosQnode);
|
||||
uTrace("item:%p, node:%p is freed", param, temp);
|
||||
free(temp);
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
* it under the terms of the GNU Affero General Public License, version 3
|
||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||
*
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
@ -238,7 +239,7 @@ SSkipListNode *tSkipListPut(SSkipList *pSkipList, SSkipListNode *pNode) {
|
|||
|
||||
// if the new key is greater than the maximum key of skip list, push back this node at the end of skip list
|
||||
char *newDatakey = SL_GET_NODE_KEY(pSkipList, pNode);
|
||||
if (pSkipList->size == 0 || pSkipList->comparFn(pSkipList->lastKey, newDatakey) < 0) {
|
||||
if (pSkipList->size == 0 || pSkipList->comparFn(SL_GET_SL_MAX_KEY(pSkipList), newDatakey) < 0) {
|
||||
return tSkipListPushBack(pSkipList, pNode);
|
||||
}
|
||||
|
||||
|
@ -498,7 +499,7 @@ void tSkipListRemoveNode(SSkipList *pSkipList, SSkipListNode *pNode) {
|
|||
if (pSkipList->lock) {
|
||||
pthread_rwlock_wrlock(pSkipList->lock);
|
||||
}
|
||||
|
||||
|
||||
for (int32_t j = level - 1; j >= 0; --j) {
|
||||
SSkipListNode* prev = SL_GET_BACKWARD_POINTER(pNode, j);
|
||||
SSkipListNode* next = SL_GET_FORWARD_POINTER(pNode, j);
|
||||
|
@ -699,8 +700,6 @@ SSkipListNode* tSkipListPushBack(SSkipList *pSkipList, SSkipListNode *pNode) {
|
|||
SL_GET_BACKWARD_POINTER(pSkipList->pTail, i) = pNode;
|
||||
}
|
||||
|
||||
pSkipList->lastKey = SL_GET_NODE_KEY(pSkipList, pNode);
|
||||
|
||||
atomic_add_fetch_32(&pSkipList->size, 1);
|
||||
if (pSkipList->lock) {
|
||||
pthread_rwlock_unlock(pSkipList->lock);
|
||||
|
|
|
@ -383,10 +383,15 @@ int taosOpenTcpServerSocket(uint32_t ip, uint16_t port) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (taosKeepTcpAlive(sockFd) < 0) return -1;
|
||||
if (taosKeepTcpAlive(sockFd) < 0) {
|
||||
uError("failed to set tcp server keep-alive option, 0x%x:%hu(%s)", ip, port, strerror(errno));
|
||||
close(sockFd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (listen(sockFd, 10) < 0) {
|
||||
uError("listen tcp server socket failed, 0x%x:%hu(%s)", ip, port, strerror(errno));
|
||||
close(sockFd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -161,11 +161,17 @@ int32_t vnodeDrop(int32_t vgId) {
|
|||
int32_t vnodeAlter(void *param, SMDCreateVnodeMsg *pVnodeCfg) {
|
||||
SVnodeObj *pVnode = param;
|
||||
|
||||
if (pVnode->status != TAOS_VN_STATUS_READY)
|
||||
return TSDB_CODE_VND_INVALID_STATUS;
|
||||
// vnode in non-ready state and still needs to return success instead of TSDB_CODE_VND_INVALID_STATUS
|
||||
// cfgVersion can be corrected by status msg
|
||||
if (pVnode->status != TAOS_VN_STATUS_READY) {
|
||||
vDebug("vgId:%d, vnode is not ready, do alter operation later", pVnode->vgId);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
if (pVnode->syncCfg.replica > 1 && pVnode->role == TAOS_SYNC_ROLE_UNSYNCED)
|
||||
return TSDB_CODE_VND_NOT_SYNCED;
|
||||
// the vnode may always fail to synchronize because of it in low cfgVersion
|
||||
// so cannot use the following codes
|
||||
// if (pVnode->syncCfg.replica > 1 && pVnode->role == TAOS_SYNC_ROLE_UNSYNCED)
|
||||
// return TSDB_CODE_VND_NOT_SYNCED;
|
||||
|
||||
pVnode->status = TAOS_VN_STATUS_UPDATING;
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ int32_t vnodeProcessRead(void *param, SReadMsg *pReadMsg) {
|
|||
}
|
||||
|
||||
static int32_t vnodeProcessQueryMsg(SVnodeObj *pVnode, SReadMsg *pReadMsg) {
|
||||
void * pCont = pReadMsg->pCont;
|
||||
void *pCont = pReadMsg->pCont;
|
||||
int32_t contLen = pReadMsg->contLen;
|
||||
SRspRet *pRet = &pReadMsg->rspRet;
|
||||
|
||||
|
@ -74,19 +74,14 @@ static int32_t vnodeProcessQueryMsg(SVnodeObj *pVnode, SReadMsg *pReadMsg) {
|
|||
killQueryMsg->free = htons(killQueryMsg->free);
|
||||
killQueryMsg->qhandle = htobe64(killQueryMsg->qhandle);
|
||||
|
||||
void* handle = NULL;
|
||||
if ((void**) killQueryMsg->qhandle != NULL) {
|
||||
handle = *(void**) killQueryMsg->qhandle;
|
||||
}
|
||||
|
||||
vWarn("QInfo:%p connection %p broken, kill query", handle, pReadMsg->rpcMsg.handle);
|
||||
vWarn("QInfo:%p connection %p broken, kill query", (void*) killQueryMsg->qhandle, pReadMsg->rpcMsg.handle);
|
||||
assert(pReadMsg->rpcMsg.contLen > 0 && killQueryMsg->free == 1);
|
||||
|
||||
void** qhandle = qAcquireQInfo(pVnode->qMgmt, (void**) killQueryMsg->qhandle);
|
||||
void** qhandle = qAcquireQInfo(pVnode->qMgmt, (uint64_t) killQueryMsg->qhandle);
|
||||
if (qhandle == NULL || *qhandle == NULL) {
|
||||
vWarn("QInfo:%p invalid qhandle, no matched query handle, conn:%p", (void*) killQueryMsg->qhandle, pReadMsg->rpcMsg.handle);
|
||||
} else {
|
||||
assert(qhandle == (void**) killQueryMsg->qhandle);
|
||||
assert(*qhandle == (void*) killQueryMsg->qhandle);
|
||||
qReleaseQInfo(pVnode->qMgmt, (void**) &qhandle, true);
|
||||
}
|
||||
|
||||
|
@ -110,7 +105,7 @@ static int32_t vnodeProcessQueryMsg(SVnodeObj *pVnode, SReadMsg *pReadMsg) {
|
|||
|
||||
// current connect is broken
|
||||
if (code == TSDB_CODE_SUCCESS) {
|
||||
handle = qRegisterQInfo(pVnode->qMgmt, pQInfo);
|
||||
handle = qRegisterQInfo(pVnode->qMgmt, (uint64_t) pQInfo);
|
||||
if (handle == NULL) { // failed to register qhandle
|
||||
pRsp->code = TSDB_CODE_QRY_INVALID_QHANDLE;
|
||||
|
||||
|
@ -118,11 +113,11 @@ static int32_t vnodeProcessQueryMsg(SVnodeObj *pVnode, SReadMsg *pReadMsg) {
|
|||
qKillQuery(pQInfo);
|
||||
} else {
|
||||
assert(*handle == pQInfo);
|
||||
pRsp->qhandle = htobe64((uint64_t) (handle));
|
||||
pRsp->qhandle = htobe64((uint64_t) pQInfo);
|
||||
}
|
||||
|
||||
pQInfo = NULL;
|
||||
if (handle != NULL && vnodeNotifyCurrentQhandle(pReadMsg->rpcMsg.handle, handle, pVnode->vgId) != TSDB_CODE_SUCCESS) {
|
||||
if (handle != NULL && vnodeNotifyCurrentQhandle(pReadMsg->rpcMsg.handle, *handle, pVnode->vgId) != TSDB_CODE_SUCCESS) {
|
||||
vError("vgId:%d, QInfo:%p, query discarded since link is broken, %p", pVnode->vgId, *handle, pReadMsg->rpcMsg.handle);
|
||||
pRsp->code = TSDB_CODE_RPC_NETWORK_UNAVAIL;
|
||||
|
||||
|
@ -136,18 +131,18 @@ static int32_t vnodeProcessQueryMsg(SVnodeObj *pVnode, SReadMsg *pReadMsg) {
|
|||
assert(pQInfo == NULL);
|
||||
}
|
||||
if (handle != NULL) {
|
||||
dnodePutItemIntoReadQueue(pVnode, handle);
|
||||
dnodePutItemIntoReadQueue(pVnode, *handle);
|
||||
qReleaseQInfo(pVnode->qMgmt, (void**) &handle, false);
|
||||
}
|
||||
vDebug("vgId:%d, QInfo:%p, dnode query msg disposed", vgId, pQInfo);
|
||||
} else {
|
||||
assert(pCont != NULL);
|
||||
handle = qAcquireQInfo(pVnode->qMgmt, (void**) pCont);
|
||||
handle = qAcquireQInfo(pVnode->qMgmt, (uint64_t) pCont);
|
||||
if (handle == NULL) {
|
||||
vWarn("QInfo:%p invalid qhandle in continuing exec query, conn:%p", *(void**) pCont, pReadMsg->rpcMsg.handle);
|
||||
vWarn("QInfo:%p invalid qhandle in continuing exec query, conn:%p", (void*) pCont, pReadMsg->rpcMsg.handle);
|
||||
code = TSDB_CODE_QRY_INVALID_QHANDLE;
|
||||
} else {
|
||||
vDebug("vgId:%d, QInfo:%p, dnode query msg in progress", pVnode->vgId, *(void**) pCont);
|
||||
vDebug("vgId:%d, QInfo:%p, dnode query msg in progress", pVnode->vgId, (void*) pCont);
|
||||
code = TSDB_CODE_VND_ACTION_IN_PROGRESS;
|
||||
qTableQuery(*handle); // do execute query
|
||||
}
|
||||
|
@ -169,10 +164,10 @@ static int32_t vnodeProcessFetchMsg(SVnodeObj *pVnode, SReadMsg *pReadMsg) {
|
|||
memset(pRet, 0, sizeof(SRspRet));
|
||||
|
||||
int32_t code = TSDB_CODE_SUCCESS;
|
||||
void** handle = qAcquireQInfo(pVnode->qMgmt, (void**) pRetrieve->qhandle);
|
||||
if (handle == NULL || handle != (void**) pRetrieve->qhandle) {
|
||||
void** handle = qAcquireQInfo(pVnode->qMgmt, pRetrieve->qhandle);
|
||||
if (handle == NULL || (*handle) != (void*) pRetrieve->qhandle) {
|
||||
code = TSDB_CODE_QRY_INVALID_QHANDLE;
|
||||
vDebug("vgId:%d, invalid qhandle in fetch result, QInfo:%p", pVnode->vgId, *(void**) pRetrieve->qhandle);
|
||||
vDebug("vgId:%d, invalid qhandle in fetch result, QInfo:%p", pVnode->vgId, (void*) pRetrieve->qhandle);
|
||||
|
||||
pRet->rsp = (SRetrieveTableRsp *)rpcMallocCont(sizeof(SRetrieveTableRsp));
|
||||
pRet->len = sizeof(SRetrieveTableRsp);
|
||||
|
@ -180,8 +175,8 @@ static int32_t vnodeProcessFetchMsg(SVnodeObj *pVnode, SReadMsg *pReadMsg) {
|
|||
memset(pRet->rsp, 0, sizeof(SRetrieveTableRsp));
|
||||
SRetrieveTableRsp* pRsp = pRet->rsp;
|
||||
pRsp->numOfRows = 0;
|
||||
pRsp->completed = true;
|
||||
pRsp->useconds = 0;
|
||||
pRsp->completed = true;
|
||||
|
||||
return code;
|
||||
}
|
||||
|
@ -211,8 +206,8 @@ static int32_t vnodeProcessFetchMsg(SVnodeObj *pVnode, SReadMsg *pReadMsg) {
|
|||
} else { // if failed to dump result, free qhandle immediately
|
||||
if ((code = qDumpRetrieveResult(*handle, (SRetrieveTableRsp **)&pRet->rsp, &pRet->len)) == TSDB_CODE_SUCCESS) {
|
||||
if (qHasMoreResultsToRetrieve(*handle)) {
|
||||
dnodePutItemIntoReadQueue(pVnode, handle);
|
||||
pRet->qhandle = handle;
|
||||
dnodePutItemIntoReadQueue(pVnode, *handle);
|
||||
pRet->qhandle = *handle;
|
||||
freeHandle = false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,19 +49,26 @@ int32_t vnodeProcessWrite(void *param1, int qtype, void *param2, void *item) {
|
|||
SVnodeObj *pVnode = (SVnodeObj *)param1;
|
||||
SWalHead *pHead = param2;
|
||||
|
||||
if (vnodeProcessWriteMsgFp[pHead->msgType] == NULL)
|
||||
if (vnodeProcessWriteMsgFp[pHead->msgType] == NULL) {
|
||||
vDebug("vgId:%d, msgType:%s not processed, no handle", pVnode->vgId, taosMsg[pHead->msgType]);
|
||||
return TSDB_CODE_VND_MSG_NOT_PROCESSED;
|
||||
}
|
||||
|
||||
if (!(pVnode->accessState & TSDB_VN_WRITE_ACCCESS)) {
|
||||
vDebug("vgId:%d, msgType:%s not processed, no write auth", pVnode->vgId, taosMsg[pHead->msgType]);
|
||||
return TSDB_CODE_VND_NO_WRITE_AUTH;
|
||||
}
|
||||
|
||||
if (pHead->version == 0) { // from client or CQ
|
||||
if (pVnode->status != TAOS_VN_STATUS_READY)
|
||||
if (pVnode->status != TAOS_VN_STATUS_READY) {
|
||||
vDebug("vgId:%d, msgType:%s not processed, vnode status is %d", pVnode->vgId, taosMsg[pHead->msgType], pVnode->status);
|
||||
return TSDB_CODE_VND_INVALID_STATUS; // it may be in deleting or closing state
|
||||
}
|
||||
|
||||
if (pVnode->syncCfg.replica > 1 && pVnode->role != TAOS_SYNC_ROLE_MASTER)
|
||||
if (pVnode->syncCfg.replica > 1 && pVnode->role != TAOS_SYNC_ROLE_MASTER) {
|
||||
vDebug("vgId:%d, msgType:%s not processed, replica:%d role:%d", pVnode->vgId, taosMsg[pHead->msgType], pVnode->syncCfg.replica, pVnode->role);
|
||||
return TSDB_CODE_RPC_NOT_READY;
|
||||
}
|
||||
|
||||
// assign version
|
||||
pVnode->version++;
|
||||
|
|
|
@ -40,8 +40,10 @@ class TDTestCase:
|
|||
ret = tdSql.query('select server_status() as result')
|
||||
tdSql.checkData(0, 0, 1)
|
||||
|
||||
ret = tdSql.execute('alter dnode 127.0.0.1 debugFlag 135')
|
||||
tdLog.info("alter dnode ret: %d" % ret)
|
||||
ret = tdSql.query('show dnodes')
|
||||
|
||||
ret = tdSql.execute('alter dnode "%s" debugFlag 135' % tdSql.getData(0,1))
|
||||
tdLog.info('alter dnode "%s" debugFlag 135 -> ret: %d' % (tdSql.getData(0, 1), ret))
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
|
|
|
@ -145,8 +145,11 @@ python3 ./test.py -f query/queryJoin.py
|
|||
python3 ./test.py -f query/select_last_crash.py
|
||||
|
||||
#stream
|
||||
python3 ./test.py -f stream/metric_1.py
|
||||
python3 ./test.py -f stream/new.py
|
||||
python3 ./test.py -f stream/stream1.py
|
||||
python3 ./test.py -f stream/stream2.py
|
||||
python3 ./test.py -f stream/parser.py
|
||||
|
||||
#alter table
|
||||
python3 ./test.py -f alter/alter_table_crash.py
|
||||
|
|
|
@ -0,0 +1,104 @@
|
|||
###################################################################
|
||||
# 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 time
|
||||
import taos
|
||||
from util.log import tdLog
|
||||
from util.cases import tdCases
|
||||
from util.sql import tdSql
|
||||
|
||||
|
||||
class TDTestCase:
|
||||
def init(self, conn, logSql):
|
||||
tdLog.debug("start to execute %s" % __file__)
|
||||
tdSql.init(conn.cursor(), logSql)
|
||||
|
||||
def createFuncStream(self, expr, suffix, value):
|
||||
tbname = "strm_" + suffix
|
||||
tdLog.info("create stream table %s" % tbname)
|
||||
tdSql.query("select %s from stb interval(1d)" % expr)
|
||||
tdSql.checkData(0, 1, value)
|
||||
tdSql.execute("create table %s as select %s from stb interval(1d)" % (tbname, expr))
|
||||
|
||||
def checkStreamData(self, suffix, value):
|
||||
sql = "select * from strm_" + suffix
|
||||
tdSql.waitedQuery(sql, 1, 120)
|
||||
tdSql.checkData(0, 1, value)
|
||||
|
||||
def run(self):
|
||||
tbNum = 10
|
||||
rowNum = 20
|
||||
|
||||
tdSql.prepare()
|
||||
|
||||
tdLog.info("===== preparing data =====")
|
||||
tdSql.execute(
|
||||
"create table stb(ts timestamp, tbcol int, tbcol2 float) tags(tgcol int)")
|
||||
for i in range(tbNum):
|
||||
tdSql.execute("create table tb%d using stb tags(%d)" % (i, i))
|
||||
for j in range(rowNum):
|
||||
tdSql.execute(
|
||||
"insert into tb%d values (now - %dm, %d, %d)" %
|
||||
(i, 1440 - j, j, j))
|
||||
time.sleep(0.1)
|
||||
|
||||
self.createFuncStream("count(*)", "c1", 200)
|
||||
self.createFuncStream("count(tbcol)", "c2", 200)
|
||||
self.createFuncStream("count(tbcol2)", "c3", 200)
|
||||
self.createFuncStream("avg(tbcol)", "av", 9.5)
|
||||
self.createFuncStream("sum(tbcol)", "su", 1900)
|
||||
self.createFuncStream("min(tbcol)", "mi", 0)
|
||||
self.createFuncStream("max(tbcol)", "ma", 19)
|
||||
self.createFuncStream("first(tbcol)", "fi", 0)
|
||||
self.createFuncStream("last(tbcol)", "la", 19)
|
||||
#tdSql.query("select stddev(tbcol) from stb interval(1d)")
|
||||
#tdSql.query("select leastsquares(tbcol, 1, 1) from stb interval(1d)")
|
||||
tdSql.query("select top(tbcol, 1) from stb interval(1d)")
|
||||
tdSql.query("select bottom(tbcol, 1) from stb interval(1d)")
|
||||
#tdSql.query("select percentile(tbcol, 1) from stb interval(1d)")
|
||||
#tdSql.query("select diff(tbcol) from stb interval(1d)")
|
||||
|
||||
tdSql.query("select count(tbcol) from stb where ts < now + 4m interval(1d)")
|
||||
tdSql.checkData(0, 1, 200)
|
||||
#tdSql.execute("create table strm_wh as select count(tbcol) from stb where ts < now + 4m interval(1d)")
|
||||
|
||||
self.createFuncStream("count(tbcol)", "as", 200)
|
||||
|
||||
tdSql.query("select count(tbcol) from stb interval(1d) group by tgcol")
|
||||
tdSql.checkData(0, 1, 20)
|
||||
|
||||
tdSql.query("select count(tbcol) from stb where ts < now + 4m interval(1d) group by tgcol")
|
||||
tdSql.checkData(0, 1, 20)
|
||||
|
||||
self.checkStreamData("c1", 200)
|
||||
self.checkStreamData("c2", 200)
|
||||
self.checkStreamData("c3", 200)
|
||||
self.checkStreamData("av", 9.5)
|
||||
self.checkStreamData("su", 1900)
|
||||
self.checkStreamData("mi", 0)
|
||||
self.checkStreamData("ma", 19)
|
||||
self.checkStreamData("fi", 0)
|
||||
self.checkStreamData("la", 19)
|
||||
#self.checkStreamData("wh", 200)
|
||||
self.checkStreamData("as", 200)
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
tdLog.success("%s successfully executed" % __file__)
|
||||
|
||||
|
||||
tdCases.addWindows(__file__, TDTestCase())
|
||||
tdCases.addLinux(__file__, TDTestCase())
|
||||
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
###################################################################
|
||||
# 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 time
|
||||
import taos
|
||||
from util.log import tdLog
|
||||
from util.cases import tdCases
|
||||
from util.sql import tdSql
|
||||
|
||||
|
||||
class TDTestCase:
|
||||
def init(self, conn, logSql):
|
||||
tdLog.debug("start to execute %s" % __file__)
|
||||
tdSql.init(conn.cursor(), logSql)
|
||||
|
||||
def run(self):
|
||||
rowNum = 200
|
||||
totalNum = 200
|
||||
tdSql.prepare()
|
||||
|
||||
tdLog.info("=============== step1")
|
||||
tdSql.execute("create table mt(ts timestamp, tbcol int, tbcol2 float) TAGS(tgcol int)")
|
||||
for i in range(5):
|
||||
tdSql.execute("create table tb%d using mt tags(%d)" % (i, i))
|
||||
for j in range(rowNum):
|
||||
tdSql.execute("insert into tb%d values(now + %ds, %d, %d)" % (i, j, j, j))
|
||||
time.sleep(0.1)
|
||||
|
||||
tdLog.info("=============== step2")
|
||||
tdSql.query("select count(*), count(tbcol), count(tbcol2) from mt interval(10s)")
|
||||
tdSql.execute("create table st as select count(*), count(tbcol), count(tbcol2) from mt interval(10s)")
|
||||
|
||||
tdLog.info("=============== step3")
|
||||
tdSql.waitedQuery("select * from st", 1, 120)
|
||||
v = tdSql.getData(0, 3)
|
||||
if v >= 51:
|
||||
tdLog.exit("value is %d, which is larger than 51" % v)
|
||||
|
||||
tdLog.info("=============== step4")
|
||||
for i in range(5, 10):
|
||||
tdSql.execute("create table tb%d using mt tags(%d)" % (i, i))
|
||||
for j in range(rowNum):
|
||||
tdSql.execute("insert into tb%d values(now + %ds, %d, %d)" % (i, j, j, j))
|
||||
|
||||
tdLog.info("=============== step5")
|
||||
tdLog.sleep(30)
|
||||
tdSql.waitedQuery("select * from st order by ts desc", 1, 120)
|
||||
v = tdSql.getData(0, 3)
|
||||
if v <= 51:
|
||||
tdLog.exit("value is %d, which is smaller than 51" % v)
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
tdLog.success("%s successfully executed" % __file__)
|
||||
|
||||
|
||||
tdCases.addWindows(__file__, TDTestCase())
|
||||
tdCases.addLinux(__file__, TDTestCase())
|
||||
|
||||
|
|
@ -0,0 +1,182 @@
|
|||
###################################################################
|
||||
# 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 time
|
||||
import taos
|
||||
from util.log import tdLog
|
||||
from util.cases import tdCases
|
||||
from util.sql import tdSql
|
||||
|
||||
|
||||
class TDTestCase:
|
||||
def init(self, conn, logSql):
|
||||
tdLog.debug("start to execute %s" % __file__)
|
||||
tdSql.init(conn.cursor(), logSql)
|
||||
|
||||
'''
|
||||
def bug2222(self):
|
||||
tdSql.prepare()
|
||||
tdSql.execute("create table superreal(ts timestamp, addr binary(5), val float) tags (deviceNo binary(20))")
|
||||
tdSql.execute("create table real_001 using superreal tags('001')")
|
||||
tdSql.execute("create table tj_001 as select sum(val) from real_001 interval(1m)")
|
||||
|
||||
t = datetime.datetime.now()
|
||||
for i in range(60):
|
||||
ts = t.strftime("%Y-%m-%d %H:%M")
|
||||
t += datetime.timedelta(minutes=1)
|
||||
sql = "insert into real_001 values('%s:0%d', '1', %d)" % (ts, 0, i)
|
||||
for j in range(4):
|
||||
sql += ",('%s:0%d', '%d', %d)" % (ts, j + 1, j + 1, i)
|
||||
tdSql.execute(sql)
|
||||
time.sleep(60 + random.random() * 60 - 30)
|
||||
'''
|
||||
|
||||
def tbase300(self):
|
||||
tdLog.debug("begin tbase300")
|
||||
|
||||
tdSql.prepare()
|
||||
tdSql.execute("create table mt(ts timestamp, c1 int, c2 int) tags(t1 int)")
|
||||
tdSql.execute("create table tb1 using mt tags(1)");
|
||||
tdSql.execute("create table tb2 using mt tags(2)");
|
||||
tdSql.execute("create table strm as select count(*), avg(c1), sum(c2), max(c1), min(c2),first(c1), last(c2) from mt interval(4s) sliding(2s)")
|
||||
#tdSql.execute("create table strm as select count(*), avg(c1), sum(c2), max(c1), min(c2), first(c1) from mt interval(4s) sliding(2s)")
|
||||
tdLog.sleep(10)
|
||||
tdSql.execute("insert into tb2 values(now, 1, 1)");
|
||||
tdSql.execute("insert into tb1 values(now, 1, 1)");
|
||||
tdLog.sleep(4)
|
||||
tdSql.query("select * from mt")
|
||||
tdSql.query("select * from strm")
|
||||
tdSql.execute("drop table tb1")
|
||||
|
||||
tdSql.waitedQuery("select * from strm", 1, 100)
|
||||
if tdSql.queryRows < 1 or tdSql.queryRows > 2:
|
||||
tdLog.exit("rows should be 1 or 2")
|
||||
|
||||
tdSql.execute("drop table tb2")
|
||||
tdSql.execute("drop table mt")
|
||||
tdSql.execute("drop table strm")
|
||||
|
||||
def tbase304(self):
|
||||
tdLog.debug("begin tbase304")
|
||||
# we cannot reset query cache in server side, as a workaround,
|
||||
# set super table name to mt304, need to change back to mt later
|
||||
tdSql.execute("create table mt304 (ts timestamp, c1 int) tags(t1 int, t2 int)")
|
||||
tdSql.execute("create table tb1 using mt304 tags(1, 1)")
|
||||
tdSql.execute("create table tb2 using mt304 tags(1, -1)")
|
||||
time.sleep(0.1)
|
||||
tdSql.execute("create table strm as select count(*), avg(c1) from mt304 where t2 >= 0 interval(4s) sliding(2s)")
|
||||
tdSql.execute("insert into tb1 values (now,1)")
|
||||
tdSql.execute("insert into tb2 values (now,2)")
|
||||
|
||||
tdSql.waitedQuery("select * from strm", 1, 100)
|
||||
if tdSql.queryRows < 1 or tdSql.queryRows > 2:
|
||||
tdLog.exit("rows should be 1 or 2")
|
||||
|
||||
tdSql.checkData(0, 1, 1)
|
||||
tdSql.checkData(0, 2, 1.000000000)
|
||||
tdSql.execute("alter table mt304 drop tag t2")
|
||||
tdSql.execute("insert into tb2 values (now,2)")
|
||||
tdSql.execute("insert into tb1 values (now,1)")
|
||||
tdSql.query("select * from strm")
|
||||
tdSql.execute("alter table mt304 add tag t2 int")
|
||||
tdLog.sleep(1)
|
||||
tdSql.query("select * from strm")
|
||||
|
||||
def wildcardFilterOnTags(self):
|
||||
tdLog.debug("begin wildcardFilterOnTag")
|
||||
tdSql.prepare()
|
||||
tdSql.execute("create table stb (ts timestamp, c1 int, c2 binary(10)) tags(t1 binary(10))")
|
||||
tdSql.execute("create table tb1 using stb tags('a1')")
|
||||
tdSql.execute("create table tb2 using stb tags('b2')")
|
||||
tdSql.execute("create table tb3 using stb tags('a3')")
|
||||
tdSql.execute("create table strm as select count(*), avg(c1), first(c2) from stb where t1 like 'a%' interval(4s) sliding(2s)")
|
||||
tdSql.query("describe strm")
|
||||
tdSql.checkRows(4)
|
||||
|
||||
tdLog.sleep(1)
|
||||
tdSql.execute("insert into tb1 values (now, 0, 'tb1')")
|
||||
tdLog.sleep(4)
|
||||
tdSql.execute("insert into tb2 values (now, 2, 'tb2')")
|
||||
tdLog.sleep(4)
|
||||
tdSql.execute("insert into tb3 values (now, 0, 'tb3')")
|
||||
|
||||
tdSql.waitedQuery("select * from strm", 4, 60)
|
||||
tdSql.checkRows(4)
|
||||
tdSql.checkData(0, 2, 0.000000000)
|
||||
if tdSql.getData(0, 3) == 'tb2':
|
||||
tdLog.exit("unexpected value of data03")
|
||||
if tdSql.getData(1, 3) == 'tb2':
|
||||
tdLog.exit("unexpected value of data13")
|
||||
if tdSql.getData(2, 3) == 'tb2':
|
||||
tdLog.exit("unexpected value of data23")
|
||||
if tdSql.getData(3, 3) == 'tb2':
|
||||
tdLog.exit("unexpected value of data33")
|
||||
|
||||
tdLog.info("add table tb4 to see if stream still works correctly")
|
||||
# The vnode client needs to refresh metadata cache to allow strm calculate tb4's data.
|
||||
# But the current refreshing frequency is every 10 min
|
||||
# commented out the case below to save running time
|
||||
tdSql.execute("create table tb4 using stb tags('a4')")
|
||||
tdSql.execute("insert into tb4 values(now, 4, 'tb4')")
|
||||
tdSql.waitedQuery("select * from strm order by ts desc", 6, 60)
|
||||
tdSql.checkRows(6)
|
||||
tdSql.checkData(0, 2, 4)
|
||||
tdSql.checkData(0, 3, "tb4")
|
||||
|
||||
tdLog.info("change tag values to see if stream still works correctly")
|
||||
tdSql.execute("alter table tb4 set tag t1='b4'")
|
||||
tdLog.sleep(3)
|
||||
tdSql.execute("insert into tb1 values (now, 1, 'tb1_a1')")
|
||||
tdLog.sleep(4)
|
||||
tdSql.execute("insert into tb4 values (now, -4, 'tb4_b4')")
|
||||
tdSql.waitedQuery("select * from strm order by ts desc", 8, 100)
|
||||
tdSql.checkRows(8)
|
||||
tdSql.checkData(0, 2, 1)
|
||||
tdSql.checkData(0, 3, "tb1_a1")
|
||||
|
||||
def datatypes(self):
|
||||
tdLog.debug("begin data types")
|
||||
tdSql.prepare()
|
||||
tdSql.execute("create table stb3 (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 binary(15), c6 nchar(15), c7 bool) tags(t1 int, t2 binary(15))")
|
||||
tdSql.execute("create table tb0 using stb3 tags(0, 'tb0')")
|
||||
tdSql.execute("create table tb1 using stb3 tags(1, 'tb1')")
|
||||
tdSql.execute("create table tb2 using stb3 tags(2, 'tb2')")
|
||||
tdSql.execute("create table tb3 using stb3 tags(3, 'tb3')")
|
||||
tdSql.execute("create table tb4 using stb3 tags(4, 'tb4')")
|
||||
|
||||
tdSql.execute("create table strm0 as select count(ts), count(c1), max(c2), min(c4), first(c5), last(c6) from stb3 where ts < now + 30s interval(4s) sliding(2s)")
|
||||
#tdSql.execute("create table strm0 as select count(ts), count(c1), max(c2), min(c4), first(c5) from stb where ts < now + 30s interval(4s) sliding(2s)")
|
||||
tdLog.sleep(1)
|
||||
tdSql.execute("insert into tb0 values (now, 0, 0, 0, 0, 'binary0', '涛思0', true) tb1 values (now, 1, 1, 1, 1, 'binary1', '涛思1', false) tb2 values (now, 2, 2, 2, 2, 'binary2', '涛思2', true) tb3 values (now, 3, 3, 3, 3, 'binary3', '涛思3', false) tb4 values (now, 4, 4, 4, 4, 'binary4', '涛思4', true) ")
|
||||
|
||||
tdSql.waitedQuery("select * from strm0 order by ts desc", 2, 120)
|
||||
tdSql.checkRows(2)
|
||||
|
||||
tdSql.execute("insert into tb0 values (now, 10, 10, 10, 10, 'binary0', '涛思0', true) tb1 values (now, 11, 11, 11, 11, 'binary1', '涛思1', false) tb2 values (now, 12, 12, 12, 12, 'binary2', '涛思2', true) tb3 values (now, 13, 13, 13, 13, 'binary3', '涛思3', false) tb4 values (now, 14, 14, 14, 14, 'binary4', '涛思4', true) ")
|
||||
tdSql.waitedQuery("select * from strm0 order by ts desc", 4, 120)
|
||||
tdSql.checkRows(4)
|
||||
|
||||
def run(self):
|
||||
self.tbase300()
|
||||
self.tbase304()
|
||||
self.wildcardFilterOnTags()
|
||||
self.datatypes()
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
tdLog.success("%s successfully executed" % __file__)
|
||||
|
||||
|
||||
tdCases.addWindows(__file__, TDTestCase())
|
||||
tdCases.addLinux(__file__, TDTestCase())
|
|
@ -55,10 +55,7 @@ class TDTestCase:
|
|||
tdSql.checkRows(tbNum + 1)
|
||||
|
||||
tdLog.info("===== step3 =====")
|
||||
tdLog.info("sleeping 120 seconds")
|
||||
time.sleep(120)
|
||||
tdSql.query("select * from s0")
|
||||
|
||||
tdSql.waitedQuery("select * from s0", 1, 120)
|
||||
try:
|
||||
tdSql.checkData(0, 1, rowNum)
|
||||
tdSql.checkData(0, 2, rowNum)
|
||||
|
@ -82,10 +79,7 @@ class TDTestCase:
|
|||
tdSql.checkRows(tbNum + 1)
|
||||
|
||||
tdLog.info("===== step7 =====")
|
||||
tdLog.info("sleeping 120 seconds")
|
||||
time.sleep(120)
|
||||
|
||||
tdSql.query("select * from s0")
|
||||
tdSql.waitedQuery("select * from s0", 1, 120)
|
||||
try:
|
||||
tdSql.checkData(0, 1, rowNum)
|
||||
tdSql.checkData(0, 2, rowNum)
|
||||
|
@ -108,10 +102,7 @@ class TDTestCase:
|
|||
tdSql.checkRows(tbNum + 2)
|
||||
|
||||
tdLog.info("===== step9 =====")
|
||||
tdLog.info("sleeping 120 seconds")
|
||||
time.sleep(120)
|
||||
|
||||
tdSql.query("select * from s1")
|
||||
tdSql.waitedQuery("select * from s1", 1, 120)
|
||||
try:
|
||||
tdSql.checkData(0, 1, rowNum * tbNum)
|
||||
tdSql.checkData(0, 2, rowNum * tbNum)
|
||||
|
@ -134,9 +125,7 @@ class TDTestCase:
|
|||
tdSql.checkRows(tbNum + 2)
|
||||
|
||||
tdLog.info("===== step13 =====")
|
||||
tdLog.info("sleeping 120 seconds")
|
||||
time.sleep(120)
|
||||
tdSql.query("select * from s1")
|
||||
tdSql.waitedQuery("select * from s1", 1, 120)
|
||||
try:
|
||||
tdSql.checkData(0, 1, rowNum * tbNum)
|
||||
tdSql.checkData(0, 2, rowNum * tbNum)
|
||||
|
|
|
@ -53,8 +53,7 @@ class TDTestCase:
|
|||
tdSql.checkRows(tbNum + 1)
|
||||
|
||||
tdLog.info("===== step3 =====")
|
||||
time.sleep(120)
|
||||
tdSql.query("select * from s0")
|
||||
tdSql.waitedQuery("select * from s0", 1, 120)
|
||||
try:
|
||||
tdSql.checkData(0, 1, rowNum)
|
||||
except Exception as e:
|
||||
|
@ -81,8 +80,7 @@ class TDTestCase:
|
|||
tdLog.info(repr(e))
|
||||
|
||||
tdLog.info("===== step7 =====")
|
||||
time.sleep(120)
|
||||
tdSql.query("select * from s0")
|
||||
tdSql.waitedQuery("select * from s0", 1, 120)
|
||||
try:
|
||||
tdSql.checkData(0, 1, rowNum)
|
||||
tdSql.checkData(0, 2, rowNum)
|
||||
|
@ -107,8 +105,7 @@ class TDTestCase:
|
|||
tdSql.checkRows(tbNum + 2)
|
||||
|
||||
tdLog.info("===== step9 =====")
|
||||
time.sleep(120)
|
||||
tdSql.query("select * from s1")
|
||||
tdSql.waitedQuery("select * from s1", 1, 120)
|
||||
try:
|
||||
tdSql.checkData(0, 1, totalNum)
|
||||
tdSql.checkData(0, 2, totalNum)
|
||||
|
@ -137,8 +134,7 @@ class TDTestCase:
|
|||
tdLog.info(repr(e))
|
||||
|
||||
tdLog.info("===== step13 =====")
|
||||
time.sleep(120)
|
||||
tdSql.query("select * from s1")
|
||||
tdSql.waitedQuery("select * from s1", 1, 120)
|
||||
try:
|
||||
tdSql.checkData(0, 1, totalNum)
|
||||
#tdSql.checkData(0, 2, None)
|
||||
|
|
|
@ -190,32 +190,31 @@ class TDDnode:
|
|||
"dnode:%d is deployed and configured by %s" %
|
||||
(self.index, self.cfgPath))
|
||||
|
||||
def start(self):
|
||||
def getBuildPath(self):
|
||||
selfPath = os.path.dirname(os.path.realpath(__file__))
|
||||
binPath = ""
|
||||
|
||||
if ("community" in selfPath):
|
||||
projPath = selfPath + "/../../../../"
|
||||
|
||||
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):
|
||||
binPath = os.path.join(root, "taosd")
|
||||
break
|
||||
projPath = selfPath[:selfPath.find("community")]
|
||||
else:
|
||||
projPath = selfPath + "/../../../"
|
||||
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):
|
||||
binPath = os.path.join(root, "taosd")
|
||||
break
|
||||
projPath = selfPath[:selfPath.find("tests")]
|
||||
|
||||
if (binPath == ""):
|
||||
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 start(self):
|
||||
buildPath = self.getBuildPath()
|
||||
|
||||
if (buildPath == ""):
|
||||
tdLog.exit("taosd not found!")
|
||||
else:
|
||||
tdLog.info("taosd found in %s" % rootRealPath)
|
||||
tdLog.info("taosd found in %s" % buildPath)
|
||||
|
||||
binPath = buildPath + "/build/bin/taosd"
|
||||
|
||||
if self.deployed == 0:
|
||||
tdLog.exit("dnode:%d is not deployed" % (self.index))
|
||||
|
|
|
@ -29,10 +29,8 @@ class TDSql:
|
|||
self.cursor = cursor
|
||||
|
||||
if (log):
|
||||
frame = inspect.stack()[1]
|
||||
callerModule = inspect.getmodule(frame[0])
|
||||
callerFilename = callerModule.__file__
|
||||
self.cursor.log(callerFilename + ".sql")
|
||||
caller = inspect.getframeinfo(inspect.stack()[1][0])
|
||||
self.cursor.log(caller.filename + ".sql")
|
||||
|
||||
def close(self):
|
||||
self.cursor.close()
|
||||
|
@ -55,12 +53,8 @@ class TDSql:
|
|||
except BaseException:
|
||||
expectErrNotOccured = False
|
||||
if expectErrNotOccured:
|
||||
frame = inspect.stack()[1]
|
||||
callerModule = inspect.getmodule(frame[0])
|
||||
callerFilename = callerModule.__file__
|
||||
tdLog.exit(
|
||||
"%s failed: sql:%s, expect error not occured" %
|
||||
(callerFilename, sql))
|
||||
caller = inspect.getframeinfo(inspect.stack()[1][0])
|
||||
tdLog.exit("%s(%d) failed: sql:%s, expect error not occured" % (caller.filename, caller.lineno, sql))
|
||||
else:
|
||||
self.queryRows = 0
|
||||
self.queryCols = 0
|
||||
|
@ -69,75 +63,68 @@ class TDSql:
|
|||
|
||||
def query(self, sql):
|
||||
self.sql = sql
|
||||
self.cursor.execute(sql)
|
||||
self.queryResult = self.cursor.fetchall()
|
||||
self.queryRows = len(self.queryResult)
|
||||
self.queryCols = len(self.cursor.description)
|
||||
# if self.queryRows == 1 and self.queryCols == 1:
|
||||
# tdLog.info("sql:%s, rows:%d cols:%d data:%s" % (self.sql, self.queryRows, self.queryCols, self.queryResult[0][0]))
|
||||
# else:
|
||||
# tdLog.info("sql:%s, rows:%d cols:%d" % (self.sql, self.queryRows, self.queryCols))
|
||||
try:
|
||||
self.cursor.execute(sql)
|
||||
self.queryResult = self.cursor.fetchall()
|
||||
self.queryRows = len(self.queryResult)
|
||||
self.queryCols = len(self.cursor.description)
|
||||
except Exception as e:
|
||||
caller = inspect.getframeinfo(inspect.stack()[1][0])
|
||||
args = (caller.filename, caller.lineno, sql, repr(e))
|
||||
tdLog.exit("%s(%d) failed: sql:%s, %s" % args)
|
||||
return self.queryRows
|
||||
|
||||
def waitedQuery(self, sql, expectRows, timeout):
|
||||
tdLog.info("sql: %s, try to retrieve %d rows in %d seconds" % (sql, expectRows, timeout))
|
||||
self.sql = sql
|
||||
try:
|
||||
for i in range(timeout):
|
||||
self.cursor.execute(sql)
|
||||
self.queryResult = self.cursor.fetchall()
|
||||
self.queryRows = len(self.queryResult)
|
||||
self.queryCols = len(self.cursor.description)
|
||||
if self.queryRows >= expectRows:
|
||||
return (self.queryRows, i)
|
||||
time.sleep(1)
|
||||
except Exception as e:
|
||||
caller = inspect.getframeinfo(inspect.stack()[1][0])
|
||||
args = (caller.filename, caller.lineno, sql, repr(e))
|
||||
tdLog.exit("%s(%d) failed: sql:%s, %s" % args)
|
||||
return (self.queryRows, timeout)
|
||||
|
||||
def checkRows(self, expectRows):
|
||||
if self.queryRows != expectRows:
|
||||
frame = inspect.stack()[1]
|
||||
callerModule = inspect.getmodule(frame[0])
|
||||
callerFilename = callerModule.__file__
|
||||
tdLog.exit(
|
||||
"%s failed: sql:%s, queryRows:%d != expect:%d" %
|
||||
(callerFilename, self.sql, self.queryRows, expectRows))
|
||||
tdLog.info("sql:%s, queryRows:%d == expect:%d" %
|
||||
(self.sql, self.queryRows, expectRows))
|
||||
if self.queryRows == expectRows:
|
||||
tdLog.info("sql:%s, queryRows:%d == expect:%d" % (self.sql, self.queryRows, expectRows))
|
||||
else:
|
||||
caller = inspect.getframeinfo(inspect.stack()[1][0])
|
||||
args = (caller.filename, caller.lineno, self.sql, self.queryRows, expectRows)
|
||||
tdLog.exit("%s(%d) failed: sql:%s, queryRows:%d != expect:%d" % args)
|
||||
|
||||
def checkRowCol(self, row, col):
|
||||
caller = inspect.getframeinfo(inspect.stack()[2][0])
|
||||
if row < 0:
|
||||
args = (caller.filename, caller.lineno, self.sql, row)
|
||||
tdLog.exit("%s(%d) failed: sql:%s, row:%d is smaller than zero" % args)
|
||||
if col < 0:
|
||||
args = (caller.filename, caller.lineno, self.sql, row)
|
||||
tdLog.exit("%s(%d) failed: sql:%s, col:%d is smaller than zero" % args)
|
||||
if row > self.queryRows:
|
||||
args = (caller.filename, caller.lineno, self.sql, row, self.queryRows)
|
||||
tdLog.exit("%s(%d) failed: sql:%s, row:%d is larger than queryRows:%d" % args)
|
||||
if col > self.queryCols:
|
||||
args = (caller.filename, caller.lineno, self.sql, col, self.queryCols)
|
||||
tdLog.exit("%s(%d) failed: sql:%s, col:%d is larger than queryCols:%d" % args)
|
||||
|
||||
def checkDataType(self, row, col, dataType):
|
||||
frame = inspect.stack()[1]
|
||||
callerModule = inspect.getmodule(frame[0])
|
||||
callerFilename = callerModule.__file__
|
||||
|
||||
if row < 0:
|
||||
tdLog.exit(
|
||||
"%s failed: sql:%s, row:%d is smaller than zero" %
|
||||
(callerFilename, self.sql, row))
|
||||
if col < 0:
|
||||
tdLog.exit(
|
||||
"%s failed: sql:%s, col:%d is smaller than zero" %
|
||||
(callerFilename, self.sql, col))
|
||||
if row > self.queryRows:
|
||||
tdLog.exit(
|
||||
"%s failed: sql:%s, row:%d is larger than queryRows:%d" %
|
||||
(callerFilename, self.sql, row, self.queryRows))
|
||||
if col > self.queryCols:
|
||||
tdLog.exit(
|
||||
"%s failed: sql:%s, col:%d is larger than queryCols:%d" %
|
||||
(callerFilename, self.sql, col, self.queryCols))
|
||||
|
||||
self.checkRowCol(row, col)
|
||||
return self.cursor.istype(col, dataType)
|
||||
|
||||
def checkData(self, row, col, data):
|
||||
frame = inspect.stack()[1]
|
||||
callerModule = inspect.getmodule(frame[0])
|
||||
callerFilename = callerModule.__file__
|
||||
|
||||
if row < 0:
|
||||
tdLog.exit(
|
||||
"%s failed: sql:%s, row:%d is smaller than zero" %
|
||||
(callerFilename, self.sql, row))
|
||||
if col < 0:
|
||||
tdLog.exit(
|
||||
"%s failed: sql:%s, col:%d is smaller than zero" %
|
||||
(callerFilename, self.sql, col))
|
||||
if row > self.queryRows:
|
||||
tdLog.exit(
|
||||
"%s failed: sql:%s, row:%d is larger than queryRows:%d" %
|
||||
(callerFilename, self.sql, row, self.queryRows))
|
||||
if col > self.queryCols:
|
||||
tdLog.exit(
|
||||
"%s failed: sql:%s, col:%d is larger than queryCols:%d" %
|
||||
(callerFilename, self.sql, col, self.queryCols))
|
||||
self.checkRowCol(row, col)
|
||||
if self.queryResult[row][col] != data:
|
||||
tdLog.exit("%s failed: sql:%s row:%d col:%d data:%s != expect:%s" % (
|
||||
callerFilename, self.sql, row, col, self.queryResult[row][col], data))
|
||||
caller = inspect.getframeinfo(inspect.stack()[1][0])
|
||||
args = (caller.filename, caller.lineno, self.sql, row, col, self.queryResult[row][col], data)
|
||||
tdLog.exit("%s(%d) failed: sql:%s row:%d col:%d data:%s != expect:%s" % args)
|
||||
|
||||
if data is None:
|
||||
tdLog.info("sql:%s, row:%d col:%d data:%s == expect:%s" %
|
||||
|
@ -153,26 +140,7 @@ class TDSql:
|
|||
(self.sql, row, col, self.queryResult[row][col], data))
|
||||
|
||||
def getData(self, row, col):
|
||||
frame = inspect.stack()[1]
|
||||
callerModule = inspect.getmodule(frame[0])
|
||||
callerFilename = callerModule.__file__
|
||||
|
||||
if row < 0:
|
||||
tdLog.exit(
|
||||
"%s failed: sql:%s, row:%d is smaller than zero" %
|
||||
(callerFilename, self.sql, row))
|
||||
if col < 0:
|
||||
tdLog.exit(
|
||||
"%s failed: sql:%s, col:%d is smaller than zero" %
|
||||
(callerFilename, self.sql, col))
|
||||
if row > self.queryRows:
|
||||
tdLog.exit(
|
||||
"%s failed: sql:%s, row:%d is larger than queryRows:%d" %
|
||||
(callerFilename, self.sql, row, self.queryRows))
|
||||
if col > self.queryCols:
|
||||
tdLog.exit(
|
||||
"%s failed: sql:%s, col:%d is larger than queryCols:%d" %
|
||||
(callerFilename, self.sql, col, self.queryCols))
|
||||
self.checkRowCol(row, col)
|
||||
return self.queryResult[row][col]
|
||||
|
||||
def executeTimes(self, sql, times):
|
||||
|
@ -185,20 +153,21 @@ class TDSql:
|
|||
|
||||
def execute(self, sql):
|
||||
self.sql = sql
|
||||
self.affectedRows = self.cursor.execute(sql)
|
||||
try:
|
||||
self.affectedRows = self.cursor.execute(sql)
|
||||
except Exception as e:
|
||||
caller = inspect.getframeinfo(inspect.stack()[1][0])
|
||||
args = (caller.filename, caller.lineno, sql, repr(e))
|
||||
tdLog.exit("%s(%d) failed: sql:%s, %s" % args)
|
||||
return self.affectedRows
|
||||
|
||||
def checkAffectedRows(self, expectAffectedRows):
|
||||
if self.affectedRows != expectAffectedRows:
|
||||
frame = inspect.stack()[1]
|
||||
callerModule = inspect.getmodule(frame[0])
|
||||
callerFilename = callerModule.__file__
|
||||
caller = inspect.getframeinfo(inspect.stack()[1][0])
|
||||
args = (caller.filename, caller.lineno, self.sql, self.affectedRows, expectAffectedRows)
|
||||
tdLog.exit("%s(%d) failed: sql:%s, affectedRows:%d != expect:%d" % args)
|
||||
|
||||
tdLog.exit(
|
||||
"%s failed: sql:%s, affectedRows:%d != expect:%d" %
|
||||
(callerFilename, self.sql, self.affectedRows, expectAffectedRows))
|
||||
tdLog.info("sql:%s, affectedRows:%d == expect:%d" %
|
||||
(self.sql, self.affectedRows, expectAffectedRows))
|
||||
tdLog.info("sql:%s, affectedRows:%d == expect:%d" % (self.sql, self.affectedRows, expectAffectedRows))
|
||||
|
||||
|
||||
tdSql = TDSql()
|
||||
|
|
|
@ -68,7 +68,7 @@ endi
|
|||
if $data01 != 1 then
|
||||
return -1
|
||||
endi
|
||||
if $data02 != 1 then
|
||||
if $data02 != NULL then
|
||||
return -1
|
||||
endi
|
||||
|
||||
|
@ -80,7 +80,7 @@ endi
|
|||
if $data01 != 1 then
|
||||
return -1
|
||||
endi
|
||||
if $data02 != 1 then
|
||||
if $data02 != NULL then
|
||||
return -1
|
||||
endi
|
||||
|
||||
|
|
|
@ -843,6 +843,14 @@ if $data81 != 4 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
# desc fill query
|
||||
print desc fill query
|
||||
sql select count(*) from m_fl_tb0 where ts>='2018-9-17 9:0:0' and ts<='2018-9-17 9:11:00' interval(1m) fill(value,10) order by ts desc;
|
||||
if $rows != 12 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
|
||||
print =============== clear
|
||||
sql drop database $db
|
||||
sql show databases
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -422,4 +422,63 @@ if $data97 != @group_tb0@ then
|
|||
return -1
|
||||
endi
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
|
||||
#=========================== group by multi tags ======================
|
||||
sql create table st (ts timestamp, c int) tags (t1 int, t2 int, t3 int, t4 int);
|
||||
sql create table t1 using st tags(1, 1, 1, 1);
|
||||
sql create table t2 using st tags(1, 2, 2, 2);
|
||||
sql insert into t1 values ('2020-03-27 04:11:16.000', 1)('2020-03-27 04:11:17.000', 2) ('2020-03-27 04:11:18.000', 3) ('2020-03-27 04:11:19.000', 4) ;
|
||||
sql insert into t1 values ('2020-03-27 04:21:16.000', 1)('2020-03-27 04:31:17.000', 2) ('2020-03-27 04:51:18.000', 3) ('2020-03-27 05:10:19.000', 4) ;
|
||||
sql insert into t2 values ('2020-03-27 04:11:16.000', 1)('2020-03-27 04:11:17.000', 2) ('2020-03-27 04:11:18.000', 3) ('2020-03-27 04:11:19.000', 4) ;
|
||||
sql insert into t2 values ('2020-03-27 04:21:16.000', 1)('2020-03-27 04:31:17.000', 2) ('2020-03-27 04:51:18.000', 3) ('2020-03-27 05:10:19.000', 4) ;
|
||||
|
||||
sql select irate(c) from st where t1="1" and ts >= '2020-03-27 04:11:17.732' and ts < '2020-03-27 05:11:17.732' interval(1m) sliding(15s) group by tbname,t1,t2;
|
||||
if $rows != 40 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 1.000000000 then
|
||||
return -1
|
||||
endi
|
||||
if $data02 != t1 then
|
||||
return -1
|
||||
endi
|
||||
if $data03 != 1 then
|
||||
return -1
|
||||
endi
|
||||
if $data04 != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data11 != 1.000000000 then
|
||||
return -1
|
||||
endi
|
||||
if $data12 != t1 then
|
||||
return -1
|
||||
endi
|
||||
if $data13 != 1 then
|
||||
return -1
|
||||
endi
|
||||
if $data14 != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select irate(c) from st where t1="1" and ts >= '2020-03-27 04:11:17.732' and ts < '2020-03-27 05:11:17.732' interval(1m) sliding(15s) group by tbname,t1,t2 limit 1;
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data11 != 1.000000000 then
|
||||
return -1
|
||||
endi
|
||||
if $data12 != t2 then
|
||||
return -1
|
||||
endi
|
||||
if $data13 != 1 then
|
||||
return -1
|
||||
endi
|
||||
if $data14 != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
|
|
|
@ -40,7 +40,7 @@ while $x < $rowNum
|
|||
endw
|
||||
print ====== tables created
|
||||
|
||||
sleep 60000
|
||||
sleep 6000
|
||||
|
||||
$ts = $ts0 + $delta
|
||||
$ts = $ts + 1
|
||||
|
|
|
@ -39,7 +39,7 @@ while $x < $rowNum
|
|||
endw
|
||||
print ====== tables created
|
||||
|
||||
sleep 60000
|
||||
sleep 6000
|
||||
|
||||
$ts = $ts0 + $delta
|
||||
$ts = $ts + 1
|
||||
|
|
|
@ -39,7 +39,7 @@ while $x < $rowNum
|
|||
endw
|
||||
print ====== tables created
|
||||
|
||||
sleep 60000
|
||||
sleep 6000
|
||||
|
||||
$ts = $ts + 1
|
||||
sql insert into $tb values ( $ts , -1, -1, -1, -1, -1)
|
||||
|
@ -47,7 +47,7 @@ $ts = $ts0 + $delta
|
|||
$ts = $ts + 1
|
||||
sql import into $tb values ( $ts , -2, -2, -2, -2, -2)
|
||||
|
||||
sleep 60000
|
||||
sleep 6000
|
||||
|
||||
sql show databases
|
||||
|
||||
|
|
|
@ -210,6 +210,11 @@ if $data10 != @70-01-01 08:01:40.200@ then
|
|||
return -1
|
||||
endi
|
||||
|
||||
print data06 = $data06
|
||||
print data07 = $data07
|
||||
print data08 = $data08
|
||||
print data00 = $data00
|
||||
|
||||
if $data07 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
@ -255,14 +260,17 @@ endi
|
|||
print 3
|
||||
#agg + where condition
|
||||
sql select count(join_tb1.c3), count(join_tb0.ts) from $tb1 , $tb2 where $ts1 = $ts2 and join_tb1.ts <= 100002 and join_tb0.c7 = true;
|
||||
|
||||
$val = 2
|
||||
if $data00 != $val then
|
||||
print expect 2, actaul: $data00
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != $val then
|
||||
print $data00
|
||||
|
||||
if $data00 != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
|
@ -412,7 +420,7 @@ endi
|
|||
|
||||
#======================limit offset===================================
|
||||
# tag values not int
|
||||
sql_error select count(*) from join_mt0, join_mt1 where join_mt0.ts=join_mt1.ts and join_mt0.t2=join_mt1.t2; #!!!!!
|
||||
sql_error select count(*) from join_mt0, join_mt1 where join_mt0.ts=join_mt1.ts and join_mt0.t2=join_mt1.t2;
|
||||
|
||||
# tag type not identical
|
||||
sql_error select count(*) from join_mt0, join_mt1 where join_mt1.t2 = join_mt0.t1 and join_mt1.ts=join_mt0.ts;
|
||||
|
|
|
@ -327,3 +327,7 @@ endi
|
|||
if $data98 != 9 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
#add one more test case
|
||||
sql select max(c1), last(c8) from lm2_db0.lm2_tb0 where ts >= 1537146000000 and ts <= 1543145400000 interval(5m) fill(linear) limit 10 offset 4089;"
|
||||
|
||||
|
|
|
@ -636,6 +636,15 @@ if $data00 != $data01 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
sql select first(ts), ts from select_tags_tb1
|
||||
if $row != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != @70-01-01 08:01:50.001@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print ======= selectivity + tags + group by + tags + filter + interval ================
|
||||
sql select first(c1), t2, t1, tbname from select_tags_mt0 where c1<=2 interval(1d) group by tbname;
|
||||
if $row != 3 then
|
||||
|
|
|
@ -0,0 +1,461 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||
system sh/cfg.sh -n dnode1 -c debugFlag -v 135
|
||||
system sh/cfg.sh -n dnode1 -c rpcDebugFlag -v 135
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
sleep 1000
|
||||
sql connect
|
||||
|
||||
$dbPrefix = sliding_db
|
||||
$tbPrefix = sliding_tb
|
||||
$mtPrefix = sliding_mt
|
||||
$tbNum = 8
|
||||
$rowNum = 10000
|
||||
$totalNum = $tbNum * $rowNum
|
||||
|
||||
print =============== sliding.sim
|
||||
$i = 0
|
||||
$db = $dbPrefix . $i
|
||||
$mt = $mtPrefix . $i
|
||||
|
||||
$tstart = 946656000000
|
||||
|
||||
$i = 0
|
||||
$db = $dbPrefix . $i
|
||||
$mt = $mtPrefix . $i
|
||||
|
||||
sql drop database if exits $db -x step1
|
||||
step1:
|
||||
sql create database if not exists $db tables 4 keep 36500
|
||||
sql use $db
|
||||
sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12))
|
||||
|
||||
$i = 0
|
||||
while $i < $tbNum
|
||||
$tb = $tbPrefix . $i
|
||||
$tg2 = ' . abc
|
||||
$tg2 = $tg2 . '
|
||||
sql create table $tb using $mt tags( $i , $tg2 )
|
||||
|
||||
$x = 0
|
||||
while $x < $rowNum
|
||||
$ms = $x . m
|
||||
$c = $x / 100
|
||||
$c = $c * 100
|
||||
$c = $x - $c
|
||||
|
||||
$binary = ' . binary
|
||||
$binary = $binary . $c
|
||||
$binary = $binary . '
|
||||
|
||||
$nchar = ' . nchar
|
||||
$nchar = $nchar . $c
|
||||
$nchar = $nchar . '
|
||||
|
||||
sql insert into $tb values ($tstart , $c , $c , $c , $c , $c , $c , $c , $binary , $nchar )
|
||||
$tstart = $tstart + 30
|
||||
$x = $x + 1
|
||||
endw
|
||||
|
||||
$i = $i + 1
|
||||
$tstart = 946656000000
|
||||
endw
|
||||
|
||||
sleep 100
|
||||
|
||||
$i1 = 1
|
||||
$i2 = 0
|
||||
|
||||
$db = $dbPrefix . $i
|
||||
$mt = $mtPrefix . $i
|
||||
|
||||
$dbPrefix = sliding_db
|
||||
$tbPrefix = sliding_tb
|
||||
$mtPrefix = sliding_mt
|
||||
|
||||
$tb1 = $tbPrefix . $i1
|
||||
$tb2 = $tbPrefix . $i2
|
||||
$ts1 = $tb1 . .ts
|
||||
$ts2 = $tb2 . .ts
|
||||
|
||||
print ===============================interval_sliding query
|
||||
sql select count(*) from sliding_tb0 interval(30s) sliding(30s);
|
||||
if $row != 10 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != @00-01-01 00:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 1000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data10 != @00-01-01 00:00:30.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data11 != 1000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select stddev(c1) from sliding_tb0 interval(10a) sliding(10a)
|
||||
if $row != 10000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != @00-01-01 00:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 0.000000000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data90 != @00-01-01 00:00:00.270@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data91 != 0.000000000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select stddev(c1),count(c2),first(c3),last(c4) from sliding_tb0 interval(10a) sliding(10a) order by ts desc;
|
||||
if $row != 10000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != @00-01-01 00:04:59.970@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 0.000000000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data02 != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data03 != 99 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data04 != 99 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data90 != @00-01-01 00:04:59.700@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data91 != 0.000000000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data92 != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data93 != 90 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data94 != 90 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select count(c2),last(c4) from sliding_tb0 interval(30s) sliding(10s) order by ts asc;
|
||||
if $row != 30 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != @00-01-01 00:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 1000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data02 != 99 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select count(c2),stddev(c3),first(c4),last(c4) from sliding_tb0 where ts>'2000-01-01 0:0:0' and ts<'2000-1-1 0:0:31' interval(30s) sliding(30s) order by ts asc;
|
||||
if $row != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data04 != 99 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 999 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data02 != 28.837977152 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
#interval offset + limit
|
||||
sql select count(c2), first(c3),stddev(c4) from sliding_tb0 interval(10a) sliding(10a) order by ts desc limit 10 offset 990;
|
||||
if $row != 10 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != @00-01-01 00:04:30.270@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data02 != 9 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data03 != 0.000000000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data90 != @00-01-01 00:04:30.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data91 != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data92 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data93 != 0.000000000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
#interval offset test
|
||||
sql select count(c2),last(c4),stddev(c3) from sliding_tb0 interval(30s) sliding(30s) order by ts asc limit 1000 offset 1;
|
||||
if $row != 9 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != @00-01-01 00:00:30.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 1000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data02 != 99 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data80 != @00-01-01 00:04:30.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data81 != 1000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select count(c2),last(c4),stddev(c3) from sliding_tb0 where ts>'2000-1-1 0:0:0' and ts<'2000-1-1 0:0:31' interval(30s) sliding(30s) order by ts asc limit 1000 offset 0;
|
||||
if $row != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != @00-01-01 00:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 999 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data02 != 99 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data03 != 28.837977152 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data10 != @00-01-01 00:00:30.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data11 != 34 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data12 != 33 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data13 != 9.810708435 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select count(c2),last(c4),stddev(c3) from sliding_tb0 interval(30s) sliding(20s) order by ts asc limit 100 offset 1;
|
||||
if $row != 14 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != @00-01-01 00:00:20.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 1000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data02 != 66 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data03 != 28.866070048 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data90 != @00-01-01 00:03:20.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data91 != 1000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data92 != 66 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select count(c2),last(c4),stddev(c3) from sliding_tb0 interval(30s) sliding(20s) order by ts asc limit 100 offset 14;
|
||||
if $row != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select count(c2),last(c4),stddev(c3),spread(c3) from sliding_tb0 where c2 = 0 interval(30s) order by ts desc;
|
||||
if $row != 10 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
#00-01-01 00:04:30.000| 10| 0| 0.000000000| 0.000000000|
|
||||
if $data00 != @00-01-01 00:04:30.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 10 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data02 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data03 != 0.000000000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select count(c2),last(c4),stddev(c3),spread(c3) from sliding_tb0 where c2 = 0 interval(30s) sliding(20s) order by ts desc limit 1 offset 15;
|
||||
if $row != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select count(*),stddev(c1),count(c1),first(c2),last(c3) from sliding_tb0 where ts>'2000-1-1 00:00:00' and ts<'2000-1-1 00:00:01.002' and c2 >= 0 interval(30s) sliding(10a) order by ts asc limit 1000;
|
||||
if $row != 100 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != @00-01-01 00:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data02 != 9.521904571 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data05 != 33 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data10 != @00-01-01 00:00:00.010@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data12 != 9.521904571 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data15 != 33 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data95 != 33 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select count(*),stddev(c1),count(c1),first(c2),last(c3) from sliding_tb0 where ts>'2000-1-1 00:00:00' and ts<'2000-1-1 00:00:01.002' and c2 >= 0 interval(30s) sliding(10a) order by ts desc limit 1000;
|
||||
if $row != 100 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != @00-01-01 00:00:00.990@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data02 != 0.000000000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data03 != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data90 != @00-01-01 00:00:00.900@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data91 != 4 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data92 != 1.118033989 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data93 != 4 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data94 != 30.00000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print check boundary check crash at client side
|
||||
sql select count(*) from sliding_mt0 where ts>now and ts < now-1h;
|
||||
|
||||
print ========================query on super table
|
||||
|
||||
print ========================error case
|
||||
sql_error select sum(c1) from sliding_tb0 interval(1a) sliding(1a);
|
||||
sql_error select sum(c1) from sliding_tb0 interval(10a) sliding(12a);
|
||||
sql_error select sum(c1) from sliding_tb0 sliding(1n) interval(1y);
|
||||
sql_error select sum(c1) from sliding_tb0 interval(-1y) sliding(1n);
|
||||
sql_error select sum(c1) from sliding_tb0 interval(1y) sliding(-1n);
|
||||
sql_error select sum(c1) from sliding_tb0 interval(0) sliding(0);
|
||||
sql_error select sum(c1) from sliding_tb0 interval(0m) sliding(0m);
|
||||
sql_error select sum(c1) from sliding_tb0 interval(m) sliding(m);
|
||||
sql_error select sum(c1) from sliding_tb0 sliding(4m);
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
|
@ -141,9 +141,9 @@ $res = 3 * $rowNum
|
|||
if $data00 != $res then
|
||||
return -1
|
||||
endi
|
||||
if $data01 != @18-09-17 09:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
#if $data01 != @18-09-17 09:00:00.000@ then
|
||||
# return -1
|
||||
#endi
|
||||
if $data02 != 3 then
|
||||
return -1
|
||||
endi
|
||||
|
@ -154,9 +154,9 @@ $res = 3 * $rowNum
|
|||
if $data10 != $res then
|
||||
return -1
|
||||
endi
|
||||
if $data11 != @18-09-17 09:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
#if $data11 != @18-09-17 09:00:00.000@ then
|
||||
# return -1
|
||||
#endi
|
||||
if $data15 != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
@ -223,9 +223,9 @@ $res = 3 * $rowNum
|
|||
if $data00 != $res then
|
||||
return -1
|
||||
endi
|
||||
if $data01 != @18-09-17 09:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
#if $data01 != @18-09-17 09:00:00.000@ then
|
||||
# return -1
|
||||
#endi
|
||||
if $data02 != 3 then
|
||||
return -1
|
||||
endi
|
||||
|
@ -236,9 +236,9 @@ $res = 3 * $rowNum
|
|||
if $data10 != $res then
|
||||
return -1
|
||||
endi
|
||||
if $data11 != @18-09-17 09:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
#if $data11 != @18-09-17 09:00:00.000@ then
|
||||
# return -1
|
||||
#endi
|
||||
if $data15 != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
|
|
@ -1,212 +0,0 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||
system sh/cfg.sh -n dnode1 -c tableMetaKeepTimer -v 5
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
sleep 3000
|
||||
sql connect
|
||||
print ======================== stream.sim
|
||||
sleep 2000
|
||||
$db = strm_db
|
||||
$tb = tb
|
||||
$mt = mt
|
||||
$strm = strm
|
||||
$tbNum = 10
|
||||
$rowNum = 20
|
||||
$totalNum = 200
|
||||
|
||||
print =============== set up DB
|
||||
$i = 0
|
||||
|
||||
sql drop database if exists $db
|
||||
sql create database $db
|
||||
sql use $db
|
||||
|
||||
|
||||
## [TBASE300]
|
||||
print ====== TBASE-300
|
||||
sql create table mt (ts timestamp, c1 int, c2 int) tags(t1 int)
|
||||
sql create table tb1 using mt tags(1)
|
||||
sql create table tb2 using mt tags(2)
|
||||
sql create table strm as select count(*), avg(c1), sum(c2), max(c1), min(c2),first(c1), last(c2) from mt interval(4s) sliding(2s)
|
||||
sleep 10000
|
||||
sql insert into tb2 values(now,1,1)
|
||||
sql insert into tb1 values(now,1,1)
|
||||
sleep 4000
|
||||
sql select * from mt
|
||||
sql select * from strm
|
||||
sql drop table tb1
|
||||
sleep 100000
|
||||
sql select * from strm
|
||||
if $rows != 2 then
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
endi
|
||||
sql drop table tb2
|
||||
sql drop table mt
|
||||
sql drop table strm
|
||||
|
||||
## [TBASE304]
|
||||
print ====== TBASE-304
|
||||
sleep 10000
|
||||
# we cannot reset query cache in server side, as a workaround,
|
||||
# set super table name to mt304, need to change back to mt later
|
||||
print create mt304
|
||||
sql create table mt304 (ts timestamp, c1 int) tags(t1 int, t2 int)
|
||||
print create tb1
|
||||
sql create table tb1 using mt304 tags(1, 1)
|
||||
print create tb2
|
||||
sql create table tb2 using mt304 tags(1, -1)
|
||||
print create strm
|
||||
sql create table strm as select count(*), avg(c1) from mt304 where t2 >= 0 interval(4s) sliding(2s)
|
||||
sql insert into tb1 values (now,1)
|
||||
sql insert into tb2 values (now,2)
|
||||
sleep 100000
|
||||
sql select * from strm;
|
||||
if $rows != 2 then
|
||||
print ==== expect rows = 2, actually returned rows = $rows
|
||||
return -1
|
||||
endi
|
||||
if $data01 != 1 then
|
||||
return -1
|
||||
endi
|
||||
print data02 = $data02
|
||||
if $data02 != 1.000000000 then
|
||||
return -1
|
||||
endi
|
||||
sql alter table mt304 drop tag t2;
|
||||
sql insert into tb2 values (now,2);
|
||||
sql insert into tb1 values (now,1);
|
||||
sql select * from strm;
|
||||
sql alter table mt304 add tag t2 int;
|
||||
sleep 10000
|
||||
sql select * from strm
|
||||
|
||||
print ================= create a stream with a wildcard filter on tags of a STable
|
||||
sql drop database $db
|
||||
sql create database $db
|
||||
sql use $db
|
||||
sql create table stb (ts timestamp, c1 int, c2 binary(10)) tags(t1 binary(10))
|
||||
sql create table tb1 using stb tags('a1')
|
||||
sql create table tb2 using stb tags('b2')
|
||||
sql create table tb3 using stb tags('a3')
|
||||
sql create table strm as select count(*), avg(c1), first(c2) from stb where t1 like 'a%' interval(4s) sliding(2s)
|
||||
sleep 11000
|
||||
sql insert into tb1 values (now, 0, 'tb1')
|
||||
sleep 4000
|
||||
sql insert into tb2 values (now, 2, 'tb2')
|
||||
sleep 4000
|
||||
sql insert into tb3 values (now, 0, 'tb3')
|
||||
sleep 60000
|
||||
|
||||
sql describe strm
|
||||
if $rows == 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select * from strm
|
||||
sleep 1000
|
||||
print ======== data0: $data00 $data01 $data02 $data03
|
||||
print ======== data1: $data10 $data11 $data12 $data13
|
||||
print ======== data2: $data20 $data21 $data22 $data23
|
||||
print ======== data3: $data30 $data31 $data32 $data33
|
||||
if $rows != 4 then
|
||||
print ==== expect rows = 4, actually returned rows = $rows
|
||||
return -1
|
||||
endi
|
||||
if $data02 != 0.000000000 then
|
||||
return -1
|
||||
endi
|
||||
if $data03 == tb2 then
|
||||
return -1
|
||||
endi
|
||||
if $data13 == tb2 then
|
||||
return -1
|
||||
endi
|
||||
if $data23 == tb2 then
|
||||
return -1
|
||||
endi
|
||||
if $data33 == tb2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
## The vnode client needs to refresh metadata cache to allow strm calculate tb4's data. But the current refreshing frequency is every 10 min
|
||||
## commented out the case below to save running time
|
||||
sql create table tb4 using stb tags('a4')
|
||||
sql insert into tb4 values(now, 4, 'tb4')
|
||||
sleep 60000
|
||||
sql select * from strm order by ts desc
|
||||
print ======== data0: $data00 $data01 $data02 $data03
|
||||
#print ======== data1: $data10 $data11 $data12 $data13
|
||||
#print ======== data2: $data20 $data21 $data22 $data23
|
||||
#print ======== data3: $data30 $data31 $data32 $data33
|
||||
if $rows != 6 then
|
||||
print ==== expect rows = 6, actually returned rows = $rows
|
||||
return -1
|
||||
endi
|
||||
if $data02 != 4.000000000 then
|
||||
return -1
|
||||
endi
|
||||
if $data03 != tb4 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== change tag values to see if stream still works correctly
|
||||
sql alter table tb4 set tag t1='b4'
|
||||
sleep 3000 # waiting for new tag valid
|
||||
sql insert into tb1 values (now, 1, 'tb1_a1')
|
||||
sleep 4000
|
||||
sql insert into tb4 values (now, -4, 'tb4_b4')
|
||||
sleep 100000
|
||||
sql select * from strm order by ts desc
|
||||
sleep 1000
|
||||
print ======== data0: $data00 $data01 $data02 $data03
|
||||
#print ======== data1: $data10 $data11 $data12 $data13
|
||||
#print ======== data2: $data20 $data21 $data22 $data23
|
||||
#print ======== data3: $data30 $data31 $data32 $data33
|
||||
if $rows != 8 then
|
||||
print ==== expect rows = 8, actually returned rows = $rows
|
||||
return -1
|
||||
endi
|
||||
if $data02 != 1.000000000 then
|
||||
return -1
|
||||
endi
|
||||
if $data03 != tb1_a1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql drop database if exists $db
|
||||
sql drop database if exists strm_db_0
|
||||
sql create database strm_db_0
|
||||
sql use strm_db_0
|
||||
|
||||
sql create table stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 binary(15), c6 nchar(15), c7 bool) tags(t1 int, t2 binary(15))
|
||||
sql create table tb0 using stb tags(0, 'tb0')
|
||||
sql create table tb1 using stb tags(1, 'tb1')
|
||||
sql create table tb2 using stb tags(2, 'tb2')
|
||||
sql create table tb3 using stb tags(3, 'tb3')
|
||||
sql create table tb4 using stb tags(4, 'tb4')
|
||||
|
||||
sql create table strm0 as select count(ts), count(c1), max(c2), min(c4), first(c5), last(c6) from stb where ts < now + 30s interval(4s) sliding(2s)
|
||||
sleep 1000
|
||||
sql insert into tb0 values (now, 0, 0, 0, 0, 'binary0', '涛思0', true) tb1 values (now, 1, 1, 1, 1, 'binary1', '涛思1', false) tb2 values (now, 2, 2, 2, 2, 'binary2', '涛思2', true) tb3 values (now, 3, 3, 3, 3, 'binary3', '涛思3', false) tb4 values (now, 4, 4, 4, 4, 'binary4', '涛思4', true)
|
||||
sleep 30000
|
||||
sql select * from strm0 order by ts desc
|
||||
sleep 1000
|
||||
if $rows != 2 then
|
||||
print ==== expect rows = 2, actually returned rows = $rows
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql insert into tb0 values (now, 10, 10, 10, 10, 'binary0', '涛思0', true) tb1 values (now, 11, 11, 11, 11, 'binary1', '涛思1', false) tb2 values (now, 12, 12, 12, 12, 'binary2', '涛思2', true) tb3 values (now, 13, 13, 13, 13, 'binary3', '涛思3', false) tb4 values (now, 14, 14, 14, 14, 'binary4', '涛思4', true)
|
||||
sleep 30000
|
||||
sql select * from strm0 order by ts desc
|
||||
sleep 10000
|
||||
if $rows == 4 then
|
||||
print ==== actually returned rows = $rows, expect always not equal to 4
|
||||
return -1
|
||||
endi
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
|
@ -28,16 +28,27 @@ sql insert into tb3 using stb (t3) tags (3.3) values ( now + 3s, 'binary3', 3
|
|||
|
||||
sql insert into tb4 (ts, c1, c2) using stb (t1, t2) tags ('tag4', 4) values ( now + 4s, 'binary4', 4)
|
||||
sql insert into tb5 (ts, c1, c3) using stb (t1, t3) tags ('tag5', 11.11) values ( now + 5s, 'binary5', 5.5)
|
||||
|
||||
sql insert into tb6 (ts, c1, c3) using stb tags ('tag5', 6, 11.11) values ( now + 5s, 'binary6', 6.6)
|
||||
sql insert into tb7 (ts, c1, c2, c3) using stb tags ('tag5', 7, 11.11) values ( now + 5s, 'binary7', 7, 7.7)
|
||||
sql select * from stb order by ts asc
|
||||
if $rows != 5 then
|
||||
if $rows != 7 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql_error insert into tb11 using stb (t1) tags () values ( now + 1s, 'binary1', 1, 1.1)
|
||||
sql_error insert into tb12 using stb (t1, t3) tags () values ( now + 1s, 'binary1', 1, 1.1)
|
||||
sql_error insert into tb13 using stb (t1, t2, t3) tags (8, 9.13, 'ac') values ( now + 1s, 'binary1', 1, 1.1)
|
||||
sql_error insert into tb14 using stb () tags (2) values ( now + 2s, 'binary2', 2, 2.2)
|
||||
sql_error insert into tb15 using stb (t2, t3) tags (3.3) values ( now + 3s, 'binary3', 3, 3.3)
|
||||
sql_error insert into tb16 (ts, c1, c2) using stb (t1, t2) tags ('tag4', 4) values ( now + 4s, 'binary4')
|
||||
sql_error insert into tb17 (ts, c1, c3) using stb (t1, t3) tags ('tag5', 11.11, 5) values ( now + 5s, 'binary5', 5.5)
|
||||
sql_error insert into tb18 (ts, c1, c3) using stb tags ('tag5', 16) values ( now + 5s, 'binary6', 6.6)
|
||||
sql_error insert into tb19 (ts, c1, c2, c3) using stb tags (19, 'tag5', 91.11) values ( now + 5s, 'binary7', 7, 7.7)
|
||||
|
||||
|
||||
|
||||
sql create table stbx (ts timestamp, c1 binary(10), c2 int, c3 float) tags (t1 binary(10), t2 int, t3 float)
|
||||
sql insert into tb100 (ts, c1, c2, c3) using stbx (t1, t2, t3) tags ('tag100', 100, 100.9) values ( now + 10s, 'binary100', 100, 100.9) tb101 (ts, c1, c2, c3) using stbx (t1, t2, t3) tags ('tag101', 101, 101.9) values ( now + 10s, 'binary101', 101, 101.9) tb102 (ts, c1, c2, c3) using stbx (t1, t2, t3) tags ('tag102', 102, 102.9) values ( now + 10s, 'binary102', 102, 102.9)
|
||||
sql insert into tb100 (ts, c1, c2, c3) using stbx (t1, t2, t3) tags ('tag100', 100, 100.123456) values ( now + 10s, 'binary100', 100, 100.9) tb101 (ts, c1, c2, c3) using stbx (t1, t2, t3) tags ('tag101', 101, 101.9) values ( now + 10s, 'binary101', 101, 101.9) tb102 (ts, c1, c2, c3) using stbx (t1, t2, t3) tags ('tag102', 102, 102.9) values ( now + 10s, 'binary102', 102, 102.9)
|
||||
|
||||
sql select * from stbx
|
||||
if $rows != 3 then
|
||||
|
@ -52,9 +63,38 @@ if $data05 != 100 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
#if $data06 != 100.90000 then
|
||||
# print "expect: 100.90000, act: $data06"
|
||||
# return -1
|
||||
#endi
|
||||
if $data06 != 100.12346 then
|
||||
print "expect: 100.12346, act: $data06"
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql create table stby (ts timestamp, c1 binary(10), c2 int, c3 float) tags (t1 binary(10), t2 int, t3 float)
|
||||
sql reset query cache
|
||||
sql insert into tby1 using stby (t1) tags ('tag1') values ( now + 1s, 'binary1', 1, 1.1)
|
||||
sql insert into tby2 using stby (t2) tags (2) values ( now + 2s, 'binary2', 2, 2.2)
|
||||
sql insert into tby3 using stby (t3) tags (3.3) values ( now + 3s, 'binary3', 3, 3.3)
|
||||
sql insert into tby4 (ts, c1, c2) using stby (t1, t2) tags ('tag4', 4) values ( now + 4s, 'binary4', 4)
|
||||
sql insert into tby5 (ts, c1, c3) using stby (t1, t3) tags ('tag5', 11.11) values ( now + 5s, 'binary5', 5.5)
|
||||
sql insert into tby6 (ts, c1, c3) using stby tags ('tag5', 6, 11.11) values ( now + 5s, 'binary6', 6.6)
|
||||
sql insert into tby7 (ts, c1, c2, c3) using stby tags ('tag5', 7, 11.11) values ( now + 5s, 'binary7', 7, 7.7)
|
||||
sql select * from stby order by ts asc
|
||||
if $rows != 7 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql reset query cache
|
||||
sql insert into tby1 using stby (t1) tags ('tag1') values ( now + 1s, 'binary1y', 1, 1.1)
|
||||
sql insert into tby2 using stby (t2) tags (2) values ( now + 2s, 'binary2y', 2, 2.2)
|
||||
sql insert into tby3 using stby (t3) tags (3.3) values ( now + 3s, 'binary3y', 3, 3.3)
|
||||
sql insert into tby4 (ts, c1, c2) using stby (t1, t2) tags ('tag4', 4) values ( now + 4s, 'binary4y', 4)
|
||||
sql insert into tby5 (ts, c1, c3) using stby (t1, t3) tags ('tag5', 11.11) values ( now + 5s, 'binary5y', 5.5)
|
||||
sql insert into tby6 (ts, c1, c3) using stby tags ('tag5', 6, 11.11) values ( now + 5s, 'binary6y', 6.6)
|
||||
sql insert into tby7 (ts, c1, c2, c3) using stby tags ('tag5', 7, 11.11) values ( now + 5s, 'binary7y', 7, 7.7)
|
||||
|
||||
sql select * from stby order by ts asc
|
||||
if $rows != 14 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
|
@ -23,7 +23,7 @@ sql create table stb (ts timestamp, c1 int) tags (t1 binary(10))
|
|||
sql create table tb1 using stb tags('*')
|
||||
sql create table tb2 using stb tags('%')
|
||||
sql create table tb3 using stb tags('')
|
||||
sql create table tb4 using stb tags('/'')
|
||||
sql create table tb4 using stb tags('\'')
|
||||
|
||||
sql insert into tb1 values ( $ts0 , 1)
|
||||
sql insert into tb2 values ( $ts0 , 2)
|
||||
|
@ -54,7 +54,7 @@ if $data01 != 3 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
sql select * from stb where t1 = '/''
|
||||
sql select * from stb where t1 = '\''
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
@ -70,9 +70,8 @@ if $data01 != 1 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
sql_error select * from stb where t1 > 1
|
||||
sql_error select * from stb where t1 > '1'
|
||||
sql_error select * from stb where t1 > 'a'
|
||||
sql select * from stb where t1 > '1'
|
||||
sql select * from stb where t1 > 'a'
|
||||
|
||||
## wildcard '%'
|
||||
#sql select * from stb where t1 like '%'
|
||||
|
@ -91,7 +90,7 @@ if $data01 != 3 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
sql select * from stb where t1 like '/''
|
||||
sql select * from stb where t1 like '\''
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
@ -104,3 +103,50 @@ sql show databases
|
|||
if $rows != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print ============tbase-1328
|
||||
|
||||
sql drop database if exists testselectwheretags;
|
||||
sql CREATE DATABASE IF NOT EXISTS testselectwheretags;
|
||||
sql USE testselectwheretags;
|
||||
sql CREATE TABLE IF NOT EXISTS st1 (ts TIMESTAMP, v1 INT, v2 FLOAT, v3 BOOL) TAGS (farm NCHAR(2), period NCHAR(2), line NCHAR(2), unit INT);
|
||||
sql CREATE TABLE IF NOT EXISTS a01 USING st1 TAGS ('2', 'c', '2', 2);
|
||||
sql CREATE TABLE IF NOT EXISTS a02 USING st1 TAGS ('1', 'c', 'a', 1);
|
||||
sql CREATE TABLE IF NOT EXISTS a03 USING st1 TAGS ('1', 'c', '02', 1);
|
||||
sql INSERT INTO a01 VALUES (1574872693209, 3, 3.000000, 1);
|
||||
sql INSERT INTO a02 VALUES (1574872683933, 2, 2.000000, 1);
|
||||
sql INSERT INTO a03 VALUES (1574872683933, 2, 2.000000, 1);
|
||||
|
||||
sql select * from st1 where line='02';
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql CREATE TABLE IF NOT EXISTS st2 (ts TIMESTAMP, v1 INT, v2 FLOAT) TAGS (farm BINARY(2), period BINARY(2), line BINARY(2));
|
||||
|
||||
sql CREATE TABLE IF NOT EXISTS b01 USING st2 TAGS ('01', '01', '01');
|
||||
sql CREATE TABLE IF NOT EXISTS b02 USING st2 TAGS ('01', '01', '01');
|
||||
sql CREATE TABLE IF NOT EXISTS b03 USING st2 TAGS ('01', '02', '01');
|
||||
sql CREATE TABLE IF NOT EXISTS b04 USING st2 TAGS ('01', '01', '02');
|
||||
|
||||
sql INSERT INTO b03 VALUES (1576043322749, 3, 3.000000);
|
||||
sql INSERT INTO b03 VALUES (1576043323596, 3, 3.000000);
|
||||
|
||||
sql INSERT INTO b02 VALUES (1576043315169, 2, 2.000000);
|
||||
sql INSERT INTO b02 VALUES (1576043316295, 2, 2.000000);
|
||||
sql INSERT INTO b02 VALUES (1576043317167, 2, 2.000000);
|
||||
|
||||
sql INSERT INTO b01 VALUES (1576043305972, 1, 1.000000);
|
||||
sql INSERT INTO b01 VALUES (1576043308513, 1, 1.000000);
|
||||
|
||||
sql select * from st2 where period='02';
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select sum(v2) from st2 group by farm,period,line;
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
|
@ -0,0 +1,411 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||
system sh/cfg.sh -n dnode1 -c debugFlag -v 135
|
||||
system sh/cfg.sh -n dnode1 -c rpcDebugFlag -v 135
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
sleep 1000
|
||||
sql connect
|
||||
|
||||
$dbPrefix = union_db
|
||||
$tbPrefix = union_tb
|
||||
$tbPrefix1 = union_tb_
|
||||
$mtPrefix = union_mt
|
||||
$tbNum = 10
|
||||
$rowNum = 10000
|
||||
$totalNum = $tbNum * $rowNum
|
||||
|
||||
print =============== union.sim
|
||||
$i = 0
|
||||
$db = $dbPrefix . $i
|
||||
$mt = $mtPrefix . $i
|
||||
|
||||
$j = 1
|
||||
|
||||
$mt1 = $mtPrefix . $j
|
||||
|
||||
sql drop database if exits $db -x step1
|
||||
step1:
|
||||
sql create database if not exists $db maxtables 4
|
||||
sql use $db
|
||||
sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int)
|
||||
|
||||
$i = 0
|
||||
$t = 1578203484000
|
||||
|
||||
while $i < $tbNum
|
||||
$tb = $tbPrefix . $i
|
||||
sql create table $tb using $mt tags( $i )
|
||||
|
||||
$x = 0
|
||||
while $x < $rowNum
|
||||
$ms = $x * 1000
|
||||
$ms = $ms * 60
|
||||
|
||||
$c = $x / 100
|
||||
$c = $c * 100
|
||||
$c = $x - $c
|
||||
$binary = 'binary . $c
|
||||
$binary = $binary . '
|
||||
$nchar = 'nchar . $c
|
||||
$nchar = $nchar . '
|
||||
|
||||
$t1 = $t + $ms
|
||||
sql insert into $tb values ($t1 , $c , $c , $c , $c , $c , $c , $c , $binary , $nchar )
|
||||
$x = $x + 1
|
||||
endw
|
||||
|
||||
$i = $i + 1
|
||||
endw
|
||||
|
||||
sql create table $mt1 (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int)
|
||||
|
||||
$j = 0
|
||||
$t = 1578203484000
|
||||
$rowNum = 1000
|
||||
$tbNum = 5
|
||||
$i = 0
|
||||
|
||||
while $i < $tbNum
|
||||
$tb1 = $tbPrefix1 . $j
|
||||
sql create table $tb1 using $mt1 tags( $i )
|
||||
|
||||
$x = 0
|
||||
while $x < $rowNum
|
||||
$ms = $x * 1000
|
||||
$ms = $ms * 60
|
||||
|
||||
$c = $x / 100
|
||||
$c = $c * 100
|
||||
$c = $x - $c
|
||||
$binary = 'binary . $c
|
||||
$binary = $binary . '
|
||||
$nchar = 'nchar . $c
|
||||
$nchar = $nchar . '
|
||||
|
||||
$t1 = $t + $ms
|
||||
sql insert into $tb1 values ($t1 , $c , $c , $c , $c , $c , $c , $c , $binary , $nchar )
|
||||
$x = $x + 1
|
||||
endw
|
||||
|
||||
$i = $i + 1
|
||||
$j = $j + 1
|
||||
endw
|
||||
|
||||
print sleep 1sec.
|
||||
sleep 1000
|
||||
|
||||
$i = 1
|
||||
$tb = $tbPrefix . $i
|
||||
|
||||
## column type not identical
|
||||
sql_error select count(*) as a from union_mt0 union all select avg(c1) as a from union_mt0
|
||||
sql_error select count(*) as a from union_mt0 union all select spread(c1) as a from union_mt0;
|
||||
|
||||
## union not supported
|
||||
sql_error (select count(*) from union_mt0) union (select count(*) from union_mt0);
|
||||
|
||||
## column type not identical
|
||||
sql_error select c1 from union_mt0 limit 10 union all select c2 from union_tb1 limit 20;
|
||||
|
||||
## union not support recursively union
|
||||
sql_error select c1 from union_tb0 limit 2 union all (select c1 from union_tb1 limit 1 union all select c1 from union_tb3 limit 2);
|
||||
sql_error (select c1 from union_tb0 limit 1 union all select c1 from union_tb1 limit 1) union all (select c1 from union_tb0 limit 10 union all select c1 from union_tb1 limit 10);
|
||||
|
||||
# union as subclause
|
||||
sql_error (select c1 from union_tb0 limit 1 union all select c1 from union_tb1 limit 1) limit 1
|
||||
|
||||
# sql with parenthese
|
||||
sql (((select c1 from union_tb0)))
|
||||
if $rows != 10000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data10 != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
# mixed order
|
||||
sql select ts, c1 from union_tb1 order by ts asc limit 10 union all select ts, c1 from union_tb0 order by ts desc limit 2 union all select ts, c1 from union_tb2 order by ts asc limit 10
|
||||
if $rows != 22 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != @20-01-05 13:51:24.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data10 != @20-01-05 13:52:24.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data11 != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data90 != @20-01-05 14:00:24.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data91 != 9 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
# different sort order
|
||||
|
||||
# super table & normal table mixed up
|
||||
sql select c3 from union_tb0 limit 2 union all select sum(c1) as c3 from union_mt0;
|
||||
if $rows != 3 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data10 != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data20 != 4950000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
# type compatible
|
||||
sql select c3 from union_tb0 limit 2 union all select sum(c1) as c3 from union_tb1;
|
||||
if $rows != 3 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data10 != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data20 != 495000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
# two join subclause
|
||||
sql select count(*) as c from union_tb0, union_tb1 where union_tb0.ts=union_tb1.ts union all select union_tb0.c3 as c from union_tb0, union_tb1 where union_tb0.ts=union_tb1.ts limit 10
|
||||
if $rows != 11 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != 10000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data10 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data20 != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data90 != 8 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print ===========================================tags union
|
||||
# two super table tag union, limit is not active during retrieve tags query
|
||||
sql select t1 from union_mt0 union all select t1 from union_mt0 limit 1
|
||||
if $rows != 20 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data90 != 9 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
#========================================== two super table join subclause
|
||||
print ================two super table join subclause
|
||||
sql select avg(union_mt0.c1) as c from union_mt0 interval(1h) limit 10 union all select union_mt1.ts, union_mt1.c1/1.0 as c from union_mt0, union_mt1 where union_mt1.ts=union_mt0.ts and union_mt1.t1=union_mt0.t1 limit 5;
|
||||
print the rows value is: $rows
|
||||
|
||||
if $rows != 15 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
# first subclause are empty
|
||||
sql select count(*) as c from union_tb0 where ts>now+10y union all select sum(c1) as c from union_tb1;
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != 495000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
# all subclause are empty
|
||||
sql select c1 from union_tb0 limit 0 union all select c1 from union_tb1 where ts>'2021-1-1 0:0:0'
|
||||
if $rows != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
# middle subclause empty
|
||||
sql select c1 from union_tb0 limit 1 union all select c1 from union_tb1 where ts>'2030-1-1 0:0:0' union all select last(c1) as c1 from union_tb1;
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data10 != 99 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
# multi-vnode projection query
|
||||
sql (select c1 from union_mt0) union all select c1 from union_mt0;
|
||||
if $rows != 200000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
# multi-vnode projection query + limit
|
||||
sql (select ts, c1 from union_mt0 limit 1) union all (select ts, c1 from union_mt0 limit 1);
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != @20-01-05 13:51:24.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data10 != @20-01-05 13:51:24.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data11 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
# two aggregated functions for super tables
|
||||
sql select sum(c1) as a from union_mt0 interval(1s) limit 9 union all select ts, max(c3) as a from union_mt0 limit 2;
|
||||
if $rows != 10 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != @20-01-05 13:51:24.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data10 != @20-01-05 13:52:24.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data11 != 10 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data20 != @20-01-05 13:53:24.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data21 != 20 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data90 != @20-01-05 15:30:24.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data91 != 99 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
#1111111111111111111111111111111111111111111111111
|
||||
# two aggregated functions for normal tables
|
||||
sql select sum(c1) as a from union_tb0 limit 1 union all select sum(c3) as a from union_tb1 limit 2;
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != 495000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data10 != 495000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
# two super table query + interval + limit
|
||||
sql select ts, first(c3) as a from union_mt0 limit 1 union all select sum(c3) as a from union_mt0 interval(1h) limit 1;
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != @20-01-05 13:51:24.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data01 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data10 != @20-01-05 13:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data11 != 360 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select server_status() union all select server_status()
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data10 != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select client_version() union all select server_version()
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select database() union all select database()
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data00 != @union_db0@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
if $data10 != @union_db0@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
|
@ -277,4 +277,44 @@ if $rows != 2 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
print ==========tbase-1363
|
||||
#sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int)
|
||||
|
||||
$i = 0
|
||||
while $i < 1
|
||||
$tb = test_null_filter
|
||||
sql create table $tb using $mt tags( $i )
|
||||
|
||||
$x = 0
|
||||
while $x < 10000
|
||||
$ms = $x . m
|
||||
$c = $x / 100
|
||||
$c = $c * 100
|
||||
$c = $x - $c
|
||||
$binary = 'binary . $c
|
||||
$binary = $binary . '
|
||||
$nchar = 'nchar . $c
|
||||
$nchar = $nchar . '
|
||||
sql insert into $tb values (now + $ms , null , null , null , null , null , null , null , null , null )
|
||||
$x = $x + 1
|
||||
endw
|
||||
|
||||
$i = $i + 1
|
||||
endw
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
sleep 2000
|
||||
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
|
||||
sql select * from wh_mt0 where c3 = 'abc' and tbname in ('test_null_filter');
|
||||
if $row != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select * from wh_mt0 where c3 = 'abc' and tbname in ('test_null_filter');
|
||||
if $row != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
|
@ -1,287 +0,0 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
|
||||
sleep 3000
|
||||
sql connect
|
||||
|
||||
print ======================== dnode1 start
|
||||
|
||||
$dbPrefix = m1_db
|
||||
$tbPrefix = m1_tb
|
||||
$mtPrefix = m1_mt
|
||||
$stPrefix = m1_st
|
||||
$tbNum = 10
|
||||
$rowNum = 20
|
||||
$totalNum = 200
|
||||
|
||||
print =============== step1
|
||||
$i = 0
|
||||
$db = $dbPrefix . $i
|
||||
$mt = $mtPrefix . $i
|
||||
$st = $stPrefix . $i
|
||||
|
||||
sql drop databae $db -x step1
|
||||
step1:
|
||||
sql create database $db
|
||||
sql use $db
|
||||
sql create table $mt (ts timestamp, tbcol int, tbcol2 float) TAGS(tgcol int)
|
||||
|
||||
$i = 0
|
||||
while $i < $tbNum
|
||||
$tb = $tbPrefix . $i
|
||||
sql create table $tb using $mt tags( $i )
|
||||
|
||||
$x = -1440
|
||||
$y = 0
|
||||
while $y < $rowNum
|
||||
$ms = $x . m
|
||||
sql insert into $tb values (now $ms , $y , $y )
|
||||
$x = $x + 1
|
||||
$y = $y + 1
|
||||
endw
|
||||
|
||||
$i = $i + 1
|
||||
endw
|
||||
|
||||
sleep 100
|
||||
|
||||
print =============== step2 c1
|
||||
$i = 0
|
||||
$mt = $mtPrefix . $i
|
||||
|
||||
sql select count(*) from $mt interval(1d)
|
||||
print ===> $data00 $data01
|
||||
if $data01 != 200 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . c1
|
||||
sql create table $st as select count(*) from $mt interval(1d)
|
||||
|
||||
print =============== step3 c2
|
||||
sql select count(tbcol) from $mt interval(1d)
|
||||
print ===> $data00 $data01
|
||||
if $data01 != 200 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . c2
|
||||
sql create table $st as select count(tbcol) from $mt interval(1d)
|
||||
|
||||
print =============== step4 c3
|
||||
sql select count(tbcol2) from $mt interval(1d)
|
||||
print ===> $data00 $data01
|
||||
if $data01 != 200 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . c3
|
||||
sql create table $st as select count(tbcol2) from $mt interval(1d)
|
||||
|
||||
print =============== step5 avg
|
||||
sql select avg(tbcol) from $mt interval(1d)
|
||||
print ===> $data00 $data01
|
||||
if $data01 != 9.500000000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . av
|
||||
print create table $st as select avg(tbcol) from $mt interval(1d)
|
||||
sql create table $st as select avg(tbcol) from $mt interval(1d)
|
||||
|
||||
print =============== step6 su
|
||||
sql select sum(tbcol) from $mt interval(1d)
|
||||
print ===> $data00 $data01
|
||||
if $data01 != 1900 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . su
|
||||
sql create table $st as select sum(tbcol) from $mt interval(1d)
|
||||
|
||||
print =============== step7 mi
|
||||
sql select min(tbcol) from $mt interval(1d)
|
||||
print ===> $data00 $data01
|
||||
if $data01 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . mi
|
||||
sql create table $st as select min(tbcol) from $mt interval(1d)
|
||||
|
||||
print =============== step8 ma
|
||||
sql select max(tbcol) from $mt interval(1d)
|
||||
print ===> $data00 $data01
|
||||
if $data01 != 19 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . ma
|
||||
sql create table $st as select max(tbcol) from $mt interval(1d)
|
||||
|
||||
print =============== step9 fi
|
||||
sql select first(tbcol) from $mt interval(1d)
|
||||
print ===> $data00 $data01
|
||||
if $data01 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . fi
|
||||
sql create table $st as select first(tbcol) from $mt interval(1d)
|
||||
|
||||
print =============== step10 la
|
||||
sql select last(tbcol) from $mt interval(1d)
|
||||
print ===> $data00 $data01
|
||||
if $data01 != 19 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . la
|
||||
sql create table $st as select last(tbcol) from $mt interval(1d)
|
||||
|
||||
print =============== step11 st
|
||||
sql select stddev(tbcol) from $mt interval(1d) -x step11
|
||||
return -1
|
||||
step11:
|
||||
|
||||
print =============== step12 le
|
||||
sql select leastsquares(tbcol, 1, 1) from $mt interval(1d) -x step12
|
||||
return -1
|
||||
step12:
|
||||
|
||||
print =============== step13
|
||||
sql select top(tbcol, 1) from $mt interval(1d)
|
||||
|
||||
print =============== step14
|
||||
|
||||
sql select bottom(tbcol, 1) from $mt interval(1d)
|
||||
|
||||
print =============== step15 pe
|
||||
|
||||
sql select percentile(tbcol, 1) from $mt interval(1d) -x step15
|
||||
return -1
|
||||
step15:
|
||||
|
||||
print =============== step16
|
||||
sql select diff(tbcol) from $mt interval(1d) -x step16
|
||||
return -1
|
||||
step16:
|
||||
|
||||
print =============== step17 wh
|
||||
sql select count(tbcol) from $mt where ts < now + 4m interval(1d)
|
||||
print ===> $data00 $data01
|
||||
if $data01 != 200 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . wh
|
||||
#sql create table $st as select count(tbcol) from $mt where ts < now + 4m interval(1d)
|
||||
|
||||
print =============== step18 as
|
||||
sql select count(tbcol) from $mt interval(1d)
|
||||
print ===> $data00 $data01
|
||||
if $data01 != 200 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . as
|
||||
sql create table $st as select count(tbcol) as c from $mt interval(1d)
|
||||
|
||||
print =============== step19 gb
|
||||
sql select count(tbcol) from $mt interval(1d) group by tgcol
|
||||
print ===> $data00 $data01
|
||||
if $data01 != 20 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step20 x
|
||||
sql select count(tbcol) from $mt where ts < now + 4m interval(1d) group by tgcol
|
||||
print ===> $data00 $data01
|
||||
if $data01 != 20 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step21
|
||||
print sleep 120 seconds
|
||||
sleep 120000
|
||||
|
||||
print =============== step22
|
||||
$st = $stPrefix . c1
|
||||
sql select * from $st
|
||||
print ===> select * from $st ===> $data00 $data01
|
||||
if $data01 != 200 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . c2
|
||||
sql select * from $st
|
||||
print ===> select * from $st ===> $data00 $data01
|
||||
if $data01 != 200 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . c3
|
||||
sql select * from $st
|
||||
print ===> select * from $st ===> $data00 $data01
|
||||
if $data01 != 200 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . av
|
||||
sql select * from $st
|
||||
print ===> select * from $st ===> $data00 $data01
|
||||
if $data01 != 9.500000000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . su
|
||||
sql select * from $st
|
||||
print ===> select * from $st ===> $data00 $data01
|
||||
if $data01 != 1900 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . mi
|
||||
sql select * from $st
|
||||
print ===> select * from $st ===> $data00 $data01
|
||||
if $data01 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . ma
|
||||
sql select * from $st
|
||||
print ===> select * from $st ===> $data00 $data01
|
||||
if $data01 != 19 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . fi
|
||||
sql select * from $st
|
||||
print ===> select * from $st ===> $data00 $data01
|
||||
if $data01 != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
$st = $stPrefix . la
|
||||
sql select * from $st
|
||||
print ===> select * from $st ===> $data00 $data01
|
||||
if $data01 != 19 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
#$st = $stPrefix . wh
|
||||
#sql select * from $st
|
||||
#print ===> select * from $st ===> $data00 $data01
|
||||
#if $data01 != 200 then
|
||||
# return -1
|
||||
#endi
|
||||
|
||||
$st = $stPrefix . as
|
||||
sql select * from $st
|
||||
print ===> select * from $st ===> $data00 $data01
|
||||
if $data01 != 200 then
|
||||
return -1
|
||||
endi
|
|
@ -1,106 +0,0 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||
system sh/cfg.sh -n dnode1 -c tableMetaKeepTimer -v 10
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
|
||||
sleep 3000
|
||||
sql connect
|
||||
print ======================== dnode1 start
|
||||
|
||||
$dbPrefix = ns_db
|
||||
$tbPrefix = ns_tb
|
||||
$mtPrefix = ns_mt
|
||||
$stPrefix = ns_st
|
||||
$tbNum = 5
|
||||
$rowNum = 200
|
||||
$totalNum = 200
|
||||
|
||||
print =============== step1
|
||||
|
||||
$i = 0
|
||||
$db = $dbPrefix
|
||||
$mt = $mtPrefix
|
||||
$st = $stPrefix
|
||||
|
||||
sql create database $db
|
||||
sql use $db
|
||||
sql create table $mt (ts timestamp, tbcol int, tbcol2 float) TAGS(tgcol int)
|
||||
|
||||
$i = 0
|
||||
while $i < $tbNum
|
||||
$tb = $tbPrefix . $i
|
||||
sql create table $tb using $mt tags( $i )
|
||||
|
||||
$x = 0
|
||||
$y = 0
|
||||
while $y < $rowNum
|
||||
$ms = $x . s
|
||||
sql insert into $tb values (now + $ms , $y , $y )
|
||||
$x = $x + 1
|
||||
$y = $y + 1
|
||||
endw
|
||||
|
||||
$i = $i + 1
|
||||
endw
|
||||
|
||||
sleep 100
|
||||
|
||||
print =============== step2
|
||||
|
||||
sql select count(*), count(tbcol), count(tbcol2) from $mt interval(10s)
|
||||
print $data00 $data01 $data02 $data03
|
||||
|
||||
sql create table $st as select count(*), count(tbcol), count(tbcol2) from $mt interval(10s)
|
||||
|
||||
print =============== step3
|
||||
print sleep 120 seconds
|
||||
sleep 120000
|
||||
|
||||
print =============== step4
|
||||
|
||||
sql select * from $st
|
||||
print $st ==> $rows1 $data00 $data01 $data02 $data03
|
||||
if $data03 >= 51 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step5
|
||||
|
||||
$tbNum = 10
|
||||
while $i < $tbNum
|
||||
$tb = $tbPrefix . $i
|
||||
sql create table $tb using $mt tags( $i )
|
||||
if $i == 0 then
|
||||
sleep 2000
|
||||
endi
|
||||
|
||||
$x = 0
|
||||
$y = 0
|
||||
while $y < $rowNum
|
||||
$ms = $x . s
|
||||
sql insert into $tb values (now + $ms , $y , $y )
|
||||
$x = $x + 1
|
||||
$y = $y + 1
|
||||
endw
|
||||
|
||||
$i = $i + 1
|
||||
endw
|
||||
|
||||
print =============== step6
|
||||
print sleep 120 seconds
|
||||
sleep 120000
|
||||
|
||||
print =============== step7
|
||||
|
||||
sql select * from $st order by ts desc
|
||||
print $st ==> $rows1 $data00 $data01 $data02 $data03
|
||||
if $data03 <= 51 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,206 +0,0 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
|
||||
sleep 3000
|
||||
sql connect
|
||||
|
||||
print ======================== dnode1 start
|
||||
|
||||
$dbPrefix = s1_db
|
||||
$tbPrefix = s1_tb
|
||||
$mtPrefix = s1_mt
|
||||
$stPrefix = s1_st
|
||||
$tbNum = 10
|
||||
$rowNum = 20
|
||||
$totalNum = 200
|
||||
|
||||
print =============== step1
|
||||
$i = 0
|
||||
$db = $dbPrefix . $i
|
||||
$mt = $mtPrefix . $i
|
||||
$st = $stPrefix . $i
|
||||
|
||||
sql drop databae $db -x step1
|
||||
step1:
|
||||
sql create database $db
|
||||
sql use $db
|
||||
sql create table $mt (ts timestamp, tbcol int, tbcol2 float) TAGS(tgcol int)
|
||||
|
||||
$i = 0
|
||||
while $i < $tbNum
|
||||
$tb = $tbPrefix . $i
|
||||
sql create table $tb using $mt tags( $i )
|
||||
|
||||
$x = -1440
|
||||
$y = 0
|
||||
while $y < $rowNum
|
||||
$ms = $x . m
|
||||
sql insert into $tb values (now $ms , $y , $y )
|
||||
$x = $x + 1
|
||||
$y = $y + 1
|
||||
endw
|
||||
|
||||
$i = $i + 1
|
||||
endw
|
||||
|
||||
sleep 100
|
||||
|
||||
print =============== step2
|
||||
$i = 0
|
||||
$tb = $tbPrefix . $i
|
||||
$st = $stPrefix . $i
|
||||
|
||||
sql select count(*), count(tbcol), count(tbcol2) from $tb interval(1d)
|
||||
print select count(*), count(tbcol), count(tbcol2) from $tb interval(1d) ===> $data00 $data01 $data02, $data03
|
||||
if $data01 != $rowNum then
|
||||
return -1
|
||||
endi
|
||||
if $data02 != $rowNum then
|
||||
return -1
|
||||
endi
|
||||
if $data03 != $rowNum then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql show tables
|
||||
if $rows != 10 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql create table $st as select count(*), count(tbcol), count(tbcol2) from $tb interval(1d)
|
||||
|
||||
sql show tables
|
||||
if $rows != 11 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step3
|
||||
print sleep 120 seconds
|
||||
sleep 120000
|
||||
sql select * from $st
|
||||
print select * from $st => $data01
|
||||
if $data01 != 20 then
|
||||
return -1
|
||||
endi
|
||||
if $data02 != 20 then
|
||||
return -1
|
||||
endi
|
||||
if $data03 != 20 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step4
|
||||
sql drop table $st
|
||||
sql show tables
|
||||
if $rows != 10 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step5
|
||||
sql select * from $st -x step4
|
||||
return -1
|
||||
step4:
|
||||
|
||||
print =============== step6
|
||||
sql create table $st as select count(*), count(tbcol), count(tbcol2) from $tb interval(1d)
|
||||
sql show tables
|
||||
if $rows != 11 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step7
|
||||
print sleep 120 seconds
|
||||
sleep 120000
|
||||
sql select * from $st
|
||||
print select * from $st => $data01
|
||||
if $data01 != 20 then
|
||||
return -1
|
||||
endi
|
||||
if $data02 != 20 then
|
||||
return -1
|
||||
endi
|
||||
if $data03 != 20 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step8
|
||||
$i = 1
|
||||
$st = $stPrefix . $i
|
||||
|
||||
sql select count(*), count(tbcol), count(tbcol2) from $mt interval(1d)
|
||||
print select count(*), count(tbcol), count(tbcol2) from $mt interval(1d) ===> $data00 $data01 $data02, $data03
|
||||
if $data01 != 200 then
|
||||
return -1
|
||||
endi
|
||||
if $data02 != 200 then
|
||||
return -1
|
||||
endi
|
||||
if $data03 != 200 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql show tables
|
||||
if $rows != 11 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql create table $st as select count(*), count(tbcol), count(tbcol2) from $mt interval(1d)
|
||||
|
||||
sql show tables
|
||||
if $rows != 12 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step9
|
||||
print sleep 120 seconds
|
||||
sleep 120000
|
||||
sql select * from $st
|
||||
print select * from $st => $data01
|
||||
if $data01 != 200 then
|
||||
return -1
|
||||
endi
|
||||
if $data02 != 200 then
|
||||
return -1
|
||||
endi
|
||||
if $data03 != 200 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step10
|
||||
sql drop table $st
|
||||
sql show tables
|
||||
if $rows != 11 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step11
|
||||
sql select * from $st -x step10
|
||||
return -1
|
||||
step10:
|
||||
|
||||
print =============== step12
|
||||
sql create table $st as select count(*), count(tbcol), count(tbcol2) from $mt interval(1d)
|
||||
|
||||
sql show tables
|
||||
if $rows != 12 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step13
|
||||
print sleep 120 seconds
|
||||
sleep 120000
|
||||
sql select * from $st
|
||||
print select * from $st => $data01
|
||||
if $data01 != 200 then
|
||||
return -1
|
||||
endi
|
||||
if $data02 != 200 then
|
||||
return -1
|
||||
endi
|
||||
if $data03 != 200 then
|
||||
return -1
|
||||
endi
|
||||
|
|
@ -1,194 +0,0 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
|
||||
sleep 3000
|
||||
sql connect
|
||||
|
||||
print ======================== dnode1 start
|
||||
|
||||
$dbPrefix = s2_db
|
||||
$tbPrefix = s2_tb
|
||||
$mtPrefix = s2_mt
|
||||
$stPrefix = s2_st
|
||||
$tbNum = 10
|
||||
$rowNum = 20
|
||||
$totalNum = 200
|
||||
|
||||
print =============== step1
|
||||
$i = 0
|
||||
$db = $dbPrefix . $i
|
||||
$mt = $mtPrefix . $i
|
||||
$st = $stPrefix . $i
|
||||
|
||||
sql drop databae $db -x step1
|
||||
step1:
|
||||
sql create database $db
|
||||
sql use $db
|
||||
sql create table $mt (ts timestamp, tbcol int, tbcol2 float) TAGS(tgcol int)
|
||||
|
||||
$i = 0
|
||||
while $i < $tbNum
|
||||
$tb = $tbPrefix . $i
|
||||
sql create table $tb using $mt tags( $i )
|
||||
|
||||
$x = -1440
|
||||
$y = 0
|
||||
while $y < $rowNum
|
||||
$ms = $x . m
|
||||
sql insert into $tb values (now $ms , $y , $y )
|
||||
$x = $x + 1
|
||||
$y = $y + 1
|
||||
endw
|
||||
|
||||
$i = $i + 1
|
||||
endw
|
||||
|
||||
sleep 100
|
||||
|
||||
print =============== step2
|
||||
$i = 0
|
||||
$tb = $tbPrefix . $i
|
||||
$st = $stPrefix . $i
|
||||
|
||||
sql select count(tbcol) from $tb interval(1d)
|
||||
print select count(tbcol) from $tb interval(1d) ===> $data00 $data01 $data02, $data03
|
||||
if $data01 != $rowNum then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql show tables
|
||||
if $rows != 10 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql create table $st as select count(tbcol) from $tb interval(1d)
|
||||
|
||||
sql show tables
|
||||
if $rows != 11 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step3
|
||||
print sleep 120 seconds
|
||||
sleep 120000
|
||||
sql select * from $st
|
||||
print select * from $st => $data01
|
||||
if $data01 != 20 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step4
|
||||
sql drop table $st
|
||||
sql show tables
|
||||
if $rows != 10 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step5
|
||||
sql select * from $st -x step4
|
||||
return -1
|
||||
step4:
|
||||
|
||||
print =============== step6
|
||||
sql create table $st as select count(*), count(tbcol), count(tbcol2) from $tb interval(1d)
|
||||
sql show tables
|
||||
if $rows != 11 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step7
|
||||
print sleep 120 seconds
|
||||
sleep 120000
|
||||
sql select * from $st
|
||||
print select * from $st => $data01
|
||||
if $data01 != 20 then
|
||||
return -1
|
||||
endi
|
||||
if $data02 != 20 then
|
||||
return -1
|
||||
endi
|
||||
if $data03 != 20 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step8
|
||||
$i = 1
|
||||
$st = $stPrefix . $i
|
||||
|
||||
sql select count(*), count(tbcol), count(tbcol2) from $mt interval(1d)
|
||||
print select count(*), count(tbcol), count(tbcol2) from $mt interval(1d) ===> $data00 $data01 $data02, $data03
|
||||
if $data01 != 200 then
|
||||
return -1
|
||||
endi
|
||||
if $data02 != 200 then
|
||||
return -1
|
||||
endi
|
||||
if $data03 != 200 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql show tables
|
||||
if $rows != 11 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql create table $st as select count(*), count(tbcol), count(tbcol2) from $mt interval(1d)
|
||||
|
||||
sql show tables
|
||||
if $rows != 12 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step9
|
||||
print sleep 120 seconds
|
||||
sleep 120000
|
||||
sql select * from $st
|
||||
print select * from $st => $data01 $data02, $data03
|
||||
if $data01 != 200 then
|
||||
return -1
|
||||
endi
|
||||
if $data02 != 200 then
|
||||
return -1
|
||||
endi
|
||||
if $data03 != 200 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step10
|
||||
sql drop table $st
|
||||
sql show tables
|
||||
if $rows != 11 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step11
|
||||
sql select * from $st -x step10
|
||||
return -1
|
||||
step10:
|
||||
|
||||
print =============== step12
|
||||
sql create table $st as select count(tbcol) from $mt interval(1d)
|
||||
|
||||
sql show tables
|
||||
if $rows != 12 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
print =============== step13
|
||||
print sleep 120 seconds
|
||||
sleep 120000
|
||||
sql select * from $st
|
||||
print select * from $st => $data01 $data02, $data03
|
||||
if $data01 != 200 then
|
||||
return -1
|
||||
endi
|
||||
if $data02 != null then
|
||||
return -1
|
||||
endi
|
||||
if $data03 != null then
|
||||
return -1
|
||||
endi
|
||||
|
|
@ -1,9 +1,6 @@
|
|||
run general/stream/stream_1.sim
|
||||
run general/stream/stream_2.sim
|
||||
run general/stream/stream_3.sim
|
||||
run general/stream/stream_restart.sim
|
||||
run general/stream/table_1.sim
|
||||
run general/stream/metrics_1.sim
|
||||
run general/stream/table_n.sim
|
||||
run general/stream/metrics_n.sim
|
||||
run general/stream/table_del.sim
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
cd ../../../debug; cmake ..
|
||||
cd ../../../debug; make
|
||||
|
||||
#./test.sh -f general/alter/cached_schema_after_alter.sim
|
||||
./test.sh -f general/alter/cached_schema_after_alter.sim
|
||||
./test.sh -f general/alter/count.sim
|
||||
./test.sh -f general/alter/import.sim
|
||||
#./test.sh -f general/alter/insert1.sim
|
||||
./test.sh -f general/alter/insert1.sim
|
||||
./test.sh -f general/alter/insert2.sim
|
||||
./test.sh -f general/alter/metrics.sim
|
||||
./test.sh -f general/alter/table.sim
|
||||
|
@ -117,6 +117,7 @@ cd ../../../debug; make
|
|||
./test.sh -f general/parser/import_commit3.sim
|
||||
./test.sh -f general/parser/insert_tb.sim
|
||||
./test.sh -f general/parser/first_last.sim
|
||||
# dyh is processing this script
|
||||
#./test.sh -f general/parser/import_file.sim
|
||||
./test.sh -f general/parser/lastrow.sim
|
||||
./test.sh -f general/parser/nchar.sim
|
||||
|
@ -135,6 +136,7 @@ cd ../../../debug; make
|
|||
./test.sh -f general/parser/limit2.sim
|
||||
./test.sh -f general/parser/fill.sim
|
||||
./test.sh -f general/parser/fill_stb.sim
|
||||
#./test.sh -f general/parser/fill_us.sim
|
||||
./test.sh -f general/parser/where.sim
|
||||
./test.sh -f general/parser/slimit.sim
|
||||
./test.sh -f general/parser/select_with_tags.sim
|
||||
|
@ -142,15 +144,15 @@ cd ../../../debug; make
|
|||
./test.sh -f general/parser/tags_dynamically_specifiy.sim
|
||||
./test.sh -f general/parser/groupby.sim
|
||||
./test.sh -f general/parser/set_tag_vals.sim
|
||||
#./test.sh -f general/parser/slimit_alter_tags.sim
|
||||
#./test.sh -f general/parser/sliding.sim
|
||||
./test.sh -f general/parser/tags_dynamically_specifiy.sim
|
||||
./test.sh -f general/parser/tags_filter.sim
|
||||
./test.sh -f general/parser/slimit_alter_tags.sim
|
||||
./test.sh -f general/parser/join.sim
|
||||
./test.sh -f general/parser/join_multivnode.sim
|
||||
./test.sh -f general/parser/binary_escapeCharacter.sim
|
||||
./test.sh -f general/parser/bug.sim
|
||||
#./test.sh -f general/parser/stream_on_sys.sim
|
||||
./test.sh -f general/parser/stream.sim
|
||||
./test.sh -f general/parser/repeatAlter.sim
|
||||
#./test.sh -f general/parser/repeatStream.sim
|
||||
|
||||
./test.sh -f general/stable/disk.sim
|
||||
./test.sh -f general/stable/dnode3.sim
|
||||
|
@ -201,7 +203,7 @@ cd ../../../debug; make
|
|||
./test.sh -f general/tag/bool.sim
|
||||
./test.sh -f general/tag/change.sim
|
||||
./test.sh -f general/tag/column.sim
|
||||
#./test.sh -f general/tag/commit.sim
|
||||
./test.sh -f general/tag/commit.sim
|
||||
./test.sh -f general/tag/create.sim
|
||||
./test.sh -f general/tag/delete.sim
|
||||
./test.sh -f general/tag/double.sim
|
||||
|
@ -309,14 +311,14 @@ cd ../../../debug; make
|
|||
./test.sh -f unique/vnode/replica3_repeat.sim
|
||||
./test.sh -f unique/vnode/replica3_vgroup.sim
|
||||
|
||||
./test.sh -f general/stream/metrics_1.sim
|
||||
# stream still has bugs
|
||||
#./test.sh -f general/parser/stream_on_sys.sim
|
||||
#./test.sh -f general/parser/repeatStream.sim
|
||||
|
||||
./test.sh -f general/stream/metrics_del.sim
|
||||
./test.sh -f general/stream/metrics_n.sim
|
||||
./test.sh -f general/stream/metrics_replica1_vnoden.sim
|
||||
#./test.sh -f general/stream/new_stream.sim
|
||||
./test.sh -f general/stream/restart_stream.sim
|
||||
./test.sh -f general/stream/stream_1.sim
|
||||
./test.sh -f general/stream/stream_2.sim
|
||||
./test.sh -f general/stream/stream_3.sim
|
||||
./test.sh -f general/stream/stream_restart.sim
|
||||
./test.sh -f general/stream/table_1.sim
|
||||
|
@ -334,6 +336,7 @@ cd ../../../debug; make
|
|||
./test.sh -f unique/arbitrator/dn3_mn1_replica_change_dropDnod.sim
|
||||
./test.sh -f unique/arbitrator/dn3_mn1_replica_change.sim
|
||||
./test.sh -f unique/arbitrator/dn3_mn1_stopDnode_timeout.sim
|
||||
# lower the priority while file corruption
|
||||
#./test.sh -f unique/arbitrator/dn3_mn1_vnode_change.sim
|
||||
#./test.sh -f unique/arbitrator/dn3_mn1_vnode_corruptFile_offline.sim
|
||||
#./test.sh -f unique/arbitrator/dn3_mn1_vnode_corruptFile_online.sim
|
||||
|
|
|
@ -148,7 +148,6 @@ cd ../../../debug; make
|
|||
./test.sh -f general/parser/binary_escapeCharacter.sim
|
||||
./test.sh -f general/parser/bug.sim
|
||||
#./test.sh -f general/parser/stream_on_sys.sim
|
||||
./test.sh -f general/parser/stream.sim
|
||||
./test.sh -f general/parser/repeatAlter.sim
|
||||
#./test.sh -f general/parser/repeatStream.sim
|
||||
|
||||
|
|
|
@ -110,6 +110,7 @@ echo "second ${HOSTNAME}:7200" >> $TAOS_CFG
|
|||
echo "serverPort ${NODE}" >> $TAOS_CFG
|
||||
echo "dataDir $DATA_DIR" >> $TAOS_CFG
|
||||
echo "logDir $LOG_DIR" >> $TAOS_CFG
|
||||
echo "debugFlag 135" >> $TAOS_CFG
|
||||
echo "mDebugFlag 135" >> $TAOS_CFG
|
||||
echo "sdbDebugFlag 135" >> $TAOS_CFG
|
||||
echo "dDebugFlag 135" >> $TAOS_CFG
|
||||
|
|
|
@ -1,7 +1,120 @@
|
|||
system sh/stop_dnodes.sh
|
||||
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/deploy.sh -n dnode2 -i 2
|
||||
system sh/deploy.sh -n dnode3 -i 3
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c walLevel -v 2
|
||||
system sh/cfg.sh -n dnode2 -c walLevel -v 2
|
||||
system sh/cfg.sh -n dnode3 -c walLevel -v 2
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c numOfMnodes -v 3
|
||||
system sh/cfg.sh -n dnode2 -c numOfMnodes -v 3
|
||||
system sh/cfg.sh -n dnode3 -c numOfMnodes -v 3
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c mnodeEqualVnodeNum -v 4
|
||||
system sh/cfg.sh -n dnode2 -c mnodeEqualVnodeNum -v 4
|
||||
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c numOfTotalVnodes -v 20
|
||||
system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 20
|
||||
system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 20
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c http -v 1
|
||||
system sh/cfg.sh -n dnode2 -c http -v 1
|
||||
system sh/cfg.sh -n dnode3 -c http -v 1
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c mDebugFlag -v 143
|
||||
system sh/cfg.sh -n dnode2 -c mDebugFlag -v 143
|
||||
system sh/cfg.sh -n dnode3 -c mDebugFlag -v 143
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c sdbDebugFlag -v 143
|
||||
system sh/cfg.sh -n dnode2 -c sdbDebugFlag -v 143
|
||||
system sh/cfg.sh -n dnode3 -c sdbDebugFlag -v 143
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c sdebugFlag -v 143
|
||||
system sh/cfg.sh -n dnode2 -c sdebugFlag -v 143
|
||||
system sh/cfg.sh -n dnode3 -c sdebugFlag -v 143
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c rpcDebugFlag -v 135
|
||||
system sh/cfg.sh -n dnode2 -c rpcDebugFlag -v 135
|
||||
system sh/cfg.sh -n dnode3 -c rpcDebugFlag -v 135
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c tsdbDebugFlag -v 131
|
||||
system sh/cfg.sh -n dnode2 -c tsdbDebugFlag -v 131
|
||||
system sh/cfg.sh -n dnode3 -c tsdbDebugFlag -v 131
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c mqttDebugFlag -v 131
|
||||
system sh/cfg.sh -n dnode2 -c mqttDebugFlag -v 131
|
||||
system sh/cfg.sh -n dnode3 -c mqttDebugFlag -v 131
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c qdebugFlag -v 131
|
||||
system sh/cfg.sh -n dnode2 -c qdebugFlag -v 131
|
||||
system sh/cfg.sh -n dnode3 -c qdebugFlag -v 131
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c cDebugFlag -v 131
|
||||
system sh/cfg.sh -n dnode2 -c cDebugFlag -v 131
|
||||
system sh/cfg.sh -n dnode3 -c cDebugFlag -v 131
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c udebugFlag -v 131
|
||||
system sh/cfg.sh -n dnode2 -c udebugFlag -v 131
|
||||
system sh/cfg.sh -n dnode3 -c udebugFlag -v 131
|
||||
|
||||
system sh/cfg.sh -n dnode1 -c wdebugFlag -v 131
|
||||
system sh/cfg.sh -n dnode2 -c wdebugFlag -v 131
|
||||
system sh/cfg.sh -n dnode3 -c wdebugFlag -v 131
|
||||
|
||||
print ============== deploy
|
||||
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
sleep 2001
|
||||
sql connect
|
||||
|
||||
sql create dnode $hostname2
|
||||
sql create dnode $hostname3
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
|
||||
print =============== step1
|
||||
$x = 0
|
||||
show1:
|
||||
$x = $x + 1
|
||||
sleep 2000
|
||||
if $x == 5 then
|
||||
return -1
|
||||
endi
|
||||
sql show mnodes -x show1
|
||||
$mnode1Role = $data2_1
|
||||
print mnode1Role $mnode1Role
|
||||
$mnode2Role = $data2_2
|
||||
print mnode2Role $mnode2Role
|
||||
$mnode3Role = $data2_3
|
||||
print mnode3Role $mnode3Role
|
||||
|
||||
if $mnode1Role != master then
|
||||
goto show1
|
||||
endi
|
||||
if $mnode2Role != slave then
|
||||
goto show1
|
||||
endi
|
||||
if $mnode3Role != slave then
|
||||
goto show1
|
||||
endi
|
||||
|
||||
$x = 1
|
||||
show2:
|
||||
|
||||
print =============== step $x
|
||||
sql show mnodes
|
||||
print $data0_1 $data2_1
|
||||
print $data0_2 $data2_2
|
||||
print $data0_3 $data2_3
|
||||
|
||||
|
||||
$x = $x + 1
|
||||
sleep 2000
|
||||
if $x == 1000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
goto show2
|
||||
|
|
|
@ -1,16 +1,56 @@
|
|||
$tblStart = 0
|
||||
$tblEnd = 10000
|
||||
$tsStart = 1325347200000 # 2012-01-01 00:00:00.000
|
||||
###############################################################
|
||||
|
||||
sql connect
|
||||
|
||||
$db = db1
|
||||
$stb = stb1
|
||||
print =============== client1_0:
|
||||
|
||||
sql use $db
|
||||
|
||||
$tblNum = 1000
|
||||
|
||||
$i = 1
|
||||
while $i < $tblNum
|
||||
######sql create table $stb (ts timestamp, c1 int) tags(t1 int, t2 binary(8))
|
||||
$tagPrex = ' . tag
|
||||
|
||||
$i = $tblStart
|
||||
while $i < $tblEnd
|
||||
$tb = tb . $i
|
||||
sql create table $tb using $stb tags ($i, 'abcd')
|
||||
$tagBinary = $tagPrex . $i
|
||||
$tagBinary = $tagBinary . '
|
||||
sql create table if not exists $tb using $stb tags ($i, $tagBinary)
|
||||
$i = $i + 1
|
||||
endw
|
||||
|
||||
|
||||
print ====================== client1_0 create table end, start insert data ............
|
||||
|
||||
$rowsPerLoop = 100
|
||||
$ts = $tsStart
|
||||
|
||||
$i = $tblStart
|
||||
while $i < $tblEnd
|
||||
$tb = tb . $i
|
||||
$x = 0
|
||||
while $x < $rowsPerLoop
|
||||
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x )
|
||||
$x = $x + 20
|
||||
$ts = $ts + 40a
|
||||
endw
|
||||
|
||||
$totalRows = $totalRows + $x
|
||||
$i = $i + 1
|
||||
|
||||
if $i == $tblEnd then
|
||||
$i = $tblStart
|
||||
|
||||
sql select count(*) from $stb -x continue_loop
|
||||
print data00 $data00 totalRows $totalRows
|
||||
if $data00 < $totalRows then
|
||||
print ********************** select error **********************
|
||||
endi
|
||||
continue_loop:
|
||||
print ====================== client1_0 insert data complete once ............
|
||||
endi
|
||||
endw
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
$tblStart = 10000
|
||||
$tblEnd = 20000
|
||||
$tsStart = 1325347200000 # 2012-01-01 00:00:00.000
|
||||
###############################################################
|
||||
|
||||
sql connect
|
||||
|
||||
$db = db1
|
||||
$stb = stb1
|
||||
|
||||
sql use $db
|
||||
|
||||
|
||||
######sql create table $stb (ts timestamp, c1 int) tags(t1 int, t2 binary(8))
|
||||
$tagPrex = ' . tag
|
||||
|
||||
$i = $tblStart
|
||||
while $i < $tblEnd
|
||||
$tb = tb . $i
|
||||
$tagBinary = $tagPrex . $i
|
||||
$tagBinary = $tagBinary . '
|
||||
sql create table if not exists $tb using $stb tags ($i, $tagBinary)
|
||||
$i = $i + 1
|
||||
endw
|
||||
|
||||
$rowsPerLoop = 100
|
||||
$ts = $tsStart
|
||||
|
||||
$i = $tblStart
|
||||
while $i < $tblEnd
|
||||
$tb = tb . $i
|
||||
$x = 0
|
||||
while $x < $rowsPerLoop
|
||||
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x )
|
||||
$x = $x + 20
|
||||
$ts = $ts + 40a
|
||||
endw
|
||||
|
||||
$totalRows = $totalRows + $x
|
||||
$i = $i + 1
|
||||
|
||||
if $i == $tblEnd then
|
||||
$i = $tblStart
|
||||
|
||||
sql select count(*) from $stb -x continue_loop
|
||||
print data00 $data00 totalRows $totalRows
|
||||
if $data00 < $totalRows then
|
||||
print ********************** select error **********************
|
||||
endi
|
||||
continue_loop:
|
||||
endi
|
||||
endw
|
|
@ -0,0 +1,52 @@
|
|||
$tblStart = 20000
|
||||
$tblEnd = 30000
|
||||
$tsStart = 1325347200000 # 2012-01-01 00:00:00.000
|
||||
###############################################################
|
||||
|
||||
sql connect
|
||||
|
||||
$db = db1
|
||||
$stb = stb1
|
||||
|
||||
sql use $db
|
||||
|
||||
|
||||
######sql create table $stb (ts timestamp, c1 int) tags(t1 int, t2 binary(8))
|
||||
$tagPrex = ' . tag
|
||||
|
||||
$i = $tblStart
|
||||
while $i < $tblEnd
|
||||
$tb = tb . $i
|
||||
$tagBinary = $tagPrex . $i
|
||||
$tagBinary = $tagBinary . '
|
||||
sql create table if not exists $tb using $stb tags ($i, $tagBinary)
|
||||
$i = $i + 1
|
||||
endw
|
||||
|
||||
$rowsPerLoop = 100
|
||||
$ts = $tsStart
|
||||
|
||||
$i = $tblStart
|
||||
while $i < $tblEnd
|
||||
$tb = tb . $i
|
||||
$x = 0
|
||||
while $x < $rowsPerLoop
|
||||
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x )
|
||||
$x = $x + 20
|
||||
$ts = $ts + 40a
|
||||
endw
|
||||
|
||||
$totalRows = $totalRows + $x
|
||||
$i = $i + 1
|
||||
|
||||
if $i == $tblEnd then
|
||||
$i = $tblStart
|
||||
|
||||
sql select count(*) from $stb -x continue_loop
|
||||
print data00 $data00 totalRows $totalRows
|
||||
if $data00 < $totalRows then
|
||||
print ********************** select error **********************
|
||||
endi
|
||||
continue_loop:
|
||||
endi
|
||||
endw
|
|
@ -0,0 +1,52 @@
|
|||
$tblStart = 30000
|
||||
$tblEnd = 40000
|
||||
$tsStart = 1325347200000 # 2012-01-01 00:00:00.000
|
||||
###############################################################
|
||||
|
||||
sql connect
|
||||
|
||||
$db = db1
|
||||
$stb = stb1
|
||||
|
||||
sql use $db
|
||||
|
||||
|
||||
######sql create table $stb (ts timestamp, c1 int) tags(t1 int, t2 binary(8))
|
||||
$tagPrex = ' . tag
|
||||
|
||||
$i = $tblStart
|
||||
while $i < $tblEnd
|
||||
$tb = tb . $i
|
||||
$tagBinary = $tagPrex . $i
|
||||
$tagBinary = $tagBinary . '
|
||||
sql create table if not exists $tb using $stb tags ($i, $tagBinary)
|
||||
$i = $i + 1
|
||||
endw
|
||||
|
||||
$rowsPerLoop = 100
|
||||
$ts = $tsStart
|
||||
|
||||
$i = $tblStart
|
||||
while $i < $tblEnd
|
||||
$tb = tb . $i
|
||||
$x = 0
|
||||
while $x < $rowsPerLoop
|
||||
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x )
|
||||
$x = $x + 20
|
||||
$ts = $ts + 40a
|
||||
endw
|
||||
|
||||
$totalRows = $totalRows + $x
|
||||
$i = $i + 1
|
||||
|
||||
if $i == $tblEnd then
|
||||
$i = $tblStart
|
||||
|
||||
sql select count(*) from $stb -x continue_loop
|
||||
print data00 $data00 totalRows $totalRows
|
||||
if $data00 < $totalRows then
|
||||
print ********************** select error **********************
|
||||
endi
|
||||
continue_loop:
|
||||
endi
|
||||
endw
|
|
@ -0,0 +1,52 @@
|
|||
$tblStart = 0
|
||||
$tblEnd = 10000
|
||||
$tsStart = 1325347200001 # 2012-01-01 00:00:00.001
|
||||
###############################################################
|
||||
|
||||
sql connect
|
||||
|
||||
$db = db1
|
||||
$stb = stb1
|
||||
|
||||
sql use $db
|
||||
|
||||
|
||||
######sql create table $stb (ts timestamp, c1 int) tags(t1 int, t2 binary(8))
|
||||
$tagPrex = ' . tag
|
||||
|
||||
$i = $tblStart
|
||||
while $i < $tblEnd
|
||||
$tb = tb . $i
|
||||
$tagBinary = $tagPrex . $i
|
||||
$tagBinary = $tagBinary . '
|
||||
sql create table if not exists $tb using $stb tags ($i, $tagBinary)
|
||||
$i = $i + 1
|
||||
endw
|
||||
|
||||
$rowsPerLoop = 100
|
||||
$ts = $tsStart
|
||||
|
||||
$i = $tblStart
|
||||
while $i < $tblEnd
|
||||
$tb = tb . $i
|
||||
$x = 0
|
||||
while $x < $rowsPerLoop
|
||||
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x )
|
||||
$x = $x + 20
|
||||
$ts = $ts + 40a
|
||||
endw
|
||||
|
||||
$totalRows = $totalRows + $x
|
||||
$i = $i + 1
|
||||
|
||||
if $i == $tblEnd then
|
||||
$i = $tblStart
|
||||
|
||||
sql select count(*) from $stb -x continue_loop
|
||||
print data00 $data00 totalRows $totalRows
|
||||
if $data00 < $totalRows then
|
||||
print ********************** select error **********************
|
||||
endi
|
||||
continue_loop:
|
||||
endi
|
||||
endw
|
|
@ -0,0 +1,52 @@
|
|||
$tblStart = 10000
|
||||
$tblEnd = 20000
|
||||
$tsStart = 1325347200001 # 2012-01-01 00:00:00.000
|
||||
###############################################################
|
||||
|
||||
sql connect
|
||||
|
||||
$db = db1
|
||||
$stb = stb1
|
||||
|
||||
sql use $db
|
||||
|
||||
|
||||
######sql create table $stb (ts timestamp, c1 int) tags(t1 int, t2 binary(8))
|
||||
$tagPrex = ' . tag
|
||||
|
||||
$i = $tblStart
|
||||
while $i < $tblEnd
|
||||
$tb = tb . $i
|
||||
$tagBinary = $tagPrex . $i
|
||||
$tagBinary = $tagBinary . '
|
||||
sql create table if not exists $tb using $stb tags ($i, $tagBinary)
|
||||
$i = $i + 1
|
||||
endw
|
||||
|
||||
$rowsPerLoop = 100
|
||||
$ts = $tsStart
|
||||
|
||||
$i = $tblStart
|
||||
while $i < $tblEnd
|
||||
$tb = tb . $i
|
||||
$x = 0
|
||||
while $x < $rowsPerLoop
|
||||
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x )
|
||||
$x = $x + 20
|
||||
$ts = $ts + 40a
|
||||
endw
|
||||
|
||||
$totalRows = $totalRows + $x
|
||||
$i = $i + 1
|
||||
|
||||
if $i == $tblEnd then
|
||||
$i = $tblStart
|
||||
|
||||
sql select count(*) from $stb -x continue_loop
|
||||
print data00 $data00 totalRows $totalRows
|
||||
if $data00 < $totalRows then
|
||||
print ********************** select error **********************
|
||||
endi
|
||||
continue_loop:
|
||||
endi
|
||||
endw
|
|
@ -0,0 +1,52 @@
|
|||
$tblStart = 20000
|
||||
$tblEnd = 30000
|
||||
$tsStart = 1325347200001 # 2012-01-01 00:00:00.000
|
||||
###############################################################
|
||||
|
||||
sql connect
|
||||
|
||||
$db = db1
|
||||
$stb = stb1
|
||||
|
||||
sql use $db
|
||||
|
||||
|
||||
######sql create table $stb (ts timestamp, c1 int) tags(t1 int, t2 binary(8))
|
||||
$tagPrex = ' . tag
|
||||
|
||||
$i = $tblStart
|
||||
while $i < $tblEnd
|
||||
$tb = tb . $i
|
||||
$tagBinary = $tagPrex . $i
|
||||
$tagBinary = $tagBinary . '
|
||||
sql create table if not exists $tb using $stb tags ($i, $tagBinary)
|
||||
$i = $i + 1
|
||||
endw
|
||||
|
||||
$rowsPerLoop = 100
|
||||
$ts = $tsStart
|
||||
|
||||
$i = $tblStart
|
||||
while $i < $tblEnd
|
||||
$tb = tb . $i
|
||||
$x = 0
|
||||
while $x < $rowsPerLoop
|
||||
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x )
|
||||
$x = $x + 20
|
||||
$ts = $ts + 40a
|
||||
endw
|
||||
|
||||
$totalRows = $totalRows + $x
|
||||
$i = $i + 1
|
||||
|
||||
if $i == $tblEnd then
|
||||
$i = $tblStart
|
||||
|
||||
sql select count(*) from $stb -x continue_loop
|
||||
print data00 $data00 totalRows $totalRows
|
||||
if $data00 < $totalRows then
|
||||
print ********************** select error **********************
|
||||
endi
|
||||
continue_loop:
|
||||
endi
|
||||
endw
|
|
@ -0,0 +1,52 @@
|
|||
$tblStart = 30000
|
||||
$tblEnd = 40000
|
||||
$tsStart = 1325347200001 # 2012-01-01 00:00:00.000
|
||||
###############################################################
|
||||
|
||||
sql connect
|
||||
|
||||
$db = db1
|
||||
$stb = stb1
|
||||
|
||||
sql use $db
|
||||
|
||||
|
||||
######sql create table $stb (ts timestamp, c1 int) tags(t1 int, t2 binary(8))
|
||||
$tagPrex = ' . tag
|
||||
|
||||
$i = $tblStart
|
||||
while $i < $tblEnd
|
||||
$tb = tb . $i
|
||||
$tagBinary = $tagPrex . $i
|
||||
$tagBinary = $tagBinary . '
|
||||
sql create table if not exists $tb using $stb tags ($i, $tagBinary)
|
||||
$i = $i + 1
|
||||
endw
|
||||
|
||||
$rowsPerLoop = 100
|
||||
$ts = $tsStart
|
||||
|
||||
$i = $tblStart
|
||||
while $i < $tblEnd
|
||||
$tb = tb . $i
|
||||
$x = 0
|
||||
while $x < $rowsPerLoop
|
||||
sql insert into $tb values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x )
|
||||
$x = $x + 20
|
||||
$ts = $ts + 40a
|
||||
endw
|
||||
|
||||
$totalRows = $totalRows + $x
|
||||
$i = $i + 1
|
||||
|
||||
if $i == $tblEnd then
|
||||
$i = $tblStart
|
||||
|
||||
sql select count(*) from $stb -x continue_loop
|
||||
print data00 $data00 totalRows $totalRows
|
||||
if $data00 < $totalRows then
|
||||
print ********************** select error **********************
|
||||
endi
|
||||
continue_loop:
|
||||
endi
|
||||
endw
|
|
@ -61,19 +61,29 @@ sql use $db
|
|||
|
||||
print ============== step3: create stable stb1
|
||||
$stb = stb1
|
||||
sql create table $stb (ts timestamp, c1 int, c2 int) tags(t1 int, t2 binary(8))
|
||||
sql create table $stb (ts timestamp, c1 int) tags(t1 int, t2 binary(8))
|
||||
|
||||
print ============== step4: start 10 client1/ 10 client2/ 10 client3/ 10 client4/ 1 client5
|
||||
#run_back unique/cluster/client_test.sim
|
||||
run_back unique/cluster/client1_0.sim
|
||||
#run_back unique/cluster/client1_1.sim
|
||||
#run_back unique/big_cluster/client1_2.sim
|
||||
#run_back unique/big_cluster/client1_3.sim
|
||||
#run_back unique/big_cluster/client1_4.sim
|
||||
#run_back unique/big_cluster/client1_5.sim
|
||||
#run_back unique/big_cluster/client1_6.sim
|
||||
#run_back unique/big_cluster/client1_7.sim
|
||||
#run_back unique/big_cluster/client1_8.sim
|
||||
#run_back unique/big_cluster/client1_9.sim
|
||||
run_back unique/cluster/client1_1.sim
|
||||
run_back unique/cluster/client1_2.sim
|
||||
run_back unique/cluster/client1_3.sim
|
||||
run_back unique/cluster/client2_0.sim
|
||||
run_back unique/cluster/client2_1.sim
|
||||
run_back unique/cluster/client2_2.sim
|
||||
run_back unique/cluster/client2_3.sim
|
||||
run_back unique/cluster/client3.sim
|
||||
run_back unique/cluster/client4.sim
|
||||
|
||||
sleep 20000
|
||||
wait_subsim_insert_data:
|
||||
sql select count(*) from $stb
|
||||
print data00 $data00
|
||||
if $data00 < 1 then
|
||||
sleep 3000
|
||||
goto wait_subsim_insert_data
|
||||
endi
|
||||
|
||||
|
||||
print wait for a while to let clients start insert data
|
||||
|
@ -81,7 +91,7 @@ sleep 5000
|
|||
|
||||
$loop_cnt = 0
|
||||
loop_cluster_do:
|
||||
print **** **** **** START loop cluster do **** **** **** ****
|
||||
print **** **** **** START loop cluster do (loop_cnt: $loop_cnt )**** **** **** ****
|
||||
print ============== step5: start dnode4 and add into cluster, then wait dnode4 ready
|
||||
system sh/exec.sh -n dnode4 -s start
|
||||
sql create dnode $hostname4
|
||||
|
@ -112,7 +122,7 @@ elif $loop_cnt == 1 then
|
|||
elif $loop_cnt == 2 then
|
||||
$dnode4Status = $data4_8
|
||||
else then
|
||||
print **** **** **** END loop cluster do 2**** **** **** ****
|
||||
print **** **** **** END loop cluster do (loop_cnt: $loop_cnt )**** **** **** ****
|
||||
return
|
||||
endi
|
||||
|
||||
|
@ -154,7 +164,7 @@ elif $loop_cnt == 2 then
|
|||
elif $loop_cnt == 3 then
|
||||
$dnode1Status = $data4_9
|
||||
else then
|
||||
print **** **** **** END loop cluster do 1**** **** **** ****
|
||||
print **** **** **** END loop cluster do (loop_cnt: $loop_cnt )**** **** **** ****
|
||||
return
|
||||
endi
|
||||
|
||||
|
@ -163,44 +173,124 @@ if $dnode1Status != offline then
|
|||
goto wait_dnode1_offline_0
|
||||
endi
|
||||
|
||||
|
||||
|
||||
$cnt = 0
|
||||
wait_mnode1_offline_0:
|
||||
$cnt = $cnt + 1
|
||||
if $cnt == 10 then
|
||||
return -1
|
||||
endi
|
||||
print show mnodes
|
||||
sql show mnodes
|
||||
if $rows != 3 then
|
||||
sleep 2000
|
||||
goto wait_mnode1_offline_0
|
||||
endi
|
||||
print $data0_1 $data1_1 $data2_1 $data3_1 $data4_1
|
||||
print $data0_2 $data1_2 $data2_2 $data3_2 $data4_2
|
||||
print $data0_3 $data1_3 $data2_3 $data3_3 $data4_3
|
||||
print $data0_4 $data1_4 $data2_4 $data3_4 $data4_4
|
||||
$mnode1Status = $data2_1
|
||||
$mnode2Status = $data2_2
|
||||
$mnode3Status = $data2_3
|
||||
$mnode4Status = $data2_4
|
||||
|
||||
if $loop_cnt == 0 then
|
||||
$mnode1Status = $data2_1
|
||||
elif $loop_cnt == 1 then
|
||||
$mnode1Status = $data2_5
|
||||
elif $loop_cnt == 2 then
|
||||
$mnode1Status = $data2_7
|
||||
elif $loop_cnt == 3 then
|
||||
$mnode1Status = $data2_9
|
||||
else then
|
||||
print **** **** **** END loop cluster do (loop_cnt: $loop_cnt )**** **** **** ****
|
||||
return
|
||||
endi
|
||||
|
||||
if $mnode1Status != offline then
|
||||
sleep 2000
|
||||
goto wait_mnode1_offline_0
|
||||
endi
|
||||
|
||||
|
||||
|
||||
sql drop dnode $hostname1
|
||||
system rm -rf ../../../sim/dnode1
|
||||
system rm -rf ../../../sim/dnode1/data
|
||||
|
||||
$cnt = 0
|
||||
wait_mnode4_slave_0:
|
||||
$cnt = $cnt + 1
|
||||
if $cnt == 10 then
|
||||
return -1
|
||||
endi
|
||||
print show mnodes
|
||||
sql show mnodes
|
||||
if $rows != 3 then
|
||||
sleep 2000
|
||||
goto wait_mnode4_slave_0
|
||||
endi
|
||||
print $data0_1 $data1_1 $data2_1 $data3_1 $data4_1
|
||||
print $data0_2 $data1_2 $data2_2 $data3_2 $data4_2
|
||||
print $data0_3 $data1_3 $data2_3 $data3_3 $data4_3
|
||||
print $data0_4 $data1_4 $data2_4 $data3_4 $data4_4
|
||||
$mnode1Status = $data2_1
|
||||
$mnode2Status = $data2_2
|
||||
$mnode3Status = $data2_3
|
||||
$mnode4Status = $data2_4
|
||||
|
||||
print ============== step7: stop dnode2, because mnodes < 50%, so clusert don't provide services
|
||||
if $loop_cnt == 0 then
|
||||
$mnode4Status = $data2_4
|
||||
elif $loop_cnt == 1 then
|
||||
$mnode4Status = $data2_6
|
||||
elif $loop_cnt == 2 then
|
||||
$mnode4Status = $data2_8
|
||||
else then
|
||||
print **** **** **** END loop cluster do (loop_cnt: $loop_cnt )**** **** **** ****
|
||||
return
|
||||
endi
|
||||
|
||||
if $mnode4Status != slave then
|
||||
sleep 2000
|
||||
goto wait_mnode4_slave_0
|
||||
endi
|
||||
|
||||
print ============== step7: stop dnode2, waiting dnode4
|
||||
system sh/exec.sh -n dnode2 -s stop -x SIGINT
|
||||
|
||||
sql show dnodes -x wait_dnode2_offline_0
|
||||
$cnt = 0
|
||||
wait_dnode2_offline_0:
|
||||
$cnt = $cnt + 1
|
||||
if $cnt == 10 then
|
||||
return -1
|
||||
endi
|
||||
sql show dnodes
|
||||
if $rows != 3 then
|
||||
sleep 2000
|
||||
goto wait_dnode2_offline_0
|
||||
endi
|
||||
wait_dnode2_offline_0:
|
||||
print $data0_1 $data1_1 $data2_1 $data3_1 $data4_1
|
||||
print $data0_2 $data1_2 $data2_2 $data3_2 $data4_2
|
||||
print $data0_3 $data1_3 $data2_3 $data3_3 $data4_3
|
||||
print $data0_4 $data1_4 $data2_4 $data3_4 $data4_4
|
||||
$dnode1Status = $data4_1
|
||||
$dnode2Status = $data4_2
|
||||
$dnode3Status = $data4_3
|
||||
$dnode4Status = $data4_4
|
||||
|
||||
#$cnt = 0
|
||||
#wait_dnode2_offline_0:
|
||||
#$cnt = $cnt + 1
|
||||
#if $cnt == 10 then
|
||||
# return -1
|
||||
#endi
|
||||
#sql show dnodes -x wait_dnode2_offline_0
|
||||
#if $rows != 3 then
|
||||
# sleep 2000
|
||||
# goto wait_dnode2_offline_0
|
||||
#endi
|
||||
#print $data0_1 $data1_1 $data2_1 $data3_1 $data4_1
|
||||
#print $data0_2 $data1_2 $data2_2 $data3_2 $data4_2
|
||||
#print $data0_3 $data1_3 $data2_3 $data3_3 $data4_3
|
||||
#print $data0_4 $data1_4 $data2_4 $data3_4 $data4_4
|
||||
#$dnode1Status = $data4_1
|
||||
#$dnode2Status = $data4_2
|
||||
#$dnode3Status = $data4_3
|
||||
#$dnode4Status = $data4_4
|
||||
#
|
||||
#if $dnode2Status != offline then
|
||||
# sleep 2000
|
||||
# goto wait_dnode1_offline_0
|
||||
#endi
|
||||
if $dnode2Status != offline then
|
||||
sleep 2000
|
||||
goto wait_dnode2_offline_0
|
||||
endi
|
||||
|
||||
sleep 3000
|
||||
print show mnodes
|
||||
sql show mnodes
|
||||
print $data0_1 $data1_1 $data2_1 $data3_1 $data4_1
|
||||
print $data0_2 $data1_2 $data2_2 $data3_2 $data4_2
|
||||
print $data0_3 $data1_3 $data2_3 $data3_3 $data4_3
|
||||
print $data0_4 $data1_4 $data2_4 $data3_4 $data4_4
|
||||
|
||||
print ============== step8: restart dnode2, then wait sync end
|
||||
system sh/exec.sh -n dnode2 -s start
|
||||
|
@ -230,9 +320,17 @@ if $dnode2Status != ready then
|
|||
goto wait_dnode2_ready_0
|
||||
endi
|
||||
|
||||
sleep 3000
|
||||
print show mnodes
|
||||
sql show mnodes
|
||||
print $data0_1 $data1_1 $data2_1 $data3_1 $data4_1
|
||||
print $data0_2 $data1_2 $data2_2 $data3_2 $data4_2
|
||||
print $data0_3 $data1_3 $data2_3 $data3_3 $data4_3
|
||||
print $data0_4 $data1_4 $data2_4 $data3_4 $data4_4
|
||||
|
||||
print ============== step9: stop dnode3, then wait sync end
|
||||
system sh/exec.sh -n dnode3 -s stop -x SIGINT
|
||||
sleep 3000
|
||||
|
||||
$cnt = 0
|
||||
wait_dnode3_offline_0:
|
||||
|
@ -261,6 +359,7 @@ endi
|
|||
|
||||
print ============== step10: restart dnode3, then wait sync end
|
||||
system sh/exec.sh -n dnode3 -s start
|
||||
sleep 3000
|
||||
|
||||
$cnt = 0
|
||||
wait_dnode3_ready_0:
|
||||
|
@ -289,6 +388,7 @@ endi
|
|||
|
||||
print ============== step11: stop dnode4, then wait sync end
|
||||
system sh/exec.sh -n dnode4 -s stop -x SIGINT
|
||||
sleep 3000
|
||||
|
||||
$cnt = 0
|
||||
wait_dnode4_offline_0:
|
||||
|
@ -317,7 +417,7 @@ elif $loop_cnt == 1 then
|
|||
elif $loop_cnt == 2 then
|
||||
$dnode4Status = $data4_8
|
||||
else then
|
||||
print **** **** **** END loop cluster do 2**** **** **** ****
|
||||
print **** **** **** END loop cluster do (loop_cnt: $loop_cnt )**** **** **** ****
|
||||
return
|
||||
endi
|
||||
|
||||
|
@ -328,9 +428,10 @@ endi
|
|||
|
||||
print ============== step12: restart dnode4, then wait sync end
|
||||
system sh/exec.sh -n dnode4 -s start
|
||||
sleep 3000
|
||||
|
||||
$cnt = 0
|
||||
wait_dnode4_ready_0:
|
||||
wait_dnode4_ready_1:
|
||||
$cnt = $cnt + 1
|
||||
if $cnt == 10 then
|
||||
return -1
|
||||
|
@ -338,7 +439,7 @@ endi
|
|||
sql show dnodes
|
||||
if $rows != 3 then
|
||||
sleep 2000
|
||||
goto wait_dnode4_ready_0
|
||||
goto wait_dnode4_ready_1
|
||||
endi
|
||||
print $data0_1 $data1_1 $data2_1 $data3_1 $data4_1
|
||||
print $data0_2 $data1_2 $data2_2 $data3_2 $data4_2
|
||||
|
@ -356,27 +457,28 @@ elif $loop_cnt == 1 then
|
|||
elif $loop_cnt == 2 then
|
||||
$dnode4Status = $data4_8
|
||||
else then
|
||||
print **** **** **** END loop cluster do 2**** **** **** ****
|
||||
print **** **** **** END loop cluster do (loop_cnt: $loop_cnt )**** **** **** ****
|
||||
return
|
||||
endi
|
||||
|
||||
if $dnode4Status != ready then
|
||||
sleep 2000
|
||||
goto wait_dnode4_ready_0
|
||||
goto wait_dnode4_ready_1
|
||||
endi
|
||||
|
||||
print ============== step13: alter replica 2
|
||||
sql alter database $db replica 2
|
||||
sql show database
|
||||
print $data0_1 $data1_1 $data2_1 $data3_1 $data4_1
|
||||
sql show databases
|
||||
print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07 $data08 $data09
|
||||
|
||||
if $data0_5 != 2 then
|
||||
if $data04 != 2 then
|
||||
print rplica is not modify to 2, error!!!!!!
|
||||
return
|
||||
return -1
|
||||
endi
|
||||
|
||||
print ============== step14: stop and drop dnode4, then remove data dir of dnode4
|
||||
system sh/exec.sh -n dnode4 -s stop -x SIGINT
|
||||
sleep 3000
|
||||
|
||||
$cnt = 0
|
||||
wait_dnode4_offline_1:
|
||||
|
@ -405,7 +507,7 @@ elif $loop_cnt == 1 then
|
|||
elif $loop_cnt == 2 then
|
||||
$dnode4Status = $data4_8
|
||||
else then
|
||||
print **** **** **** END loop cluster do 2**** **** **** ****
|
||||
print **** **** **** END loop cluster do (loop_cnt: $loop_cnt )**** **** **** ****
|
||||
return
|
||||
endi
|
||||
|
||||
|
@ -414,32 +516,34 @@ if $dnode4Status != offline then
|
|||
goto wait_dnode4_offline_1
|
||||
endi
|
||||
|
||||
sleep 3000
|
||||
sql drop dnode $hostname4
|
||||
system rm -rf ../../../sim/dnode4
|
||||
system rm -rf ../../../sim/dnode4/data
|
||||
|
||||
|
||||
print ============== step15: alter replica 1
|
||||
sql alter database $db replica 1
|
||||
sql show database
|
||||
print $data0_1 $data1_1 $data2_1 $data3_1 $data4_1
|
||||
|
||||
if $data0_5 != 1 then
|
||||
sql show databases
|
||||
print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07 $data08 $data09
|
||||
if $data04 != 1 then
|
||||
print rplica is not modify to 1, error!!!!!!
|
||||
return
|
||||
return -1
|
||||
endi
|
||||
|
||||
|
||||
print ============== step16: alter replica 2
|
||||
sql alter database $db replica 1
|
||||
sql show database
|
||||
print $data0_1 $data1_1 $data2_1 $data3_1 $data4_1
|
||||
|
||||
if $data0_5 != 2 then
|
||||
sql alter database $db replica 2
|
||||
sql show databases
|
||||
print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07 $data08 $data09
|
||||
if $data04 != 2 then
|
||||
print rplica is not modify to 2, error!!!!!!
|
||||
return
|
||||
return -1
|
||||
endi
|
||||
|
||||
print ============== step17: start dnode1 and add into cluster, then wait dnode1 ready
|
||||
system sh/cfg.sh -n dnode1 -c first -v $hostname2
|
||||
system sh/cfg.sh -n dnode1 -c second -v $hostname3
|
||||
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
sql create dnode $hostname1
|
||||
|
||||
|
@ -457,21 +561,20 @@ print $data0_1 $data1_1 $data2_1 $data3_1 $data4_1
|
|||
print $data0_2 $data1_2 $data2_2 $data3_2 $data4_2
|
||||
print $data0_3 $data1_3 $data2_3 $data3_3 $data4_3
|
||||
print $data0_4 $data1_4 $data2_4 $data3_4 $data4_4
|
||||
print $data0_5 $data1_5 $data2_5 $data3_5 $data4_5
|
||||
#$dnode1Status = $data4_1
|
||||
$dnode2Status = $data4_2
|
||||
$dnode3Status = $data4_3
|
||||
$dnode4Status = $data4_4
|
||||
|
||||
if $loop_cnt == 0 then
|
||||
$dnode1Status = $data4_1
|
||||
elif $loop_cnt == 1 then
|
||||
$dnode1Status = $data4_5
|
||||
elif $loop_cnt == 2 then
|
||||
elif $loop_cnt == 1 then
|
||||
$dnode1Status = $data4_7
|
||||
elif $loop_cnt == 3 then
|
||||
$dnode1Status = $data4_9
|
||||
elif $loop_cnt == 2 then
|
||||
$dnode1Status = $data4_9
|
||||
else then
|
||||
print **** **** **** END loop cluster do 3**** **** **** ****
|
||||
print **** **** **** END loop cluster do (loop_cnt: $loop_cnt )**** **** **** ****
|
||||
return
|
||||
endi
|
||||
|
||||
|
@ -482,13 +585,13 @@ endi
|
|||
|
||||
print ============== step18: alter replica 3
|
||||
sql alter database $db replica 3
|
||||
sql show database
|
||||
print $data0_1 $data1_1 $data2_1 $data3_1 $data4_1
|
||||
|
||||
if $data0_5 != 3 then
|
||||
sql show databases
|
||||
print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07 $data08 $data09
|
||||
if $data04 != 3 then
|
||||
print rplica is not modify to 3, error!!!!!!
|
||||
return
|
||||
return -1
|
||||
endi
|
||||
|
||||
print **** **** **** (loop_cnt: $loop_cnt ) end, continue...... **** **** **** ****
|
||||
$loop_cnt = $loop_cnt + 1
|
||||
goto loop_cluster_do
|
||||
|
|
|
@ -31,6 +31,7 @@ char stableName[64] = "st";
|
|||
int32_t numOfThreads = 30;
|
||||
int32_t numOfTables = 100000;
|
||||
int32_t maxTables = 5000;
|
||||
int32_t replica = 1;
|
||||
int32_t numOfColumns = 2;
|
||||
|
||||
typedef struct {
|
||||
|
@ -96,7 +97,7 @@ void createDbAndSTable() {
|
|||
exit(1);
|
||||
}
|
||||
|
||||
sprintf(qstr, "create database if not exists %s maxtables %d", dbName, maxTables);
|
||||
sprintf(qstr, "create database if not exists %s maxtables %d replica %d", dbName, maxTables, replica);
|
||||
TAOS_RES *pSql = taos_query(con, qstr);
|
||||
int32_t code = taos_errno(pSql);
|
||||
if (code != 0) {
|
||||
|
@ -189,6 +190,8 @@ void printHelp() {
|
|||
printf("%s%s%s%d\n", indent, indent, "numOfThreads, default is ", numOfThreads);
|
||||
printf("%s%s\n", indent, "-n");
|
||||
printf("%s%s%s%d\n", indent, indent, "numOfTables, default is ", numOfTables);
|
||||
printf("%s%s\n", indent, "-r");
|
||||
printf("%s%s%s%d\n", indent, indent, "replica, default is ", replica);
|
||||
printf("%s%s\n", indent, "-columns");
|
||||
printf("%s%s%s%d\n", indent, indent, "numOfColumns, default is ", numOfColumns);
|
||||
printf("%s%s\n", indent, "-tables");
|
||||
|
@ -212,6 +215,8 @@ void shellParseArgument(int argc, char *argv[]) {
|
|||
numOfThreads = atoi(argv[++i]);
|
||||
} else if (strcmp(argv[i], "-n") == 0) {
|
||||
numOfTables = atoi(argv[++i]);
|
||||
} else if (strcmp(argv[i], "-r") == 0) {
|
||||
replica = atoi(argv[++i]);
|
||||
} else if (strcmp(argv[i], "-tables") == 0) {
|
||||
maxTables = atoi(argv[++i]);
|
||||
} else if (strcmp(argv[i], "-columns") == 0) {
|
||||
|
@ -226,6 +231,7 @@ void shellParseArgument(int argc, char *argv[]) {
|
|||
pPrint("%s numOfTables:%d %s", GREEN, numOfTables, NC);
|
||||
pPrint("%s numOfThreads:%d %s", GREEN, numOfThreads, NC);
|
||||
pPrint("%s numOfColumns:%d %s", GREEN, numOfColumns, NC);
|
||||
pPrint("%s replica:%d %s", GREEN, replica, NC);
|
||||
pPrint("%s dbPara maxTables:%d %s", GREEN, maxTables, NC);
|
||||
|
||||
pPrint("%s start create table performace test %s", GREEN, NC);
|
||||
|
|
|
@ -51,24 +51,12 @@
|
|||
#define FAILED_POSTFIX ""
|
||||
#endif
|
||||
|
||||
#define simError(...) \
|
||||
if (simDebugFlag & DEBUG_ERROR) { \
|
||||
taosPrintLog("ERROR SIM ", 255, __VA_ARGS__); \
|
||||
}
|
||||
#define simWarn(...) \
|
||||
if (simDebugFlag & DEBUG_WARN) { \
|
||||
taosPrintLog("WARN SIM ", simDebugFlag, __VA_ARGS__); \
|
||||
}
|
||||
#define simTrace(...) \
|
||||
if (simDebugFlag & DEBUG_TRACE) { \
|
||||
taosPrintLog("SIM ", simDebugFlag, __VA_ARGS__); \
|
||||
}
|
||||
#define simDump(x, y) \
|
||||
if (simDebugFlag & DEBUG_DUMP) { \
|
||||
taosDumpData(x, y); \
|
||||
}
|
||||
#define simPrint(...) \
|
||||
{ taosPrintLog("SIM ", 255, __VA_ARGS__); }
|
||||
#define simFatal(...) { if (simDebugFlag & DEBUG_FATAL) { taosPrintLog("SIM FATAL ", 255, __VA_ARGS__); }}
|
||||
#define simError(...) { if (simDebugFlag & DEBUG_ERROR) { taosPrintLog("SIM ERROR ", 255, __VA_ARGS__); }}
|
||||
#define simWarn(...) { if (simDebugFlag & DEBUG_WARN) { taosPrintLog("SIM WARN ", 255, __VA_ARGS__); }}
|
||||
#define simInfo(...) { if (simDebugFlag & DEBUG_INFO) { taosPrintLog("SIM INFO ", 255, __VA_ARGS__); }}
|
||||
#define simDebug(...) { if (simDebugFlag & DEBUG_DEBUG) { taosPrintLog("SIM DEBUG ", simDebugFlag, __VA_ARGS__); }}
|
||||
#define simTrace(...) { if (simDebugFlag & DEBUG_TRACE) { taosPrintLog("SIM TRACE ", simDebugFlag, __VA_ARGS__); }}
|
||||
|
||||
enum { SIM_SCRIPT_TYPE_MAIN, SIM_SCRIPT_TYPE_BACKGROUND };
|
||||
|
||||
|
|
|
@ -75,7 +75,7 @@ char *simGetVariable(SScript *script, char *varName, int varLen) {
|
|||
|
||||
for (int i = 0; i < MAX_QUERY_ROW_NUM; ++i) {
|
||||
if (strncmp(keyName, script->data[i][0], keyLen) == 0) {
|
||||
simTrace("script:%s, keyName:%s, keyValue:%s", script->fileName, script->data[i][0], script->data[i][col]);
|
||||
simDebug("script:%s, keyName:%s, keyValue:%s", script->fileName, script->data[i][0], script->data[i][col]);
|
||||
return script->data[i][col];
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ char *simGetVariable(SScript *script, char *varName, int varLen) {
|
|||
return "null";
|
||||
}
|
||||
|
||||
simTrace("script:%s, data[%d][%d]=%s", script->fileName, row, col, script->data[row][col]);
|
||||
simDebug("script:%s, data[%d][%d]=%s", script->fileName, row, col, script->data[row][col]);
|
||||
return script->data[row][col];
|
||||
}
|
||||
}
|
||||
|
@ -102,7 +102,7 @@ char *simGetVariable(SScript *script, char *varName, int varLen) {
|
|||
}
|
||||
if (strncmp(varName, var->varName, varLen) == 0) {
|
||||
// if (strlen(var->varValue) != 0)
|
||||
// simTrace("script:%s, var:%s, value:%s", script->fileName,
|
||||
// simDebug("script:%s, var:%s, value:%s", script->fileName,
|
||||
// var->varName, var->varValue);
|
||||
return var->varValue;
|
||||
}
|
||||
|
@ -240,7 +240,7 @@ bool simExecuteRunCmd(SScript *script, char *option) {
|
|||
return false;
|
||||
}
|
||||
|
||||
simPrint("script:%s, start to execute", newScript->fileName);
|
||||
simInfo("script:%s, start to execute", newScript->fileName);
|
||||
|
||||
newScript->type = SIM_SCRIPT_TYPE_MAIN;
|
||||
simScriptPos++;
|
||||
|
@ -262,7 +262,7 @@ bool simExecuteRunBackCmd(SScript *script, char *option) {
|
|||
sprintf(script->error, "lineNum:%d. parse file:%s error", script->lines[script->linePos].lineNum, fileName);
|
||||
return false;
|
||||
}
|
||||
simPrint("script:%s, start to execute in background", newScript->fileName);
|
||||
simInfo("script:%s, start to execute in background", newScript->fileName);
|
||||
|
||||
newScript->type = SIM_SCRIPT_TYPE_BACKGROUND;
|
||||
script->bgScripts[script->bgScriptLen++] = newScript;
|
||||
|
@ -336,7 +336,7 @@ bool simExecutePrintCmd(SScript *script, char *rest) {
|
|||
simVisuallizeOption(script, rest, buf);
|
||||
rest = buf;
|
||||
|
||||
simPrint("script:%s, %s", script->fileName, rest);
|
||||
simInfo("script:%s, %s", script->fileName, rest);
|
||||
script->linePos++;
|
||||
return true;
|
||||
}
|
||||
|
@ -351,9 +351,9 @@ bool simExecuteSleepCmd(SScript *script, char *option) {
|
|||
delta = atoi(option);
|
||||
if (delta <= 0) delta = 5;
|
||||
|
||||
simPrint("script:%s, sleep %dms begin", script->fileName, delta);
|
||||
simInfo("script:%s, sleep %dms begin", script->fileName, delta);
|
||||
taosMsleep(delta);
|
||||
simPrint("script:%s, sleep %dms finished", script->fileName, delta);
|
||||
simInfo("script:%s, sleep %dms finished", script->fileName, delta);
|
||||
|
||||
script->linePos++;
|
||||
return true;
|
||||
|
@ -372,7 +372,7 @@ bool simExecuteReturnCmd(SScript *script, char *option) {
|
|||
sprintf(script->error, "lineNum:%d. error return %s", script->lines[script->linePos].lineNum, option);
|
||||
return false;
|
||||
} else {
|
||||
simPrint("script:%s, return cmd execute with:%d", script->fileName, ret);
|
||||
simInfo("script:%s, return cmd execute with:%d", script->fileName, ret);
|
||||
script->linePos = script->numOfLines;
|
||||
}
|
||||
|
||||
|
@ -418,7 +418,7 @@ void simCloseRestFulConnect(SScript *script) {
|
|||
void simCloseNativeConnect(SScript *script) {
|
||||
if (script->taos == NULL) return;
|
||||
|
||||
simTrace("script:%s, taos:%p closed", script->fileName, script->taos);
|
||||
simDebug("script:%s, taos:%p closed", script->fileName, script->taos);
|
||||
taos_close(script->taos);
|
||||
taosMsleep(1200);
|
||||
|
||||
|
@ -468,7 +468,7 @@ int simParseHttpCommandResult(SScript *script, char *command) {
|
|||
cJSON_Delete(root);
|
||||
return retcode;
|
||||
} else {
|
||||
simTrace("script:%s, json:status:%s not equal to succ, but code is %d, response:%s", script->fileName,
|
||||
simDebug("script:%s, json:status:%s not equal to succ, but code is %d, response:%s", script->fileName,
|
||||
status->valuestring, retcode, command);
|
||||
cJSON_Delete(root);
|
||||
return 0;
|
||||
|
@ -568,10 +568,10 @@ bool simCreateRestFulConnect(SScript *script, char *user, char *pass) {
|
|||
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||
success = simExecuteRestFulCommand(script, command) == 0;
|
||||
if (!success) {
|
||||
simTrace("script:%s, user:%s connect taosd failed:%s, attempt:%d", script->fileName, user, taos_errstr(NULL), attempt);
|
||||
simDebug("script:%s, user:%s connect taosd failed:%s, attempt:%d", script->fileName, user, taos_errstr(NULL), attempt);
|
||||
taosMsleep(1000);
|
||||
} else {
|
||||
simTrace("script:%s, user:%s connect taosd successed, attempt:%d", script->fileName, user, attempt);
|
||||
simDebug("script:%s, user:%s connect taosd successed, attempt:%d", script->fileName, user, attempt);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -581,7 +581,7 @@ bool simCreateRestFulConnect(SScript *script, char *user, char *pass) {
|
|||
return false;
|
||||
}
|
||||
|
||||
simTrace("script:%s, connect taosd successed, auth:%p", script->fileName, script->auth);
|
||||
simDebug("script:%s, connect taosd successed, auth:%p", script->fileName, script->auth);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -592,10 +592,10 @@ bool simCreateNativeConnect(SScript *script, char *user, char *pass) {
|
|||
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||
taos = taos_connect(NULL, user, pass, NULL, tsDnodeShellPort);
|
||||
if (taos == NULL) {
|
||||
simTrace("script:%s, user:%s connect taosd failed:%s, attempt:%d", script->fileName, user, taos_errstr(NULL), attempt);
|
||||
simDebug("script:%s, user:%s connect taosd failed:%s, attempt:%d", script->fileName, user, taos_errstr(NULL), attempt);
|
||||
taosMsleep(1000);
|
||||
} else {
|
||||
simTrace("script:%s, user:%s connect taosd successed, attempt:%d", script->fileName, user, attempt);
|
||||
simDebug("script:%s, user:%s connect taosd successed, attempt:%d", script->fileName, user, attempt);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -606,7 +606,7 @@ bool simCreateNativeConnect(SScript *script, char *user, char *pass) {
|
|||
}
|
||||
|
||||
script->taos = taos;
|
||||
simTrace("script:%s, connect taosd successed, taos:%p", script->fileName, taos);
|
||||
simDebug("script:%s, connect taosd successed, taos:%p", script->fileName, taos);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -643,11 +643,11 @@ bool simExecuteNativeSqlCommand(SScript *script, char *rest, bool isSlow) {
|
|||
ret = taos_errno(pSql);
|
||||
|
||||
if (ret == TSDB_CODE_MND_TABLE_ALREADY_EXIST || ret == TSDB_CODE_MND_DB_ALREADY_EXIST) {
|
||||
simTrace("script:%s, taos:%p, %s success, ret:%d:%s", script->fileName, script->taos, rest, ret, tstrerror(ret));
|
||||
simDebug("script:%s, taos:%p, %s success, ret:%d:%s", script->fileName, script->taos, rest, ret, tstrerror(ret));
|
||||
ret = 0;
|
||||
break;
|
||||
} else if (ret != 0) {
|
||||
simTrace("script:%s, taos:%p, %s failed, ret:%d:%s, error:%s",
|
||||
simDebug("script:%s, taos:%p, %s failed, ret:%d:%s, error:%s",
|
||||
script->fileName, script->taos, rest, ret, tstrerror(ret), taos_errstr(pSql));
|
||||
|
||||
if (line->errorJump == SQL_JUMP_TRUE) {
|
||||
|
@ -672,7 +672,7 @@ bool simExecuteNativeSqlCommand(SScript *script, char *rest, bool isSlow) {
|
|||
int num_fields = taos_field_count(pSql);
|
||||
if (num_fields != 0) {
|
||||
if (pSql == NULL) {
|
||||
simTrace("script:%s, taos:%p, %s failed, result is null", script->fileName, script->taos, rest);
|
||||
simDebug("script:%s, taos:%p, %s failed, result is null", script->fileName, script->taos, rest);
|
||||
if (line->errorJump == SQL_JUMP_TRUE) {
|
||||
script->linePos = line->jump;
|
||||
return true;
|
||||
|
@ -794,11 +794,11 @@ bool simExecuteRestFulSqlCommand(SScript *script, char *rest) {
|
|||
ret = simExecuteRestFulCommand(script, command);
|
||||
if (ret == TSDB_CODE_MND_TABLE_ALREADY_EXIST ||
|
||||
ret == TSDB_CODE_MND_DB_ALREADY_EXIST) {
|
||||
simTrace("script:%s, taos:%p, %s success, ret:%d:%s", script->fileName, script->taos, rest, ret, tstrerror(ret));
|
||||
simDebug("script:%s, taos:%p, %s success, ret:%d:%s", script->fileName, script->taos, rest, ret, tstrerror(ret));
|
||||
ret = 0;
|
||||
break;
|
||||
} else if (ret != 0) {
|
||||
simTrace("script:%s, taos:%p, %s failed, ret:%d",
|
||||
simDebug("script:%s, taos:%p, %s failed, ret:%d",
|
||||
script->fileName, script->taos, rest, ret);
|
||||
|
||||
if (line->errorJump == SQL_JUMP_TRUE) {
|
||||
|
@ -827,7 +827,7 @@ bool simExecuteSqlImpCmd(SScript *script, char *rest, bool isSlow) {
|
|||
simVisuallizeOption(script, rest, buf);
|
||||
rest = buf;
|
||||
|
||||
simTrace("script:%s, exec:%s", script->fileName, rest);
|
||||
simDebug("script:%s, exec:%s", script->fileName, rest);
|
||||
strcpy(script->rows, "-1");
|
||||
for (int row = 0; row < MAX_QUERY_ROW_NUM; ++row) {
|
||||
for (int col = 0; col < MAX_QUERY_COL_NUM; ++col) {
|
||||
|
@ -883,7 +883,7 @@ bool simExecuteSqlErrorCmd(SScript *script, char *rest) {
|
|||
simVisuallizeOption(script, rest, buf);
|
||||
rest = buf;
|
||||
|
||||
simTrace("script:%s, exec:%s", script->fileName, rest);
|
||||
simDebug("script:%s, exec:%s", script->fileName, rest);
|
||||
strcpy(script->rows, "-1");
|
||||
for (int row = 0; row < MAX_QUERY_ROW_NUM; ++row) {
|
||||
for (int col = 0; col < MAX_QUERY_COL_NUM; ++col) {
|
||||
|
@ -929,7 +929,7 @@ bool simExecuteSqlErrorCmd(SScript *script, char *rest) {
|
|||
}
|
||||
|
||||
if (ret != TSDB_CODE_SUCCESS) {
|
||||
simTrace("script:%s, taos:%p, %s execute, expect failed, so success, ret:%d:%s",
|
||||
simDebug("script:%s, taos:%p, %s execute, expect failed, so success, ret:%d:%s",
|
||||
script->fileName, script->taos, rest, ret, tstrerror(ret));
|
||||
script->linePos++;
|
||||
return true;
|
||||
|
|
|
@ -49,7 +49,7 @@ int main(int argc, char *argv[]) {
|
|||
exit(1);
|
||||
}
|
||||
|
||||
simPrint("simulator is running ...");
|
||||
simInfo("simulator is running ...");
|
||||
signal(SIGINT, simHandleSignal);
|
||||
|
||||
SScript *script = simParseScript(scriptFile);
|
||||
|
|
|
@ -71,7 +71,7 @@ char *simParseHostName(char *varName) {
|
|||
}
|
||||
|
||||
sprintf(hostName, "'%s:%d'", simHostName, port);
|
||||
//simPrint("hostName:%s", hostName);
|
||||
//simInfo("hostName:%s", hostName);
|
||||
return hostName;
|
||||
}
|
||||
|
||||
|
@ -102,20 +102,20 @@ void simFreeScript(SScript *script) {
|
|||
SScript *simProcessCallOver(SScript *script) {
|
||||
if (script->type == SIM_SCRIPT_TYPE_MAIN) {
|
||||
if (script->killed) {
|
||||
simPrint("script:" FAILED_PREFIX "%s" FAILED_POSTFIX ", " FAILED_PREFIX
|
||||
simInfo("script:" FAILED_PREFIX "%s" FAILED_POSTFIX ", " FAILED_PREFIX
|
||||
"failed" FAILED_POSTFIX ", error:%s",
|
||||
script->fileName, script->error);
|
||||
exit(-1);
|
||||
} else {
|
||||
simPrint("script:" SUCCESS_PREFIX "%s" SUCCESS_POSTFIX ", " SUCCESS_PREFIX
|
||||
simInfo("script:" SUCCESS_PREFIX "%s" SUCCESS_POSTFIX ", " SUCCESS_PREFIX
|
||||
"success" SUCCESS_POSTFIX,
|
||||
script->fileName);
|
||||
simCloseTaosdConnect(script);
|
||||
simScriptSucced++;
|
||||
simScriptPos--;
|
||||
if (simScriptPos == -1) {
|
||||
simPrint("----------------------------------------------------------------------");
|
||||
simPrint("Simulation Test Done, " SUCCESS_PREFIX "%d" SUCCESS_POSTFIX " Passed:\n", simScriptSucced);
|
||||
simInfo("----------------------------------------------------------------------");
|
||||
simInfo("Simulation Test Done, " SUCCESS_PREFIX "%d" SUCCESS_POSTFIX " Passed:\n", simScriptSucced);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
@ -123,7 +123,7 @@ SScript *simProcessCallOver(SScript *script) {
|
|||
return simScriptList[simScriptPos];
|
||||
}
|
||||
} else {
|
||||
simPrint("script:%s, is stopped by main script", script->fileName);
|
||||
simInfo("script:%s, is stopped by main script", script->fileName);
|
||||
simFreeScript(script);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -143,7 +143,7 @@ void *simExecuteScript(void *inputScript) {
|
|||
} else {
|
||||
SCmdLine *line = &script->lines[script->linePos];
|
||||
char *option = script->optionBuffer + line->optionOffset;
|
||||
simTrace("script:%s, line:%d with option \"%s\"", script->fileName, line->lineNum, option);
|
||||
simDebug("script:%s, line:%d with option \"%s\"", script->fileName, line->lineNum, option);
|
||||
|
||||
SCommand *cmd = &simCmdList[line->cmdno];
|
||||
int ret = (*(cmd->executeCmd))(script, option);
|
||||
|
|
Loading…
Reference in New Issue