Merge remote-tracking branch 'origin/3.0' into feature/3.0_debug_wxy
This commit is contained in:
commit
ed66440c5c
|
@ -55,7 +55,7 @@ enum {
|
||||||
enum {
|
enum {
|
||||||
STREAM_INPUT__DATA_SUBMIT = 1,
|
STREAM_INPUT__DATA_SUBMIT = 1,
|
||||||
STREAM_INPUT__DATA_BLOCK,
|
STREAM_INPUT__DATA_BLOCK,
|
||||||
STREAM_INPUT__TABLE_SCAN,
|
// STREAM_INPUT__TABLE_SCAN,
|
||||||
STREAM_INPUT__TQ_SCAN,
|
STREAM_INPUT__TQ_SCAN,
|
||||||
STREAM_INPUT__DATA_RETRIEVE,
|
STREAM_INPUT__DATA_RETRIEVE,
|
||||||
STREAM_INPUT__TRIGGER,
|
STREAM_INPUT__TRIGGER,
|
||||||
|
|
|
@ -110,7 +110,7 @@ int32_t qCreateExecTask(SReadHandle* readHandle, int32_t vgId, uint64_t taskId,
|
||||||
* @param tversion
|
* @param tversion
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
int32_t qGetQueriedTableSchemaVersion(qTaskInfo_t tinfo, char* dbName, char* tableName, int32_t* sversion,
|
int32_t qGetQueryTableSchemaVersion(qTaskInfo_t tinfo, char* dbName, char* tableName, int32_t* sversion,
|
||||||
int32_t* tversion);
|
int32_t* tversion);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -124,6 +124,7 @@ typedef struct SWal {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int8_t scanUncommited;
|
int8_t scanUncommited;
|
||||||
int8_t scanMeta;
|
int8_t scanMeta;
|
||||||
|
int8_t enableRef;
|
||||||
} SWalFilterCond;
|
} SWalFilterCond;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -305,18 +305,23 @@ function install_lib() {
|
||||||
${install_main_dir}/driver &&
|
${install_main_dir}/driver &&
|
||||||
${csudo}chmod 777 ${install_main_dir}/driver/libtaos.so.${verNumber}
|
${csudo}chmod 777 ${install_main_dir}/driver/libtaos.so.${verNumber}
|
||||||
|
|
||||||
${csudo}cp ${binary_dir}/build/lib/libtaosws.so \
|
|
||||||
${install_main_dir}/driver &&
|
|
||||||
${csudo}chmod 777 ${install_main_dir}/driver/libtaosws.so
|
|
||||||
|
|
||||||
${csudo}ln -sf ${install_main_dir}/driver/libtaos.* ${lib_link_dir}/libtaos.so.1
|
${csudo}ln -sf ${install_main_dir}/driver/libtaos.* ${lib_link_dir}/libtaos.so.1
|
||||||
${csudo}ln -sf ${lib_link_dir}/libtaos.so.1 ${lib_link_dir}/libtaos.so
|
${csudo}ln -sf ${lib_link_dir}/libtaos.so.1 ${lib_link_dir}/libtaos.so
|
||||||
${csudo}ln -sf ${install_main_dir}/driver/libtaosws.so ${lib_link_dir}/libtaosws.so || :
|
|
||||||
|
|
||||||
if [ -d "${lib64_link_dir}" ]; then
|
if [ -d "${lib64_link_dir}" ]; then
|
||||||
${csudo}ln -sf ${install_main_dir}/driver/libtaos.* ${lib64_link_dir}/libtaos.so.1
|
${csudo}ln -sf ${install_main_dir}/driver/libtaos.* ${lib64_link_dir}/libtaos.so.1
|
||||||
${csudo}ln -sf ${lib64_link_dir}/libtaos.so.1 ${lib64_link_dir}/libtaos.so
|
${csudo}ln -sf ${lib64_link_dir}/libtaos.so.1 ${lib64_link_dir}/libtaos.so
|
||||||
${csudo}ln -sf ${lib64_link_dir}/libtaosws.so ${lib64_link_dir}/libtaosws.so || :
|
fi
|
||||||
|
|
||||||
|
if [ -f ${binary_dir}/build/lib/libtaosws.so ]; then
|
||||||
|
${csudo}cp ${binary_dir}/build/lib/libtaosws.so \
|
||||||
|
${install_main_dir}/driver &&
|
||||||
|
${csudo}chmod 777 ${install_main_dir}/driver/libtaosws.so ||:
|
||||||
|
|
||||||
|
${csudo}ln -sf ${install_main_dir}/driver/libtaosws.so ${lib_link_dir}/libtaosws.so || :
|
||||||
|
|
||||||
|
if [ -d "${lib64_link_dir}" ]; then
|
||||||
|
${csudo}ln -sf ${lib64_link_dir}/libtaosws.so ${lib64_link_dir}/libtaosws.so || :
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
${csudo}cp -Rf ${binary_dir}/build/lib/libtaos.${verNumber}.dylib \
|
${csudo}cp -Rf ${binary_dir}/build/lib/libtaos.${verNumber}.dylib \
|
||||||
|
@ -357,26 +362,26 @@ function install_header() {
|
||||||
|
|
||||||
if [ "$osType" != "Darwin" ]; then
|
if [ "$osType" != "Darwin" ]; then
|
||||||
${csudo}rm -f ${inc_link_dir}/taos.h ${inc_link_dir}/taosdef.h ${inc_link_dir}/taoserror.h ${inc_link_dir}/taosudf.h || :
|
${csudo}rm -f ${inc_link_dir}/taos.h ${inc_link_dir}/taosdef.h ${inc_link_dir}/taoserror.h ${inc_link_dir}/taosudf.h || :
|
||||||
|
${csudo}rm -f ${inc_link_dir}/taosws.h ||:
|
||||||
${csudo}cp -f ${source_dir}/include/client/taos.h ${source_dir}/include/common/taosdef.h ${source_dir}/include/util/taoserror.h ${source_dir}/include/libs/function/taosudf.h \
|
${csudo}cp -f ${source_dir}/include/client/taos.h ${source_dir}/include/common/taosdef.h ${source_dir}/include/util/taoserror.h ${source_dir}/include/libs/function/taosudf.h \
|
||||||
${csudo}rm -f ${inc_link_dir}/taosws.h || :
|
|
||||||
|
|
||||||
${csudo}cp -f ${source_dir}/src/inc/taos.h ${source_dir}/src/inc/taosdef.h ${source_dir}/src/inc/taoserror.h \
|
|
||||||
${install_main_dir}/include && ${csudo}chmod 644 ${install_main_dir}/include/*
|
${install_main_dir}/include && ${csudo}chmod 644 ${install_main_dir}/include/*
|
||||||
|
|
||||||
${csudo}cp -f ${binary_dir}/build/include/taosws.h ${install_main_dir}/include && ${csudo}chmod 644 ${install_main_dir}/include/taosws.h
|
if [ -f ${binary_dir}/build/include/taosws.h ]; then
|
||||||
|
${csudo}cp -f ${binary_dir}/build/include/taosws.h ${install_main_dir}/include && ${csudo}chmod 644 ${install_main_dir}/include/taosws.h ||:
|
||||||
|
${csudo}ln -s ${install_main_dir}/include/taosws.h ${inc_link_dir}/taosws.h ||:
|
||||||
|
fi
|
||||||
|
|
||||||
${csudo}ln -s ${install_main_dir}/include/taos.h ${inc_link_dir}/taos.h
|
${csudo}ln -s ${install_main_dir}/include/taos.h ${inc_link_dir}/taos.h
|
||||||
${csudo}ln -s ${install_main_dir}/include/taosdef.h ${inc_link_dir}/taosdef.h
|
${csudo}ln -s ${install_main_dir}/include/taosdef.h ${inc_link_dir}/taosdef.h
|
||||||
${csudo}ln -s ${install_main_dir}/include/taoserror.h ${inc_link_dir}/taoserror.h
|
${csudo}ln -s ${install_main_dir}/include/taoserror.h ${inc_link_dir}/taoserror.h
|
||||||
${csudo}ln -s ${install_main_dir}/include/taosudf.h ${inc_link_dir}/taosudf.h
|
${csudo}ln -s ${install_main_dir}/include/taosudf.h ${inc_link_dir}/taosudf.h
|
||||||
|
|
||||||
${csudo}ln -s ${install_main_dir}/include/taosws.h ${inc_link_dir}/taosws.h || :
|
|
||||||
else
|
else
|
||||||
${csudo}cp -f ${source_dir}/include/client/taos.h ${source_dir}/include/common/taosdef.h ${source_dir}/include/util/taoserror.h ${source_dir}/include/libs/function/taosudf.h \
|
${csudo}cp -f ${source_dir}/include/client/taos.h ${source_dir}/include/common/taosdef.h ${source_dir}/include/util/taoserror.h ${source_dir}/include/libs/function/taosudf.h \
|
||||||
${install_main_dir}/include ||
|
${install_main_dir}/include ||
|
||||||
${csudo}cp -f ${source_dir}/include/client/taos.h ${source_dir}/include/common/taosdef.h ${source_dir}/include/util/taoserror.h ${source_dir}/include/libs/function/taosudf.h \
|
${csudo}cp -f ${source_dir}/include/client/taos.h ${source_dir}/include/common/taosdef.h ${source_dir}/include/util/taoserror.h ${source_dir}/include/libs/function/taosudf.h \
|
||||||
${install_main_2_dir}/include &&
|
${install_main_2_dir}/include &&
|
||||||
${csudo}chmod 644 ${install_main_dir}/include/* ||
|
${csudo}chmod 644 ${install_main_dir}/include/* ||:
|
||||||
${csudo}chmod 644 ${install_main_2_dir}/include/*
|
${csudo}chmod 644 ${install_main_2_dir}/include/*
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
|
@ -222,8 +222,8 @@ typedef struct SRequestObj {
|
||||||
SArray* tableList;
|
SArray* tableList;
|
||||||
SQueryExecMetric metric;
|
SQueryExecMetric metric;
|
||||||
SRequestSendRecvBody body;
|
SRequestSendRecvBody body;
|
||||||
bool stableQuery;
|
bool stableQuery; // todo refactor
|
||||||
bool validateOnly;
|
bool validateOnly; // todo refactor
|
||||||
|
|
||||||
bool killed;
|
bool killed;
|
||||||
uint32_t prevCode; // previous error code: todo refactor, add update flag for catalog
|
uint32_t prevCode; // previous error code: todo refactor, add update flag for catalog
|
||||||
|
@ -247,9 +247,9 @@ void doFreeReqResultInfo(SReqResultInfo* pResInfo);
|
||||||
int32_t transferTableNameList(const char* tbList, int32_t acctId, char* dbName, SArray** pReq);
|
int32_t transferTableNameList(const char* tbList, int32_t acctId, char* dbName, SArray** pReq);
|
||||||
void syncCatalogFn(SMetaData* pResult, void* param, int32_t code);
|
void syncCatalogFn(SMetaData* pResult, void* param, int32_t code);
|
||||||
|
|
||||||
SRequestObj* execQuery(STscObj* pTscObj, const char* sql, int sqlLen, bool validateOnly);
|
SRequestObj* execQuery(uint64_t connId, const char* sql, int sqlLen, bool validateOnly);
|
||||||
TAOS_RES* taosQueryImpl(TAOS* taos, const char* sql, bool validateOnly);
|
TAOS_RES* taosQueryImpl(TAOS* taos, const char* sql, bool validateOnly);
|
||||||
void taosAsyncQueryImpl(TAOS* taos, const char* sql, __taos_async_fn_t fp, void* param, bool validateOnly);
|
void taosAsyncQueryImpl(uint64_t connId, const char* sql, __taos_async_fn_t fp, void* param, bool validateOnly);
|
||||||
|
|
||||||
static FORCE_INLINE SReqResultInfo* tmqGetCurResInfo(TAOS_RES* res) {
|
static FORCE_INLINE SReqResultInfo* tmqGetCurResInfo(TAOS_RES* res) {
|
||||||
SMqRspObj* msg = (SMqRspObj*)res;
|
SMqRspObj* msg = (SMqRspObj*)res;
|
||||||
|
@ -297,7 +297,7 @@ int32_t releaseTscObj(int64_t rid);
|
||||||
|
|
||||||
uint64_t generateRequestId();
|
uint64_t generateRequestId();
|
||||||
|
|
||||||
void* createRequest(STscObj* pObj, int32_t type);
|
void* createRequest(uint64_t connId, int32_t type);
|
||||||
void destroyRequest(SRequestObj* pRequest);
|
void destroyRequest(SRequestObj* pRequest);
|
||||||
SRequestObj* acquireRequest(int64_t rid);
|
SRequestObj* acquireRequest(int64_t rid);
|
||||||
int32_t releaseRequest(int64_t rid);
|
int32_t releaseRequest(int64_t rid);
|
||||||
|
@ -318,13 +318,13 @@ void processMsgFromServer(void* parent, SRpcMsg* pMsg, SEpSet* pEpSet);
|
||||||
STscObj* taos_connect_internal(const char* ip, const char* user, const char* pass, const char* auth, const char* db,
|
STscObj* taos_connect_internal(const char* ip, const char* user, const char* pass, const char* auth, const char* db,
|
||||||
uint16_t port, int connType);
|
uint16_t port, int connType);
|
||||||
|
|
||||||
SRequestObj* launchQuery(STscObj* pTscObj, const char* sql, int sqlLen, bool validateOnly);
|
SRequestObj* launchQuery(uint64_t connId, const char* sql, int sqlLen, bool validateOnly);
|
||||||
|
|
||||||
int32_t parseSql(SRequestObj* pRequest, bool topicQuery, SQuery** pQuery, SStmtCallback* pStmtCb);
|
int32_t parseSql(SRequestObj* pRequest, bool topicQuery, SQuery** pQuery, SStmtCallback* pStmtCb);
|
||||||
|
|
||||||
int32_t getPlan(SRequestObj* pRequest, SQuery* pQuery, SQueryPlan** pPlan, SArray* pNodeList);
|
int32_t getPlan(SRequestObj* pRequest, SQuery* pQuery, SQueryPlan** pPlan, SArray* pNodeList);
|
||||||
|
|
||||||
int32_t buildRequest(STscObj* pTscObj, const char* sql, int sqlLen, SRequestObj** pRequest);
|
int32_t buildRequest(uint64_t connId, const char* sql, int sqlLen, void* param, bool validateSql, SRequestObj** pRequest);
|
||||||
|
|
||||||
void taos_close_internal(void* taos);
|
void taos_close_internal(void* taos);
|
||||||
|
|
||||||
|
|
|
@ -49,13 +49,8 @@ void cleanupTscQhandle() {
|
||||||
// destroy handle
|
// destroy handle
|
||||||
taosCleanUpScheduler(tscQhandle);
|
taosCleanUpScheduler(tscQhandle);
|
||||||
}
|
}
|
||||||
static int32_t registerRequest(SRequestObj *pRequest) {
|
|
||||||
STscObj *pTscObj = acquireTscObj(pRequest->pTscObj->id);
|
|
||||||
if (NULL == pTscObj) {
|
|
||||||
terrno = TSDB_CODE_TSC_DISCONNECTED;
|
|
||||||
return terrno;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
static int32_t registerRequest(SRequestObj *pRequest, STscObj* pTscObj) {
|
||||||
// connection has been released already, abort creating request.
|
// connection has been released already, abort creating request.
|
||||||
pRequest->self = taosAddRef(clientReqRefPool, pRequest);
|
pRequest->self = taosAddRef(clientReqRefPool, pRequest);
|
||||||
|
|
||||||
|
@ -246,29 +241,34 @@ STscObj *acquireTscObj(int64_t rid) { return (STscObj *)taosAcquireRef(clientCon
|
||||||
|
|
||||||
int32_t releaseTscObj(int64_t rid) { return taosReleaseRef(clientConnRefPool, rid); }
|
int32_t releaseTscObj(int64_t rid) { return taosReleaseRef(clientConnRefPool, rid); }
|
||||||
|
|
||||||
void *createRequest(STscObj *pObj, int32_t type) {
|
void *createRequest(uint64_t connId, int32_t type) {
|
||||||
assert(pObj != NULL);
|
|
||||||
|
|
||||||
SRequestObj *pRequest = (SRequestObj *)taosMemoryCalloc(1, sizeof(SRequestObj));
|
SRequestObj *pRequest = (SRequestObj *)taosMemoryCalloc(1, sizeof(SRequestObj));
|
||||||
if (NULL == pRequest) {
|
if (NULL == pRequest) {
|
||||||
terrno = TSDB_CODE_TSC_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_TSC_OUT_OF_MEMORY;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
STscObj* pTscObj = acquireTscObj(connId);
|
||||||
|
if (pTscObj == NULL) {
|
||||||
|
terrno = TSDB_CODE_TSC_DISCONNECTED;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
pRequest->resType = RES_TYPE__QUERY;
|
pRequest->resType = RES_TYPE__QUERY;
|
||||||
pRequest->pDb = getDbOfConnection(pObj);
|
|
||||||
pRequest->requestId = generateRequestId();
|
pRequest->requestId = generateRequestId();
|
||||||
pRequest->metric.start = taosGetTimestampUs();
|
pRequest->metric.start = taosGetTimestampUs();
|
||||||
|
|
||||||
pRequest->body.resInfo.convertUcs4 = true; // convert ucs4 by default
|
pRequest->body.resInfo.convertUcs4 = true; // convert ucs4 by default
|
||||||
|
|
||||||
pRequest->type = type;
|
pRequest->type = type;
|
||||||
pRequest->pTscObj = pObj;
|
|
||||||
|
pRequest->pDb = getDbOfConnection(pTscObj);
|
||||||
|
pRequest->pTscObj = pTscObj;
|
||||||
|
|
||||||
pRequest->msgBuf = taosMemoryCalloc(1, ERROR_MSG_BUF_DEFAULT_SIZE);
|
pRequest->msgBuf = taosMemoryCalloc(1, ERROR_MSG_BUF_DEFAULT_SIZE);
|
||||||
pRequest->msgBufLen = ERROR_MSG_BUF_DEFAULT_SIZE;
|
pRequest->msgBufLen = ERROR_MSG_BUF_DEFAULT_SIZE;
|
||||||
tsem_init(&pRequest->body.rspSem, 0, 0);
|
tsem_init(&pRequest->body.rspSem, 0, 0);
|
||||||
|
|
||||||
if (registerRequest(pRequest)) {
|
if (registerRequest(pRequest, pTscObj)) {
|
||||||
doDestroyRequest(pRequest);
|
doDestroyRequest(pRequest);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -327,8 +327,8 @@ void doDestroyRequest(void *p) {
|
||||||
if (pRequest->self) {
|
if (pRequest->self) {
|
||||||
deregisterRequest(pRequest);
|
deregisterRequest(pRequest);
|
||||||
}
|
}
|
||||||
taosMemoryFree(pRequest);
|
|
||||||
|
|
||||||
|
taosMemoryFree(pRequest);
|
||||||
tscTrace("end to destroy request %" PRIx64 " p:%p", reqId, pRequest);
|
tscTrace("end to destroy request %" PRIx64 " p:%p", reqId, pRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -338,7 +338,6 @@ void destroyRequest(SRequestObj *pRequest) {
|
||||||
}
|
}
|
||||||
|
|
||||||
taos_stop_query(pRequest);
|
taos_stop_query(pRequest);
|
||||||
|
|
||||||
removeRequest(pRequest->self);
|
removeRequest(pRequest->self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -148,29 +148,49 @@ STscObj* taos_connect_internal(const char* ip, const char* user, const char* pas
|
||||||
return taosConnectImpl(user, &secretEncrypt[0], localDb, NULL, NULL, *pInst, connType);
|
return taosConnectImpl(user, &secretEncrypt[0], localDb, NULL, NULL, *pInst, connType);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t buildRequest(STscObj* pTscObj, const char* sql, int sqlLen, SRequestObj** pRequest) {
|
int32_t buildRequest(uint64_t connId, const char* sql, int sqlLen, void* param, bool validateSql, SRequestObj** pRequest) {
|
||||||
*pRequest = createRequest(pTscObj, TSDB_SQL_SELECT);
|
*pRequest = createRequest(connId, TSDB_SQL_SELECT);
|
||||||
if (*pRequest == NULL) {
|
if (*pRequest == NULL) {
|
||||||
tscError("failed to malloc sqlObj");
|
tscError("failed to malloc sqlObj, %s", sql);
|
||||||
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*pRequest)->sqlstr = taosMemoryMalloc(sqlLen + 1);
|
(*pRequest)->sqlstr = taosMemoryMalloc(sqlLen + 1);
|
||||||
if ((*pRequest)->sqlstr == NULL) {
|
if ((*pRequest)->sqlstr == NULL) {
|
||||||
tscError("0x%" PRIx64 " failed to prepare sql string buffer", (*pRequest)->self);
|
tscError("0x%" PRIx64 " failed to prepare sql string buffer, %s", (*pRequest)->self, sql);
|
||||||
(*pRequest)->msgBuf = strdup("failed to prepare sql string buffer");
|
destroyRequest(*pRequest);
|
||||||
|
*pRequest = NULL;
|
||||||
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
strntolower((*pRequest)->sqlstr, sql, (int32_t)sqlLen);
|
strntolower((*pRequest)->sqlstr, sql, (int32_t)sqlLen);
|
||||||
(*pRequest)->sqlstr[sqlLen] = 0;
|
(*pRequest)->sqlstr[sqlLen] = 0;
|
||||||
(*pRequest)->sqlLen = sqlLen;
|
(*pRequest)->sqlLen = sqlLen;
|
||||||
|
(*pRequest)->validateOnly = validateSql;
|
||||||
|
|
||||||
|
if (param == NULL) {
|
||||||
|
SSyncQueryParam* pParam = taosMemoryCalloc(1, sizeof(SSyncQueryParam));
|
||||||
|
if (pParam == NULL) {
|
||||||
|
destroyRequest(*pRequest);
|
||||||
|
*pRequest = NULL;
|
||||||
|
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
tsem_init(&pParam->sem, 0, 0);
|
||||||
|
pParam->pRequest = (*pRequest);
|
||||||
|
param = pParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*pRequest)->body.param = param;
|
||||||
|
|
||||||
|
STscObj* pTscObj = (*pRequest)->pTscObj;
|
||||||
if (taosHashPut(pTscObj->pRequests, &(*pRequest)->self, sizeof((*pRequest)->self), &(*pRequest)->self,
|
if (taosHashPut(pTscObj->pRequests, &(*pRequest)->self, sizeof((*pRequest)->self), &(*pRequest)->self,
|
||||||
sizeof((*pRequest)->self))) {
|
sizeof((*pRequest)->self))) {
|
||||||
|
tscError("%d failed to add to request container, reqId:0x%" PRIx64 ", conn:%d, %s", (*pRequest)->self,
|
||||||
|
(*pRequest)->requestId, pTscObj->id, sql);
|
||||||
|
|
||||||
destroyRequest(*pRequest);
|
destroyRequest(*pRequest);
|
||||||
*pRequest = NULL;
|
*pRequest = NULL;
|
||||||
tscError("put request to request hash failed");
|
|
||||||
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -882,18 +902,16 @@ SRequestObj* launchQueryImpl(SRequestObj* pRequest, SQuery* pQuery, bool keepQue
|
||||||
return pRequest;
|
return pRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
SRequestObj* launchQuery(STscObj* pTscObj, const char* sql, int sqlLen, bool validateOnly) {
|
SRequestObj* launchQuery(uint64_t connId, const char* sql, int sqlLen, bool validateOnly) {
|
||||||
SRequestObj* pRequest = NULL;
|
SRequestObj* pRequest = NULL;
|
||||||
SQuery* pQuery = NULL;
|
SQuery* pQuery = NULL;
|
||||||
|
|
||||||
int32_t code = buildRequest(pTscObj, sql, sqlLen, &pRequest);
|
int32_t code = buildRequest(connId, sql, sqlLen, NULL, validateOnly, &pRequest);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
terrno = code;
|
terrno = code;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pRequest->validateOnly = validateOnly;
|
|
||||||
|
|
||||||
code = parseSql(pRequest, false, &pQuery, NULL);
|
code = parseSql(pRequest, false, &pQuery, NULL);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
pRequest->code = code;
|
pRequest->code = code;
|
||||||
|
@ -1044,19 +1062,20 @@ int32_t removeMeta(STscObj* pTscObj, SArray* tbList) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
SRequestObj* execQuery(STscObj* pTscObj, const char* sql, int sqlLen, bool validateOnly) {
|
// todo remove it soon
|
||||||
|
SRequestObj* execQuery(uint64_t connId, const char* sql, int sqlLen, bool validateOnly) {
|
||||||
SRequestObj* pRequest = NULL;
|
SRequestObj* pRequest = NULL;
|
||||||
int32_t retryNum = 0;
|
int32_t retryNum = 0;
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
destroyRequest(pRequest);
|
destroyRequest(pRequest);
|
||||||
pRequest = launchQuery(pTscObj, sql, sqlLen, validateOnly);
|
pRequest = launchQuery(connId, sql, sqlLen, validateOnly);
|
||||||
if (pRequest == NULL || TSDB_CODE_SUCCESS == pRequest->code || !NEED_CLIENT_HANDLE_ERROR(pRequest->code)) {
|
if (pRequest == NULL || TSDB_CODE_SUCCESS == pRequest->code || !NEED_CLIENT_HANDLE_ERROR(pRequest->code)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
code = refreshMeta(pTscObj, pRequest);
|
code = refreshMeta(pRequest->pTscObj, pRequest);
|
||||||
if (code) {
|
if (code) {
|
||||||
pRequest->code = code;
|
pRequest->code = code;
|
||||||
break;
|
break;
|
||||||
|
@ -1064,7 +1083,7 @@ SRequestObj* execQuery(STscObj* pTscObj, const char* sql, int sqlLen, bool valid
|
||||||
} while (retryNum++ < REQUEST_TOTAL_EXEC_TIMES);
|
} while (retryNum++ < REQUEST_TOTAL_EXEC_TIMES);
|
||||||
|
|
||||||
if (NEED_CLIENT_RM_TBLMETA_REQ(pRequest->type)) {
|
if (NEED_CLIENT_RM_TBLMETA_REQ(pRequest->type)) {
|
||||||
removeMeta(pTscObj, pRequest->tableList);
|
removeMeta(pRequest->pTscObj, pRequest->tableList);
|
||||||
}
|
}
|
||||||
|
|
||||||
return pRequest;
|
return pRequest;
|
||||||
|
@ -1119,7 +1138,7 @@ STscObj* taosConnectImpl(const char* user, const char* auth, const char* db, __t
|
||||||
return pTscObj;
|
return pTscObj;
|
||||||
}
|
}
|
||||||
|
|
||||||
SRequestObj* pRequest = createRequest(pTscObj, TDMT_MND_CONNECT);
|
SRequestObj* pRequest = createRequest(pTscObj->id, TDMT_MND_CONNECT);
|
||||||
if (pRequest == NULL) {
|
if (pRequest == NULL) {
|
||||||
destroyTscObj(pTscObj);
|
destroyTscObj(pTscObj);
|
||||||
terrno = TSDB_CODE_TSC_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_TSC_OUT_OF_MEMORY;
|
||||||
|
@ -1446,15 +1465,10 @@ void* doAsyncFetchRows(SRequestObj* pRequest, bool setupOneRowPtr, bool convertU
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
SSyncQueryParam* pParam = pRequest->body.param;
|
|
||||||
if (NULL == pParam) {
|
|
||||||
pParam = taosMemoryCalloc(1, sizeof(SSyncQueryParam));
|
|
||||||
tsem_init(&pParam->sem, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// convert ucs4 to native multi-bytes string
|
// convert ucs4 to native multi-bytes string
|
||||||
pResultInfo->convertUcs4 = convertUcs4;
|
pResultInfo->convertUcs4 = convertUcs4;
|
||||||
|
|
||||||
|
SSyncQueryParam* pParam = pRequest->body.param;
|
||||||
taos_fetch_rows_a(pRequest, syncFetchFn, pParam);
|
taos_fetch_rows_a(pRequest, syncFetchFn, pParam);
|
||||||
tsem_wait(&pParam->sem);
|
tsem_wait(&pParam->sem);
|
||||||
}
|
}
|
||||||
|
@ -2026,22 +2040,9 @@ void syncQueryFn(void* param, void* res, int32_t code) {
|
||||||
tsem_post(&pParam->sem);
|
tsem_post(&pParam->sem);
|
||||||
}
|
}
|
||||||
|
|
||||||
void taosAsyncQueryImpl(TAOS* taos, const char* sql, __taos_async_fn_t fp, void* param, bool validateOnly) {
|
void taosAsyncQueryImpl(uint64_t connId, const char* sql, __taos_async_fn_t fp, void* param, bool validateOnly) {
|
||||||
if (NULL == taos) {
|
if (sql == NULL || NULL == fp) {
|
||||||
terrno = TSDB_CODE_TSC_DISCONNECTED;
|
|
||||||
fp(param, NULL, terrno);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int64_t rid = *(int64_t*)taos;
|
|
||||||
STscObj* pTscObj = acquireTscObj(rid);
|
|
||||||
if (pTscObj == NULL || sql == NULL || NULL == fp) {
|
|
||||||
terrno = TSDB_CODE_INVALID_PARA;
|
terrno = TSDB_CODE_INVALID_PARA;
|
||||||
if (pTscObj) {
|
|
||||||
releaseTscObj(rid);
|
|
||||||
} else {
|
|
||||||
terrno = TSDB_CODE_TSC_DISCONNECTED;
|
|
||||||
}
|
|
||||||
fp(param, NULL, terrno);
|
fp(param, NULL, terrno);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2050,26 +2051,20 @@ void taosAsyncQueryImpl(TAOS* taos, const char* sql, __taos_async_fn_t fp, void*
|
||||||
if (sqlLen > (size_t)TSDB_MAX_ALLOWED_SQL_LEN) {
|
if (sqlLen > (size_t)TSDB_MAX_ALLOWED_SQL_LEN) {
|
||||||
tscError("sql string exceeds max length:%d", TSDB_MAX_ALLOWED_SQL_LEN);
|
tscError("sql string exceeds max length:%d", TSDB_MAX_ALLOWED_SQL_LEN);
|
||||||
terrno = TSDB_CODE_TSC_EXCEED_SQL_LIMIT;
|
terrno = TSDB_CODE_TSC_EXCEED_SQL_LIMIT;
|
||||||
releaseTscObj(rid);
|
|
||||||
|
|
||||||
fp(param, NULL, terrno);
|
fp(param, NULL, terrno);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SRequestObj* pRequest = NULL;
|
SRequestObj* pRequest = NULL;
|
||||||
int32_t code = buildRequest(pTscObj, sql, sqlLen, &pRequest);
|
int32_t code = buildRequest(connId, sql, sqlLen, param, validateOnly, &pRequest);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
terrno = code;
|
terrno = code;
|
||||||
releaseTscObj(rid);
|
|
||||||
fp(param, NULL, terrno);
|
fp(param, NULL, terrno);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pRequest->validateOnly = validateOnly;
|
|
||||||
pRequest->body.queryFp = fp;
|
pRequest->body.queryFp = fp;
|
||||||
pRequest->body.param = param;
|
|
||||||
doAsyncQuery(pRequest, false);
|
doAsyncQuery(pRequest, false);
|
||||||
releaseTscObj(rid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TAOS_RES* taosQueryImpl(TAOS* taos, const char* sql, bool validateOnly) {
|
TAOS_RES* taosQueryImpl(TAOS* taos, const char* sql, bool validateOnly) {
|
||||||
|
@ -2078,36 +2073,22 @@ TAOS_RES* taosQueryImpl(TAOS* taos, const char* sql, bool validateOnly) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t rid = *(int64_t*)taos;
|
|
||||||
STscObj* pTscObj = acquireTscObj(rid);
|
|
||||||
if (pTscObj == NULL || sql == NULL) {
|
|
||||||
terrno = TSDB_CODE_TSC_DISCONNECTED;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if SYNC_ON_TOP_OF_ASYNC
|
#if SYNC_ON_TOP_OF_ASYNC
|
||||||
SSyncQueryParam* param = taosMemoryCalloc(1, sizeof(SSyncQueryParam));
|
SSyncQueryParam* param = taosMemoryCalloc(1, sizeof(SSyncQueryParam));
|
||||||
tsem_init(¶m->sem, 0, 0);
|
tsem_init(¶m->sem, 0, 0);
|
||||||
|
|
||||||
taosAsyncQueryImpl((TAOS*)&rid, sql, syncQueryFn, param, validateOnly);
|
taosAsyncQueryImpl(*(int64_t*)taos, sql, syncQueryFn, param, validateOnly);
|
||||||
tsem_wait(¶m->sem);
|
tsem_wait(¶m->sem);
|
||||||
|
|
||||||
releaseTscObj(rid);
|
|
||||||
|
|
||||||
return param->pRequest;
|
return param->pRequest;
|
||||||
#else
|
#else
|
||||||
size_t sqlLen = strlen(sql);
|
size_t sqlLen = strlen(sql);
|
||||||
if (sqlLen > (size_t)TSDB_MAX_ALLOWED_SQL_LEN) {
|
if (sqlLen > (size_t)TSDB_MAX_ALLOWED_SQL_LEN) {
|
||||||
releaseTscObj(rid);
|
|
||||||
tscError("sql string exceeds max length:%d", TSDB_MAX_ALLOWED_SQL_LEN);
|
tscError("sql string exceeds max length:%d", TSDB_MAX_ALLOWED_SQL_LEN);
|
||||||
terrno = TSDB_CODE_TSC_EXCEED_SQL_LIMIT;
|
terrno = TSDB_CODE_TSC_EXCEED_SQL_LIMIT;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
TAOS_RES* pRes = execQuery(pTscObj, sql, sqlLen, validateOnly);
|
TAOS_RES* pRes = execQuery(connId, sql, sqlLen, validateOnly);
|
||||||
|
|
||||||
releaseTscObj(rid);
|
|
||||||
|
|
||||||
return pRes;
|
return pRes;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -479,7 +479,6 @@ void taos_stop_query(TAOS_RES *res) {
|
||||||
}
|
}
|
||||||
|
|
||||||
schedulerFreeJob(&pRequest->body.queryJob, TSDB_CODE_TSC_QUERY_KILLED);
|
schedulerFreeJob(&pRequest->body.queryJob, TSDB_CODE_TSC_QUERY_KILLED);
|
||||||
|
|
||||||
tscDebug("request %" PRIx64 " killed", pRequest->requestId);
|
tscDebug("request %" PRIx64 " killed", pRequest->requestId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -706,7 +705,8 @@ void retrieveMetaCallback(SMetaData *pResultMeta, void *param, int32_t code) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void taos_query_a(TAOS *taos, const char *sql, __taos_async_fn_t fp, void *param) {
|
void taos_query_a(TAOS *taos, const char *sql, __taos_async_fn_t fp, void *param) {
|
||||||
taosAsyncQueryImpl(taos, sql, fp, param, false);
|
int64_t connId = *(int64_t*)taos;
|
||||||
|
taosAsyncQueryImpl(connId, sql, fp, param, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t createParseContext(const SRequestObj *pRequest, SParseContext **pCxt) {
|
int32_t createParseContext(const SRequestObj *pRequest, SParseContext **pCxt) {
|
||||||
|
@ -915,7 +915,7 @@ int taos_load_table_info(TAOS *taos, const char *tableNameList) {
|
||||||
return terrno;
|
return terrno;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t rid = *(int64_t *)taos;
|
int64_t connId = *(int64_t *)taos;
|
||||||
const int32_t MAX_TABLE_NAME_LENGTH = 12 * 1024 * 1024; // 12MB list
|
const int32_t MAX_TABLE_NAME_LENGTH = 12 * 1024 * 1024; // 12MB list
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
SRequestObj * pRequest = NULL;
|
SRequestObj * pRequest = NULL;
|
||||||
|
@ -933,12 +933,14 @@ int taos_load_table_info(TAOS *taos, const char *tableNameList) {
|
||||||
return TSDB_CODE_TSC_INVALID_OPERATION;
|
return TSDB_CODE_TSC_INVALID_OPERATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
STscObj *pTscObj = acquireTscObj(rid);
|
char *sql = "taos_load_table_info";
|
||||||
if (pTscObj == NULL) {
|
code = buildRequest(connId, sql, strlen(sql), NULL, false, &pRequest);
|
||||||
terrno = TSDB_CODE_TSC_DISCONNECTED;
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
return terrno;
|
terrno = code;
|
||||||
|
goto _return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
STscObj* pTscObj = pRequest->pTscObj;
|
||||||
code = transferTableNameList(tableNameList, pTscObj->acctId, pTscObj->db, &catalogReq.pTableMeta);
|
code = transferTableNameList(tableNameList, pTscObj->acctId, pTscObj->db, &catalogReq.pTableMeta);
|
||||||
if (code) {
|
if (code) {
|
||||||
goto _return;
|
goto _return;
|
||||||
|
@ -950,36 +952,22 @@ int taos_load_table_info(TAOS *taos, const char *tableNameList) {
|
||||||
goto _return;
|
goto _return;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *sql = "taos_load_table_info";
|
|
||||||
code = buildRequest(pTscObj, sql, strlen(sql), &pRequest);
|
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
|
||||||
terrno = code;
|
|
||||||
goto _return;
|
|
||||||
}
|
|
||||||
|
|
||||||
SSyncQueryParam param = {0};
|
|
||||||
tsem_init(¶m.sem, 0, 0);
|
|
||||||
param.pRequest = pRequest;
|
|
||||||
|
|
||||||
SRequestConnInfo conn = {
|
SRequestConnInfo conn = {
|
||||||
.pTrans = pTscObj->pAppInfo->pTransporter, .requestId = pRequest->requestId, .requestObjRefId = pRequest->self};
|
.pTrans = pTscObj->pAppInfo->pTransporter, .requestId = pRequest->requestId, .requestObjRefId = pRequest->self};
|
||||||
|
|
||||||
conn.mgmtEps = getEpSet_s(&pTscObj->pAppInfo->mgmtEp);
|
conn.mgmtEps = getEpSet_s(&pTscObj->pAppInfo->mgmtEp);
|
||||||
|
|
||||||
code = catalogAsyncGetAllMeta(pCtg, &conn, &catalogReq, syncCatalogFn, ¶m, NULL);
|
code = catalogAsyncGetAllMeta(pCtg, &conn, &catalogReq, syncCatalogFn, NULL, NULL);
|
||||||
if (code) {
|
if (code) {
|
||||||
goto _return;
|
goto _return;
|
||||||
}
|
}
|
||||||
|
|
||||||
tsem_wait(¶m.sem);
|
SSyncQueryParam* pParam = pRequest->body.param;
|
||||||
|
tsem_wait(&pParam->sem);
|
||||||
|
|
||||||
_return:
|
_return:
|
||||||
|
|
||||||
taosArrayDestroy(catalogReq.pTableMeta);
|
taosArrayDestroy(catalogReq.pTableMeta);
|
||||||
destroyRequest(pRequest);
|
destroyRequest(pRequest);
|
||||||
|
|
||||||
releaseTscObj(rid);
|
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2442,22 +2442,15 @@ TAOS_RES* taos_schemaless_insert(TAOS* taos, char* lines[], int numLines, int pr
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t rid = *(int64_t*)taos;
|
SRequestObj* request = (SRequestObj*)createRequest(*(int64_t*)taos, TSDB_SQL_INSERT);
|
||||||
STscObj* pTscObj = acquireTscObj(rid);
|
|
||||||
if (NULL == pTscObj) {
|
|
||||||
terrno = TSDB_CODE_TSC_DISCONNECTED;
|
|
||||||
uError("SML:taos_schemaless_insert invalid taos");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
SRequestObj* request = (SRequestObj*)createRequest(pTscObj, TSDB_SQL_INSERT);
|
|
||||||
if(!request){
|
if(!request){
|
||||||
releaseTscObj(rid);
|
|
||||||
uError("SML:taos_schemaless_insert error request is null");
|
uError("SML:taos_schemaless_insert error request is null");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int batchs = 0;
|
int batchs = 0;
|
||||||
|
STscObj* pTscObj = request->pTscObj;
|
||||||
|
|
||||||
pTscObj->schemalessType = 1;
|
pTscObj->schemalessType = 1;
|
||||||
SSmlMsgBuf msg = {ERROR_MSG_BUF_DEFAULT_SIZE, request->msgBuf};
|
SSmlMsgBuf msg = {ERROR_MSG_BUF_DEFAULT_SIZE, request->msgBuf};
|
||||||
|
|
||||||
|
@ -2507,7 +2500,7 @@ TAOS_RES* taos_schemaless_insert(TAOS* taos, char* lines[], int numLines, int pr
|
||||||
|
|
||||||
batchs = ceil(((double)numLines) / LINE_BATCH);
|
batchs = ceil(((double)numLines) / LINE_BATCH);
|
||||||
for (int i = 0; i < batchs; ++i) {
|
for (int i = 0; i < batchs; ++i) {
|
||||||
SRequestObj* req = (SRequestObj*)createRequest(pTscObj, TSDB_SQL_INSERT);
|
SRequestObj* req = (SRequestObj*)createRequest(pTscObj->id, TSDB_SQL_INSERT);
|
||||||
if(!req){
|
if(!req){
|
||||||
request->code = TSDB_CODE_OUT_OF_MEMORY;
|
request->code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
uError("SML:taos_schemaless_insert error request is null");
|
uError("SML:taos_schemaless_insert error request is null");
|
||||||
|
@ -2549,6 +2542,5 @@ end:
|
||||||
// ((STscObj *)taos)->schemalessType = 0;
|
// ((STscObj *)taos)->schemalessType = 0;
|
||||||
pTscObj->schemalessType = 1;
|
pTscObj->schemalessType = 1;
|
||||||
uDebug("resultend:%s", request->msgBuf);
|
uDebug("resultend:%s", request->msgBuf);
|
||||||
releaseTscObj(rid);
|
|
||||||
return (TAOS_RES*)request;
|
return (TAOS_RES*)request;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,14 @@
|
||||||
|
|
||||||
#include "clientStmt.h"
|
#include "clientStmt.h"
|
||||||
|
|
||||||
|
static int32_t stmtCreateRequest(STscStmt* pStmt) {
|
||||||
|
if (pStmt->exec.pRequest == NULL) {
|
||||||
|
return buildRequest(pStmt->taos->id, pStmt->sql.sqlStr, pStmt->sql.sqlLen, NULL, false, &pStmt->exec.pRequest);
|
||||||
|
} else {
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int32_t stmtSwitchStatus(STscStmt* pStmt, STMT_STATUS newStatus) {
|
int32_t stmtSwitchStatus(STscStmt* pStmt, STMT_STATUS newStatus) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
|
||||||
|
@ -217,9 +225,7 @@ int32_t stmtParseSql(STscStmt* pStmt) {
|
||||||
.getExecInfoFn = stmtGetExecInfo,
|
.getExecInfoFn = stmtGetExecInfo,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (NULL == pStmt->exec.pRequest) {
|
STMT_ERR_RET(stmtCreateRequest(pStmt));
|
||||||
STMT_ERR_RET(buildRequest(pStmt->taos, pStmt->sql.sqlStr, pStmt->sql.sqlLen, &pStmt->exec.pRequest));
|
|
||||||
}
|
|
||||||
|
|
||||||
STMT_ERR_RET(parseSql(pStmt->exec.pRequest, false, &pStmt->sql.pQuery, &stmtCb));
|
STMT_ERR_RET(parseSql(pStmt->exec.pRequest, false, &pStmt->sql.pQuery, &stmtCb));
|
||||||
|
|
||||||
|
@ -532,9 +538,7 @@ int stmtSetTbName(TAOS_STMT* stmt, const char* tbName) {
|
||||||
STMT_ERR_RET(TSDB_CODE_TSC_STMT_API_ERROR);
|
STMT_ERR_RET(TSDB_CODE_TSC_STMT_API_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL == pStmt->exec.pRequest) {
|
STMT_ERR_RET(stmtCreateRequest(pStmt));
|
||||||
STMT_ERR_RET(buildRequest(pStmt->taos, pStmt->sql.sqlStr, pStmt->sql.sqlLen, &pStmt->exec.pRequest));
|
|
||||||
}
|
|
||||||
|
|
||||||
STMT_ERR_RET(qCreateSName(&pStmt->bInfo.sname, tbName, pStmt->taos->acctId, pStmt->exec.pRequest->pDb,
|
STMT_ERR_RET(qCreateSName(&pStmt->bInfo.sname, tbName, pStmt->taos->acctId, pStmt->exec.pRequest->pDb,
|
||||||
pStmt->exec.pRequest->msgBuf, pStmt->exec.pRequest->msgBufLen));
|
pStmt->exec.pRequest->msgBuf, pStmt->exec.pRequest->msgBufLen));
|
||||||
|
@ -625,9 +629,7 @@ int stmtBindBatch(TAOS_STMT* stmt, TAOS_MULTI_BIND* bind, int32_t colIdx) {
|
||||||
pStmt->exec.pRequest = NULL;
|
pStmt->exec.pRequest = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL == pStmt->exec.pRequest) {
|
STMT_ERR_RET(stmtCreateRequest(pStmt));
|
||||||
STMT_ERR_RET(buildRequest(pStmt->taos, pStmt->sql.sqlStr, pStmt->sql.sqlLen, &pStmt->exec.pRequest));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pStmt->bInfo.needParse) {
|
if (pStmt->bInfo.needParse) {
|
||||||
STMT_ERR_RET(stmtParseSql(pStmt));
|
STMT_ERR_RET(stmtParseSql(pStmt));
|
||||||
|
@ -873,9 +875,7 @@ int stmtGetTagFields(TAOS_STMT* stmt, int* nums, TAOS_FIELD_E** fields) {
|
||||||
pStmt->exec.pRequest = NULL;
|
pStmt->exec.pRequest = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL == pStmt->exec.pRequest) {
|
STMT_ERR_RET(stmtCreateRequest(pStmt));
|
||||||
STMT_ERR_RET(buildRequest(pStmt->taos, pStmt->sql.sqlStr, pStmt->sql.sqlLen, &pStmt->exec.pRequest));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pStmt->bInfo.needParse) {
|
if (pStmt->bInfo.needParse) {
|
||||||
STMT_ERR_RET(stmtParseSql(pStmt));
|
STMT_ERR_RET(stmtParseSql(pStmt));
|
||||||
|
@ -905,9 +905,7 @@ int stmtGetColFields(TAOS_STMT* stmt, int* nums, TAOS_FIELD_E** fields) {
|
||||||
pStmt->exec.pRequest = NULL;
|
pStmt->exec.pRequest = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL == pStmt->exec.pRequest) {
|
STMT_ERR_RET(stmtCreateRequest(pStmt));
|
||||||
STMT_ERR_RET(buildRequest(pStmt->taos, pStmt->sql.sqlStr, pStmt->sql.sqlLen, &pStmt->exec.pRequest));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pStmt->bInfo.needParse) {
|
if (pStmt->bInfo.needParse) {
|
||||||
STMT_ERR_RET(stmtParseSql(pStmt));
|
STMT_ERR_RET(stmtParseSql(pStmt));
|
||||||
|
@ -933,10 +931,7 @@ int stmtGetParamNum(TAOS_STMT* stmt, int* nums) {
|
||||||
pStmt->exec.pRequest = NULL;
|
pStmt->exec.pRequest = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL == pStmt->exec.pRequest) {
|
STMT_ERR_RET(stmtCreateRequest(pStmt));
|
||||||
STMT_ERR_RET(buildRequest(pStmt->taos, pStmt->sql.sqlStr, pStmt->sql.sqlLen, &pStmt->exec.pRequest));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pStmt->bInfo.needParse) {
|
if (pStmt->bInfo.needParse) {
|
||||||
STMT_ERR_RET(stmtParseSql(pStmt));
|
STMT_ERR_RET(stmtParseSql(pStmt));
|
||||||
}
|
}
|
||||||
|
@ -969,9 +964,7 @@ int stmtGetParam(TAOS_STMT* stmt, int idx, int* type, int* bytes) {
|
||||||
pStmt->exec.pRequest = NULL;
|
pStmt->exec.pRequest = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL == pStmt->exec.pRequest) {
|
STMT_ERR_RET(stmtCreateRequest(pStmt));
|
||||||
STMT_ERR_RET(buildRequest(pStmt->taos, pStmt->sql.sqlStr, pStmt->sql.sqlLen, &pStmt->exec.pRequest));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pStmt->bInfo.needParse) {
|
if (pStmt->bInfo.needParse) {
|
||||||
STMT_ERR_RET(stmtParseSql(pStmt));
|
STMT_ERR_RET(stmtParseSql(pStmt));
|
||||||
|
|
|
@ -901,6 +901,8 @@ tmq_t* tmq_consumer_new(tmq_conf_t* conf, char* errstr, int32_t errstrLen) {
|
||||||
|
|
||||||
tmq_t* pTmq = taosMemoryCalloc(1, sizeof(tmq_t));
|
tmq_t* pTmq = taosMemoryCalloc(1, sizeof(tmq_t));
|
||||||
if (pTmq == NULL) {
|
if (pTmq == NULL) {
|
||||||
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
tscError("consumer %ld setup failed since %s, consumer group %s", pTmq->consumerId, terrstr(), pTmq->groupId);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -917,6 +919,8 @@ tmq_t* tmq_consumer_new(tmq_conf_t* conf, char* errstr, int32_t errstrLen) {
|
||||||
pTmq->delayedTask = taosOpenQueue();
|
pTmq->delayedTask = taosOpenQueue();
|
||||||
|
|
||||||
if (pTmq->clientTopics == NULL || pTmq->mqueue == NULL || pTmq->qall == NULL || pTmq->delayedTask == NULL) {
|
if (pTmq->clientTopics == NULL || pTmq->mqueue == NULL || pTmq->qall == NULL || pTmq->delayedTask == NULL) {
|
||||||
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
tscError("consumer %ld setup failed since %s, consumer group %s", pTmq->consumerId, terrstr(), pTmq->groupId);
|
||||||
goto FAIL;
|
goto FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -943,12 +947,14 @@ tmq_t* tmq_consumer_new(tmq_conf_t* conf, char* errstr, int32_t errstrLen) {
|
||||||
|
|
||||||
// init semaphore
|
// init semaphore
|
||||||
if (tsem_init(&pTmq->rspSem, 0, 0) != 0) {
|
if (tsem_init(&pTmq->rspSem, 0, 0) != 0) {
|
||||||
|
tscError("consumer %ld setup failed since %s, consumer group %s", pTmq->consumerId, terrstr(), pTmq->groupId);
|
||||||
goto FAIL;
|
goto FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// init connection
|
// init connection
|
||||||
pTmq->pTscObj = taos_connect_internal(conf->ip, user, pass, NULL, NULL, conf->port, CONN_TYPE__TMQ);
|
pTmq->pTscObj = taos_connect_internal(conf->ip, user, pass, NULL, NULL, conf->port, CONN_TYPE__TMQ);
|
||||||
if (pTmq->pTscObj == NULL) {
|
if (pTmq->pTscObj == NULL) {
|
||||||
|
tscError("consumer %ld setup failed since %s, consumer group %s", pTmq->consumerId, terrstr(), pTmq->groupId);
|
||||||
tsem_destroy(&pTmq->rspSem);
|
tsem_destroy(&pTmq->rspSem);
|
||||||
goto FAIL;
|
goto FAIL;
|
||||||
}
|
}
|
||||||
|
@ -2275,13 +2281,7 @@ static int32_t taosCreateStb(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
SRequestObj* pRequest = NULL;
|
SRequestObj* pRequest = NULL;
|
||||||
|
|
||||||
STscObj* pTscObj = acquireTscObj(*(int64_t*)taos);
|
code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest);
|
||||||
if (NULL == pTscObj) {
|
|
||||||
code = TSDB_CODE_TSC_DISCONNECTED;
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
code = buildRequest(pTscObj, "", 0, &pRequest);
|
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
@ -2321,6 +2321,8 @@ static int32_t taosCreateStb(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
pReq.suid = req.suid;
|
pReq.suid = req.suid;
|
||||||
pReq.source = 1;
|
pReq.source = 1;
|
||||||
|
|
||||||
|
STscObj* pTscObj = pRequest->pTscObj;
|
||||||
|
|
||||||
SName tableName;
|
SName tableName;
|
||||||
tNameExtractFullName(toName(pTscObj->acctId, pRequest->pDb, req.name, &tableName), pReq.name);
|
tNameExtractFullName(toName(pTscObj->acctId, pRequest->pDb, req.name, &tableName), pReq.name);
|
||||||
|
|
||||||
|
@ -2359,13 +2361,7 @@ static int32_t taosDropStb(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
SRequestObj* pRequest = NULL;
|
SRequestObj* pRequest = NULL;
|
||||||
|
|
||||||
STscObj* pTscObj = acquireTscObj(*(int64_t*)taos);
|
code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest);
|
||||||
if (NULL == pTscObj) {
|
|
||||||
code = TSDB_CODE_TSC_DISCONNECTED;
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
code = buildRequest(pTscObj, "", 0, &pRequest);
|
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
@ -2387,6 +2383,9 @@ static int32_t taosDropStb(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
pReq.igNotExists = true;
|
pReq.igNotExists = true;
|
||||||
pReq.source = 1;
|
pReq.source = 1;
|
||||||
pReq.suid = req.suid;
|
pReq.suid = req.suid;
|
||||||
|
|
||||||
|
STscObj* pTscObj = pRequest->pTscObj;
|
||||||
|
|
||||||
SName tableName;
|
SName tableName;
|
||||||
tNameExtractFullName(toName(pTscObj->acctId, pRequest->pDb, req.name, &tableName), pReq.name);
|
tNameExtractFullName(toName(pTscObj->acctId, pRequest->pDb, req.name, &tableName), pReq.name);
|
||||||
|
|
||||||
|
@ -2428,21 +2427,15 @@ static void destroyCreateTbReqBatch(void* data) {
|
||||||
taosArrayDestroy(pTbBatch->req.pArray);
|
taosArrayDestroy(pTbBatch->req.pArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) {
|
static int32_t taosCreateTable(TAOS *taos, void *meta, int32_t metaLen){
|
||||||
SVCreateTbBatchReq req = {0};
|
SVCreateTbBatchReq req = {0};
|
||||||
SDecoder coder = {0};
|
SDecoder coder = {0};
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
SRequestObj* pRequest = NULL;
|
SRequestObj *pRequest = NULL;
|
||||||
SQuery* pQuery = NULL;
|
SQuery *pQuery = NULL;
|
||||||
SHashObj* pVgroupHashmap = NULL;
|
SHashObj *pVgroupHashmap = NULL;
|
||||||
STscObj* pTscObj = acquireTscObj(*(int64_t*)taos);
|
|
||||||
|
|
||||||
if (NULL == pTscObj) {
|
code = buildRequest(*(int64_t*) taos, "", 0, NULL, false, &pRequest);
|
||||||
code = TSDB_CODE_TSC_DISCONNECTED;
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
code = buildRequest(pTscObj, "", 0, &pRequest);
|
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
@ -2460,8 +2453,10 @@ static int32_t taosCreateTable(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
SVCreateTbReq* pCreateReq = NULL;
|
STscObj* pTscObj = pRequest->pTscObj;
|
||||||
SCatalog* pCatalog = NULL;
|
|
||||||
|
SVCreateTbReq *pCreateReq = NULL;
|
||||||
|
SCatalog* pCatalog = NULL;
|
||||||
code = catalogGetHandle(pTscObj->pAppInfo->clusterId, &pCatalog);
|
code = catalogGetHandle(pTscObj->pAppInfo->clusterId, &pCatalog);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -2545,21 +2540,15 @@ static void destroyDropTbReqBatch(void* data) {
|
||||||
taosArrayDestroy(pTbBatch->req.pArray);
|
taosArrayDestroy(pTbBatch->req.pArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) {
|
static int32_t taosDropTable(TAOS *taos, void *meta, int32_t metaLen){
|
||||||
SVDropTbBatchReq req = {0};
|
SVDropTbBatchReq req = {0};
|
||||||
SDecoder coder = {0};
|
SDecoder coder = {0};
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
SRequestObj* pRequest = NULL;
|
SRequestObj *pRequest = NULL;
|
||||||
SQuery* pQuery = NULL;
|
SQuery *pQuery = NULL;
|
||||||
SHashObj* pVgroupHashmap = NULL;
|
SHashObj *pVgroupHashmap = NULL;
|
||||||
STscObj* pTscObj = acquireTscObj(*(int64_t*)taos);
|
|
||||||
|
|
||||||
if (NULL == pTscObj) {
|
code = buildRequest(*(int64_t*)taos, "", 0, NULL, false, &pRequest);
|
||||||
code = TSDB_CODE_TSC_DISCONNECTED;
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
code = buildRequest(pTscObj, "", 0, &pRequest);
|
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
@ -2577,8 +2566,10 @@ static int32_t taosDropTable(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
SVDropTbReq* pDropReq = NULL;
|
STscObj* pTscObj = pRequest->pTscObj;
|
||||||
SCatalog* pCatalog = NULL;
|
|
||||||
|
SVDropTbReq *pDropReq = NULL;
|
||||||
|
SCatalog *pCatalog = NULL;
|
||||||
code = catalogGetHandle(pTscObj->pAppInfo->clusterId, &pCatalog);
|
code = catalogGetHandle(pTscObj->pAppInfo->clusterId, &pCatalog);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -2649,22 +2640,17 @@ end:
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t taosAlterTable(TAOS* taos, void* meta, int32_t metaLen) {
|
static int32_t taosAlterTable(TAOS *taos, void *meta, int32_t metaLen){
|
||||||
SVAlterTbReq req = {0};
|
SVAlterTbReq req = {0};
|
||||||
SDecoder coder = {0};
|
SDecoder coder = {0};
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
SRequestObj* pRequest = NULL;
|
SRequestObj *pRequest = NULL;
|
||||||
SQuery* pQuery = NULL;
|
SQuery *pQuery = NULL;
|
||||||
SArray* pArray = NULL;
|
SArray *pArray = NULL;
|
||||||
SVgDataBlocks* pVgData = NULL;
|
SVgDataBlocks *pVgData = NULL;
|
||||||
STscObj* pTscObj = acquireTscObj(*(int64_t*)taos);
|
|
||||||
|
|
||||||
if (NULL == pTscObj) {
|
|
||||||
code = TSDB_CODE_TSC_DISCONNECTED;
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
code = buildRequest(pTscObj, "", 0, &pRequest);
|
code = buildRequest(*(int64_t*) taos, "", 0, NULL, false, &pRequest);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
@ -2687,6 +2673,7 @@ static int32_t taosAlterTable(TAOS* taos, void* meta, int32_t metaLen) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
STscObj* pTscObj = pRequest->pTscObj;
|
||||||
SCatalog* pCatalog = NULL;
|
SCatalog* pCatalog = NULL;
|
||||||
code = catalogGetHandle(pTscObj->pAppInfo->clusterId, &pCatalog);
|
code = catalogGetHandle(pTscObj->pAppInfo->clusterId, &pCatalog);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
|
|
@ -1746,7 +1746,7 @@ char* dumpBlockData(SSDataBlock* pDataBlock, const char* flag, char** pDataBuf)
|
||||||
for (int32_t k = 0; k < colNum; k++) {
|
for (int32_t k = 0; k < colNum; k++) {
|
||||||
SColumnInfoData* pColInfoData = taosArrayGet(pDataBlock->pDataBlock, k);
|
SColumnInfoData* pColInfoData = taosArrayGet(pDataBlock->pDataBlock, k);
|
||||||
void* var = POINTER_SHIFT(pColInfoData->pData, j * pColInfoData->info.bytes);
|
void* var = POINTER_SHIFT(pColInfoData->pData, j * pColInfoData->info.bytes);
|
||||||
if (colDataIsNull(pColInfoData, rows, j, NULL)) {
|
if (colDataIsNull(pColInfoData, rows, j, NULL) || !var) {
|
||||||
len += snprintf(dumpBuf + len, size - len, " %15s |", "NULL");
|
len += snprintf(dumpBuf + len, size - len, " %15s |", "NULL");
|
||||||
if (len >= size -1) return dumpBuf;
|
if (len >= size -1) return dumpBuf;
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -55,7 +55,7 @@ int32_t tsNumOfMnodeQueryThreads = 2;
|
||||||
int32_t tsNumOfMnodeFetchThreads = 1;
|
int32_t tsNumOfMnodeFetchThreads = 1;
|
||||||
int32_t tsNumOfMnodeReadThreads = 1;
|
int32_t tsNumOfMnodeReadThreads = 1;
|
||||||
int32_t tsNumOfVnodeQueryThreads = 2;
|
int32_t tsNumOfVnodeQueryThreads = 2;
|
||||||
int32_t tsNumOfVnodeFetchThreads = 1;
|
int32_t tsNumOfVnodeFetchThreads = 4;
|
||||||
int32_t tsNumOfVnodeWriteThreads = 2;
|
int32_t tsNumOfVnodeWriteThreads = 2;
|
||||||
int32_t tsNumOfVnodeSyncThreads = 2;
|
int32_t tsNumOfVnodeSyncThreads = 2;
|
||||||
int32_t tsNumOfVnodeMergeThreads = 2;
|
int32_t tsNumOfVnodeMergeThreads = 2;
|
||||||
|
@ -190,7 +190,6 @@ int32_t tsMqRebalanceInterval = 2;
|
||||||
int32_t tsTtlUnit = 86400;
|
int32_t tsTtlUnit = 86400;
|
||||||
int32_t tsTtlPushInterval = 60;
|
int32_t tsTtlPushInterval = 60;
|
||||||
|
|
||||||
|
|
||||||
void taosAddDataDir(int32_t index, char *v1, int32_t level, int32_t primary) {
|
void taosAddDataDir(int32_t index, char *v1, int32_t level, int32_t primary) {
|
||||||
tstrncpy(tsDiskCfg[index].dir, v1, TSDB_FILENAME_LEN);
|
tstrncpy(tsDiskCfg[index].dir, v1, TSDB_FILENAME_LEN);
|
||||||
tsDiskCfg[index].level = level;
|
tsDiskCfg[index].level = level;
|
||||||
|
@ -292,15 +291,14 @@ int32_t taosAddClientLogCfg(SConfig *pCfg) {
|
||||||
if (cfgAddInt32(pCfg, "numOfLogLines", tsNumOfLogLines, 1000, 2000000000, 1) != 0) return -1;
|
if (cfgAddInt32(pCfg, "numOfLogLines", tsNumOfLogLines, 1000, 2000000000, 1) != 0) return -1;
|
||||||
if (cfgAddBool(pCfg, "asyncLog", tsAsyncLog, 1) != 0) return -1;
|
if (cfgAddBool(pCfg, "asyncLog", tsAsyncLog, 1) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "logKeepDays", 0, -365000, 365000, 1) != 0) return -1;
|
if (cfgAddInt32(pCfg, "logKeepDays", 0, -365000, 365000, 1) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "cDebugFlag", cDebugFlag, 0, 255, 1) != 0) return -1;
|
if (cfgAddInt32(pCfg, "debugFlag", 0, 0, 255, 1) != 0) return -1;
|
||||||
|
if (cfgAddInt32(pCfg, "simDebugFlag", 143, 0, 255, 1) != 0) return -1;
|
||||||
|
if (cfgAddInt32(pCfg, "tmrDebugFlag", tmrDebugFlag, 0, 255, 1) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "uDebugFlag", uDebugFlag, 0, 255, 1) != 0) return -1;
|
if (cfgAddInt32(pCfg, "uDebugFlag", uDebugFlag, 0, 255, 1) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "rpcDebugFlag", rpcDebugFlag, 0, 255, 1) != 0) return -1;
|
if (cfgAddInt32(pCfg, "rpcDebugFlag", rpcDebugFlag, 0, 255, 1) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "qDebugFlag", qDebugFlag, 0, 255, 1) != 0) return -1;
|
|
||||||
if (cfgAddInt32(pCfg, "tmrDebugFlag", tmrDebugFlag, 0, 255, 1) != 0) return -1;
|
|
||||||
if (cfgAddInt32(pCfg, "jniDebugFlag", jniDebugFlag, 0, 255, 1) != 0) return -1;
|
if (cfgAddInt32(pCfg, "jniDebugFlag", jniDebugFlag, 0, 255, 1) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "simDebugFlag", 143, 0, 255, 1) != 0) return -1;
|
if (cfgAddInt32(pCfg, "qDebugFlag", qDebugFlag, 0, 255, 1) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "debugFlag", 0, 0, 255, 1) != 0) return -1;
|
if (cfgAddInt32(pCfg, "cDebugFlag", cDebugFlag, 0, 255, 1) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "idxDebugFlag", idxDebugFlag, 0, 255, 1) != 0) return -1;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -308,7 +306,6 @@ static int32_t taosAddServerLogCfg(SConfig *pCfg) {
|
||||||
if (cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "dDebugFlag", dDebugFlag, 0, 255, 0) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "vDebugFlag", vDebugFlag, 0, 255, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "vDebugFlag", vDebugFlag, 0, 255, 0) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "mDebugFlag", mDebugFlag, 0, 255, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "mDebugFlag", mDebugFlag, 0, 255, 0) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "qDebugFlag", qDebugFlag, 0, 255, 0) != 0) return -1;
|
|
||||||
if (cfgAddInt32(pCfg, "wDebugFlag", wDebugFlag, 0, 255, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "wDebugFlag", wDebugFlag, 0, 255, 0) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "sDebugFlag", sDebugFlag, 0, 255, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "sDebugFlag", sDebugFlag, 0, 255, 0) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "tsdbDebugFlag", tsdbDebugFlag, 0, 255, 0) != 0) return -1;
|
if (cfgAddInt32(pCfg, "tsdbDebugFlag", tsdbDebugFlag, 0, 255, 0) != 0) return -1;
|
||||||
|
@ -470,7 +467,7 @@ static int32_t taosAddServerCfg(SConfig *pCfg) {
|
||||||
|
|
||||||
if (cfgAddInt32(pCfg, "transPullupInterval", tsTransPullupInterval, 1, 10000, 1) != 0) return -1;
|
if (cfgAddInt32(pCfg, "transPullupInterval", tsTransPullupInterval, 1, 10000, 1) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "mqRebalanceInterval", tsMqRebalanceInterval, 1, 10000, 1) != 0) return -1;
|
if (cfgAddInt32(pCfg, "mqRebalanceInterval", tsMqRebalanceInterval, 1, 10000, 1) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "ttlUnit", tsTtlUnit, 1, 86400*365, 1) != 0) return -1;
|
if (cfgAddInt32(pCfg, "ttlUnit", tsTtlUnit, 1, 86400 * 365, 1) != 0) return -1;
|
||||||
if (cfgAddInt32(pCfg, "ttlPushInterval", tsTtlPushInterval, 1, 10000, 1) != 0) return -1;
|
if (cfgAddInt32(pCfg, "ttlPushInterval", tsTtlPushInterval, 1, 10000, 1) != 0) return -1;
|
||||||
|
|
||||||
if (cfgAddBool(pCfg, "udf", tsStartUdfd, 0) != 0) return -1;
|
if (cfgAddBool(pCfg, "udf", tsStartUdfd, 0) != 0) return -1;
|
||||||
|
@ -485,20 +482,18 @@ static void taosSetClientLogCfg(SConfig *pCfg) {
|
||||||
tsNumOfLogLines = cfgGetItem(pCfg, "numOfLogLines")->i32;
|
tsNumOfLogLines = cfgGetItem(pCfg, "numOfLogLines")->i32;
|
||||||
tsAsyncLog = cfgGetItem(pCfg, "asyncLog")->bval;
|
tsAsyncLog = cfgGetItem(pCfg, "asyncLog")->bval;
|
||||||
tsLogKeepDays = cfgGetItem(pCfg, "logKeepDays")->i32;
|
tsLogKeepDays = cfgGetItem(pCfg, "logKeepDays")->i32;
|
||||||
cDebugFlag = cfgGetItem(pCfg, "cDebugFlag")->i32;
|
|
||||||
uDebugFlag = cfgGetItem(pCfg, "uDebugFlag")->i32;
|
|
||||||
qDebugFlag = cfgGetItem(pCfg, "qDebugFlag")->i32;
|
|
||||||
rpcDebugFlag = cfgGetItem(pCfg, "rpcDebugFlag")->i32;
|
|
||||||
tmrDebugFlag = cfgGetItem(pCfg, "tmrDebugFlag")->i32;
|
tmrDebugFlag = cfgGetItem(pCfg, "tmrDebugFlag")->i32;
|
||||||
|
uDebugFlag = cfgGetItem(pCfg, "uDebugFlag")->i32;
|
||||||
jniDebugFlag = cfgGetItem(pCfg, "jniDebugFlag")->i32;
|
jniDebugFlag = cfgGetItem(pCfg, "jniDebugFlag")->i32;
|
||||||
idxDebugFlag = cfgGetItem(pCfg, "idxDebugFlag")->i32;
|
rpcDebugFlag = cfgGetItem(pCfg, "rpcDebugFlag")->i32;
|
||||||
|
qDebugFlag = cfgGetItem(pCfg, "qDebugFlag")->i32;
|
||||||
|
cDebugFlag = cfgGetItem(pCfg, "cDebugFlag")->i32;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void taosSetServerLogCfg(SConfig *pCfg) {
|
static void taosSetServerLogCfg(SConfig *pCfg) {
|
||||||
dDebugFlag = cfgGetItem(pCfg, "dDebugFlag")->i32;
|
dDebugFlag = cfgGetItem(pCfg, "dDebugFlag")->i32;
|
||||||
vDebugFlag = cfgGetItem(pCfg, "vDebugFlag")->i32;
|
vDebugFlag = cfgGetItem(pCfg, "vDebugFlag")->i32;
|
||||||
mDebugFlag = cfgGetItem(pCfg, "mDebugFlag")->i32;
|
mDebugFlag = cfgGetItem(pCfg, "mDebugFlag")->i32;
|
||||||
qDebugFlag = cfgGetItem(pCfg, "qDebugFlag")->i32;
|
|
||||||
wDebugFlag = cfgGetItem(pCfg, "wDebugFlag")->i32;
|
wDebugFlag = cfgGetItem(pCfg, "wDebugFlag")->i32;
|
||||||
sDebugFlag = cfgGetItem(pCfg, "sDebugFlag")->i32;
|
sDebugFlag = cfgGetItem(pCfg, "sDebugFlag")->i32;
|
||||||
tsdbDebugFlag = cfgGetItem(pCfg, "tsdbDebugFlag")->i32;
|
tsdbDebugFlag = cfgGetItem(pCfg, "tsdbDebugFlag")->i32;
|
||||||
|
@ -636,7 +631,7 @@ static int32_t taosSetServerCfg(SConfig *pCfg) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t taosSetCfg(SConfig *pCfg, char* name) {
|
int32_t taosSetCfg(SConfig *pCfg, char *name) {
|
||||||
int32_t len = strlen(name);
|
int32_t len = strlen(name);
|
||||||
char lowcaseName[CFG_NAME_MAX_LEN + 1] = {0};
|
char lowcaseName[CFG_NAME_MAX_LEN + 1] = {0};
|
||||||
strntolower(lowcaseName, name, TMIN(CFG_NAME_MAX_LEN, len));
|
strntolower(lowcaseName, name, TMIN(CFG_NAME_MAX_LEN, len));
|
||||||
|
@ -666,7 +661,7 @@ int32_t taosSetCfg(SConfig *pCfg, char* name) {
|
||||||
tsCompressColData = cfgGetItem(pCfg, "compressColData")->i32;
|
tsCompressColData = cfgGetItem(pCfg, "compressColData")->i32;
|
||||||
} else if (strcasecmp("countAlwaysReturnValue", name) == 0) {
|
} else if (strcasecmp("countAlwaysReturnValue", name) == 0) {
|
||||||
tsCountAlwaysReturnValue = cfgGetItem(pCfg, "countAlwaysReturnValue")->i32;
|
tsCountAlwaysReturnValue = cfgGetItem(pCfg, "countAlwaysReturnValue")->i32;
|
||||||
} else if (strcasecmp("cDebugFlag", name) == 0) {
|
} else if (strcasecmp("cDebugFlag", name) == 0) {
|
||||||
cDebugFlag = cfgGetItem(pCfg, "cDebugFlag")->i32;
|
cDebugFlag = cfgGetItem(pCfg, "cDebugFlag")->i32;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -691,10 +686,10 @@ int32_t taosSetCfg(SConfig *pCfg, char* name) {
|
||||||
tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN);
|
tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN);
|
||||||
tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32;
|
tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32;
|
||||||
snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
|
snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
|
||||||
|
|
||||||
char defaultFirstEp[TSDB_EP_LEN] = {0};
|
char defaultFirstEp[TSDB_EP_LEN] = {0};
|
||||||
snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
|
snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
|
||||||
|
|
||||||
SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
|
SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
|
||||||
SEp firstEp = {0};
|
SEp firstEp = {0};
|
||||||
taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp);
|
taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp);
|
||||||
|
@ -704,10 +699,10 @@ int32_t taosSetCfg(SConfig *pCfg, char* name) {
|
||||||
tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN);
|
tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN);
|
||||||
tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32;
|
tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32;
|
||||||
snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
|
snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
|
||||||
|
|
||||||
char defaultFirstEp[TSDB_EP_LEN] = {0};
|
char defaultFirstEp[TSDB_EP_LEN] = {0};
|
||||||
snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
|
snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
|
||||||
|
|
||||||
SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
|
SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
|
||||||
SEp firstEp = {0};
|
SEp firstEp = {0};
|
||||||
taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp);
|
taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp);
|
||||||
|
@ -778,7 +773,7 @@ int32_t taosSetCfg(SConfig *pCfg, char* name) {
|
||||||
} else if (strcasecmp("minSlidingTime", name) == 0) {
|
} else if (strcasecmp("minSlidingTime", name) == 0) {
|
||||||
tsMinSlidingTime = cfgGetItem(pCfg, "minSlidingTime")->i32;
|
tsMinSlidingTime = cfgGetItem(pCfg, "minSlidingTime")->i32;
|
||||||
} else if (strcasecmp("minIntervalTime", name) == 0) {
|
} else if (strcasecmp("minIntervalTime", name) == 0) {
|
||||||
tsMinIntervalTime = cfgGetItem(pCfg, "minIntervalTime")->i32;
|
tsMinIntervalTime = cfgGetItem(pCfg, "minIntervalTime")->i32;
|
||||||
} else if (strcasecmp("minimalLogDirGB", name) == 0) {
|
} else if (strcasecmp("minimalLogDirGB", name) == 0) {
|
||||||
tsLogSpace.reserved = cfgGetItem(pCfg, "minimalLogDirGB")->fval;
|
tsLogSpace.reserved = cfgGetItem(pCfg, "minimalLogDirGB")->fval;
|
||||||
}
|
}
|
||||||
|
@ -924,10 +919,10 @@ int32_t taosSetCfg(SConfig *pCfg, char* name) {
|
||||||
tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN);
|
tstrncpy(tsLocalFqdn, cfgGetItem(pCfg, "fqdn")->str, TSDB_FQDN_LEN);
|
||||||
tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32;
|
tsServerPort = (uint16_t)cfgGetItem(pCfg, "serverPort")->i32;
|
||||||
snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
|
snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
|
||||||
|
|
||||||
char defaultFirstEp[TSDB_EP_LEN] = {0};
|
char defaultFirstEp[TSDB_EP_LEN] = {0};
|
||||||
snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
|
snprintf(defaultFirstEp, TSDB_EP_LEN, "%s:%u", tsLocalFqdn, tsServerPort);
|
||||||
|
|
||||||
SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
|
SConfigItem *pFirstEpItem = cfgGetItem(pCfg, "firstEp");
|
||||||
SEp firstEp = {0};
|
SEp firstEp = {0};
|
||||||
taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp);
|
taosGetFqdnPortFromEp(strlen(pFirstEpItem->str) == 0 ? defaultFirstEp : pFirstEpItem->str, &firstEp);
|
||||||
|
@ -999,14 +994,13 @@ int32_t taosSetCfg(SConfig *pCfg, char* name) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
terrno = TSDB_CODE_CFG_NOT_FOUND;
|
terrno = TSDB_CODE_CFG_NOT_FOUND;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDir, const char **envCmd,
|
int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDir, const char **envCmd,
|
||||||
const char *envFile, char *apolloUrl, SArray *pArgs, bool tsc) {
|
const char *envFile, char *apolloUrl, SArray *pArgs, bool tsc) {
|
||||||
if (tsCfg == NULL) osDefaultInit();
|
if (tsCfg == NULL) osDefaultInit();
|
||||||
|
|
|
@ -15,11 +15,11 @@
|
||||||
|
|
||||||
#define _DEFAULT_SOURCE
|
#define _DEFAULT_SOURCE
|
||||||
#include "mndConsumer.h"
|
#include "mndConsumer.h"
|
||||||
#include "mndPrivilege.h"
|
|
||||||
#include "mndDb.h"
|
#include "mndDb.h"
|
||||||
#include "mndDnode.h"
|
#include "mndDnode.h"
|
||||||
#include "mndMnode.h"
|
#include "mndMnode.h"
|
||||||
#include "mndOffset.h"
|
#include "mndOffset.h"
|
||||||
|
#include "mndPrivilege.h"
|
||||||
#include "mndShow.h"
|
#include "mndShow.h"
|
||||||
#include "mndStb.h"
|
#include "mndStb.h"
|
||||||
#include "mndSubscribe.h"
|
#include "mndSubscribe.h"
|
||||||
|
@ -435,17 +435,6 @@ static int32_t mndProcessSubscribeReq(SRpcMsg *pMsg) {
|
||||||
goto SUBSCRIBE_OVER;
|
goto SUBSCRIBE_OVER;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
// ref topic to prevent drop
|
|
||||||
// TODO make topic complete
|
|
||||||
SMqTopicObj topicObj = {0};
|
|
||||||
memcpy(&topicObj, pTopic, sizeof(SMqTopicObj));
|
|
||||||
topicObj.refConsumerCnt = pTopic->refConsumerCnt + 1;
|
|
||||||
mInfo("subscribe topic %s by consumer:%" PRId64 ",cgroup %s, refcnt %d", pTopic->name, consumerId, cgroup,
|
|
||||||
topicObj.refConsumerCnt);
|
|
||||||
if (mndSetTopicCommitLogs(pMnode, pTrans, &topicObj) != 0) goto SUBSCRIBE_OVER;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
mndReleaseTopic(pMnode, pTopic);
|
mndReleaseTopic(pMnode, pTopic);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -472,8 +461,8 @@ static int32_t mndProcessSubscribeReq(SRpcMsg *pMsg) {
|
||||||
|
|
||||||
int32_t status = atomic_load_32(&pConsumerOld->status);
|
int32_t status = atomic_load_32(&pConsumerOld->status);
|
||||||
|
|
||||||
mInfo("receive subscribe request from old consumer:%" PRId64 ", current status: %s", consumerId,
|
mInfo("receive subscribe request from existing consumer:%" PRId64 ", current status: %s, subscribe topic num: %d",
|
||||||
mndConsumerStatusName(status));
|
consumerId, mndConsumerStatusName(status), newTopicNum);
|
||||||
|
|
||||||
if (status != MQ_CONSUMER_STATUS__READY) {
|
if (status != MQ_CONSUMER_STATUS__READY) {
|
||||||
terrno = TSDB_CODE_MND_CONSUMER_NOT_READY;
|
terrno = TSDB_CODE_MND_CONSUMER_NOT_READY;
|
||||||
|
@ -849,12 +838,15 @@ static int32_t mndRetrieveConsumer(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *
|
||||||
pShow->pIter = sdbFetch(pSdb, SDB_CONSUMER, pShow->pIter, (void **)&pConsumer);
|
pShow->pIter = sdbFetch(pSdb, SDB_CONSUMER, pShow->pIter, (void **)&pConsumer);
|
||||||
if (pShow->pIter == NULL) break;
|
if (pShow->pIter == NULL) break;
|
||||||
if (taosArrayGetSize(pConsumer->assignedTopics) == 0) {
|
if (taosArrayGetSize(pConsumer->assignedTopics) == 0) {
|
||||||
|
mDebug("showing consumer %ld no assigned topic, skip", pConsumer->consumerId);
|
||||||
sdbRelease(pSdb, pConsumer);
|
sdbRelease(pSdb, pConsumer);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
taosRLockLatch(&pConsumer->lock);
|
taosRLockLatch(&pConsumer->lock);
|
||||||
|
|
||||||
|
mDebug("showing consumer %ld", pConsumer->consumerId);
|
||||||
|
|
||||||
int32_t topicSz = taosArrayGetSize(pConsumer->assignedTopics);
|
int32_t topicSz = taosArrayGetSize(pConsumer->assignedTopics);
|
||||||
bool hasTopic = true;
|
bool hasTopic = true;
|
||||||
if (topicSz == 0) {
|
if (topicSz == 0) {
|
||||||
|
|
|
@ -512,9 +512,6 @@ int32_t tqProcessVgChangeReq(STQ* pTq, char* msg, int32_t msgLen) {
|
||||||
pHandle->execHandle.execDb.pFilterOutTbUid =
|
pHandle->execHandle.execDb.pFilterOutTbUid =
|
||||||
taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_NO_LOCK);
|
taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), false, HASH_NO_LOCK);
|
||||||
} else if (pHandle->execHandle.subType == TOPIC_SUB_TYPE__TABLE) {
|
} else if (pHandle->execHandle.subType == TOPIC_SUB_TYPE__TABLE) {
|
||||||
for (int32_t i = 0; i < 5; i++) {
|
|
||||||
pHandle->execHandle.pExecReader[i] = tqOpenReader(pTq->pVnode);
|
|
||||||
}
|
|
||||||
pHandle->execHandle.execTb.suid = req.suid;
|
pHandle->execHandle.execTb.suid = req.suid;
|
||||||
SArray* tbUidList = taosArrayInit(0, sizeof(int64_t));
|
SArray* tbUidList = taosArrayInit(0, sizeof(int64_t));
|
||||||
vnodeGetCtbIdList(pTq->pVnode, req.suid, tbUidList);
|
vnodeGetCtbIdList(pTq->pVnode, req.suid, tbUidList);
|
||||||
|
@ -524,6 +521,7 @@ int32_t tqProcessVgChangeReq(STQ* pTq, char* msg, int32_t msgLen) {
|
||||||
tqDebug("vgId:%d, idx %d, uid:%" PRId64, TD_VID(pTq->pVnode), i, tbUid);
|
tqDebug("vgId:%d, idx %d, uid:%" PRId64, TD_VID(pTq->pVnode), i, tbUid);
|
||||||
}
|
}
|
||||||
for (int32_t i = 0; i < 5; i++) {
|
for (int32_t i = 0; i < 5; i++) {
|
||||||
|
pHandle->execHandle.pExecReader[i] = tqOpenReader(pTq->pVnode);
|
||||||
tqReaderSetTbUidList(pHandle->execHandle.pExecReader[i], tbUidList);
|
tqReaderSetTbUidList(pHandle->execHandle.pExecReader[i], tbUidList);
|
||||||
}
|
}
|
||||||
taosArrayDestroy(tbUidList);
|
taosArrayDestroy(tbUidList);
|
||||||
|
|
|
@ -174,28 +174,9 @@ int32_t tqScanSnapshot(STQ* pTq, const STqExecHandle* pExec, SMqDataRsp* pRsp, S
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int32_t tqLogScanExec(STQ* pTq, STqExecHandle* pExec, SSubmitReq* pReq, SMqDataRsp* pRsp, int32_t workerId) {
|
int32_t tqLogScanExec(STQ* pTq, STqExecHandle* pExec, SSubmitReq* pReq, SMqDataRsp* pRsp, int32_t workerId) {
|
||||||
if (pExec->subType == TOPIC_SUB_TYPE__COLUMN) {
|
ASSERT(pExec->subType != TOPIC_SUB_TYPE__COLUMN);
|
||||||
qTaskInfo_t task = pExec->execCol.task[workerId];
|
|
||||||
ASSERT(task);
|
|
||||||
qSetStreamInput(task, pReq, STREAM_INPUT__DATA_SUBMIT, false);
|
|
||||||
while (1) {
|
|
||||||
SSDataBlock* pDataBlock = NULL;
|
|
||||||
uint64_t ts = 0;
|
|
||||||
if (qExecTask(task, &pDataBlock, &ts) < 0) {
|
|
||||||
ASSERT(0);
|
|
||||||
}
|
|
||||||
if (pDataBlock == NULL) break;
|
|
||||||
|
|
||||||
ASSERT(pDataBlock->info.rows != 0);
|
if (pExec->subType == TOPIC_SUB_TYPE__TABLE) {
|
||||||
|
|
||||||
tqAddBlockDataToRsp(pDataBlock, pRsp);
|
|
||||||
if (pRsp->withTbName) {
|
|
||||||
int64_t uid = pExec->pExecReader[workerId]->msgIter.uid;
|
|
||||||
tqAddTbNameToRsp(pTq, uid, pRsp);
|
|
||||||
}
|
|
||||||
pRsp->blockNum++;
|
|
||||||
}
|
|
||||||
} else if (pExec->subType == TOPIC_SUB_TYPE__TABLE) {
|
|
||||||
pRsp->withSchema = 1;
|
pRsp->withSchema = 1;
|
||||||
STqReader* pReader = pExec->pExecReader[workerId];
|
STqReader* pReader = pExec->pExecReader[workerId];
|
||||||
tqReaderSetDataMsg(pReader, pReq, 0);
|
tqReaderSetDataMsg(pReader, pReq, 0);
|
||||||
|
@ -232,9 +213,11 @@ int32_t tqLogScanExec(STQ* pTq, STqExecHandle* pExec, SSubmitReq* pReq, SMqDataR
|
||||||
pRsp->blockNum++;
|
pRsp->blockNum++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pRsp->blockNum == 0) {
|
if (pRsp->blockNum == 0) {
|
||||||
pRsp->skipLogNum++;
|
pRsp->skipLogNum++;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,6 @@ typedef struct SBlockLoadSuppInfo {
|
||||||
SColumnDataAgg tsColAgg;
|
SColumnDataAgg tsColAgg;
|
||||||
SColumnDataAgg** plist;
|
SColumnDataAgg** plist;
|
||||||
int16_t* colIds; // column ids for loading file block data
|
int16_t* colIds; // column ids for loading file block data
|
||||||
int32_t* slotIds; // colId to slotId
|
|
||||||
char** buildBuf; // build string tmp buffer, todo remove it later after all string format being updated.
|
char** buildBuf; // build string tmp buffer, todo remove it later after all string format being updated.
|
||||||
} SBlockLoadSuppInfo;
|
} SBlockLoadSuppInfo;
|
||||||
|
|
||||||
|
@ -183,7 +182,6 @@ static SHashObj* createDataBlockScanInfo(STsdbReader* pTsdbReader, const STableK
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo apply the lastkey of table check to avoid to load header file
|
|
||||||
for (int32_t j = 0; j < numOfTables; ++j) {
|
for (int32_t j = 0; j < numOfTables; ++j) {
|
||||||
STableBlockScanInfo info = {.lastKey = 0, .uid = idList[j].uid};
|
STableBlockScanInfo info = {.lastKey = 0, .uid = idList[j].uid};
|
||||||
if (ASCENDING_TRAVERSE(pTsdbReader->order)) {
|
if (ASCENDING_TRAVERSE(pTsdbReader->order)) {
|
||||||
|
@ -218,6 +216,30 @@ static void resetDataBlockScanInfo(SHashObj* pTableMap) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void destroyBlockScanInfo(SHashObj* pTableMap) {
|
||||||
|
STableBlockScanInfo* p = NULL;
|
||||||
|
|
||||||
|
while ((p = taosHashIterate(pTableMap, p)) != NULL) {
|
||||||
|
p->iterInit = false;
|
||||||
|
p->iiter.hasVal = false;
|
||||||
|
|
||||||
|
if (p->iter.iter != NULL) {
|
||||||
|
tsdbTbDataIterDestroy(p->iter.iter);
|
||||||
|
p->iter.iter = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p->iiter.iter != NULL) {
|
||||||
|
tsdbTbDataIterDestroy(p->iiter.iter);
|
||||||
|
p->iiter.iter = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
taosArrayDestroy(p->delSkyline);
|
||||||
|
p->delSkyline = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
taosHashCleanup(pTableMap);
|
||||||
|
}
|
||||||
|
|
||||||
static bool isEmptyQueryTimeWindow(STimeWindow* pWindow) {
|
static bool isEmptyQueryTimeWindow(STimeWindow* pWindow) {
|
||||||
ASSERT(pWindow != NULL);
|
ASSERT(pWindow != NULL);
|
||||||
return pWindow->skey > pWindow->ekey;
|
return pWindow->skey > pWindow->ekey;
|
||||||
|
@ -265,6 +287,10 @@ static int32_t initFilesetIterator(SFilesetIter* pIter, const STsdbFSState* pFSt
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cleanupFilesetIterator(SFilesetIter* pIter) {
|
||||||
|
taosArrayDestroy(pIter->pFileList);
|
||||||
|
}
|
||||||
|
|
||||||
static bool filesetIteratorNext(SFilesetIter* pIter, STsdbReader* pReader) {
|
static bool filesetIteratorNext(SFilesetIter* pIter, STsdbReader* pReader) {
|
||||||
bool asc = ASCENDING_TRAVERSE(pIter->order);
|
bool asc = ASCENDING_TRAVERSE(pIter->order);
|
||||||
int32_t step = asc ? 1 : -1;
|
int32_t step = asc ? 1 : -1;
|
||||||
|
@ -318,7 +344,15 @@ static void resetDataBlockIterator(SDataBlockIter* pIter, int32_t order) {
|
||||||
pIter->order = order;
|
pIter->order = order;
|
||||||
pIter->index = -1;
|
pIter->index = -1;
|
||||||
pIter->numOfBlocks = -1;
|
pIter->numOfBlocks = -1;
|
||||||
pIter->blockList = taosArrayInit(4, sizeof(SFileDataBlockInfo));
|
if (pIter->blockList == NULL) {
|
||||||
|
pIter->blockList = taosArrayInit(4, sizeof(SFileDataBlockInfo));
|
||||||
|
} else {
|
||||||
|
taosArrayClear(pIter->blockList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void cleanupDataBlockIterator(SDataBlockIter* pIter) {
|
||||||
|
taosArrayDestroy(pIter->blockList);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void initReaderStatus(SReaderStatus* pStatus) {
|
static void initReaderStatus(SReaderStatus* pStatus) {
|
||||||
|
@ -2520,6 +2554,7 @@ void doMergeMultiRows(TSDBROW* pRow, uint64_t uid, SIterInfo* pIter, SArray* pDe
|
||||||
tRowMergerInit(&merge, pRow, pReader->pSchema);
|
tRowMergerInit(&merge, pRow, pReader->pSchema);
|
||||||
doMergeRowsInBuf(pIter, k.ts, pDelList, &merge, pReader);
|
doMergeRowsInBuf(pIter, k.ts, pDelList, &merge, pReader);
|
||||||
tRowMergerGetRow(&merge, pTSRow);
|
tRowMergerGetRow(&merge, pTSRow);
|
||||||
|
tRowMergerClear(&merge);
|
||||||
}
|
}
|
||||||
|
|
||||||
void doMergeMemIMemRows(TSDBROW* pRow, TSDBROW* piRow, STableBlockScanInfo* pBlockScanInfo, STsdbReader* pReader,
|
void doMergeMemIMemRows(TSDBROW* pRow, TSDBROW* piRow, STableBlockScanInfo* pBlockScanInfo, STsdbReader* pReader,
|
||||||
|
@ -2656,6 +2691,7 @@ int32_t buildDataBlockFromBufImpl(STableBlockScanInfo* pBlockScanInfo, int64_t e
|
||||||
}
|
}
|
||||||
|
|
||||||
doAppendOneRow(pBlock, pReader, pTSRow);
|
doAppendOneRow(pBlock, pReader, pTSRow);
|
||||||
|
taosMemoryFree(pTSRow);
|
||||||
|
|
||||||
// no data in buffer, return immediately
|
// no data in buffer, return immediately
|
||||||
if (!(pBlockScanInfo->iter.hasVal || pBlockScanInfo->iiter.hasVal)) {
|
if (!(pBlockScanInfo->iter.hasVal || pBlockScanInfo->iiter.hasVal)) {
|
||||||
|
@ -2783,11 +2819,24 @@ void tsdbReaderClose(STsdbReader* pReader) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
blockDataDestroy(pReader->pResBlock);
|
SBlockLoadSuppInfo* pSupInfo = &pReader->suppInfo;
|
||||||
taosMemoryFreeClear(pReader->suppInfo.plist);
|
|
||||||
|
taosMemoryFreeClear(pSupInfo->plist);
|
||||||
|
taosMemoryFree(pSupInfo->colIds);
|
||||||
|
|
||||||
|
taosArrayDestroy(pSupInfo->pColAgg);
|
||||||
|
for(int32_t i = 0; i < blockDataGetNumOfCols(pReader->pResBlock); ++i) {
|
||||||
|
if (pSupInfo->buildBuf[i] != NULL) {
|
||||||
|
taosMemoryFreeClear(pSupInfo->buildBuf[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
taosMemoryFree(pSupInfo->buildBuf);
|
||||||
|
|
||||||
|
cleanupFilesetIterator(&pReader->status.fileIter);
|
||||||
|
cleanupDataBlockIterator(&pReader->status.blockIter);
|
||||||
|
destroyBlockScanInfo(pReader->status.pTableMap);
|
||||||
|
blockDataDestroy(pReader->pResBlock);
|
||||||
|
|
||||||
taosArrayDestroy(pReader->suppInfo.pColAgg);
|
|
||||||
taosMemoryFree(pReader->suppInfo.slotIds);
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
// if (pReader->status.pTableScanInfo != NULL) {
|
// if (pReader->status.pTableScanInfo != NULL) {
|
||||||
|
|
|
@ -450,42 +450,81 @@ static void vnodeSyncRollBackMsg(SSyncFSM *pFsm, const SRpcMsg *pMsg, SFsmCbMeta
|
||||||
syncUtilState2String(cbMeta.state), pMsg->msgType, TMSG_INFO(pMsg->msgType));
|
syncUtilState2String(cbMeta.state), pMsg->msgType, TMSG_INFO(pMsg->msgType));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define USE_TSDB_SNAPSHOT
|
||||||
|
|
||||||
static int32_t vnodeSnapshotStartRead(struct SSyncFSM *pFsm, void *pParam, void **ppReader) {
|
static int32_t vnodeSnapshotStartRead(struct SSyncFSM *pFsm, void *pParam, void **ppReader) {
|
||||||
|
#ifdef USE_TSDB_SNAPSHOT
|
||||||
SVnode *pVnode = pFsm->data;
|
SVnode *pVnode = pFsm->data;
|
||||||
SSnapshotParam *pSnapshotParam = pParam;
|
SSnapshotParam *pSnapshotParam = pParam;
|
||||||
int32_t code = vnodeSnapReaderOpen(pVnode, pSnapshotParam->start, pSnapshotParam->end, (SVSnapReader **)ppReader);
|
int32_t code = vnodeSnapReaderOpen(pVnode, pSnapshotParam->start, pSnapshotParam->end, (SVSnapReader **)ppReader);
|
||||||
return code;
|
return code;
|
||||||
|
#else
|
||||||
|
*ppReader = taosMemoryMalloc(32);
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t vnodeSnapshotStopRead(struct SSyncFSM *pFsm, void *pReader) {
|
static int32_t vnodeSnapshotStopRead(struct SSyncFSM *pFsm, void *pReader) {
|
||||||
|
#ifdef USE_TSDB_SNAPSHOT
|
||||||
SVnode *pVnode = pFsm->data;
|
SVnode *pVnode = pFsm->data;
|
||||||
int32_t code = vnodeSnapReaderClose(pReader);
|
int32_t code = vnodeSnapReaderClose(pReader);
|
||||||
return code;
|
return code;
|
||||||
|
#else
|
||||||
|
taosMemoryFree(pReader);
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t vnodeSnapshotDoRead(struct SSyncFSM *pFsm, void *pReader, void **ppBuf, int32_t *len) {
|
static int32_t vnodeSnapshotDoRead(struct SSyncFSM *pFsm, void *pReader, void **ppBuf, int32_t *len) {
|
||||||
|
#ifdef USE_TSDB_SNAPSHOT
|
||||||
SVnode *pVnode = pFsm->data;
|
SVnode *pVnode = pFsm->data;
|
||||||
int32_t code = vnodeSnapRead(pReader, (uint8_t **)ppBuf, len);
|
int32_t code = vnodeSnapRead(pReader, (uint8_t **)ppBuf, len);
|
||||||
return code;
|
return code;
|
||||||
|
#else
|
||||||
|
static int32_t times = 0;
|
||||||
|
if (times++ < 5) {
|
||||||
|
*len = 64;
|
||||||
|
*ppBuf = taosMemoryMalloc(*len);
|
||||||
|
snprintf(*ppBuf, *len, "snapshot block %d", times);
|
||||||
|
} else {
|
||||||
|
*len = 0;
|
||||||
|
*ppBuf = NULL;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t vnodeSnapshotStartWrite(struct SSyncFSM *pFsm, void *pParam, void **ppWriter) {
|
static int32_t vnodeSnapshotStartWrite(struct SSyncFSM *pFsm, void *pParam, void **ppWriter) {
|
||||||
|
#ifdef USE_TSDB_SNAPSHOT
|
||||||
SVnode *pVnode = pFsm->data;
|
SVnode *pVnode = pFsm->data;
|
||||||
SSnapshotParam *pSnapshotParam = pParam;
|
SSnapshotParam *pSnapshotParam = pParam;
|
||||||
int32_t code = vnodeSnapWriterOpen(pVnode, pSnapshotParam->start, pSnapshotParam->end, (SVSnapWriter **)ppWriter);
|
int32_t code = vnodeSnapWriterOpen(pVnode, pSnapshotParam->start, pSnapshotParam->end, (SVSnapWriter **)ppWriter);
|
||||||
return code;
|
return code;
|
||||||
|
#else
|
||||||
|
*ppWriter = taosMemoryMalloc(32);
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t vnodeSnapshotStopWrite(struct SSyncFSM *pFsm, void *pWriter, bool isApply) {
|
static int32_t vnodeSnapshotStopWrite(struct SSyncFSM *pFsm, void *pWriter, bool isApply) {
|
||||||
|
#ifdef USE_TSDB_SNAPSHOT
|
||||||
SVnode *pVnode = pFsm->data;
|
SVnode *pVnode = pFsm->data;
|
||||||
int32_t code = vnodeSnapWriterClose(pWriter, !isApply);
|
int32_t code = vnodeSnapWriterClose(pWriter, !isApply);
|
||||||
return code;
|
return code;
|
||||||
|
#else
|
||||||
|
taosMemoryFree(pWriter);
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t vnodeSnapshotDoWrite(struct SSyncFSM *pFsm, void *pWriter, void *pBuf, int32_t len) {
|
static int32_t vnodeSnapshotDoWrite(struct SSyncFSM *pFsm, void *pWriter, void *pBuf, int32_t len) {
|
||||||
|
#ifdef USE_TSDB_SNAPSHOT
|
||||||
SVnode *pVnode = pFsm->data;
|
SVnode *pVnode = pFsm->data;
|
||||||
int32_t code = vnodeSnapWrite(pWriter, pBuf, len);
|
int32_t code = vnodeSnapWrite(pWriter, pBuf, len);
|
||||||
return code;
|
return code;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static SSyncFSM *vnodeSyncMakeFsm(SVnode *pVnode) {
|
static SSyncFSM *vnodeSyncMakeFsm(SVnode *pVnode) {
|
||||||
|
@ -509,7 +548,8 @@ static SSyncFSM *vnodeSyncMakeFsm(SVnode *pVnode) {
|
||||||
|
|
||||||
int32_t vnodeSyncOpen(SVnode *pVnode, char *path) {
|
int32_t vnodeSyncOpen(SVnode *pVnode, char *path) {
|
||||||
SSyncInfo syncInfo = {
|
SSyncInfo syncInfo = {
|
||||||
.snapshotStrategy = SYNC_STRATEGY_NO_SNAPSHOT,
|
.snapshotStrategy = SYNC_STRATEGY_WAL_FIRST,
|
||||||
|
//.snapshotStrategy = SYNC_STRATEGY_NO_SNAPSHOT,
|
||||||
.batchSize = 10,
|
.batchSize = 10,
|
||||||
.vgId = pVnode->config.vgId,
|
.vgId = pVnode->config.vgId,
|
||||||
.isStandBy = pVnode->config.standby,
|
.isStandBy = pVnode->config.standby,
|
||||||
|
|
|
@ -126,4 +126,6 @@ void cleanupQueryTableDataCond(SQueryTableDataCond* pCond);
|
||||||
|
|
||||||
int32_t convertFillType(int32_t mode);
|
int32_t convertFillType(int32_t mode);
|
||||||
|
|
||||||
|
int32_t resultrowComparAsc(const void* p1, const void* p2);
|
||||||
|
|
||||||
#endif // TDENGINE_QUERYUTIL_H
|
#endif // TDENGINE_QUERYUTIL_H
|
||||||
|
|
|
@ -481,7 +481,7 @@ typedef struct SStreamFinalIntervalOperatorInfo {
|
||||||
// SOptrBasicInfo should be first, SAggSupporter should be second for stream encode
|
// SOptrBasicInfo should be first, SAggSupporter should be second for stream encode
|
||||||
SOptrBasicInfo binfo; // basic info
|
SOptrBasicInfo binfo; // basic info
|
||||||
SAggSupporter aggSup; // aggregate supporter
|
SAggSupporter aggSup; // aggregate supporter
|
||||||
|
SExprSupp scalarSupp; // supporter for perform scalar function
|
||||||
SGroupResInfo groupResInfo; // multiple results build supporter
|
SGroupResInfo groupResInfo; // multiple results build supporter
|
||||||
SInterval interval; // interval info
|
SInterval interval; // interval info
|
||||||
int32_t primaryTsIndex; // primary time stamp slot id from result of downstream operator.
|
int32_t primaryTsIndex; // primary time stamp slot id from result of downstream operator.
|
||||||
|
@ -630,6 +630,7 @@ typedef struct SStateWindowInfo {
|
||||||
typedef struct SStreamSessionAggOperatorInfo {
|
typedef struct SStreamSessionAggOperatorInfo {
|
||||||
SOptrBasicInfo binfo;
|
SOptrBasicInfo binfo;
|
||||||
SStreamAggSupporter streamAggSup;
|
SStreamAggSupporter streamAggSup;
|
||||||
|
SExprSupp scalarSupp; // supporter for perform scalar function
|
||||||
SGroupResInfo groupResInfo;
|
SGroupResInfo groupResInfo;
|
||||||
int64_t gap; // session window gap
|
int64_t gap; // session window gap
|
||||||
int32_t primaryTsIndex; // primary timestamp slot id
|
int32_t primaryTsIndex; // primary timestamp slot id
|
||||||
|
@ -680,11 +681,12 @@ typedef struct SStateWindowOperatorInfo {
|
||||||
typedef struct SStreamStateAggOperatorInfo {
|
typedef struct SStreamStateAggOperatorInfo {
|
||||||
SOptrBasicInfo binfo;
|
SOptrBasicInfo binfo;
|
||||||
SStreamAggSupporter streamAggSup;
|
SStreamAggSupporter streamAggSup;
|
||||||
|
SExprSupp scalarSupp; // supporter for perform scalar function
|
||||||
SGroupResInfo groupResInfo;
|
SGroupResInfo groupResInfo;
|
||||||
int32_t primaryTsIndex; // primary timestamp slot id
|
int32_t primaryTsIndex; // primary timestamp slot id
|
||||||
int32_t order; // current SSDataBlock scan order
|
int32_t order; // current SSDataBlock scan order
|
||||||
STimeWindowAggSupp twAggSup;
|
STimeWindowAggSupp twAggSup;
|
||||||
SColumn stateCol; // start row index
|
SColumn stateCol;
|
||||||
SqlFunctionCtx* pDummyCtx; // for combine
|
SqlFunctionCtx* pDummyCtx; // for combine
|
||||||
SSDataBlock* pDelRes;
|
SSDataBlock* pDelRes;
|
||||||
SHashObj* pSeDeleted;
|
SHashObj* pSeDeleted;
|
||||||
|
|
|
@ -77,7 +77,7 @@ void cleanupGroupResInfo(SGroupResInfo* pGroupResInfo) {
|
||||||
pGroupResInfo->index = 0;
|
pGroupResInfo->index = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t resultrowComparAsc(const void* p1, const void* p2) {
|
int32_t resultrowComparAsc(const void* p1, const void* p2) {
|
||||||
SResKeyPos* pp1 = *(SResKeyPos**)p1;
|
SResKeyPos* pp1 = *(SResKeyPos**)p1;
|
||||||
SResKeyPos* pp2 = *(SResKeyPos**)p2;
|
SResKeyPos* pp2 = *(SResKeyPos**)p2;
|
||||||
|
|
||||||
|
|
|
@ -60,9 +60,8 @@ static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void* input, size_t nu
|
||||||
taosArrayAddAll(p->pDataBlock, pDataBlock->pDataBlock);
|
taosArrayAddAll(p->pDataBlock, pDataBlock->pDataBlock);
|
||||||
taosArrayPush(pInfo->pBlockLists, &p);
|
taosArrayPush(pInfo->pBlockLists, &p);
|
||||||
}
|
}
|
||||||
} else if (type == STREAM_INPUT__TABLE_SCAN) {
|
/*} else if (type == STREAM_INPUT__TABLE_SCAN) {*/
|
||||||
// do nothing
|
/*ASSERT(pInfo->blockType == STREAM_INPUT__TABLE_SCAN);*/
|
||||||
ASSERT(pInfo->blockType == STREAM_INPUT__TABLE_SCAN);
|
|
||||||
} else {
|
} else {
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
}
|
}
|
||||||
|
@ -71,6 +70,7 @@ static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void* input, size_t nu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
int32_t qStreamScanSnapshot(qTaskInfo_t tinfo) {
|
int32_t qStreamScanSnapshot(qTaskInfo_t tinfo) {
|
||||||
if (tinfo == NULL) {
|
if (tinfo == NULL) {
|
||||||
return TSDB_CODE_QRY_APP_ERROR;
|
return TSDB_CODE_QRY_APP_ERROR;
|
||||||
|
@ -78,6 +78,7 @@ int32_t qStreamScanSnapshot(qTaskInfo_t tinfo) {
|
||||||
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
||||||
return doSetStreamBlock(pTaskInfo->pRoot, NULL, 0, STREAM_INPUT__TABLE_SCAN, 0, NULL);
|
return doSetStreamBlock(pTaskInfo->pRoot, NULL, 0, STREAM_INPUT__TABLE_SCAN, 0, NULL);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int32_t qSetStreamInput(qTaskInfo_t tinfo, const void* input, int32_t type, bool assignUid) {
|
int32_t qSetStreamInput(qTaskInfo_t tinfo, const void* input, int32_t type, bool assignUid) {
|
||||||
return qSetMultiStreamInput(tinfo, input, 1, type, assignUid);
|
return qSetMultiStreamInput(tinfo, input, 1, type, assignUid);
|
||||||
|
@ -184,7 +185,7 @@ int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bo
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t qGetQueriedTableSchemaVersion(qTaskInfo_t tinfo, char* dbName, char* tableName, int32_t* sversion,
|
int32_t qGetQueryTableSchemaVersion(qTaskInfo_t tinfo, char* dbName, char* tableName, int32_t* sversion,
|
||||||
int32_t* tversion) {
|
int32_t* tversion) {
|
||||||
ASSERT(tinfo != NULL && dbName != NULL && tableName != NULL);
|
ASSERT(tinfo != NULL && dbName != NULL && tableName != NULL);
|
||||||
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo;
|
||||||
|
|
|
@ -299,7 +299,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, const STqOffsetVal* pOffset) {
|
||||||
}
|
}
|
||||||
ASSERT(pInfo->tqReader->pWalReader->curVersion == pOffset->version);
|
ASSERT(pInfo->tqReader->pWalReader->curVersion == pOffset->version);
|
||||||
} else if (pOffset->type == TMQ_OFFSET__SNAPSHOT_DATA) {
|
} else if (pOffset->type == TMQ_OFFSET__SNAPSHOT_DATA) {
|
||||||
pInfo->blockType = STREAM_INPUT__TABLE_SCAN;
|
/*pInfo->blockType = STREAM_INPUT__TABLE_SCAN;*/
|
||||||
int64_t uid = pOffset->uid;
|
int64_t uid = pOffset->uid;
|
||||||
int64_t ts = pOffset->ts;
|
int64_t ts = pOffset->ts;
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <executorimpl.h>
|
||||||
#include "filter.h"
|
#include "filter.h"
|
||||||
#include "function.h"
|
#include "function.h"
|
||||||
#include "functionMgt.h"
|
#include "functionMgt.h"
|
||||||
|
@ -4062,7 +4063,7 @@ static STsdbReader* doCreateDataReader(STableScanPhysiNode* pTableScanNode, SRea
|
||||||
|
|
||||||
static SArray* extractColumnInfo(SNodeList* pNodeList);
|
static SArray* extractColumnInfo(SNodeList* pNodeList);
|
||||||
|
|
||||||
int32_t extractTableSchemaVersion(SReadHandle* pHandle, uint64_t uid, SExecTaskInfo* pTaskInfo) {
|
int32_t extractTableSchemaInfo(SReadHandle* pHandle, uint64_t uid, SExecTaskInfo* pTaskInfo) {
|
||||||
SMetaReader mr = {0};
|
SMetaReader mr = {0};
|
||||||
metaReaderInit(&mr, pHandle->meta, 0);
|
metaReaderInit(&mr, pHandle->meta, 0);
|
||||||
int32_t code = metaGetTableEntryByUid(&mr, uid);
|
int32_t code = metaGetTableEntryByUid(&mr, uid);
|
||||||
|
@ -4086,10 +4087,20 @@ int32_t extractTableSchemaVersion(SReadHandle* pHandle, uint64_t uid, SExecTaskI
|
||||||
}
|
}
|
||||||
|
|
||||||
metaReaderClear(&mr);
|
metaReaderClear(&mr);
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cleanupTableSchemaInfo(SExecTaskInfo* pTaskInfo) {
|
||||||
|
taosMemoryFreeClear(pTaskInfo->schemaVer.dbname);
|
||||||
|
if (pTaskInfo->schemaVer.sw == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
taosMemoryFree(pTaskInfo->schemaVer.sw->pSchema);
|
||||||
|
taosMemoryFree(pTaskInfo->schemaVer.sw);
|
||||||
|
taosMemoryFree(pTaskInfo->schemaVer.tablename);
|
||||||
|
}
|
||||||
|
|
||||||
static int32_t sortTableGroup(STableListInfo* pTableListInfo, int32_t groupNum) {
|
static int32_t sortTableGroup(STableListInfo* pTableListInfo, int32_t groupNum) {
|
||||||
taosArrayClear(pTableListInfo->pGroupList);
|
taosArrayClear(pTableListInfo->pGroupList);
|
||||||
SArray* sortSupport = taosArrayInit(groupNum, sizeof(uint64_t));
|
SArray* sortSupport = taosArrayInit(groupNum, sizeof(uint64_t));
|
||||||
|
@ -4263,7 +4274,7 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
code = extractTableSchemaVersion(pHandle, pTableScanNode->scan.uid, pTaskInfo);
|
code = extractTableSchemaInfo(pHandle, pTableScanNode->scan.uid, pTaskInfo);
|
||||||
if (code) {
|
if (code) {
|
||||||
pTaskInfo->code = terrno;
|
pTaskInfo->code = terrno;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -4281,7 +4292,7 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo
|
||||||
pTaskInfo->code = code;
|
pTaskInfo->code = code;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
code = extractTableSchemaVersion(pHandle, pTableScanNode->scan.uid, pTaskInfo);
|
code = extractTableSchemaInfo(pHandle, pTableScanNode->scan.uid, pTaskInfo);
|
||||||
if (code) {
|
if (code) {
|
||||||
pTaskInfo->code = terrno;
|
pTaskInfo->code = terrno;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -4378,7 +4389,7 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo
|
||||||
// return NULL;
|
// return NULL;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
int32_t code = extractTableSchemaVersion(pHandle, pScanNode->uid, pTaskInfo);
|
int32_t code = extractTableSchemaInfo(pHandle, pScanNode->uid, pTaskInfo);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
pTaskInfo->code = code;
|
pTaskInfo->code = code;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -4879,11 +4890,8 @@ void doDestroyTask(SExecTaskInfo* pTaskInfo) {
|
||||||
|
|
||||||
doDestroyTableList(&pTaskInfo->tableqinfoList);
|
doDestroyTableList(&pTaskInfo->tableqinfoList);
|
||||||
destroyOperatorInfo(pTaskInfo->pRoot);
|
destroyOperatorInfo(pTaskInfo->pRoot);
|
||||||
// taosArrayDestroy(pTaskInfo->summary.queryProfEvents);
|
cleanupTableSchemaInfo(pTaskInfo);
|
||||||
// taosHashCleanup(pTaskInfo->summary.operatorProfResults);
|
|
||||||
|
|
||||||
taosMemoryFree(pTaskInfo->schemaVer.dbname);
|
|
||||||
taosMemoryFree(pTaskInfo->schemaVer.tablename);
|
|
||||||
taosMemoryFreeClear(pTaskInfo->sql);
|
taosMemoryFreeClear(pTaskInfo->sql);
|
||||||
taosMemoryFreeClear(pTaskInfo->id.str);
|
taosMemoryFreeClear(pTaskInfo->id.str);
|
||||||
taosMemoryFreeClear(pTaskInfo);
|
taosMemoryFreeClear(pTaskInfo);
|
||||||
|
|
|
@ -1123,6 +1123,7 @@ static void setBlockGroupId(SOperatorInfo* pOperator, SSDataBlock* pBlock, int32
|
||||||
uidCol[i] = getGroupId(pOperator, uidCol[i]);
|
uidCol[i] = getGroupId(pOperator, uidCol[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock) {
|
static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock) {
|
||||||
SDataBlockInfo* pBlockInfo = &pInfo->pRes->info;
|
SDataBlockInfo* pBlockInfo = &pInfo->pRes->info;
|
||||||
SOperatorInfo* pOperator = pInfo->pStreamScanOp;
|
SOperatorInfo* pOperator = pInfo->pStreamScanOp;
|
||||||
|
@ -1216,13 +1217,9 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) {
|
||||||
if (setBlockIntoRes(pInfo, &ret.data) < 0) {
|
if (setBlockIntoRes(pInfo, &ret.data) < 0) {
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
}
|
}
|
||||||
/*pTaskInfo->streamInfo.lastStatus = ret.offset;*/
|
// TODO clean data block
|
||||||
if (pInfo->pRes->info.rows > 0) {
|
if (pInfo->pRes->info.rows > 0) {
|
||||||
return pInfo->pRes;
|
return pInfo->pRes;
|
||||||
} else {
|
|
||||||
// data is filtered out, do clean
|
|
||||||
|
|
||||||
/*tDeleteSSDataBlock(&ret.data);*/
|
|
||||||
}
|
}
|
||||||
} else if (ret.fetchType == FETCH_TYPE__META) {
|
} else if (ret.fetchType == FETCH_TYPE__META) {
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
|
@ -1240,6 +1237,10 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) {
|
||||||
} else if (pTaskInfo->streamInfo.prepareStatus.type == TMQ_OFFSET__SNAPSHOT_DATA) {
|
} else if (pTaskInfo->streamInfo.prepareStatus.type == TMQ_OFFSET__SNAPSHOT_DATA) {
|
||||||
SSDataBlock* pResult = doTableScan(pInfo->pTableScanOp);
|
SSDataBlock* pResult = doTableScan(pInfo->pTableScanOp);
|
||||||
return pResult && pResult->info.rows > 0 ? pResult : NULL;
|
return pResult && pResult->info.rows > 0 ? pResult : NULL;
|
||||||
|
} else if (pTaskInfo->streamInfo.prepareStatus.type == TMQ_OFFSET__SNAPSHOT_META) {
|
||||||
|
// TODO scan meta
|
||||||
|
ASSERT(0);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t total = taosArrayGetSize(pInfo->pBlockLists);
|
size_t total = taosArrayGetSize(pInfo->pBlockLists);
|
||||||
|
@ -1397,6 +1398,11 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static SSDataBlock* doRawScan(SOperatorInfo* pInfo) {
|
||||||
|
//
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static SArray* extractTableIdList(const STableListInfo* pTableGroupInfo) {
|
static SArray* extractTableIdList(const STableListInfo* pTableGroupInfo) {
|
||||||
SArray* tableIdList = taosArrayInit(4, sizeof(uint64_t));
|
SArray* tableIdList = taosArrayInit(4, sizeof(uint64_t));
|
||||||
|
|
||||||
|
@ -1409,6 +1415,19 @@ static SArray* extractTableIdList(const STableListInfo* pTableGroupInfo) {
|
||||||
return tableIdList;
|
return tableIdList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for subscribing db or stb (not including column),
|
||||||
|
// if this scan is used, meta data can be return
|
||||||
|
// and schemas are decided when scanning
|
||||||
|
SOperatorInfo* createRawScanOperatorInfo(SReadHandle* pHandle, STableScanPhysiNode* pTableScanNode,
|
||||||
|
SExecTaskInfo* pTaskInfo, STimeWindowAggSupp* pTwSup) {
|
||||||
|
// create operator
|
||||||
|
// create tb reader
|
||||||
|
// create meta reader
|
||||||
|
// create tq reader
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhysiNode* pTableScanNode,
|
SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhysiNode* pTableScanNode,
|
||||||
SExecTaskInfo* pTaskInfo, STimeWindowAggSupp* pTwSup, uint64_t queryId,
|
SExecTaskInfo* pTaskInfo, STimeWindowAggSupp* pTwSup, uint64_t queryId,
|
||||||
uint64_t taskId) {
|
uint64_t taskId) {
|
||||||
|
@ -1452,16 +1471,16 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys
|
||||||
|
|
||||||
if (pHandle) {
|
if (pHandle) {
|
||||||
SOperatorInfo* pTableScanOp = createTableScanOperatorInfo(pTableScanNode, pHandle, pTaskInfo);
|
SOperatorInfo* pTableScanOp = createTableScanOperatorInfo(pTableScanNode, pHandle, pTaskInfo);
|
||||||
STableScanInfo* pSTInfo = (STableScanInfo*)pTableScanOp->info;
|
STableScanInfo* pTSInfo = (STableScanInfo*)pTableScanOp->info;
|
||||||
if (pHandle->version > 0) {
|
if (pHandle->version > 0) {
|
||||||
pSTInfo->cond.endVersion = pHandle->version;
|
pTSInfo->cond.endVersion = pHandle->version;
|
||||||
}
|
}
|
||||||
|
|
||||||
SArray* tableList = taosArrayGetP(pTaskInfo->tableqinfoList.pGroupList, 0);
|
SArray* tableList = taosArrayGetP(pTaskInfo->tableqinfoList.pGroupList, 0);
|
||||||
if (pHandle->initTableReader) {
|
if (pHandle->initTableReader) {
|
||||||
pSTInfo->scanMode = TABLE_SCAN__TABLE_ORDER;
|
pTSInfo->scanMode = TABLE_SCAN__TABLE_ORDER;
|
||||||
pSTInfo->dataReader = NULL;
|
pTSInfo->dataReader = NULL;
|
||||||
if (tsdbReaderOpen(pHandle->vnode, &pSTInfo->cond, tableList, &pSTInfo->dataReader, NULL) < 0) {
|
if (tsdbReaderOpen(pHandle->vnode, &pTSInfo->cond, tableList, &pTSInfo->dataReader, NULL) < 0) {
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1475,14 +1494,14 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys
|
||||||
pInfo->tqReader = pHandle->tqReader;
|
pInfo->tqReader = pHandle->tqReader;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pSTInfo->interval.interval > 0) {
|
if (pTSInfo->interval.interval > 0) {
|
||||||
pInfo->pUpdateInfo = updateInfoInitP(&pSTInfo->interval, pTwSup->waterMark);
|
pInfo->pUpdateInfo = updateInfoInitP(&pTSInfo->interval, pTwSup->waterMark);
|
||||||
} else {
|
} else {
|
||||||
pInfo->pUpdateInfo = NULL;
|
pInfo->pUpdateInfo = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pInfo->pTableScanOp = pTableScanOp;
|
pInfo->pTableScanOp = pTableScanOp;
|
||||||
pInfo->interval = pSTInfo->interval;
|
pInfo->interval = pTSInfo->interval;
|
||||||
|
|
||||||
pInfo->readHandle = *pHandle;
|
pInfo->readHandle = *pHandle;
|
||||||
pInfo->tableUid = pScanPhyNode->uid;
|
pInfo->tableUid = pScanPhyNode->uid;
|
||||||
|
|
|
@ -2401,6 +2401,12 @@ void addPullWindow(SHashObj* pMap, SWinRes* pWinRes, int32_t size) {
|
||||||
|
|
||||||
static int32_t getChildIndex(SSDataBlock* pBlock) { return pBlock->info.childId; }
|
static int32_t getChildIndex(SSDataBlock* pBlock) { return pBlock->info.childId; }
|
||||||
|
|
||||||
|
STimeWindow getFinalTimeWindow(int64_t ts, SInterval* pInterval) {
|
||||||
|
STimeWindow w = {.skey = ts, .ekey = INT64_MAX};
|
||||||
|
w.ekey = taosTimeAdd(w.skey, pInterval->interval, pInterval->intervalUnit, pInterval->precision) - 1;
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
|
||||||
static void doHashInterval(SOperatorInfo* pOperatorInfo, SSDataBlock* pSDataBlock, uint64_t tableGroupId,
|
static void doHashInterval(SOperatorInfo* pOperatorInfo, SSDataBlock* pSDataBlock, uint64_t tableGroupId,
|
||||||
SArray* pUpdated) {
|
SArray* pUpdated) {
|
||||||
SStreamFinalIntervalOperatorInfo* pInfo = (SStreamFinalIntervalOperatorInfo*)pOperatorInfo->info;
|
SStreamFinalIntervalOperatorInfo* pInfo = (SStreamFinalIntervalOperatorInfo*)pOperatorInfo->info;
|
||||||
|
@ -2420,8 +2426,12 @@ static void doHashInterval(SOperatorInfo* pOperatorInfo, SSDataBlock* pSDataBloc
|
||||||
|
|
||||||
int32_t startPos = ascScan ? 0 : (pSDataBlock->info.rows - 1);
|
int32_t startPos = ascScan ? 0 : (pSDataBlock->info.rows - 1);
|
||||||
TSKEY ts = getStartTsKey(&pSDataBlock->info.window, tsCols);
|
TSKEY ts = getStartTsKey(&pSDataBlock->info.window, tsCols);
|
||||||
STimeWindow nextWin =
|
STimeWindow nextWin = {0};
|
||||||
getActiveTimeWindow(pInfo->aggSup.pResultBuf, pResultRowInfo, ts, &pInfo->interval, pInfo->order);
|
if (IS_FINAL_OP(pInfo)) {
|
||||||
|
nextWin = getFinalTimeWindow(ts, &pInfo->interval);
|
||||||
|
} else {
|
||||||
|
nextWin = getActiveTimeWindow(pInfo->aggSup.pResultBuf, pResultRowInfo, ts, &pInfo->interval, pInfo->order);
|
||||||
|
}
|
||||||
while (1) {
|
while (1) {
|
||||||
bool isClosed = isCloseWindow(&nextWin, &pInfo->twAggSup);
|
bool isClosed = isCloseWindow(&nextWin, &pInfo->twAggSup);
|
||||||
if (pInfo->ignoreExpiredData && isClosed) {
|
if (pInfo->ignoreExpiredData && isClosed) {
|
||||||
|
@ -2478,8 +2488,12 @@ static void doHashInterval(SOperatorInfo* pOperatorInfo, SSDataBlock* pSDataBloc
|
||||||
longjmp(pTaskInfo->env, TSDB_CODE_QRY_OUT_OF_MEMORY);
|
longjmp(pTaskInfo->env, TSDB_CODE_QRY_OUT_OF_MEMORY);
|
||||||
}
|
}
|
||||||
|
|
||||||
forwardRows = getNumOfRowsInTimeWindow(&pSDataBlock->info, tsCols, startPos, nextWin.ekey, binarySearchForKey, NULL,
|
if (IS_FINAL_OP(pInfo)) {
|
||||||
|
forwardRows = 1;
|
||||||
|
} else {
|
||||||
|
forwardRows = getNumOfRowsInTimeWindow(&pSDataBlock->info, tsCols, startPos, nextWin.ekey, binarySearchForKey, NULL,
|
||||||
TSDB_ORDER_ASC);
|
TSDB_ORDER_ASC);
|
||||||
|
}
|
||||||
if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_AT_ONCE && pUpdated) {
|
if (pInfo->twAggSup.calTrigger == STREAM_TRIGGER_AT_ONCE && pUpdated) {
|
||||||
saveResultRow(pResult, tableGroupId, pUpdated);
|
saveResultRow(pResult, tableGroupId, pUpdated);
|
||||||
}
|
}
|
||||||
|
@ -2645,7 +2659,7 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) {
|
||||||
clearSpecialDataBlock(pInfo->pUpdateRes);
|
clearSpecialDataBlock(pInfo->pUpdateRes);
|
||||||
removeDeleteResults(pUpdated, pInfo->pDelWins);
|
removeDeleteResults(pUpdated, pInfo->pDelWins);
|
||||||
pOperator->status = OP_RES_TO_RETURN;
|
pOperator->status = OP_RES_TO_RETURN;
|
||||||
qInfo("Stream Final Interval return data");
|
qInfo("%s return data", IS_FINAL_OP(pInfo) ? "interval Final" : "interval Semi");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
printDataBlock(pBlock, IS_FINAL_OP(pInfo) ? "interval Final recv" : "interval Semi recv");
|
printDataBlock(pBlock, IS_FINAL_OP(pInfo) ? "interval Final recv" : "interval Semi recv");
|
||||||
|
@ -2705,6 +2719,10 @@ static SSDataBlock* doStreamFinalIntervalAgg(SOperatorInfo* pOperator) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pInfo->scalarSupp.pExprInfo != NULL) {
|
||||||
|
SExprSupp* pExprSup = &pInfo->scalarSupp;
|
||||||
|
projectApplyFunctions(pExprSup->pExprInfo, pBlock, pBlock, pExprSup->pCtx, pExprSup->numOfExprs, NULL);
|
||||||
|
}
|
||||||
setInputDataBlock(pOperator, pSup->pCtx, pBlock, pInfo->order, MAIN_SCAN, true);
|
setInputDataBlock(pOperator, pSup->pCtx, pBlock, pInfo->order, MAIN_SCAN, true);
|
||||||
doHashInterval(pOperator, pBlock, pBlock->info.groupId, pUpdated);
|
doHashInterval(pOperator, pBlock, pBlock->info.groupId, pUpdated);
|
||||||
if (IS_FINAL_OP(pInfo)) {
|
if (IS_FINAL_OP(pInfo)) {
|
||||||
|
@ -2822,6 +2840,15 @@ SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream,
|
||||||
pInfo->primaryTsIndex = ((SColumnNode*)pIntervalPhyNode->window.pTspk)->slotId;
|
pInfo->primaryTsIndex = ((SColumnNode*)pIntervalPhyNode->window.pTspk)->slotId;
|
||||||
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
size_t keyBufSize = sizeof(int64_t) + sizeof(int64_t) + POINTER_BYTES;
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(pOperator, 4096);
|
||||||
|
if (pIntervalPhyNode->window.pExprs != NULL) {
|
||||||
|
int32_t numOfScalar = 0;
|
||||||
|
SExprInfo* pScalarExprInfo = createExprInfo(pIntervalPhyNode->window.pExprs, NULL, &numOfScalar);
|
||||||
|
int32_t code = initExprSupp(&pInfo->scalarSupp, pScalarExprInfo, numOfScalar);
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
goto _error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int32_t numOfCols = 0;
|
int32_t numOfCols = 0;
|
||||||
SExprInfo* pExprInfo = createExprInfo(pIntervalPhyNode->window.pFuncs, NULL, &numOfCols);
|
SExprInfo* pExprInfo = createExprInfo(pIntervalPhyNode->window.pFuncs, NULL, &numOfCols);
|
||||||
SSDataBlock* pResBlock = createResDataBlock(pPhyNode->pOutputDataBlockDesc);
|
SSDataBlock* pResBlock = createResDataBlock(pPhyNode->pOutputDataBlockDesc);
|
||||||
|
@ -2988,6 +3015,14 @@ SOperatorInfo* createStreamSessionAggOperatorInfo(SOperatorInfo* downstream, SPh
|
||||||
}
|
}
|
||||||
|
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(pOperator, 4096);
|
||||||
|
if (pSessionNode->window.pExprs != NULL) {
|
||||||
|
int32_t numOfScalar = 0;
|
||||||
|
SExprInfo* pScalarExprInfo = createExprInfo(pSessionNode->window.pExprs, NULL, &numOfScalar);
|
||||||
|
int32_t code = initExprSupp(&pInfo->scalarSupp, pScalarExprInfo, numOfScalar);
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
goto _error;
|
||||||
|
}
|
||||||
|
}
|
||||||
SExprSupp* pSup = &pOperator->exprSupp;
|
SExprSupp* pSup = &pOperator->exprSupp;
|
||||||
|
|
||||||
code = initBasicInfoEx(&pInfo->binfo, pSup, pExprInfo, numOfCols, pResBlock);
|
code = initBasicInfoEx(&pInfo->binfo, pSup, pExprInfo, numOfCols, pResBlock);
|
||||||
|
@ -3441,6 +3476,7 @@ static int32_t copyUpdateResult(SHashObj* pStUpdated, SArray* pUpdated) {
|
||||||
*(int64_t*)pos->key = ((SWinRes*)pData)->ts;
|
*(int64_t*)pos->key = ((SWinRes*)pData)->ts;
|
||||||
taosArrayPush(pUpdated, &pos);
|
taosArrayPush(pUpdated, &pos);
|
||||||
}
|
}
|
||||||
|
taosArraySort(pUpdated, resultrowComparAsc);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3655,6 +3691,10 @@ static SSDataBlock* doStreamSessionAgg(SOperatorInfo* pOperator) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pInfo->scalarSupp.pExprInfo != NULL) {
|
||||||
|
SExprSupp* pExprSup = &pInfo->scalarSupp;
|
||||||
|
projectApplyFunctions(pExprSup->pExprInfo, pBlock, pBlock, pExprSup->pCtx, pExprSup->numOfExprs, NULL);
|
||||||
|
}
|
||||||
// the pDataBlock are always the same one, no need to call this again
|
// the pDataBlock are always the same one, no need to call this again
|
||||||
setInputDataBlock(pOperator, pSup->pCtx, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true);
|
setInputDataBlock(pOperator, pSup->pCtx, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true);
|
||||||
doStreamSessionAggImpl(pOperator, pBlock, pStUpdated, pInfo->pStDeleted, IS_FINAL_OP(pInfo));
|
doStreamSessionAggImpl(pOperator, pBlock, pStUpdated, pInfo->pStDeleted, IS_FINAL_OP(pInfo));
|
||||||
|
@ -3787,6 +3827,10 @@ static SSDataBlock* doStreamSessionSemiAgg(SOperatorInfo* pOperator) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pInfo->scalarSupp.pExprInfo != NULL) {
|
||||||
|
SExprSupp* pExprSup = &pInfo->scalarSupp;
|
||||||
|
projectApplyFunctions(pExprSup->pExprInfo, pBlock, pBlock, pExprSup->pCtx, pExprSup->numOfExprs, NULL);
|
||||||
|
}
|
||||||
// the pDataBlock are always the same one, no need to call this again
|
// the pDataBlock are always the same one, no need to call this again
|
||||||
setInputDataBlock(pOperator, pSup->pCtx, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true);
|
setInputDataBlock(pOperator, pSup->pCtx, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true);
|
||||||
doStreamSessionAggImpl(pOperator, pBlock, pStUpdated, pInfo->pStDeleted, false);
|
doStreamSessionAggImpl(pOperator, pBlock, pStUpdated, pInfo->pStDeleted, false);
|
||||||
|
@ -4183,6 +4227,10 @@ static SSDataBlock* doStreamStateAgg(SOperatorInfo* pOperator) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pInfo->scalarSupp.pExprInfo != NULL) {
|
||||||
|
SExprSupp* pExprSup = &pInfo->scalarSupp;
|
||||||
|
projectApplyFunctions(pExprSup->pExprInfo, pBlock, pBlock, pExprSup->pCtx, pExprSup->numOfExprs, NULL);
|
||||||
|
}
|
||||||
// the pDataBlock are always the same one, no need to call this again
|
// the pDataBlock are always the same one, no need to call this again
|
||||||
setInputDataBlock(pOperator, pSup->pCtx, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true);
|
setInputDataBlock(pOperator, pSup->pCtx, pBlock, TSDB_ORDER_ASC, MAIN_SCAN, true);
|
||||||
doStreamStateAggImpl(pOperator, pBlock, pSeUpdated, pInfo->pSeDeleted);
|
doStreamStateAggImpl(pOperator, pBlock, pSeUpdated, pInfo->pSeDeleted);
|
||||||
|
@ -4236,6 +4284,15 @@ SOperatorInfo* createStreamStateAggOperatorInfo(SOperatorInfo* downstream, SPhys
|
||||||
|
|
||||||
pInfo->stateCol = extractColumnFromColumnNode(pColNode);
|
pInfo->stateCol = extractColumnFromColumnNode(pColNode);
|
||||||
initResultSizeInfo(pOperator, 4096);
|
initResultSizeInfo(pOperator, 4096);
|
||||||
|
if (pStateNode->window.pExprs != NULL) {
|
||||||
|
int32_t numOfScalar = 0;
|
||||||
|
SExprInfo* pScalarExprInfo = createExprInfo(pStateNode->window.pExprs, NULL, &numOfScalar);
|
||||||
|
int32_t code = initExprSupp(&pInfo->scalarSupp, pScalarExprInfo, numOfScalar);
|
||||||
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
goto _error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
initResultRowInfo(&pInfo->binfo.resultRowInfo);
|
initResultRowInfo(&pInfo->binfo.resultRowInfo);
|
||||||
pInfo->twAggSup = (STimeWindowAggSupp){
|
pInfo->twAggSup = (STimeWindowAggSupp){
|
||||||
.waterMark = pStateNode->window.watermark,
|
.waterMark = pStateNode->window.watermark,
|
||||||
|
|
|
@ -51,7 +51,7 @@ FstDfa *dfaBuilderBuild(FstDfaBuilder *builder);
|
||||||
bool dfaBuilderRunState(FstDfaBuilder *builder, FstSparseSet *cur, FstSparseSet *next, uint32_t state, uint8_t bytes,
|
bool dfaBuilderRunState(FstDfaBuilder *builder, FstSparseSet *cur, FstSparseSet *next, uint32_t state, uint8_t bytes,
|
||||||
uint32_t *result);
|
uint32_t *result);
|
||||||
|
|
||||||
bool dfaBuilderCachedState(FstDfaBuilder *builder, FstSparseSet *set, uint32_t *result);
|
bool dfaBuilderCacheState(FstDfaBuilder *builder, FstSparseSet *set, uint32_t *result);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* dfa related func
|
* dfa related func
|
||||||
|
|
|
@ -23,17 +23,18 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct FstSparseSet {
|
typedef struct FstSparseSet {
|
||||||
uint32_t *dense;
|
int32_t *dense;
|
||||||
uint32_t *sparse;
|
int32_t *sparse;
|
||||||
int32_t size;
|
int32_t size;
|
||||||
|
int32_t cap;
|
||||||
} FstSparseSet;
|
} FstSparseSet;
|
||||||
|
|
||||||
FstSparseSet *sparSetCreate(int32_t sz);
|
FstSparseSet *sparSetCreate(int32_t sz);
|
||||||
void sparSetDestroy(FstSparseSet *s);
|
void sparSetDestroy(FstSparseSet *s);
|
||||||
uint32_t sparSetLen(FstSparseSet *ss);
|
uint32_t sparSetLen(FstSparseSet *ss);
|
||||||
uint32_t sparSetAdd(FstSparseSet *ss, uint32_t ip);
|
bool sparSetAdd(FstSparseSet *ss, int32_t ip, int32_t *val);
|
||||||
uint32_t sparSetGet(FstSparseSet *ss, uint32_t i);
|
bool sparSetGet(FstSparseSet *ss, int32_t i, int32_t *val);
|
||||||
bool sparSetContains(FstSparseSet *ss, uint32_t ip);
|
bool sparSetContains(FstSparseSet *ss, int32_t ip);
|
||||||
void sparSetClear(FstSparseSet *ss);
|
void sparSetClear(FstSparseSet *ss);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -64,7 +64,7 @@ void dfaBuilderDestroy(FstDfaBuilder *builder) {
|
||||||
taosMemoryFree(builder);
|
taosMemoryFree(builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
FstDfa *dfaBuilder(FstDfaBuilder *builder) {
|
FstDfa *dfaBuilderBuild(FstDfaBuilder *builder) {
|
||||||
uint32_t sz = taosArrayGetSize(builder->dfa->insts);
|
uint32_t sz = taosArrayGetSize(builder->dfa->insts);
|
||||||
FstSparseSet *cur = sparSetCreate(sz);
|
FstSparseSet *cur = sparSetCreate(sz);
|
||||||
FstSparseSet *nxt = sparSetCreate(sz);
|
FstSparseSet *nxt = sparSetCreate(sz);
|
||||||
|
@ -73,7 +73,7 @@ FstDfa *dfaBuilder(FstDfaBuilder *builder) {
|
||||||
|
|
||||||
SArray *states = taosArrayInit(0, sizeof(uint32_t));
|
SArray *states = taosArrayInit(0, sizeof(uint32_t));
|
||||||
uint32_t result;
|
uint32_t result;
|
||||||
if (dfaBuilderCachedState(builder, cur, &result)) {
|
if (dfaBuilderCacheState(builder, cur, &result)) {
|
||||||
taosArrayPush(states, &result);
|
taosArrayPush(states, &result);
|
||||||
}
|
}
|
||||||
SHashObj *seen = taosHashInit(12, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), false, HASH_NO_LOCK);
|
SHashObj *seen = taosHashInit(12, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), false, HASH_NO_LOCK);
|
||||||
|
@ -98,22 +98,21 @@ FstDfa *dfaBuilder(FstDfaBuilder *builder) {
|
||||||
return builder->dfa;
|
return builder->dfa;
|
||||||
}
|
}
|
||||||
|
|
||||||
FstDfa *dfaBuilderBuild(FstDfaBuilder *builer) { return NULL; }
|
|
||||||
|
|
||||||
bool dfaBuilderRunState(FstDfaBuilder *builder, FstSparseSet *cur, FstSparseSet *next, uint32_t state, uint8_t byte,
|
bool dfaBuilderRunState(FstDfaBuilder *builder, FstSparseSet *cur, FstSparseSet *next, uint32_t state, uint8_t byte,
|
||||||
uint32_t *result) {
|
uint32_t *result) {
|
||||||
sparSetClear(cur);
|
sparSetClear(cur);
|
||||||
DfaState *t = taosArrayGet(builder->dfa->states, state);
|
DfaState *t = taosArrayGet(builder->dfa->states, state);
|
||||||
for (int i = 0; i < taosArrayGetSize(t->insts); i++) {
|
for (int i = 0; i < taosArrayGetSize(t->insts); i++) {
|
||||||
uint32_t ip = *(int32_t *)taosArrayGet(t->insts, i);
|
int32_t ip = *(int32_t *)taosArrayGet(t->insts, i);
|
||||||
sparSetAdd(cur, ip);
|
bool succ = sparSetAdd(cur, ip, NULL);
|
||||||
|
assert(succ == true);
|
||||||
}
|
}
|
||||||
dfaRun(builder->dfa, cur, next, byte);
|
dfaRun(builder->dfa, cur, next, byte);
|
||||||
|
|
||||||
t = taosArrayGet(builder->dfa->states, state);
|
t = taosArrayGet(builder->dfa->states, state);
|
||||||
|
|
||||||
uint32_t nxtState;
|
uint32_t nxtState;
|
||||||
if (dfaBuilderCachedState(builder, next, &nxtState)) {
|
if (dfaBuilderCacheState(builder, next, &nxtState)) {
|
||||||
t->next[byte] = nxtState;
|
t->next[byte] = nxtState;
|
||||||
*result = nxtState;
|
*result = nxtState;
|
||||||
return true;
|
return true;
|
||||||
|
@ -121,12 +120,13 @@ bool dfaBuilderRunState(FstDfaBuilder *builder, FstSparseSet *cur, FstSparseSet
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dfaBuilderCachedState(FstDfaBuilder *builder, FstSparseSet *set, uint32_t *result) {
|
bool dfaBuilderCacheState(FstDfaBuilder *builder, FstSparseSet *set, uint32_t *result) {
|
||||||
SArray *tinsts = taosArrayInit(4, sizeof(uint32_t));
|
SArray *tinsts = taosArrayInit(4, sizeof(uint32_t));
|
||||||
bool isMatch = false;
|
bool isMatch = false;
|
||||||
|
|
||||||
for (int i = 0; i < sparSetLen(set); i++) {
|
for (int i = 0; i < sparSetLen(set); i++) {
|
||||||
uint32_t ip = sparSetGet(set, i);
|
int32_t ip;
|
||||||
|
if (false == sparSetGet(set, i, &ip)) continue;
|
||||||
|
|
||||||
Inst *inst = taosArrayGet(builder->dfa->insts, ip);
|
Inst *inst = taosArrayGet(builder->dfa->insts, ip);
|
||||||
if (inst->ty == JUMP || inst->ty == SPLIT) {
|
if (inst->ty == JUMP || inst->ty == SPLIT) {
|
||||||
|
@ -186,7 +186,8 @@ void dfaAdd(FstDfa *dfa, FstSparseSet *set, uint32_t ip) {
|
||||||
if (sparSetContains(set, ip)) {
|
if (sparSetContains(set, ip)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sparSetAdd(set, ip);
|
bool succ = sparSetAdd(set, ip, NULL);
|
||||||
|
// assert(succ == true);
|
||||||
Inst *inst = taosArrayGet(dfa->insts, ip);
|
Inst *inst = taosArrayGet(dfa->insts, ip);
|
||||||
if (inst->ty == MATCH || inst->ty == RANGE) {
|
if (inst->ty == MATCH || inst->ty == RANGE) {
|
||||||
// do nothing
|
// do nothing
|
||||||
|
@ -203,7 +204,8 @@ bool dfaRun(FstDfa *dfa, FstSparseSet *from, FstSparseSet *to, uint8_t byte) {
|
||||||
bool isMatch = false;
|
bool isMatch = false;
|
||||||
sparSetClear(to);
|
sparSetClear(to);
|
||||||
for (int i = 0; i < sparSetLen(from); i++) {
|
for (int i = 0; i < sparSetLen(from); i++) {
|
||||||
uint32_t ip = sparSetGet(from, i);
|
int32_t ip;
|
||||||
|
if (false == sparSetGet(from, i, &ip)) continue;
|
||||||
|
|
||||||
Inst *inst = taosArrayGet(dfa->insts, ip);
|
Inst *inst = taosArrayGet(dfa->insts, ip);
|
||||||
if (inst->ty == JUMP || inst->ty == SPLIT) {
|
if (inst->ty == JUMP || inst->ty == SPLIT) {
|
||||||
|
|
|
@ -22,15 +22,15 @@ FstRegex *regexCreate(const char *str) {
|
||||||
if (regex == NULL) {
|
if (regex == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
int32_t sz = (int32_t)strlen(str);
|
|
||||||
char *orig = taosMemoryCalloc(1, sz);
|
|
||||||
memcpy(orig, str, sz);
|
|
||||||
|
|
||||||
regex->orig = orig;
|
regex->orig = tstrdup(str);
|
||||||
|
|
||||||
// construct insts based on str
|
// construct insts based on str
|
||||||
SArray *insts = NULL;
|
SArray *insts = taosArrayInit(256, sizeof(uint8_t));
|
||||||
|
for (int i = 0; i < strlen(str); i++) {
|
||||||
|
uint8_t v = str[i];
|
||||||
|
taosArrayPush(insts, &v);
|
||||||
|
}
|
||||||
FstDfaBuilder *builder = dfaBuilderCreate(insts);
|
FstDfaBuilder *builder = dfaBuilderCreate(insts);
|
||||||
regex->dfa = dfaBuilderBuild(builder);
|
regex->dfa = dfaBuilderBuild(builder);
|
||||||
return regex;
|
return regex;
|
||||||
|
|
|
@ -15,14 +15,24 @@
|
||||||
|
|
||||||
#include "indexFstSparse.h"
|
#include "indexFstSparse.h"
|
||||||
|
|
||||||
|
static void sparSetUtil(int32_t *buf, int32_t cap) {
|
||||||
|
for (int32_t i = 0; i < cap; i++) {
|
||||||
|
buf[i] = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
FstSparseSet *sparSetCreate(int32_t sz) {
|
FstSparseSet *sparSetCreate(int32_t sz) {
|
||||||
FstSparseSet *ss = taosMemoryCalloc(1, sizeof(FstSparseSet));
|
FstSparseSet *ss = taosMemoryCalloc(1, sizeof(FstSparseSet));
|
||||||
if (ss == NULL) {
|
if (ss == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ss->dense = (uint32_t *)taosMemoryCalloc(sz, sizeof(uint32_t));
|
ss->dense = (int32_t *)taosMemoryMalloc(sz * sizeof(int32_t));
|
||||||
ss->sparse = (uint32_t *)taosMemoryCalloc(sz, sizeof(uint32_t));
|
ss->sparse = (int32_t *)taosMemoryMalloc(sz * sizeof(int32_t));
|
||||||
|
sparSetUtil(ss->dense, sz);
|
||||||
|
sparSetUtil(ss->sparse, sz);
|
||||||
|
|
||||||
|
ss->cap = sz;
|
||||||
|
|
||||||
ss->size = 0;
|
ss->size = 0;
|
||||||
return ss;
|
return ss;
|
||||||
}
|
}
|
||||||
|
@ -38,23 +48,39 @@ uint32_t sparSetLen(FstSparseSet *ss) {
|
||||||
// Get occupied size
|
// Get occupied size
|
||||||
return ss == NULL ? 0 : ss->size;
|
return ss == NULL ? 0 : ss->size;
|
||||||
}
|
}
|
||||||
uint32_t sparSetAdd(FstSparseSet *ss, uint32_t ip) {
|
bool sparSetAdd(FstSparseSet *ss, int32_t ip, int32_t *idx) {
|
||||||
if (ss == NULL) {
|
if (ss == NULL) {
|
||||||
return 0;
|
return false;
|
||||||
|
}
|
||||||
|
if (ip >= ss->cap || ip < 0) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
uint32_t i = ss->size;
|
uint32_t i = ss->size;
|
||||||
ss->dense[i] = ip;
|
ss->dense[i] = ip;
|
||||||
ss->sparse[ip] = i;
|
ss->sparse[ip] = i;
|
||||||
ss->size += 1;
|
ss->size += 1;
|
||||||
return i;
|
|
||||||
|
if (idx != NULL) *idx = i;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
uint32_t sparSetGet(FstSparseSet *ss, uint32_t i) {
|
bool sparSetGet(FstSparseSet *ss, int32_t idx, int32_t *ip) {
|
||||||
// check later
|
if (idx >= ss->cap || idx >= ss->size || idx < 0) {
|
||||||
return ss->dense[i];
|
return false;
|
||||||
|
}
|
||||||
|
int32_t val = ss->dense[idx];
|
||||||
|
if (ip != NULL) {
|
||||||
|
*ip = val;
|
||||||
|
}
|
||||||
|
return val == -1 ? false : true;
|
||||||
}
|
}
|
||||||
bool sparSetContains(FstSparseSet *ss, uint32_t ip) {
|
bool sparSetContains(FstSparseSet *ss, int32_t ip) {
|
||||||
uint32_t i = ss->sparse[ip];
|
if (ip >= ss->cap || ip < 0) {
|
||||||
if (i < ss->size && ss->dense[i] == ip) {
|
return false;
|
||||||
|
}
|
||||||
|
int32_t i = ss->sparse[ip];
|
||||||
|
|
||||||
|
if (i >= 0 && i < ss->cap && i < ss->size && ss->dense[i] == ip) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
@ -64,5 +90,7 @@ void sparSetClear(FstSparseSet *ss) {
|
||||||
if (ss == NULL) {
|
if (ss == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
sparSetUtil(ss->dense, ss->cap);
|
||||||
|
sparSetUtil(ss->sparse, ss->cap);
|
||||||
ss->size = 0;
|
ss->size = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,20 +51,62 @@ class FstSparseSetEnv : public ::testing::Test {
|
||||||
};
|
};
|
||||||
|
|
||||||
// test FstDfaBuilder
|
// test FstDfaBuilder
|
||||||
TEST_F(FstUtilEnv, test1) {}
|
TEST_F(FstUtilEnv, test1) {
|
||||||
TEST_F(FstUtilEnv, test2) {}
|
// test
|
||||||
TEST_F(FstUtilEnv, test3) {}
|
}
|
||||||
TEST_F(FstUtilEnv, test4) {}
|
TEST_F(FstUtilEnv, test2) {
|
||||||
|
// test
|
||||||
|
}
|
||||||
|
TEST_F(FstUtilEnv, test3) {
|
||||||
|
// test
|
||||||
|
}
|
||||||
|
TEST_F(FstUtilEnv, test4) {
|
||||||
|
// test
|
||||||
|
}
|
||||||
|
|
||||||
// test FstRegex
|
// test FstRegex
|
||||||
|
|
||||||
TEST_F(FstRegexEnv, test1) {}
|
TEST_F(FstRegexEnv, test1) {
|
||||||
|
//
|
||||||
|
EXPECT_EQ(regex != NULL, true);
|
||||||
|
}
|
||||||
TEST_F(FstRegexEnv, test2) {}
|
TEST_F(FstRegexEnv, test2) {}
|
||||||
TEST_F(FstRegexEnv, test3) {}
|
TEST_F(FstRegexEnv, test3) {}
|
||||||
TEST_F(FstRegexEnv, test4) {}
|
TEST_F(FstRegexEnv, test4) {}
|
||||||
|
|
||||||
// test FstSparseSet
|
// test FstSparseSet
|
||||||
TEST_F(FstSparseSetEnv, test1) {}
|
TEST_F(FstSparseSetEnv, test1) {
|
||||||
TEST_F(FstSparseSetEnv, test2) {}
|
for (int8_t i = 0; i < 20; i++) {
|
||||||
TEST_F(FstSparseSetEnv, test3) {}
|
int32_t val = -1;
|
||||||
TEST_F(FstSparseSetEnv, test4) {}
|
bool succ = sparSetAdd(set, 'a' + i, &val);
|
||||||
|
}
|
||||||
|
EXPECT_EQ(sparSetLen(set), 20);
|
||||||
|
for (int8_t i = 0; i < 20; i++) {
|
||||||
|
int val = -1;
|
||||||
|
bool find = sparSetGet(set, i, &val);
|
||||||
|
EXPECT_EQ(find, true);
|
||||||
|
EXPECT_EQ(val, i + 'a');
|
||||||
|
}
|
||||||
|
for (int8_t i = 'a'; i < 'a' + 20; i++) {
|
||||||
|
EXPECT_EQ(sparSetContains(set, i), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int8_t i = 'A'; i < 20; i++) {
|
||||||
|
EXPECT_EQ(sparSetContains(set, 'A'), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 512; i < 1000; i++) {
|
||||||
|
EXPECT_EQ(sparSetAdd(set, i, NULL), false);
|
||||||
|
|
||||||
|
EXPECT_EQ(sparSetGet(set, i, NULL), false);
|
||||||
|
EXPECT_EQ(sparSetContains(set, i), false);
|
||||||
|
}
|
||||||
|
sparSetClear(set);
|
||||||
|
|
||||||
|
for (int i = 'a'; i < 'a' + 20; i++) {
|
||||||
|
EXPECT_EQ(sparSetGet(set, i, NULL), false);
|
||||||
|
}
|
||||||
|
for (int i = 1000; i < 2000; i++) {
|
||||||
|
EXPECT_EQ(sparSetGet(set, i, NULL), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -436,7 +436,7 @@ void qwSaveTbVersionInfo(qTaskInfo_t pTaskInfo, SQWTaskCtx *ctx) {
|
||||||
char dbFName[TSDB_DB_FNAME_LEN] = {0};
|
char dbFName[TSDB_DB_FNAME_LEN] = {0};
|
||||||
char tbName[TSDB_TABLE_NAME_LEN] = {0};
|
char tbName[TSDB_TABLE_NAME_LEN] = {0};
|
||||||
|
|
||||||
qGetQueriedTableSchemaVersion(pTaskInfo, dbFName, tbName, &ctx->tbInfo.sversion, &ctx->tbInfo.tversion);
|
qGetQueryTableSchemaVersion(pTaskInfo, dbFName, tbName, &ctx->tbInfo.sversion, &ctx->tbInfo.tversion);
|
||||||
|
|
||||||
if (dbFName[0] && tbName[0]) {
|
if (dbFName[0] && tbName[0]) {
|
||||||
sprintf(ctx->tbInfo.tbFName, "%s.%s", dbFName, tbName);
|
sprintf(ctx->tbInfo.tbFName, "%s.%s", dbFName, tbName);
|
||||||
|
|
|
@ -1041,7 +1041,7 @@ int32_t qWorkerInit(int8_t nodeType, int32_t nodeId, SQWorkerCfg *cfg, void **qW
|
||||||
|
|
||||||
*qWorkerMgmt = mgmt;
|
*qWorkerMgmt = mgmt;
|
||||||
|
|
||||||
qDebug("qworker initialized for node, type:%d, id:%d, handle:%p", mgmt->nodeType, mgmt->nodeId, mgmt);
|
qDebug("qworker initialized, type:%d, id:%d, handle:%p", mgmt->nodeType, mgmt->nodeId, mgmt);
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
|
||||||
|
|
|
@ -235,10 +235,10 @@ int32_t syncNodeOnAppendEntriesReplySnapshot2Cb(SSyncNode* ths, SyncAppendEntrie
|
||||||
// do nothing
|
// do nothing
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
SSyncRaftEntry* pEntry;
|
SSnapshot oldSnapshot;
|
||||||
int32_t code = ths->pLogStore->syncLogGetEntry(ths->pLogStore, nextIndex, &pEntry);
|
ths->pFsm->FpGetSnapshotInfo(ths->pFsm, &oldSnapshot);
|
||||||
ASSERT(code == 0);
|
SyncTerm newSnapshotTerm = oldSnapshot.lastApplyTerm;
|
||||||
syncNodeStartSnapshotOnce(ths, SYNC_INDEX_BEGIN, nextIndex, pEntry->term, pMsg);
|
syncNodeStartSnapshotOnce(ths, SYNC_INDEX_BEGIN, nextIndex, newSnapshotTerm, pMsg);
|
||||||
|
|
||||||
// get sender
|
// get sender
|
||||||
SSyncSnapshotSender* pSender = syncNodeGetSnapshotSender(ths, &(pMsg->srcId));
|
SSyncSnapshotSender* pSender = syncNodeGetSnapshotSender(ths, &(pMsg->srcId));
|
||||||
|
|
|
@ -30,19 +30,24 @@ SWalReader *walOpenReader(SWal *pWal, SWalFilterCond *cond) {
|
||||||
pRead->pWal = pWal;
|
pRead->pWal = pWal;
|
||||||
pRead->pIdxFile = NULL;
|
pRead->pIdxFile = NULL;
|
||||||
pRead->pLogFile = NULL;
|
pRead->pLogFile = NULL;
|
||||||
pRead->curVersion = -5;
|
pRead->curVersion = -1;
|
||||||
pRead->curFileFirstVer = -1;
|
pRead->curFileFirstVer = -1;
|
||||||
pRead->curInvalid = 1;
|
pRead->curInvalid = 1;
|
||||||
pRead->capacity = 0;
|
pRead->capacity = 0;
|
||||||
if (cond)
|
if (cond) {
|
||||||
pRead->cond = *cond;
|
pRead->cond = *cond;
|
||||||
else {
|
} else {
|
||||||
pRead->cond.scanMeta = 0;
|
pRead->cond.scanMeta = 0;
|
||||||
pRead->cond.scanUncommited = 0;
|
pRead->cond.scanUncommited = 0;
|
||||||
|
pRead->cond.enableRef = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
taosThreadMutexInit(&pRead->mutex, NULL);
|
taosThreadMutexInit(&pRead->mutex, NULL);
|
||||||
|
|
||||||
|
/*if (pRead->cond.enableRef) {*/
|
||||||
|
/*walOpenRef(pWal);*/
|
||||||
|
/*}*/
|
||||||
|
|
||||||
pRead->pHead = taosMemoryMalloc(sizeof(SWalCkHead));
|
pRead->pHead = taosMemoryMalloc(sizeof(SWalCkHead));
|
||||||
if (pRead->pHead == NULL) {
|
if (pRead->pHead == NULL) {
|
||||||
terrno = TSDB_CODE_WAL_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_WAL_OUT_OF_MEMORY;
|
||||||
|
@ -151,24 +156,8 @@ static int32_t walReadChangeFile(SWalReader *pRead, int64_t fileFirstVer) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t walReadSeekVer(SWalReader *pRead, int64_t ver) {
|
int32_t walReadSeekVerImpl(SWalReader *pRead, int64_t ver) {
|
||||||
SWal *pWal = pRead->pWal;
|
SWal *pWal = pRead->pWal;
|
||||||
if (!pRead->curInvalid && ver == pRead->curVersion) {
|
|
||||||
wDebug("wal version %ld match, no need to reset", ver);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
pRead->curInvalid = 1;
|
|
||||||
pRead->curVersion = ver;
|
|
||||||
|
|
||||||
if (ver > pWal->vers.lastVer || ver < pWal->vers.firstVer) {
|
|
||||||
wDebug("vgId:%d, invalid index:%" PRId64 ", first index:%" PRId64 ", last index:%" PRId64, pRead->pWal->cfg.vgId,
|
|
||||||
ver, pWal->vers.firstVer, pWal->vers.lastVer);
|
|
||||||
terrno = TSDB_CODE_WAL_LOG_NOT_EXIST;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (ver < pWal->vers.snapshotVer) {
|
|
||||||
}
|
|
||||||
|
|
||||||
SWalFileInfo tmpInfo;
|
SWalFileInfo tmpInfo;
|
||||||
tmpInfo.firstVer = ver;
|
tmpInfo.firstVer = ver;
|
||||||
|
@ -190,6 +179,31 @@ int32_t walReadSeekVer(SWalReader *pRead, int64_t ver) {
|
||||||
wDebug("wal version reset from %ld to %ld", pRead->curVersion, ver);
|
wDebug("wal version reset from %ld to %ld", pRead->curVersion, ver);
|
||||||
|
|
||||||
pRead->curVersion = ver;
|
pRead->curVersion = ver;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t walReadSeekVer(SWalReader *pRead, int64_t ver) {
|
||||||
|
SWal *pWal = pRead->pWal;
|
||||||
|
if (!pRead->curInvalid && ver == pRead->curVersion) {
|
||||||
|
wDebug("wal version %ld match, no need to reset", ver);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
pRead->curInvalid = 1;
|
||||||
|
pRead->curVersion = ver;
|
||||||
|
|
||||||
|
if (ver > pWal->vers.lastVer || ver < pWal->vers.firstVer) {
|
||||||
|
wDebug("vgId:%d, invalid index:%" PRId64 ", first index:%" PRId64 ", last index:%" PRId64, pRead->pWal->cfg.vgId,
|
||||||
|
ver, pWal->vers.firstVer, pWal->vers.lastVer);
|
||||||
|
terrno = TSDB_CODE_WAL_LOG_NOT_EXIST;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (ver < pWal->vers.snapshotVer) {
|
||||||
|
}
|
||||||
|
|
||||||
|
if (walReadSeekVerImpl(pRead, ver) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -198,6 +212,8 @@ void walSetReaderCapacity(SWalReader *pRead, int32_t capacity) { pRead->capacity
|
||||||
|
|
||||||
static int32_t walFetchHeadNew(SWalReader *pRead, int64_t fetchVer) {
|
static int32_t walFetchHeadNew(SWalReader *pRead, int64_t fetchVer) {
|
||||||
int64_t contLen;
|
int64_t contLen;
|
||||||
|
bool seeked = false;
|
||||||
|
|
||||||
if (pRead->curInvalid || pRead->curVersion != fetchVer) {
|
if (pRead->curInvalid || pRead->curVersion != fetchVer) {
|
||||||
if (walReadSeekVer(pRead, fetchVer) < 0) {
|
if (walReadSeekVer(pRead, fetchVer) < 0) {
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
|
@ -205,17 +221,26 @@ static int32_t walFetchHeadNew(SWalReader *pRead, int64_t fetchVer) {
|
||||||
pRead->curInvalid = 1;
|
pRead->curInvalid = 1;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
seeked = true;
|
||||||
}
|
}
|
||||||
contLen = taosReadFile(pRead->pLogFile, pRead->pHead, sizeof(SWalCkHead));
|
while (1) {
|
||||||
if (contLen != sizeof(SWalCkHead)) {
|
contLen = taosReadFile(pRead->pLogFile, pRead->pHead, sizeof(SWalCkHead));
|
||||||
if (contLen < 0) {
|
if (contLen == sizeof(SWalCkHead)) {
|
||||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
break;
|
||||||
|
} else if (contLen == 0 && !seeked) {
|
||||||
|
walReadSeekVerImpl(pRead, fetchVer);
|
||||||
|
seeked = true;
|
||||||
|
continue;
|
||||||
} else {
|
} else {
|
||||||
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
|
if (contLen < 0) {
|
||||||
|
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||||
|
} else {
|
||||||
|
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
|
||||||
|
}
|
||||||
|
ASSERT(0);
|
||||||
|
pRead->curInvalid = 1;
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
ASSERT(0);
|
|
||||||
pRead->curInvalid = 1;
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -379,20 +404,14 @@ int32_t walFetchBody(SWalReader *pRead, SWalCkHead **ppHead) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t walReadVer(SWalReader *pRead, int64_t ver) {
|
int32_t walReadVer(SWalReader *pRead, int64_t ver) {
|
||||||
int64_t code;
|
int64_t contLen;
|
||||||
|
bool seeked = false;
|
||||||
|
|
||||||
if (pRead->pWal->vers.firstVer == -1) {
|
if (pRead->pWal->vers.firstVer == -1) {
|
||||||
terrno = TSDB_CODE_WAL_LOG_NOT_EXIST;
|
terrno = TSDB_CODE_WAL_LOG_NOT_EXIST;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pRead->curInvalid || pRead->curVersion != ver) {
|
|
||||||
if (walReadSeekVer(pRead, ver) < 0) {
|
|
||||||
wError("vgId:%d, unexpected wal log index:%" PRId64 ", since %s", pRead->pWal->cfg.vgId, ver, terrstr());
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ver > pRead->pWal->vers.lastVer || ver < pRead->pWal->vers.firstVer) {
|
if (ver > pRead->pWal->vers.lastVer || ver < pRead->pWal->vers.firstVer) {
|
||||||
wError("vgId:%d, invalid index:%" PRId64 ", first index:%" PRId64 ", last index:%" PRId64, pRead->pWal->cfg.vgId,
|
wError("vgId:%d, invalid index:%" PRId64 ", first index:%" PRId64 ", last index:%" PRId64, pRead->pWal->cfg.vgId,
|
||||||
ver, pRead->pWal->vers.firstVer, pRead->pWal->vers.lastVer);
|
ver, pRead->pWal->vers.firstVer, pRead->pWal->vers.lastVer);
|
||||||
|
@ -400,21 +419,35 @@ int32_t walReadVer(SWalReader *pRead, int64_t ver) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(taosValidFile(pRead->pLogFile) == true);
|
if (pRead->curInvalid || pRead->curVersion != ver) {
|
||||||
|
if (walReadSeekVer(pRead, ver) < 0) {
|
||||||
code = taosReadFile(pRead->pLogFile, pRead->pHead, sizeof(SWalCkHead));
|
wError("vgId:%d, unexpected wal log index:%" PRId64 ", since %s", pRead->pWal->cfg.vgId, ver, terrstr());
|
||||||
if (code != sizeof(SWalCkHead)) {
|
return -1;
|
||||||
if (code < 0)
|
|
||||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
|
||||||
else {
|
|
||||||
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
|
|
||||||
ASSERT(0);
|
|
||||||
}
|
}
|
||||||
return -1;
|
seeked = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
code = walValidHeadCksum(pRead->pHead);
|
while (1) {
|
||||||
if (code != 0) {
|
contLen = taosReadFile(pRead->pLogFile, pRead->pHead, sizeof(SWalCkHead));
|
||||||
|
if (contLen == sizeof(SWalCkHead)) {
|
||||||
|
break;
|
||||||
|
} else if (contLen == 0 && !seeked) {
|
||||||
|
walReadSeekVerImpl(pRead, ver);
|
||||||
|
seeked = true;
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
if (contLen < 0) {
|
||||||
|
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||||
|
} else {
|
||||||
|
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
|
||||||
|
}
|
||||||
|
ASSERT(0);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
contLen = walValidHeadCksum(pRead->pHead);
|
||||||
|
if (contLen != 0) {
|
||||||
wError("vgId:%d, unexpected wal log index:%" PRId64 ", since head checksum not passed", pRead->pWal->cfg.vgId, ver);
|
wError("vgId:%d, unexpected wal log index:%" PRId64 ", since head checksum not passed", pRead->pWal->cfg.vgId, ver);
|
||||||
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
|
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -430,9 +463,9 @@ int32_t walReadVer(SWalReader *pRead, int64_t ver) {
|
||||||
pRead->capacity = pRead->pHead->head.bodyLen;
|
pRead->capacity = pRead->pHead->head.bodyLen;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((code = taosReadFile(pRead->pLogFile, pRead->pHead->head.body, pRead->pHead->head.bodyLen)) !=
|
if ((contLen = taosReadFile(pRead->pLogFile, pRead->pHead->head.body, pRead->pHead->head.bodyLen)) !=
|
||||||
pRead->pHead->head.bodyLen) {
|
pRead->pHead->head.bodyLen) {
|
||||||
if (code < 0)
|
if (contLen < 0)
|
||||||
terrno = TAOS_SYSTEM_ERROR(errno);
|
terrno = TAOS_SYSTEM_ERROR(errno);
|
||||||
else {
|
else {
|
||||||
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
|
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
|
||||||
|
@ -449,8 +482,8 @@ int32_t walReadVer(SWalReader *pRead, int64_t ver) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
code = walValidBodyCksum(pRead->pHead);
|
contLen = walValidBodyCksum(pRead->pHead);
|
||||||
if (code != 0) {
|
if (contLen != 0) {
|
||||||
wError("vgId:%d, unexpected wal log index:%" PRId64 ", since body checksum not passed", pRead->pWal->cfg.vgId, ver);
|
wError("vgId:%d, unexpected wal log index:%" PRId64 ", since body checksum not passed", pRead->pWal->cfg.vgId, ver);
|
||||||
pRead->curInvalid = 1;
|
pRead->curInvalid = 1;
|
||||||
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
|
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
|
||||||
|
|
|
@ -745,14 +745,14 @@ cmp_end:
|
||||||
void taosSetAllDebugFlag(int32_t flag) {
|
void taosSetAllDebugFlag(int32_t flag) {
|
||||||
if (flag <= 0) return;
|
if (flag <= 0) return;
|
||||||
|
|
||||||
|
uDebugFlag = flag;
|
||||||
|
rpcDebugFlag = flag;
|
||||||
|
jniDebugFlag = flag;
|
||||||
|
qDebugFlag = flag;
|
||||||
|
cDebugFlag = flag;
|
||||||
dDebugFlag = flag;
|
dDebugFlag = flag;
|
||||||
vDebugFlag = flag;
|
vDebugFlag = flag;
|
||||||
mDebugFlag = flag;
|
mDebugFlag = flag;
|
||||||
cDebugFlag = flag;
|
|
||||||
jniDebugFlag = flag;
|
|
||||||
uDebugFlag = flag;
|
|
||||||
rpcDebugFlag = flag;
|
|
||||||
qDebugFlag = flag;
|
|
||||||
wDebugFlag = flag;
|
wDebugFlag = flag;
|
||||||
sDebugFlag = flag;
|
sDebugFlag = flag;
|
||||||
tsdbDebugFlag = flag;
|
tsdbDebugFlag = flag;
|
||||||
|
@ -761,6 +761,5 @@ void taosSetAllDebugFlag(int32_t flag) {
|
||||||
udfDebugFlag = flag;
|
udfDebugFlag = flag;
|
||||||
smaDebugFlag = flag;
|
smaDebugFlag = flag;
|
||||||
idxDebugFlag = flag;
|
idxDebugFlag = flag;
|
||||||
|
|
||||||
uInfo("all debug flag are set to %d", flag);
|
uInfo("all debug flag are set to %d", flag);
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,9 +58,10 @@ class ConfigureyCluster:
|
||||||
self.dnodes.append(dnode)
|
self.dnodes.append(dnode)
|
||||||
return self.dnodes
|
return self.dnodes
|
||||||
|
|
||||||
def create_dnode(self,conn):
|
def create_dnode(self,conn,dnodeNum):
|
||||||
tdSql.init(conn.cursor())
|
tdSql.init(conn.cursor())
|
||||||
for dnode in self.dnodes[1:]:
|
dnodeNum=int(dnodeNum)
|
||||||
|
for dnode in self.dnodes[1:dnodeNum]:
|
||||||
# print(dnode.cfgDict)
|
# print(dnode.cfgDict)
|
||||||
dnode_id = dnode.cfgDict["fqdn"] + ":" +dnode.cfgDict["serverPort"]
|
dnode_id = dnode.cfgDict["fqdn"] + ":" +dnode.cfgDict["serverPort"]
|
||||||
tdSql.execute(" create dnode '%s';"%dnode_id)
|
tdSql.execute(" create dnode '%s';"%dnode_id)
|
||||||
|
|
|
@ -98,7 +98,7 @@
|
||||||
./test.sh -f tsim/stream/distributeInterval0.sim
|
./test.sh -f tsim/stream/distributeInterval0.sim
|
||||||
# ./test.sh -f tsim/stream/distributeIntervalRetrive0.sim
|
# ./test.sh -f tsim/stream/distributeIntervalRetrive0.sim
|
||||||
# ./test.sh -f tsim/stream/distributesession0.sim
|
# ./test.sh -f tsim/stream/distributesession0.sim
|
||||||
# ./test.sh -f tsim/stream/session0.sim
|
./test.sh -f tsim/stream/session0.sim
|
||||||
./test.sh -f tsim/stream/session1.sim
|
./test.sh -f tsim/stream/session1.sim
|
||||||
# ./test.sh -f tsim/stream/state0.sim
|
# ./test.sh -f tsim/stream/state0.sim
|
||||||
./test.sh -f tsim/stream/triggerInterval0.sim
|
./test.sh -f tsim/stream/triggerInterval0.sim
|
||||||
|
|
|
@ -122,28 +122,29 @@ echo "secondEp ${HOSTNAME}:7200" >> $TAOS_CFG
|
||||||
echo "fqdn ${HOSTNAME}" >> $TAOS_CFG
|
echo "fqdn ${HOSTNAME}" >> $TAOS_CFG
|
||||||
echo "serverPort ${NODE}" >> $TAOS_CFG
|
echo "serverPort ${NODE}" >> $TAOS_CFG
|
||||||
echo "supportVnodes 1024" >> $TAOS_CFG
|
echo "supportVnodes 1024" >> $TAOS_CFG
|
||||||
|
echo "statusInterval 1" >> $TAOS_CFG
|
||||||
echo "dataDir $DATA_DIR" >> $TAOS_CFG
|
echo "dataDir $DATA_DIR" >> $TAOS_CFG
|
||||||
echo "logDir $LOG_DIR" >> $TAOS_CFG
|
echo "logDir $LOG_DIR" >> $TAOS_CFG
|
||||||
echo "debugFlag 0" >> $TAOS_CFG
|
echo "debugFlag 0" >> $TAOS_CFG
|
||||||
echo "mDebugFlag 143" >> $TAOS_CFG
|
|
||||||
echo "dDebugFlag 143" >> $TAOS_CFG
|
|
||||||
echo "vDebugFlag 143" >> $TAOS_CFG
|
|
||||||
echo "tqDebugFlag 143" >> $TAOS_CFG
|
|
||||||
echo "tsdbDebugFlag 143" >> $TAOS_CFG
|
|
||||||
echo "cDebugFlag 143" >> $TAOS_CFG
|
|
||||||
echo "jniDebugFlag 143" >> $TAOS_CFG
|
|
||||||
echo "qDebugFlag 143" >> $TAOS_CFG
|
|
||||||
echo "rpcDebugFlag 143" >> $TAOS_CFG
|
|
||||||
echo "sDebugFlag 143" >> $TAOS_CFG
|
|
||||||
echo "wDebugFlag 143" >> $TAOS_CFG
|
|
||||||
echo "idxDebugFlag 143" >> $TAOS_CFG
|
|
||||||
echo "fsDebugFlag 143" >> $TAOS_CFG
|
|
||||||
echo "udfDebugFlag 143" >> $TAOS_CFG
|
|
||||||
echo "smaDebugFlag 143" >> $TAOS_CFG
|
|
||||||
echo "tmrDebugFlag 131" >> $TAOS_CFG
|
echo "tmrDebugFlag 131" >> $TAOS_CFG
|
||||||
echo "uDebugFlag 131" >> $TAOS_CFG
|
echo "uDebugFlag 131" >> $TAOS_CFG
|
||||||
|
echo "rpcDebugFlag 131" >> $TAOS_CFG
|
||||||
|
echo "jniDebugFlag 143" >> $TAOS_CFG
|
||||||
|
echo "qDebugFlag 143" >> $TAOS_CFG
|
||||||
|
echo "cDebugFlag 143" >> $TAOS_CFG
|
||||||
|
echo "dDebugFlag 143" >> $TAOS_CFG
|
||||||
|
echo "vDebugFlag 143" >> $TAOS_CFG
|
||||||
|
echo "mDebugFlag 143" >> $TAOS_CFG
|
||||||
|
echo "wDebugFlag 143" >> $TAOS_CFG
|
||||||
|
echo "sDebugFlag 143" >> $TAOS_CFG
|
||||||
|
echo "tsdbDebugFlag 143" >> $TAOS_CFG
|
||||||
|
echo "tqDebugFlag 143" >> $TAOS_CFG
|
||||||
|
echo "fsDebugFlag 143" >> $TAOS_CFG
|
||||||
|
echo "idxDebugFlag 143" >> $TAOS_CFG
|
||||||
|
echo "udfDebugFlag 143" >> $TAOS_CFG
|
||||||
|
echo "smaDebugFlag 143" >> $TAOS_CFG
|
||||||
|
echo "idxDebugFlag 143" >> $TAOS_CFG
|
||||||
echo "numOfLogLines 20000000" >> $TAOS_CFG
|
echo "numOfLogLines 20000000" >> $TAOS_CFG
|
||||||
echo "statusInterval 1" >> $TAOS_CFG
|
|
||||||
echo "asyncLog 0" >> $TAOS_CFG
|
echo "asyncLog 0" >> $TAOS_CFG
|
||||||
echo "locale en_US.UTF-8" >> $TAOS_CFG
|
echo "locale en_US.UTF-8" >> $TAOS_CFG
|
||||||
echo "telemetryReporting 0" >> $TAOS_CFG
|
echo "telemetryReporting 0" >> $TAOS_CFG
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
|
|
||||||
system sh/cfg.sh -n dnode1 -c supportVnodes -v 0
|
#system sh/cfg.sh -n dnode1 -c supportVnodes -v 0
|
||||||
|
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
system sh/exec.sh -n dnode2 -s start
|
system sh/exec.sh -n dnode2 -s start
|
||||||
|
|
|
@ -48,7 +48,7 @@ sql insert into ct1 values(now+1s, 11, 2.1, 3.1)(now+2s, -12, -2.2, -3.2)(now+3s
|
||||||
|
|
||||||
print =============== step6: select data
|
print =============== step6: select data
|
||||||
sql select * from ct1
|
sql select * from ct1
|
||||||
#sql select * from stb
|
sql select * from stb
|
||||||
|
|
||||||
_OVER:
|
_OVER:
|
||||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
|
|
|
@ -47,7 +47,7 @@ sql insert into ct1 values(now+0s, 10, 2.0, 3.0)
|
||||||
sql insert into ct1 values(now+1s, 11, 2.1, 3.1)(now+2s, -12, -2.2, -3.2)(now+3s, -13, -2.3, -3.3)
|
sql insert into ct1 values(now+1s, 11, 2.1, 3.1)(now+2s, -12, -2.2, -3.2)(now+3s, -13, -2.3, -3.3)
|
||||||
|
|
||||||
print =============== step6: select data
|
print =============== step6: select data
|
||||||
#sql select * from ct1
|
sql select * from ct1
|
||||||
#sql select * from stb
|
#sql select * from stb
|
||||||
|
|
||||||
_OVER:
|
_OVER:
|
||||||
|
@ -58,7 +58,7 @@ print ----> start to check if there are ERRORS in vagrind log file for each dnod
|
||||||
system_content sh/checkValgrind.sh -n dnode1
|
system_content sh/checkValgrind.sh -n dnode1
|
||||||
|
|
||||||
print cmd return result ----> [ $system_content ]
|
print cmd return result ----> [ $system_content ]
|
||||||
if $system_content <= 0 then
|
if $system_content <= 2 then
|
||||||
return 0
|
return 0
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
|
|
@ -1,262 +0,0 @@
|
||||||
###################################################################
|
|
||||||
# Copyright (c) 2016 by TAOS Technologies, Inc.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# This file is proprietary and confidential to TAOS Technologies.
|
|
||||||
# No part of this file may be reproduced, stored, transmitted,
|
|
||||||
# disclosed or used in any form or by any means other than as
|
|
||||||
# expressly provided by the written permission from Jianhui Tao
|
|
||||||
#
|
|
||||||
###################################################################
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
import threading as thd
|
|
||||||
import multiprocessing as mp
|
|
||||||
from numpy.lib.function_base import insert
|
|
||||||
import taos
|
|
||||||
from taos import *
|
|
||||||
from util.log import *
|
|
||||||
from util.cases import *
|
|
||||||
from util.sql import *
|
|
||||||
import numpy as np
|
|
||||||
import datetime as dt
|
|
||||||
from datetime import datetime
|
|
||||||
from ctypes import *
|
|
||||||
import time
|
|
||||||
# constant define
|
|
||||||
WAITS = 5 # wait seconds
|
|
||||||
|
|
||||||
class TDTestCase:
|
|
||||||
#
|
|
||||||
# --------------- main frame -------------------
|
|
||||||
def caseDescription(self):
|
|
||||||
'''
|
|
||||||
limit and offset keyword function test cases;
|
|
||||||
case1: limit offset base function test
|
|
||||||
case2: offset return valid
|
|
||||||
'''
|
|
||||||
return
|
|
||||||
|
|
||||||
def getBuildPath(self):
|
|
||||||
selfPath = os.path.dirname(os.path.realpath(__file__))
|
|
||||||
|
|
||||||
if ("community" in selfPath):
|
|
||||||
projPath = selfPath[:selfPath.find("community")]
|
|
||||||
else:
|
|
||||||
projPath = selfPath[:selfPath.find("tests")]
|
|
||||||
|
|
||||||
for root, dirs, files in os.walk(projPath):
|
|
||||||
if ("taosd" in files or "taosd.exe" 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
|
|
||||||
|
|
||||||
# init
|
|
||||||
def init(self, conn, logSql):
|
|
||||||
tdLog.debug("start to execute %s" % __file__)
|
|
||||||
tdSql.init(conn.cursor())
|
|
||||||
# tdSql.prepare()
|
|
||||||
# self.create_tables();
|
|
||||||
self.ts = 1500000000000
|
|
||||||
|
|
||||||
# stop
|
|
||||||
def stop(self):
|
|
||||||
tdSql.close()
|
|
||||||
tdLog.success("%s successfully executed" % __file__)
|
|
||||||
|
|
||||||
|
|
||||||
# --------------- case -------------------
|
|
||||||
|
|
||||||
|
|
||||||
def newcon(self,host,cfg):
|
|
||||||
user = "root"
|
|
||||||
password = "taosdata"
|
|
||||||
port =6030
|
|
||||||
con=taos.connect(host=host, user=user, password=password, config=cfg ,port=port)
|
|
||||||
print(con)
|
|
||||||
return con
|
|
||||||
|
|
||||||
def test_stmt_set_tbname_tag(self,conn):
|
|
||||||
dbname = "stmt_tag"
|
|
||||||
|
|
||||||
try:
|
|
||||||
conn.execute("drop database if exists %s" % dbname)
|
|
||||||
conn.execute("create database if not exists %s PRECISION 'us' " % dbname)
|
|
||||||
conn.select_db(dbname)
|
|
||||||
conn.execute("create table if not exists log(ts timestamp, bo bool, nil tinyint, ti tinyint, si smallint, ii int,\
|
|
||||||
bi bigint, tu tinyint unsigned, su smallint unsigned, iu int unsigned, bu bigint unsigned, \
|
|
||||||
ff float, dd double, bb binary(100), nn nchar(100), tt timestamp , vc varchar(100)) tags (t1 timestamp, t2 bool,\
|
|
||||||
t3 tinyint, t4 tinyint, t5 smallint, t6 int, t7 bigint, t8 tinyint unsigned, t9 smallint unsigned, \
|
|
||||||
t10 int unsigned, t11 bigint unsigned, t12 float, t13 double, t14 binary(100), t15 nchar(100), t16 timestamp)")
|
|
||||||
|
|
||||||
stmt = conn.statement("insert into ? using log tags (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) \
|
|
||||||
values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)")
|
|
||||||
tags = new_bind_params(16)
|
|
||||||
tags[0].timestamp(1626861392589123, PrecisionEnum.Microseconds)
|
|
||||||
tags[1].bool(True)
|
|
||||||
tags[2].bool(False)
|
|
||||||
tags[3].tinyint(2)
|
|
||||||
tags[4].smallint(3)
|
|
||||||
tags[5].int(4)
|
|
||||||
tags[6].bigint(5)
|
|
||||||
tags[7].tinyint_unsigned(6)
|
|
||||||
tags[8].smallint_unsigned(7)
|
|
||||||
tags[9].int_unsigned(8)
|
|
||||||
tags[10].bigint_unsigned(9)
|
|
||||||
tags[11].float(10.1)
|
|
||||||
tags[12].double(10.11)
|
|
||||||
tags[13].binary("hello")
|
|
||||||
tags[14].nchar("stmt")
|
|
||||||
tags[15].timestamp(1626861392589, PrecisionEnum.Milliseconds)
|
|
||||||
stmt.set_tbname_tags("tb1", tags)
|
|
||||||
params = new_multi_binds(17)
|
|
||||||
params[0].timestamp((1626861392589111, 1626861392590111, 1626861392591111))
|
|
||||||
params[1].bool((True, None, False))
|
|
||||||
params[2].tinyint([-128, -128, None]) # -128 is tinyint null
|
|
||||||
params[3].tinyint([0, 127, None])
|
|
||||||
params[4].smallint([3, None, 2])
|
|
||||||
params[5].int([3, 4, None])
|
|
||||||
params[6].bigint([3, 4, None])
|
|
||||||
params[7].tinyint_unsigned([3, 4, None])
|
|
||||||
params[8].smallint_unsigned([3, 4, None])
|
|
||||||
params[9].int_unsigned([3, 4, None])
|
|
||||||
params[10].bigint_unsigned([3, 4, 5])
|
|
||||||
params[11].float([3, None, 1])
|
|
||||||
params[12].double([3, None, 1.2])
|
|
||||||
params[13].binary(["abc", "dddafadfadfadfadfa", None])
|
|
||||||
params[14].nchar(["涛思数据", None, "a long string with 中文字符"])
|
|
||||||
params[15].timestamp([None, None, 1626861392591])
|
|
||||||
params[16].binary(["涛思数据16", None, "a long string with 中文-字符"])
|
|
||||||
|
|
||||||
stmt.bind_param_batch(params)
|
|
||||||
stmt.execute()
|
|
||||||
|
|
||||||
assert stmt.affected_rows == 3
|
|
||||||
|
|
||||||
#query all
|
|
||||||
querystmt1=conn.statement("select * from log where bu < ?")
|
|
||||||
queryparam1=new_bind_params(1)
|
|
||||||
print(type(queryparam1))
|
|
||||||
queryparam1[0].int(10)
|
|
||||||
querystmt1.bind_param(queryparam1)
|
|
||||||
querystmt1.execute()
|
|
||||||
result1=querystmt1.use_result()
|
|
||||||
rows1=result1.fetch_all()
|
|
||||||
print(rows1[0])
|
|
||||||
print(rows1[1])
|
|
||||||
print(rows1[2])
|
|
||||||
assert str(rows1[0][0]) == "2021-07-21 17:56:32.589111"
|
|
||||||
assert rows1[0][10] == 3
|
|
||||||
assert rows1[1][10] == 4
|
|
||||||
|
|
||||||
#query: Numeric Functions
|
|
||||||
querystmt2=conn.statement("select abs(?) from log where bu < ?")
|
|
||||||
queryparam2=new_bind_params(2)
|
|
||||||
print(type(queryparam2))
|
|
||||||
queryparam2[0].int(5)
|
|
||||||
queryparam2[1].int(5)
|
|
||||||
querystmt2.bind_param(queryparam2)
|
|
||||||
querystmt2.execute()
|
|
||||||
result2=querystmt2.use_result()
|
|
||||||
rows2=result2.fetch_all()
|
|
||||||
print("2",rows2)
|
|
||||||
assert rows2[0][0] == 5
|
|
||||||
assert rows2[1][0] == 5
|
|
||||||
|
|
||||||
|
|
||||||
#query: Numeric Functions and escapes
|
|
||||||
|
|
||||||
querystmt3=conn.statement("select abs(?) from log where nn= 'a? long string with 中文字符' ")
|
|
||||||
queryparam3=new_bind_params(1)
|
|
||||||
print(type(queryparam3))
|
|
||||||
queryparam3[0].int(5)
|
|
||||||
querystmt3.bind_param(queryparam3)
|
|
||||||
querystmt3.execute()
|
|
||||||
result3=querystmt3.use_result()
|
|
||||||
rows3=result3.fetch_all()
|
|
||||||
print("3",rows3)
|
|
||||||
assert rows3 == []
|
|
||||||
|
|
||||||
#query: string Functions
|
|
||||||
|
|
||||||
querystmt9=conn.statement("select CHAR_LENGTH(?) from log ")
|
|
||||||
queryparam9=new_bind_params(1)
|
|
||||||
print(type(queryparam9))
|
|
||||||
queryparam9[0].binary('中文字符')
|
|
||||||
querystmt9.bind_param(queryparam9)
|
|
||||||
querystmt9.execute()
|
|
||||||
result9=querystmt9.use_result()
|
|
||||||
rows9=result9.fetch_all()
|
|
||||||
print("9",rows9)
|
|
||||||
assert rows9[0][0] == 12, 'fourth case is failed'
|
|
||||||
assert rows9[1][0] == 12, 'fourth case is failed'
|
|
||||||
|
|
||||||
#query: conversion Functions
|
|
||||||
|
|
||||||
querystmt4=conn.statement("select cast( ? as bigint) from log ")
|
|
||||||
queryparam4=new_bind_params(1)
|
|
||||||
print(type(queryparam4))
|
|
||||||
queryparam4[0].binary('1232a')
|
|
||||||
querystmt4.bind_param(queryparam4)
|
|
||||||
querystmt4.execute()
|
|
||||||
result4=querystmt4.use_result()
|
|
||||||
rows4=result4.fetch_all()
|
|
||||||
print("5",rows4)
|
|
||||||
assert rows4[0][0] == 1232
|
|
||||||
assert rows4[1][0] == 1232
|
|
||||||
|
|
||||||
querystmt4=conn.statement("select cast( ? as binary(10)) from log ")
|
|
||||||
queryparam4=new_bind_params(1)
|
|
||||||
print(type(queryparam4))
|
|
||||||
queryparam4[0].int(123)
|
|
||||||
querystmt4.bind_param(queryparam4)
|
|
||||||
querystmt4.execute()
|
|
||||||
result4=querystmt4.use_result()
|
|
||||||
rows4=result4.fetch_all()
|
|
||||||
print("6",rows4)
|
|
||||||
assert rows4[0][0] == '123'
|
|
||||||
assert rows4[1][0] == '123'
|
|
||||||
|
|
||||||
# #query: datatime Functions
|
|
||||||
|
|
||||||
# querystmt4=conn.statement(" select timediff('2021-07-21 17:56:32.590111',?,1s) from log ")
|
|
||||||
# queryparam4=new_bind_params(1)
|
|
||||||
# print(type(queryparam4))
|
|
||||||
# queryparam4[0].timestamp(1626861392591111)
|
|
||||||
# querystmt4.bind_param(queryparam4)
|
|
||||||
# querystmt4.execute()
|
|
||||||
# result4=querystmt4.use_result()
|
|
||||||
# rows4=result4.fetch_all()
|
|
||||||
# print("7",rows4)
|
|
||||||
# assert rows4[0][0] == 1, 'seventh case is failed'
|
|
||||||
# assert rows4[1][0] == 1, 'seventh case is failed'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# conn.execute("drop database if exists %s" % dbname)
|
|
||||||
conn.close()
|
|
||||||
|
|
||||||
except Exception as err:
|
|
||||||
# conn.execute("drop database if exists %s" % dbname)
|
|
||||||
conn.close()
|
|
||||||
raise err
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
buildPath = self.getBuildPath()
|
|
||||||
config = buildPath+ "../sim/dnode1/cfg/"
|
|
||||||
host="localhost"
|
|
||||||
connectstmt=self.newcon(host,config)
|
|
||||||
self.test_stmt_set_tbname_tag(connectstmt)
|
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
# add case with filename
|
|
||||||
#
|
|
||||||
tdCases.addWindows(__file__, TDTestCase())
|
|
||||||
tdCases.addLinux(__file__, TDTestCase())
|
|
|
@ -278,22 +278,7 @@ class TDTestCase:
|
||||||
tdSql.checkData(0,0,rowsPerSTable)
|
tdSql.checkData(0,0,rowsPerSTable)
|
||||||
return
|
return
|
||||||
|
|
||||||
# test case1 base
|
# test case : Switch back and forth among the three queryPolicy(1\2\3)
|
||||||
def test_case1(self):
|
|
||||||
#stableCount=threadNumbersCtb
|
|
||||||
parameterDict = {'vgroups': 1, \
|
|
||||||
'threadNumbersCtb': 5, \
|
|
||||||
'threadNumbersIda': 5, \
|
|
||||||
'stableCount': 5, \
|
|
||||||
'tablesPerStb': 50, \
|
|
||||||
'rowsPerTable': 10, \
|
|
||||||
'dbname': 'db', \
|
|
||||||
'stbname': 'stb', \
|
|
||||||
'host': 'localhost', \
|
|
||||||
'startTs': 1640966400000} # 2022-01-01 00:00:00.000
|
|
||||||
|
|
||||||
tdLog.debug("-----create database and muti-thread create tables test------- ")
|
|
||||||
|
|
||||||
def test_case1(self):
|
def test_case1(self):
|
||||||
self.taosBenchCreate("127.0.0.1","no","db1", "stb1", 1, 2, 1*10)
|
self.taosBenchCreate("127.0.0.1","no","db1", "stb1", 1, 2, 1*10)
|
||||||
tdSql.execute("use db1;")
|
tdSql.execute("use db1;")
|
||||||
|
@ -407,6 +392,7 @@ class TDTestCase:
|
||||||
tdSql.query("select c0,c1 from stb11_1 where (c0>1000) union all select c0,c1 from stb11_1 where c0>2000;")
|
tdSql.query("select c0,c1 from stb11_1 where (c0>1000) union all select c0,c1 from stb11_1 where c0>2000;")
|
||||||
assert unionallQnode==tdSql.queryResult
|
assert unionallQnode==tdSql.queryResult
|
||||||
|
|
||||||
|
# test case : queryPolicy = 2
|
||||||
def test_case2(self):
|
def test_case2(self):
|
||||||
self.taosBenchCreate("127.0.0.1","no","db1", "stb1", 10, 2, 1*10)
|
self.taosBenchCreate("127.0.0.1","no","db1", "stb1", 10, 2, 1*10)
|
||||||
tdSql.query("show qnodes")
|
tdSql.query("show qnodes")
|
||||||
|
@ -438,8 +424,9 @@ class TDTestCase:
|
||||||
tdSql.query("select max(c1) from stb10_0;")
|
tdSql.query("select max(c1) from stb10_0;")
|
||||||
tdSql.query("select min(c1) from stb11_0;")
|
tdSql.query("select min(c1) from stb11_0;")
|
||||||
|
|
||||||
def test_case3(self):
|
# test case : queryPolicy = 3
|
||||||
|
|
||||||
|
def test_case3(self):
|
||||||
tdSql.execute('alter local "queryPolicy" "3"')
|
tdSql.execute('alter local "queryPolicy" "3"')
|
||||||
tdLog.debug("create qnode on dnode 1")
|
tdLog.debug("create qnode on dnode 1")
|
||||||
tdSql.execute("create qnode on dnode 1")
|
tdSql.execute("create qnode on dnode 1")
|
||||||
|
@ -472,10 +459,16 @@ class TDTestCase:
|
||||||
# run case
|
# run case
|
||||||
def run(self):
|
def run(self):
|
||||||
# test qnode
|
# test qnode
|
||||||
|
tdLog.debug(" test_case1 ............ [start]")
|
||||||
self.test_case1()
|
self.test_case1()
|
||||||
|
tdLog.debug(" test_case1 ............ [OK]")
|
||||||
|
tdLog.debug(" test_case2 ............ [start]")
|
||||||
self.test_case2()
|
self.test_case2()
|
||||||
|
tdLog.debug(" test_case2 ............ [OK]")
|
||||||
|
tdLog.debug(" test_case3 ............ [start]")
|
||||||
self.test_case3()
|
self.test_case3()
|
||||||
|
tdLog.debug(" test_case3 ............ [OK]")
|
||||||
|
|
||||||
# tdLog.debug(" LIMIT test_case3 ............ [OK]")
|
# tdLog.debug(" LIMIT test_case3 ............ [OK]")
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
import taos
|
||||||
|
import sys
|
||||||
|
import datetime
|
||||||
|
import inspect
|
||||||
|
|
||||||
|
from util.log import *
|
||||||
|
from util.sql import *
|
||||||
|
from util.cases import *
|
||||||
|
|
||||||
|
class TDTestCase:
|
||||||
|
|
||||||
|
def init(self, conn, logSql):
|
||||||
|
tdLog.debug(f"start to excute {__file__}")
|
||||||
|
tdSql.init(conn.cursor(), True)
|
||||||
|
|
||||||
|
def prepareData(self):
|
||||||
|
database="db_tsbs"
|
||||||
|
ts=1451606400000
|
||||||
|
tdSql.execute(f"create database {database};")
|
||||||
|
tdSql.execute(f"use {database} ")
|
||||||
|
tdSql.execute('''
|
||||||
|
create table readings (ts timestamp,latitude double,longitude double,elevation double,velocity double,heading double,grade double,fuel_consumption double,load_capacity double,fuel_capacity double,nominal_fuel_consumption double) tags (name binary(30),fleet binary(30),driver binary(30),model binary(30),device_version binary(30));
|
||||||
|
''')
|
||||||
|
tdSql.execute('''
|
||||||
|
create table diagnostics (ts timestamp,fuel_state double,current_load double,status bigint,load_capacity double,fuel_capacity double,nominal_fuel_consumption double) tags (name binary(30),fleet binary(30),driver binary(30),model binary(30),device_version binary(30)) ;
|
||||||
|
''')
|
||||||
|
|
||||||
|
for i in range(10):
|
||||||
|
tdSql.execute(f"create table rct{i} using readings (name,fleet,driver,model,device_version) tags ('truck_{i}','South{i}','Trish{i}','H-{i}','v2.3')")
|
||||||
|
tdSql.execute(f"create table dct{i} using diagnostics (name,fleet,driver,model,device_version) tags ('truck_{i}','South{i}','Trish{i}','H-{i}','v2.3')")
|
||||||
|
for j in range(10):
|
||||||
|
for i in range(10):
|
||||||
|
tdSql.execute(
|
||||||
|
f"insert into rct{j} values ( {ts+i*10000}, {80+i}, {90+i}, {85+i}, {30+i*10}, {1.2*i}, {221+i*2}, {20+i*0.2}, {1500+i*20}, {150+i*2},{5+i} )"
|
||||||
|
)
|
||||||
|
tdSql.execute(
|
||||||
|
f"insert into dct{j} values ( {ts+i*10000}, {1+i*0.1},{1400+i*15}, {1+i},{1500+i*20}, {150+i*2},{5+i} )"
|
||||||
|
)
|
||||||
|
|
||||||
|
# def check_avg(self ,origin_query , check_query):
|
||||||
|
# avg_result = tdSql.getResult(origin_query)
|
||||||
|
# origin_result = tdSql.getResult(check_query)
|
||||||
|
|
||||||
|
# check_status = True
|
||||||
|
# for row_index , row in enumerate(avg_result):
|
||||||
|
# for col_index , elem in enumerate(row):
|
||||||
|
# if avg_result[row_index][col_index] != origin_result[row_index][col_index]:
|
||||||
|
# check_status = False
|
||||||
|
# if not check_status:
|
||||||
|
# tdLog.notice("avg function value has not as expected , sql is \"%s\" "%origin_query )
|
||||||
|
# sys.exit(1)
|
||||||
|
# else:
|
||||||
|
# tdLog.info("avg value check pass , it work as expected ,sql is \"%s\" "%check_query )
|
||||||
|
|
||||||
|
|
||||||
|
def tsbsIotQuery(self):
|
||||||
|
tdSql.execute("use db_tsbs")
|
||||||
|
tdSql.query(" SELECT avg(velocity) as mean_velocity ,name,driver,fleet FROM readings WHERE ts > 1451606400000 AND ts <= 1451606460000 partition BY name,driver,fleet interval(10m); ")
|
||||||
|
tdSql.checkRows(1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def run(self): # sourcery skip: extract-duplicate-method, remove-redundant-fstring
|
||||||
|
tdLog.printNoPrefix("==========step1:create database and table,insert data ==============")
|
||||||
|
self.tsbsIotQuery()
|
||||||
|
self.tsbsIotQuery()
|
||||||
|
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
tdSql.close()
|
||||||
|
tdLog.success(f"{__file__} successfully executed")
|
||||||
|
|
||||||
|
tdCases.addLinux(__file__, TDTestCase())
|
||||||
|
tdCases.addWindows(__file__, TDTestCase())
|
|
@ -124,9 +124,9 @@ class TDTestCase:
|
||||||
tdSql.query('show databases;')
|
tdSql.query('show databases;')
|
||||||
tdSql.checkData(2,5,'no_strict')
|
tdSql.checkData(2,5,'no_strict')
|
||||||
tdSql.error('alter database db strict 0')
|
tdSql.error('alter database db strict 0')
|
||||||
tdSql.execute('alter database db strict 1')
|
# tdSql.execute('alter database db strict 1')
|
||||||
tdSql.query('show databases;')
|
# tdSql.query('show databases;')
|
||||||
tdSql.checkData(2,5,'strict')
|
# tdSql.checkData(2,5,'strict')
|
||||||
|
|
||||||
def getConnection(self, dnode):
|
def getConnection(self, dnode):
|
||||||
host = dnode.cfgDict["fqdn"]
|
host = dnode.cfgDict["fqdn"]
|
||||||
|
|
|
@ -0,0 +1,229 @@
|
||||||
|
from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
|
||||||
|
from numpy import row_stack
|
||||||
|
import taos
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import os
|
||||||
|
|
||||||
|
from util.log import *
|
||||||
|
from util.sql import *
|
||||||
|
from util.cases import *
|
||||||
|
from util.dnodes import TDDnodes
|
||||||
|
from util.dnodes import TDDnode
|
||||||
|
from util.cluster import *
|
||||||
|
sys.path.append("./6-cluster")
|
||||||
|
from clusterCommonCreate import *
|
||||||
|
from clusterCommonCheck import clusterComCheck
|
||||||
|
|
||||||
|
import time
|
||||||
|
import socket
|
||||||
|
import subprocess
|
||||||
|
from multiprocessing import Process
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
import inspect
|
||||||
|
import ctypes
|
||||||
|
|
||||||
|
class TDTestCase:
|
||||||
|
|
||||||
|
def init(self,conn ,logSql):
|
||||||
|
tdLog.debug(f"start to excute {__file__}")
|
||||||
|
self.TDDnodes = None
|
||||||
|
tdSql.init(conn.cursor())
|
||||||
|
self.host = socket.gethostname()
|
||||||
|
|
||||||
|
|
||||||
|
def getBuildPath(self):
|
||||||
|
selfPath = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|
||||||
|
if ("community" in selfPath):
|
||||||
|
projPath = selfPath[:selfPath.find("community")]
|
||||||
|
else:
|
||||||
|
projPath = selfPath[:selfPath.find("tests")]
|
||||||
|
|
||||||
|
for root, dirs, files in os.walk(projPath):
|
||||||
|
if ("taosd" in files):
|
||||||
|
rootRealPath = os.path.dirname(os.path.realpath(root))
|
||||||
|
if ("packaging" not in rootRealPath):
|
||||||
|
buildPath = root[:len(root) - len("/build/bin")]
|
||||||
|
break
|
||||||
|
return buildPath
|
||||||
|
|
||||||
|
def _async_raise(self, tid, exctype):
|
||||||
|
"""raises the exception, performs cleanup if needed"""
|
||||||
|
if not inspect.isclass(exctype):
|
||||||
|
exctype = type(exctype)
|
||||||
|
res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
|
||||||
|
if res == 0:
|
||||||
|
raise ValueError("invalid thread id")
|
||||||
|
elif res != 1:
|
||||||
|
# """if it returns a number greater than one, you're in trouble,
|
||||||
|
# and you should call it again with exc=NULL to revert the effect"""
|
||||||
|
ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
|
||||||
|
raise SystemError("PyThreadState_SetAsyncExc failed")
|
||||||
|
|
||||||
|
def stopThread(self,thread):
|
||||||
|
self._async_raise(thread.ident, SystemExit)
|
||||||
|
|
||||||
|
|
||||||
|
def insertData(self,countstart,countstop):
|
||||||
|
# fisrt add data : db\stable\childtable\general table
|
||||||
|
|
||||||
|
for couti in range(countstart,countstop):
|
||||||
|
tdLog.debug("drop database if exists db%d" %couti)
|
||||||
|
tdSql.execute("drop database if exists db%d" %couti)
|
||||||
|
print("create database if not exists db%d replica 1 duration 300" %couti)
|
||||||
|
tdSql.execute("create database if not exists db%d replica 1 duration 300" %couti)
|
||||||
|
tdSql.execute("use db%d" %couti)
|
||||||
|
tdSql.execute(
|
||||||
|
'''create table stb1
|
||||||
|
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
|
||||||
|
tags (t1 int)
|
||||||
|
'''
|
||||||
|
)
|
||||||
|
tdSql.execute(
|
||||||
|
'''
|
||||||
|
create table t1
|
||||||
|
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
|
||||||
|
'''
|
||||||
|
)
|
||||||
|
for i in range(4):
|
||||||
|
tdSql.execute(f'create table ct{i+1} using stb1 tags ( {i+1} )')
|
||||||
|
|
||||||
|
|
||||||
|
def fiveDnodeThreeMnode(self,dnodeNumbers,mnodeNums,restartNumbers,stopRole):
|
||||||
|
tdLog.printNoPrefix("======== test case 1: ")
|
||||||
|
paraDict = {'dbName': 'db0_0',
|
||||||
|
'dropFlag': 1,
|
||||||
|
'event': '',
|
||||||
|
'vgroups': 4,
|
||||||
|
'replica': 1,
|
||||||
|
'stbName': 'stb',
|
||||||
|
'stbNumbers': 2,
|
||||||
|
'colPrefix': 'c',
|
||||||
|
'tagPrefix': 't',
|
||||||
|
'colSchema': [{'type': 'INT', 'count':1}, {'type': 'binary', 'len':20, 'count':1}],
|
||||||
|
'tagSchema': [{'type': 'INT', 'count':1}, {'type': 'binary', 'len':20, 'count':1}],
|
||||||
|
'ctbPrefix': 'ctb',
|
||||||
|
'ctbNum': 200,
|
||||||
|
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
|
||||||
|
"rowsPerTbl": 1000,
|
||||||
|
"batchNum": 5000
|
||||||
|
}
|
||||||
|
hostname = socket.gethostname()
|
||||||
|
dnodeNumbers=int(dnodeNumbers)
|
||||||
|
mnodeNums=int(mnodeNums)
|
||||||
|
vnodeNumbers = int(dnodeNumbers-mnodeNums)
|
||||||
|
allctbNumbers=(paraDict['stbNumbers']*paraDict["ctbNum"])
|
||||||
|
rowsPerStb=paraDict["ctbNum"]*paraDict["rowsPerTbl"]
|
||||||
|
rowsall=rowsPerStb*paraDict['stbNumbers']
|
||||||
|
dbNumbers = 1
|
||||||
|
|
||||||
|
tdLog.info("first check dnode and mnode")
|
||||||
|
tdSql.query("show dnodes;")
|
||||||
|
tdSql.checkData(0,1,'%s:6030'%self.host)
|
||||||
|
tdSql.checkData(4,1,'%s:6430'%self.host)
|
||||||
|
clusterComCheck.checkDnodes(dnodeNumbers)
|
||||||
|
clusterComCheck.checkMnodeStatus(1)
|
||||||
|
|
||||||
|
# fisr add three mnodes;
|
||||||
|
tdLog.info("fisr add three mnodes and check mnode status")
|
||||||
|
tdSql.execute("create mnode on dnode 2")
|
||||||
|
clusterComCheck.checkMnodeStatus(2)
|
||||||
|
tdSql.execute("create mnode on dnode 3")
|
||||||
|
clusterComCheck.checkMnodeStatus(3)
|
||||||
|
|
||||||
|
# add some error operations and
|
||||||
|
tdLog.info("Confirm the status of the dnode again")
|
||||||
|
tdSql.error("create mnode on dnode 2")
|
||||||
|
tdSql.query("show dnodes;")
|
||||||
|
print(tdSql.queryResult)
|
||||||
|
clusterComCheck.checkDnodes(dnodeNumbers)
|
||||||
|
|
||||||
|
# create database and stable
|
||||||
|
clusterComCreate.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], paraDict["vgroups"],paraDict['replica'])
|
||||||
|
tdLog.info("Take turns stopping Mnodes ")
|
||||||
|
|
||||||
|
tdDnodes=cluster.dnodes
|
||||||
|
# dnode6=cluster.addDnode(6)
|
||||||
|
# tdDnodes.append(dnode6)
|
||||||
|
# tdDnodes = ClusterDnodes(tdDnodes)
|
||||||
|
stopcount =0
|
||||||
|
threads=[]
|
||||||
|
|
||||||
|
# create stable:stb_0
|
||||||
|
stableName= paraDict['stbName']
|
||||||
|
newTdSql=tdCom.newTdSql()
|
||||||
|
clusterComCreate.create_stables(newTdSql, paraDict["dbName"],stableName,paraDict['stbNumbers'])
|
||||||
|
#create child table:ctb_0
|
||||||
|
for i in range(paraDict['stbNumbers']):
|
||||||
|
stableName= '%s_%d'%(paraDict['stbName'],i)
|
||||||
|
newTdSql=tdCom.newTdSql()
|
||||||
|
clusterComCreate.create_ctable(newTdSql, paraDict["dbName"],stableName,stableName, paraDict['ctbNum'])
|
||||||
|
#insert date
|
||||||
|
for i in range(paraDict['stbNumbers']):
|
||||||
|
stableName= '%s_%d'%(paraDict['stbName'],i)
|
||||||
|
newTdSql=tdCom.newTdSql()
|
||||||
|
threads.append(threading.Thread(target=clusterComCreate.insert_data, args=(newTdSql, paraDict["dbName"],stableName,paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"],paraDict["startTs"])))
|
||||||
|
for tr in threads:
|
||||||
|
tr.start()
|
||||||
|
dnode6Port=int(6030+5*100)
|
||||||
|
tdSql.execute("create dnode '%s:%d'"%(hostname,dnode6Port))
|
||||||
|
clusterComCheck.checkDnodes(dnodeNumbers)
|
||||||
|
|
||||||
|
while stopcount < restartNumbers:
|
||||||
|
tdLog.info(" restart loop: %d"%stopcount )
|
||||||
|
if stopRole == "mnode":
|
||||||
|
for i in range(mnodeNums):
|
||||||
|
tdDnodes[i].stoptaosd()
|
||||||
|
# sleep(10)
|
||||||
|
tdDnodes[i].starttaosd()
|
||||||
|
# sleep(10)
|
||||||
|
elif stopRole == "vnode":
|
||||||
|
for i in range(vnodeNumbers):
|
||||||
|
tdDnodes[i+mnodeNums].stoptaosd()
|
||||||
|
# sleep(10)
|
||||||
|
tdDnodes[i+mnodeNums].starttaosd()
|
||||||
|
# sleep(10)
|
||||||
|
elif stopRole == "dnode":
|
||||||
|
for i in range(dnodeNumbers):
|
||||||
|
tdDnodes[i].stoptaosd()
|
||||||
|
# sleep(10)
|
||||||
|
tdDnodes[i].starttaosd()
|
||||||
|
# sleep(10)
|
||||||
|
|
||||||
|
# dnodeNumbers don't include database of schema
|
||||||
|
if clusterComCheck.checkDnodes(dnodeNumbers):
|
||||||
|
tdLog.info("123")
|
||||||
|
else:
|
||||||
|
print("456")
|
||||||
|
|
||||||
|
self.stopThread(threads)
|
||||||
|
tdLog.exit("one or more of dnodes failed to start ")
|
||||||
|
# self.check3mnode()
|
||||||
|
stopcount+=1
|
||||||
|
for tr in threads:
|
||||||
|
tr.join()
|
||||||
|
|
||||||
|
|
||||||
|
clusterComCheck.checkDnodes(dnodeNumbers)
|
||||||
|
clusterComCheck.checkDbRows(dbNumbers)
|
||||||
|
# clusterComCheck.checkDb(dbNumbers,1,paraDict["dbName"])
|
||||||
|
|
||||||
|
tdSql.execute("use %s" %(paraDict["dbName"]))
|
||||||
|
tdSql.query("show stables")
|
||||||
|
tdSql.checkRows(paraDict["stbNumbers"])
|
||||||
|
for i in range(paraDict['stbNumbers']):
|
||||||
|
stableName= '%s_%d'%(paraDict['stbName'],i)
|
||||||
|
tdSql.query("select * from %s"%stableName)
|
||||||
|
tdSql.checkRows(rowsPerStb)
|
||||||
|
def run(self):
|
||||||
|
# print(self.master_dnode.cfgDict)
|
||||||
|
self.fiveDnodeThreeMnode(dnodeNumbers=5,mnodeNums=3,restartNumbers=2,stopRole='dnode')
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
tdSql.close()
|
||||||
|
tdLog.success(f"{__file__} successfully executed")
|
||||||
|
|
||||||
|
tdCases.addLinux(__file__, TDTestCase())
|
||||||
|
tdCases.addWindows(__file__, TDTestCase())
|
|
@ -0,0 +1,223 @@
|
||||||
|
from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
|
||||||
|
from numpy import row_stack
|
||||||
|
import taos
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import os
|
||||||
|
|
||||||
|
from util.log import *
|
||||||
|
from util.sql import *
|
||||||
|
from util.cases import *
|
||||||
|
from util.dnodes import TDDnodes
|
||||||
|
from util.dnodes import TDDnode
|
||||||
|
from util.cluster import *
|
||||||
|
sys.path.append("./6-cluster")
|
||||||
|
from clusterCommonCreate import *
|
||||||
|
from clusterCommonCheck import clusterComCheck
|
||||||
|
|
||||||
|
import time
|
||||||
|
import socket
|
||||||
|
import subprocess
|
||||||
|
from multiprocessing import Process
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
import inspect
|
||||||
|
import ctypes
|
||||||
|
|
||||||
|
class TDTestCase:
|
||||||
|
|
||||||
|
def init(self,conn ,logSql):
|
||||||
|
tdLog.debug(f"start to excute {__file__}")
|
||||||
|
self.TDDnodes = None
|
||||||
|
tdSql.init(conn.cursor())
|
||||||
|
self.host = socket.gethostname()
|
||||||
|
|
||||||
|
|
||||||
|
def getBuildPath(self):
|
||||||
|
selfPath = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|
||||||
|
if ("community" in selfPath):
|
||||||
|
projPath = selfPath[:selfPath.find("community")]
|
||||||
|
else:
|
||||||
|
projPath = selfPath[:selfPath.find("tests")]
|
||||||
|
|
||||||
|
for root, dirs, files in os.walk(projPath):
|
||||||
|
if ("taosd" in files):
|
||||||
|
rootRealPath = os.path.dirname(os.path.realpath(root))
|
||||||
|
if ("packaging" not in rootRealPath):
|
||||||
|
buildPath = root[:len(root) - len("/build/bin")]
|
||||||
|
break
|
||||||
|
return buildPath
|
||||||
|
|
||||||
|
def _async_raise(self, tid, exctype):
|
||||||
|
"""raises the exception, performs cleanup if needed"""
|
||||||
|
if not inspect.isclass(exctype):
|
||||||
|
exctype = type(exctype)
|
||||||
|
res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
|
||||||
|
if res == 0:
|
||||||
|
raise ValueError("invalid thread id")
|
||||||
|
elif res != 1:
|
||||||
|
# """if it returns a number greater than one, you're in trouble,
|
||||||
|
# and you should call it again with exc=NULL to revert the effect"""
|
||||||
|
ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
|
||||||
|
raise SystemError("PyThreadState_SetAsyncExc failed")
|
||||||
|
|
||||||
|
def stopThread(self,thread):
|
||||||
|
self._async_raise(thread.ident, SystemExit)
|
||||||
|
|
||||||
|
|
||||||
|
def insertData(self,countstart,countstop):
|
||||||
|
# fisrt add data : db\stable\childtable\general table
|
||||||
|
|
||||||
|
for couti in range(countstart,countstop):
|
||||||
|
tdLog.debug("drop database if exists db%d" %couti)
|
||||||
|
tdSql.execute("drop database if exists db%d" %couti)
|
||||||
|
print("create database if not exists db%d replica 1 duration 300" %couti)
|
||||||
|
tdSql.execute("create database if not exists db%d replica 1 duration 300" %couti)
|
||||||
|
tdSql.execute("use db%d" %couti)
|
||||||
|
tdSql.execute(
|
||||||
|
'''create table stb1
|
||||||
|
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
|
||||||
|
tags (t1 int)
|
||||||
|
'''
|
||||||
|
)
|
||||||
|
tdSql.execute(
|
||||||
|
'''
|
||||||
|
create table t1
|
||||||
|
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
|
||||||
|
'''
|
||||||
|
)
|
||||||
|
for i in range(4):
|
||||||
|
tdSql.execute(f'create table ct{i+1} using stb1 tags ( {i+1} )')
|
||||||
|
|
||||||
|
|
||||||
|
def fiveDnodeThreeMnode(self,dnodeNumbers,mnodeNums,restartNumbers,stopRole):
|
||||||
|
tdLog.printNoPrefix("======== test case 1: ")
|
||||||
|
paraDict = {'dbName': 'db0_0',
|
||||||
|
'dropFlag': 1,
|
||||||
|
'event': '',
|
||||||
|
'vgroups': 4,
|
||||||
|
'replica': 1,
|
||||||
|
'stbName': 'stb',
|
||||||
|
'stbNumbers': 2,
|
||||||
|
'colPrefix': 'c',
|
||||||
|
'tagPrefix': 't',
|
||||||
|
'colSchema': [{'type': 'INT', 'count':1}, {'type': 'binary', 'len':20, 'count':1}],
|
||||||
|
'tagSchema': [{'type': 'INT', 'count':1}, {'type': 'binary', 'len':20, 'count':1}],
|
||||||
|
'ctbPrefix': 'ctb',
|
||||||
|
'ctbNum': 200,
|
||||||
|
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
|
||||||
|
"rowsPerTbl": 1000,
|
||||||
|
"batchNum": 5000
|
||||||
|
}
|
||||||
|
|
||||||
|
dnodeNumbers=int(dnodeNumbers)
|
||||||
|
mnodeNums=int(mnodeNums)
|
||||||
|
vnodeNumbers = int(dnodeNumbers-mnodeNums)
|
||||||
|
allctbNumbers=(paraDict['stbNumbers']*paraDict["ctbNum"])
|
||||||
|
rowsPerStb=paraDict["ctbNum"]*paraDict["rowsPerTbl"]
|
||||||
|
rowsall=rowsPerStb*paraDict['stbNumbers']
|
||||||
|
dbNumbers = 1
|
||||||
|
|
||||||
|
tdLog.info("first check dnode and mnode")
|
||||||
|
tdSql.query("show dnodes;")
|
||||||
|
tdSql.checkData(0,1,'%s:6030'%self.host)
|
||||||
|
tdSql.checkData(4,1,'%s:6430'%self.host)
|
||||||
|
clusterComCheck.checkDnodes(dnodeNumbers)
|
||||||
|
clusterComCheck.checkMnodeStatus(1)
|
||||||
|
|
||||||
|
# fisr add three mnodes;
|
||||||
|
tdLog.info("fisr add three mnodes and check mnode status")
|
||||||
|
tdSql.execute("create mnode on dnode 2")
|
||||||
|
clusterComCheck.checkMnodeStatus(2)
|
||||||
|
tdSql.execute("create mnode on dnode 3")
|
||||||
|
clusterComCheck.checkMnodeStatus(3)
|
||||||
|
|
||||||
|
# add some error operations and
|
||||||
|
tdLog.info("Confirm the status of the dnode again")
|
||||||
|
tdSql.error("create mnode on dnode 2")
|
||||||
|
tdSql.query("show dnodes;")
|
||||||
|
print(tdSql.queryResult)
|
||||||
|
clusterComCheck.checkDnodes(dnodeNumbers)
|
||||||
|
|
||||||
|
# create database and stable
|
||||||
|
clusterComCreate.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], paraDict["vgroups"],paraDict['replica'])
|
||||||
|
tdLog.info("Take turns stopping Mnodes ")
|
||||||
|
|
||||||
|
tdDnodes=cluster.dnodes
|
||||||
|
stopcount =0
|
||||||
|
threads=[]
|
||||||
|
|
||||||
|
# create stable:stb_0
|
||||||
|
stableName= paraDict['stbName']
|
||||||
|
newTdSql=tdCom.newTdSql()
|
||||||
|
clusterComCreate.create_stables(newTdSql, paraDict["dbName"],stableName,paraDict['stbNumbers'])
|
||||||
|
#create child table:ctb_0
|
||||||
|
for i in range(paraDict['stbNumbers']):
|
||||||
|
stableName= '%s_%d'%(paraDict['stbName'],i)
|
||||||
|
newTdSql=tdCom.newTdSql()
|
||||||
|
clusterComCreate.create_ctable(newTdSql, paraDict["dbName"],stableName,stableName, paraDict['ctbNum'])
|
||||||
|
#insert date
|
||||||
|
for i in range(paraDict['stbNumbers']):
|
||||||
|
stableName= '%s_%d'%(paraDict['stbName'],i)
|
||||||
|
newTdSql=tdCom.newTdSql()
|
||||||
|
threads.append(threading.Thread(target=clusterComCreate.insert_data, args=(newTdSql, paraDict["dbName"],stableName,paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"],paraDict["startTs"])))
|
||||||
|
for tr in threads:
|
||||||
|
tr.start()
|
||||||
|
for tr in threads:
|
||||||
|
tr.join()
|
||||||
|
|
||||||
|
while stopcount < restartNumbers:
|
||||||
|
tdLog.info(" restart loop: %d"%stopcount )
|
||||||
|
if stopRole == "mnode":
|
||||||
|
for i in range(mnodeNums):
|
||||||
|
tdDnodes[i].stoptaosd()
|
||||||
|
# sleep(10)
|
||||||
|
tdDnodes[i].starttaosd()
|
||||||
|
# sleep(10)
|
||||||
|
elif stopRole == "vnode":
|
||||||
|
for i in range(vnodeNumbers):
|
||||||
|
tdDnodes[i+mnodeNums].stoptaosd()
|
||||||
|
# sleep(10)
|
||||||
|
tdDnodes[i+mnodeNums].starttaosd()
|
||||||
|
# sleep(10)
|
||||||
|
elif stopRole == "dnode":
|
||||||
|
for i in range(dnodeNumbers):
|
||||||
|
tdDnodes[i].stoptaosd()
|
||||||
|
# sleep(10)
|
||||||
|
tdDnodes[i].starttaosd()
|
||||||
|
# sleep(10)
|
||||||
|
|
||||||
|
# dnodeNumbers don't include database of schema
|
||||||
|
if clusterComCheck.checkDnodes(dnodeNumbers):
|
||||||
|
tdLog.info("123")
|
||||||
|
else:
|
||||||
|
print("456")
|
||||||
|
|
||||||
|
self.stopThread(threads)
|
||||||
|
tdLog.exit("one or more of dnodes failed to start ")
|
||||||
|
# self.check3mnode()
|
||||||
|
stopcount+=1
|
||||||
|
|
||||||
|
|
||||||
|
clusterComCheck.checkDnodes(dnodeNumbers)
|
||||||
|
clusterComCheck.checkDbRows(dbNumbers)
|
||||||
|
# clusterComCheck.checkDb(dbNumbers,1,paraDict["dbName"])
|
||||||
|
|
||||||
|
tdSql.execute("use %s" %(paraDict["dbName"]))
|
||||||
|
tdSql.query("show stables")
|
||||||
|
tdSql.checkRows(paraDict["stbNumbers"])
|
||||||
|
for i in range(paraDict['stbNumbers']):
|
||||||
|
stableName= '%s_%d'%(paraDict['stbName'],i)
|
||||||
|
tdSql.query("select * from %s"%stableName)
|
||||||
|
tdSql.checkRows(rowsPerStb)
|
||||||
|
def run(self):
|
||||||
|
# print(self.master_dnode.cfgDict)
|
||||||
|
self.fiveDnodeThreeMnode(dnodeNumbers=5,mnodeNums=3,restartNumbers=2,stopRole='dnode')
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
tdSql.close()
|
||||||
|
tdLog.success(f"{__file__} successfully executed")
|
||||||
|
|
||||||
|
tdCases.addLinux(__file__, TDTestCase())
|
||||||
|
tdCases.addWindows(__file__, TDTestCase())
|
|
@ -143,42 +143,43 @@ class TDTestCase:
|
||||||
threads=[]
|
threads=[]
|
||||||
for i in range(restartNumbers):
|
for i in range(restartNumbers):
|
||||||
dbNameIndex = '%s%d'%(paraDict["dbName"],i)
|
dbNameIndex = '%s%d'%(paraDict["dbName"],i)
|
||||||
threads.append(threading.Thread(target=clusterComCreate.create_databases, args=(tdSql, dbNameIndex,paraDict["dbNumbers"],paraDict["dropFlag"], paraDict["vgroups"],paraDict['replica'])))
|
newTdSql=tdCom.newTdSql()
|
||||||
|
threads.append(threading.Thread(target=clusterComCreate.create_databases, args=(newTdSql, dbNameIndex,paraDict["dbNumbers"],paraDict["dropFlag"], paraDict["vgroups"],paraDict['replica'])))
|
||||||
|
|
||||||
for tr in threads:
|
for tr in threads:
|
||||||
tr.start()
|
tr.start()
|
||||||
|
|
||||||
tdLog.info("Take turns stopping Mnodes ")
|
tdLog.info("Take turns stopping Mnodes ")
|
||||||
# while stopcount < restartNumbers:
|
while stopcount < restartNumbers:
|
||||||
# tdLog.info(" restart loop: %d"%stopcount )
|
tdLog.info(" restart loop: %d"%stopcount )
|
||||||
# if stopRole == "mnode":
|
if stopRole == "mnode":
|
||||||
# for i in range(mnodeNums):
|
for i in range(mnodeNums):
|
||||||
# tdDnodes[i].stoptaosd()
|
tdDnodes[i].stoptaosd()
|
||||||
# # sleep(10)
|
# sleep(10)
|
||||||
# tdDnodes[i].starttaosd()
|
tdDnodes[i].starttaosd()
|
||||||
# # sleep(10)
|
# sleep(10)
|
||||||
# elif stopRole == "vnode":
|
elif stopRole == "vnode":
|
||||||
# for i in range(vnodeNumbers):
|
for i in range(vnodeNumbers):
|
||||||
# tdDnodes[i+mnodeNums].stoptaosd()
|
tdDnodes[i+mnodeNums].stoptaosd()
|
||||||
# # sleep(10)
|
# sleep(10)
|
||||||
# tdDnodes[i+mnodeNums].starttaosd()
|
tdDnodes[i+mnodeNums].starttaosd()
|
||||||
# # sleep(10)
|
# sleep(10)
|
||||||
# elif stopRole == "dnode":
|
elif stopRole == "dnode":
|
||||||
# for i in range(dnodeNumbers):
|
for i in range(dnodeNumbers):
|
||||||
# tdDnodes[i].stoptaosd()
|
tdDnodes[i].stoptaosd()
|
||||||
# # sleep(10)
|
# sleep(10)
|
||||||
# tdDnodes[i].starttaosd()
|
tdDnodes[i].starttaosd()
|
||||||
# # sleep(10)
|
# sleep(10)
|
||||||
|
|
||||||
# # dnodeNumbers don't include database of schema
|
# dnodeNumbers don't include database of schema
|
||||||
# if clusterComCheck.checkDnodes(dnodeNumbers):
|
if clusterComCheck.checkDnodes(dnodeNumbers):
|
||||||
# tdLog.info("check dnodes status is ready")
|
tdLog.info("check dnodes status is ready")
|
||||||
# else:
|
else:
|
||||||
# tdLog.info("check dnodes status is not ready")
|
tdLog.info("check dnodes status is not ready")
|
||||||
# self.stopThread(threads)
|
self.stopThread(threads)
|
||||||
# tdLog.exit("one or more of dnodes failed to start ")
|
tdLog.exit("one or more of dnodes failed to start ")
|
||||||
# # self.check3mnode()
|
# self.check3mnode()
|
||||||
# stopcount+=1
|
stopcount+=1
|
||||||
|
|
||||||
for tr in threads:
|
for tr in threads:
|
||||||
tr.join()
|
tr.join()
|
||||||
|
|
|
@ -92,7 +92,7 @@ class TDTestCase:
|
||||||
|
|
||||||
def fiveDnodeThreeMnode(self,dnodeNumbers,mnodeNums,restartNumbers,stopRole):
|
def fiveDnodeThreeMnode(self,dnodeNumbers,mnodeNums,restartNumbers,stopRole):
|
||||||
tdLog.printNoPrefix("======== test case 1: ")
|
tdLog.printNoPrefix("======== test case 1: ")
|
||||||
paraDict = {'dbName': 'db0_0',
|
paraDict = {'dbName': 'db',
|
||||||
'dropFlag': 1,
|
'dropFlag': 1,
|
||||||
'event': '',
|
'event': '',
|
||||||
'vgroups': 4,
|
'vgroups': 4,
|
||||||
|
@ -143,7 +143,8 @@ class TDTestCase:
|
||||||
threads=[]
|
threads=[]
|
||||||
for i in range(restartNumbers):
|
for i in range(restartNumbers):
|
||||||
stableName= '%s%d'%(paraDict['stbName'],i)
|
stableName= '%s%d'%(paraDict['stbName'],i)
|
||||||
threads.append(threading.Thread(target=clusterComCreate.create_stables, args=(tdSql, paraDict["dbName"],stableName,paraDict['stbNumbers'])))
|
newTdSql=tdCom.newTdSql()
|
||||||
|
threads.append(threading.Thread(target=clusterComCreate.create_stables, args=(newTdSql, paraDict["dbName"],stableName,paraDict['stbNumbers'])))
|
||||||
|
|
||||||
for tr in threads:
|
for tr in threads:
|
||||||
tr.start()
|
tr.start()
|
||||||
|
|
|
@ -0,0 +1,221 @@
|
||||||
|
from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
|
||||||
|
from numpy import row_stack
|
||||||
|
import taos
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import os
|
||||||
|
|
||||||
|
from util.log import *
|
||||||
|
from util.sql import *
|
||||||
|
from util.cases import *
|
||||||
|
from util.dnodes import TDDnodes
|
||||||
|
from util.dnodes import TDDnode
|
||||||
|
from util.cluster import *
|
||||||
|
sys.path.append("./6-cluster")
|
||||||
|
from clusterCommonCreate import *
|
||||||
|
from clusterCommonCheck import clusterComCheck
|
||||||
|
|
||||||
|
import time
|
||||||
|
import socket
|
||||||
|
import subprocess
|
||||||
|
from multiprocessing import Process
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
import inspect
|
||||||
|
import ctypes
|
||||||
|
|
||||||
|
class TDTestCase:
|
||||||
|
|
||||||
|
def init(self,conn ,logSql):
|
||||||
|
tdLog.debug(f"start to excute {__file__}")
|
||||||
|
self.TDDnodes = None
|
||||||
|
tdSql.init(conn.cursor())
|
||||||
|
self.host = socket.gethostname()
|
||||||
|
|
||||||
|
|
||||||
|
def getBuildPath(self):
|
||||||
|
selfPath = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|
||||||
|
if ("community" in selfPath):
|
||||||
|
projPath = selfPath[:selfPath.find("community")]
|
||||||
|
else:
|
||||||
|
projPath = selfPath[:selfPath.find("tests")]
|
||||||
|
|
||||||
|
for root, dirs, files in os.walk(projPath):
|
||||||
|
if ("taosd" in files):
|
||||||
|
rootRealPath = os.path.dirname(os.path.realpath(root))
|
||||||
|
if ("packaging" not in rootRealPath):
|
||||||
|
buildPath = root[:len(root) - len("/build/bin")]
|
||||||
|
break
|
||||||
|
return buildPath
|
||||||
|
|
||||||
|
def _async_raise(self, tid, exctype):
|
||||||
|
"""raises the exception, performs cleanup if needed"""
|
||||||
|
if not inspect.isclass(exctype):
|
||||||
|
exctype = type(exctype)
|
||||||
|
res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
|
||||||
|
if res == 0:
|
||||||
|
raise ValueError("invalid thread id")
|
||||||
|
elif res != 1:
|
||||||
|
# """if it returns a number greater than one, you're in trouble,
|
||||||
|
# and you should call it again with exc=NULL to revert the effect"""
|
||||||
|
ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
|
||||||
|
raise SystemError("PyThreadState_SetAsyncExc failed")
|
||||||
|
|
||||||
|
def stopThread(self,thread):
|
||||||
|
self._async_raise(thread.ident, SystemExit)
|
||||||
|
|
||||||
|
|
||||||
|
def insertData(self,countstart,countstop):
|
||||||
|
# fisrt add data : db\stable\childtable\general table
|
||||||
|
|
||||||
|
for couti in range(countstart,countstop):
|
||||||
|
tdLog.debug("drop database if exists db%d" %couti)
|
||||||
|
tdSql.execute("drop database if exists db%d" %couti)
|
||||||
|
print("create database if not exists db%d replica 1 duration 300" %couti)
|
||||||
|
tdSql.execute("create database if not exists db%d replica 1 duration 300" %couti)
|
||||||
|
tdSql.execute("use db%d" %couti)
|
||||||
|
tdSql.execute(
|
||||||
|
'''create table stb1
|
||||||
|
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
|
||||||
|
tags (t1 int)
|
||||||
|
'''
|
||||||
|
)
|
||||||
|
tdSql.execute(
|
||||||
|
'''
|
||||||
|
create table t1
|
||||||
|
(ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
|
||||||
|
'''
|
||||||
|
)
|
||||||
|
for i in range(4):
|
||||||
|
tdSql.execute(f'create table ct{i+1} using stb1 tags ( {i+1} )')
|
||||||
|
|
||||||
|
|
||||||
|
def fiveDnodeThreeMnode(self,dnodeNumbers,mnodeNums,restartNumbers,stopRole):
|
||||||
|
tdLog.printNoPrefix("======== test case 1: ")
|
||||||
|
paraDict = {'dbName': 'db0_0',
|
||||||
|
'dropFlag': 1,
|
||||||
|
'event': '',
|
||||||
|
'vgroups': 4,
|
||||||
|
'replica': 1,
|
||||||
|
'stbName': 'stb',
|
||||||
|
'stbNumbers': 2,
|
||||||
|
'colPrefix': 'c',
|
||||||
|
'tagPrefix': 't',
|
||||||
|
'colSchema': [{'type': 'INT', 'count':1}, {'type': 'binary', 'len':20, 'count':1}],
|
||||||
|
'tagSchema': [{'type': 'INT', 'count':1}, {'type': 'binary', 'len':20, 'count':1}],
|
||||||
|
'ctbPrefix': 'ctb',
|
||||||
|
'ctbNum': 200,
|
||||||
|
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
|
||||||
|
"rowsPerTbl": 10000,
|
||||||
|
"batchNum": 5000
|
||||||
|
}
|
||||||
|
|
||||||
|
dnodeNumbers=int(dnodeNumbers)
|
||||||
|
mnodeNums=int(mnodeNums)
|
||||||
|
vnodeNumbers = int(dnodeNumbers-mnodeNums)
|
||||||
|
allctbNumbers=(paraDict['stbNumbers']*paraDict["ctbNum"])
|
||||||
|
rowsPerStb=paraDict["ctbNum"]*paraDict["rowsPerTbl"]
|
||||||
|
rowsall=rowsPerStb*paraDict['stbNumbers']
|
||||||
|
dbNumbers = 1
|
||||||
|
|
||||||
|
tdLog.info("first check dnode and mnode")
|
||||||
|
tdSql.query("show dnodes;")
|
||||||
|
tdSql.checkData(0,1,'%s:6030'%self.host)
|
||||||
|
tdSql.checkData(4,1,'%s:6430'%self.host)
|
||||||
|
clusterComCheck.checkDnodes(dnodeNumbers)
|
||||||
|
clusterComCheck.checkMnodeStatus(1)
|
||||||
|
|
||||||
|
# fisr add three mnodes;
|
||||||
|
tdLog.info("fisr add three mnodes and check mnode status")
|
||||||
|
tdSql.execute("create mnode on dnode 2")
|
||||||
|
clusterComCheck.checkMnodeStatus(2)
|
||||||
|
tdSql.execute("create mnode on dnode 3")
|
||||||
|
clusterComCheck.checkMnodeStatus(3)
|
||||||
|
|
||||||
|
# add some error operations and
|
||||||
|
tdLog.info("Confirm the status of the dnode again")
|
||||||
|
tdSql.error("create mnode on dnode 2")
|
||||||
|
tdSql.query("show dnodes;")
|
||||||
|
print(tdSql.queryResult)
|
||||||
|
clusterComCheck.checkDnodes(dnodeNumbers)
|
||||||
|
|
||||||
|
# create database and stable
|
||||||
|
clusterComCreate.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], paraDict["vgroups"],paraDict['replica'])
|
||||||
|
tdLog.info("Take turns stopping Mnodes ")
|
||||||
|
|
||||||
|
tdDnodes=cluster.dnodes
|
||||||
|
stopcount =0
|
||||||
|
threads=[]
|
||||||
|
|
||||||
|
# create stable:stb_0
|
||||||
|
stableName= paraDict['stbName']
|
||||||
|
newTdSql=tdCom.newTdSql()
|
||||||
|
clusterComCreate.create_stables(newTdSql, paraDict["dbName"],stableName,paraDict['stbNumbers'])
|
||||||
|
#create child table:ctb_0
|
||||||
|
for i in range(paraDict['stbNumbers']):
|
||||||
|
stableName= '%s_%d'%(paraDict['stbName'],i)
|
||||||
|
newTdSql=tdCom.newTdSql()
|
||||||
|
clusterComCreate.create_ctable(newTdSql, paraDict["dbName"],stableName,stableName, paraDict['ctbNum'])
|
||||||
|
#insert date
|
||||||
|
for i in range(paraDict['stbNumbers']):
|
||||||
|
stableName= '%s_%d'%(paraDict['stbName'],i)
|
||||||
|
newTdSql=tdCom.newTdSql()
|
||||||
|
threads.append(threading.Thread(target=clusterComCreate.insert_data, args=(newTdSql, paraDict["dbName"],stableName,paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"],paraDict["startTs"])))
|
||||||
|
for tr in threads:
|
||||||
|
tr.start()
|
||||||
|
while stopcount < restartNumbers:
|
||||||
|
tdLog.info(" restart loop: %d"%stopcount )
|
||||||
|
if stopRole == "mnode":
|
||||||
|
for i in range(mnodeNums):
|
||||||
|
tdDnodes[i].stoptaosd()
|
||||||
|
# sleep(10)
|
||||||
|
tdDnodes[i].starttaosd()
|
||||||
|
# sleep(10)
|
||||||
|
elif stopRole == "vnode":
|
||||||
|
for i in range(vnodeNumbers):
|
||||||
|
tdDnodes[i+mnodeNums].stoptaosd()
|
||||||
|
# sleep(10)
|
||||||
|
tdDnodes[i+mnodeNums].starttaosd()
|
||||||
|
# sleep(10)
|
||||||
|
elif stopRole == "dnode":
|
||||||
|
for i in range(dnodeNumbers):
|
||||||
|
tdDnodes[i].stoptaosd()
|
||||||
|
# sleep(10)
|
||||||
|
tdDnodes[i].starttaosd()
|
||||||
|
# sleep(10)
|
||||||
|
|
||||||
|
# dnodeNumbers don't include database of schema
|
||||||
|
if clusterComCheck.checkDnodes(dnodeNumbers):
|
||||||
|
tdLog.info("123")
|
||||||
|
else:
|
||||||
|
print("456")
|
||||||
|
|
||||||
|
self.stopThread(threads)
|
||||||
|
tdLog.exit("one or more of dnodes failed to start ")
|
||||||
|
# self.check3mnode()
|
||||||
|
stopcount+=1
|
||||||
|
|
||||||
|
for tr in threads:
|
||||||
|
tr.join()
|
||||||
|
clusterComCheck.checkDnodes(dnodeNumbers)
|
||||||
|
clusterComCheck.checkDbRows(dbNumbers)
|
||||||
|
# clusterComCheck.checkDb(dbNumbers,1,paraDict["dbName"])
|
||||||
|
|
||||||
|
tdSql.execute("use %s" %(paraDict["dbName"]))
|
||||||
|
tdSql.query("show stables")
|
||||||
|
tdSql.checkRows(paraDict["stbNumbers"])
|
||||||
|
for i in range(paraDict['stbNumbers']):
|
||||||
|
stableName= '%s_%d'%(paraDict['stbName'],i)
|
||||||
|
tdSql.query("select * from %s"%stableName)
|
||||||
|
tdSql.checkRows(rowsPerStb)
|
||||||
|
def run(self):
|
||||||
|
# print(self.master_dnode.cfgDict)
|
||||||
|
self.fiveDnodeThreeMnode(dnodeNumbers=5,mnodeNums=3,restartNumbers=2,stopRole='dnode')
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
tdSql.close()
|
||||||
|
tdLog.success(f"{__file__} successfully executed")
|
||||||
|
|
||||||
|
tdCases.addLinux(__file__, TDTestCase())
|
||||||
|
tdCases.addWindows(__file__, TDTestCase())
|
|
@ -116,7 +116,8 @@ class TDTestCase:
|
||||||
threads=[]
|
threads=[]
|
||||||
for i in range(restartNumbers):
|
for i in range(restartNumbers):
|
||||||
dbNameIndex = '%s%d'%(paraDict["dbName"],i)
|
dbNameIndex = '%s%d'%(paraDict["dbName"],i)
|
||||||
threads.append(threading.Thread(target=clusterComCreate.create_databases, args=(tdSql, dbNameIndex,paraDict["dbNumbers"],paraDict["dropFlag"], paraDict["vgroups"],paraDict['replica'])))
|
newTdSql=tdCom.newTdSql()
|
||||||
|
threads.append(threading.Thread(target=clusterComCreate.create_databases, args=(newTdSql, dbNameIndex,paraDict["dbNumbers"],paraDict["dropFlag"], paraDict["vgroups"],paraDict['replica'])))
|
||||||
|
|
||||||
for tr in threads:
|
for tr in threads:
|
||||||
tr.start()
|
tr.start()
|
||||||
|
|
|
@ -30,8 +30,8 @@ class TDTestCase:
|
||||||
self.TDDnodes = None
|
self.TDDnodes = None
|
||||||
tdSql.init(conn.cursor())
|
tdSql.init(conn.cursor())
|
||||||
self.host = socket.gethostname()
|
self.host = socket.gethostname()
|
||||||
|
print(tdSql)
|
||||||
|
|
||||||
def getBuildPath(self):
|
def getBuildPath(self):
|
||||||
selfPath = os.path.dirname(os.path.realpath(__file__))
|
selfPath = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|
||||||
|
@ -113,6 +113,7 @@ class TDTestCase:
|
||||||
allStbNumbers=(paraDict['stbNumbers']*restartNumbers)
|
allStbNumbers=(paraDict['stbNumbers']*restartNumbers)
|
||||||
dbNumbers = 1
|
dbNumbers = 1
|
||||||
|
|
||||||
|
print(tdSql)
|
||||||
tdLog.info("first check dnode and mnode")
|
tdLog.info("first check dnode and mnode")
|
||||||
tdSql.query("show dnodes;")
|
tdSql.query("show dnodes;")
|
||||||
tdSql.checkData(0,1,'%s:6030'%self.host)
|
tdSql.checkData(0,1,'%s:6030'%self.host)
|
||||||
|
@ -141,9 +142,11 @@ class TDTestCase:
|
||||||
tdDnodes=cluster.dnodes
|
tdDnodes=cluster.dnodes
|
||||||
stopcount =0
|
stopcount =0
|
||||||
threads=[]
|
threads=[]
|
||||||
|
|
||||||
for i in range(restartNumbers):
|
for i in range(restartNumbers):
|
||||||
stableName= '%s%d'%(paraDict['stbName'],i)
|
stableName= '%s%d'%(paraDict['stbName'],i)
|
||||||
threads.append(threading.Thread(target=clusterComCreate.create_stables, args=(tdSql, paraDict["dbName"],stableName,paraDict['stbNumbers'])))
|
newTdSql=tdCom.newTdSql()
|
||||||
|
threads.append(threading.Thread(target=clusterComCreate.create_stables, args=(newTdSql, paraDict["dbName"],stableName,paraDict['stbNumbers'])))
|
||||||
|
|
||||||
for tr in threads:
|
for tr in threads:
|
||||||
tr.start()
|
tr.start()
|
||||||
|
|
|
@ -152,7 +152,7 @@ class ClusterComCreate:
|
||||||
if (i % 2 == 0):
|
if (i % 2 == 0):
|
||||||
tagValue = 'shanghai'
|
tagValue = 'shanghai'
|
||||||
|
|
||||||
sql += " %s%d using %s tags(%d, '%s')"%(ctbPrefix,i,stbName,i+1, tagValue)
|
sql += " %s_%d using %s tags(%d, '%s')"%(ctbPrefix,i,stbName,i+1, tagValue)
|
||||||
if (i > 0) and (i%100 == 0):
|
if (i > 0) and (i%100 == 0):
|
||||||
tsql.execute(sql)
|
tsql.execute(sql)
|
||||||
sql = pre_create
|
sql = pre_create
|
||||||
|
@ -173,13 +173,13 @@ class ClusterComCreate:
|
||||||
startTs = int(round(t * 1000))
|
startTs = int(round(t * 1000))
|
||||||
#tdLog.debug("doing insert data into stable:%s rows:%d ..."%(stbName, allRows))
|
#tdLog.debug("doing insert data into stable:%s rows:%d ..."%(stbName, allRows))
|
||||||
for i in range(ctbNum):
|
for i in range(ctbNum):
|
||||||
sql += " %s%d values "%(stbName,i)
|
sql += " %s_%d values "%(stbName,i)
|
||||||
for j in range(rowsPerTbl):
|
for j in range(rowsPerTbl):
|
||||||
sql += "(%d, %d, 'tmqrow_%d') "%(startTs + j, j, j)
|
sql += "(%d, %d, %d, 'mnode_%d') "%(startTs + j, j, j,j)
|
||||||
if (j > 0) and ((j%batchNum == 0) or (j == rowsPerTbl - 1)):
|
if (j > 0) and ((j%batchNum == 0) or (j == rowsPerTbl - 1)):
|
||||||
tsql.execute(sql)
|
tsql.execute(sql)
|
||||||
if j < rowsPerTbl - 1:
|
if j < rowsPerTbl - 1:
|
||||||
sql = "insert into %s%d values " %(stbName,i)
|
sql = "insert into %s_%d values " %(stbName,i)
|
||||||
else:
|
else:
|
||||||
sql = "insert into "
|
sql = "insert into "
|
||||||
#end sql
|
#end sql
|
||||||
|
|
|
@ -122,10 +122,10 @@ python3 ./test.py -f 2-query/and_or_for_byte.py
|
||||||
python3 ./test.py -f 2-query/function_null.py
|
python3 ./test.py -f 2-query/function_null.py
|
||||||
#python3 ./test.py -f 2-query/queryQnode.py
|
#python3 ./test.py -f 2-query/queryQnode.py
|
||||||
|
|
||||||
#python3 ./test.py -f 6-cluster/5dnode1mnode.py
|
python3 ./test.py -f 6-cluster/5dnode1mnode.py
|
||||||
#python3 ./test.py -f 6-cluster/5dnode2mnode.py -N 5 -M 3
|
#BUG python3 ./test.py -f 6-cluster/5dnode2mnode.py -N 5 -M 3
|
||||||
#python3 ./test.py -f 6-cluster/5dnode3mnodeStop.py -N 5 -M 3
|
#python3 ./test.py -f 6-cluster/5dnode3mnodeStop.py -N 5 -M 3
|
||||||
#python3 ./test.py -f 6-cluster/5dnode3mnodeStopLoop.py -N 5 -M 3
|
python3 ./test.py -f 6-cluster/5dnode3mnodeStopLoop.py -N 5 -M 3
|
||||||
# BUG python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py -N 5 -M 3
|
# BUG python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py -N 5 -M 3
|
||||||
# BUG python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py -N 5 -M 3
|
# BUG python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py -N 5 -M 3
|
||||||
python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py -N 5 -M 3
|
python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py -N 5 -M 3
|
||||||
|
@ -135,7 +135,8 @@ python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py -N 5 -
|
||||||
# BUG python3 ./test.py -f 6-cluster/5dnode3mnodeStopInsert.py
|
# BUG python3 ./test.py -f 6-cluster/5dnode3mnodeStopInsert.py
|
||||||
# python3 ./test.py -f 6-cluster/5dnode3mnodeDrop.py -N 5
|
# python3 ./test.py -f 6-cluster/5dnode3mnodeDrop.py -N 5
|
||||||
# python3 test.py -f 6-cluster/5dnode3mnodeStopConnect.py -N 5 -M 3
|
# python3 test.py -f 6-cluster/5dnode3mnodeStopConnect.py -N 5 -M 3
|
||||||
|
# BUG Redict python3 ./test.py -f 6-cluster/5dnode3mnodeAdd1Ddnoe.py -N 6 -M 3 -C 5
|
||||||
|
# python3 ./test.py -f 6-cluster/5dnode3mnodeRestartDnodeInsertData.py -N 5 -M 3
|
||||||
|
|
||||||
python3 ./test.py -f 7-tmq/basic5.py
|
python3 ./test.py -f 7-tmq/basic5.py
|
||||||
python3 ./test.py -f 7-tmq/subscribeDb.py
|
python3 ./test.py -f 7-tmq/subscribeDb.py
|
||||||
|
|
|
@ -64,8 +64,9 @@ if __name__ == "__main__":
|
||||||
updateCfgDict = {}
|
updateCfgDict = {}
|
||||||
execCmd = ""
|
execCmd = ""
|
||||||
queryPolicy = 1
|
queryPolicy = 1
|
||||||
opts, args = getopt.gnu_getopt(sys.argv[1:], 'f:p:m:l:scghrd:k:e:N:M:Q:', [
|
createDnodeNums = 1
|
||||||
'file=', 'path=', 'master', 'logSql', 'stop', 'cluster', 'valgrind', 'help', 'restart', 'updateCfgDict', 'killv', 'execCmd','dnodeNums','mnodeNums','queryPolicy'])
|
opts, args = getopt.gnu_getopt(sys.argv[1:], 'f:p:m:l:scghrd:k:e:N:M:Q:C:', [
|
||||||
|
'file=', 'path=', 'master', 'logSql', 'stop', 'cluster', 'valgrind', 'help', 'restart', 'updateCfgDict', 'killv', 'execCmd','dnodeNums','mnodeNums','queryPolicy','createDnodeNums'])
|
||||||
for key, value in opts:
|
for key, value in opts:
|
||||||
if key in ['-h', '--help']:
|
if key in ['-h', '--help']:
|
||||||
tdLog.printNoPrefix(
|
tdLog.printNoPrefix(
|
||||||
|
@ -81,9 +82,11 @@ if __name__ == "__main__":
|
||||||
tdLog.printNoPrefix('-d update cfg dict, base64 json str')
|
tdLog.printNoPrefix('-d update cfg dict, base64 json str')
|
||||||
tdLog.printNoPrefix('-k not kill valgrind processer')
|
tdLog.printNoPrefix('-k not kill valgrind processer')
|
||||||
tdLog.printNoPrefix('-e eval str to run')
|
tdLog.printNoPrefix('-e eval str to run')
|
||||||
tdLog.printNoPrefix('-N create dnodes numbers in clusters')
|
tdLog.printNoPrefix('-N start dnodes numbers in clusters')
|
||||||
tdLog.printNoPrefix('-M create mnode numbers in clusters')
|
tdLog.printNoPrefix('-M create mnode numbers in clusters')
|
||||||
tdLog.printNoPrefix('-Q set queryPolicy in one dnode')
|
tdLog.printNoPrefix('-Q set queryPolicy in one dnode')
|
||||||
|
tdLog.printNoPrefix('-C create Dnode Numbers in one cluster')
|
||||||
|
|
||||||
|
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
@ -143,6 +146,9 @@ if __name__ == "__main__":
|
||||||
if key in ['-Q', '--queryPolicy']:
|
if key in ['-Q', '--queryPolicy']:
|
||||||
queryPolicy = value
|
queryPolicy = value
|
||||||
|
|
||||||
|
if key in ['-C', '--createDnodeNums']:
|
||||||
|
createDnodeNums = value
|
||||||
|
|
||||||
if not execCmd == "":
|
if not execCmd == "":
|
||||||
tdDnodes.init(deployPath)
|
tdDnodes.init(deployPath)
|
||||||
print(execCmd)
|
print(execCmd)
|
||||||
|
@ -239,7 +245,11 @@ if __name__ == "__main__":
|
||||||
host,
|
host,
|
||||||
config=tdDnodes.getSimCfgPath())
|
config=tdDnodes.getSimCfgPath())
|
||||||
print(tdDnodes.getSimCfgPath(),host)
|
print(tdDnodes.getSimCfgPath(),host)
|
||||||
cluster.create_dnode(conn)
|
if createDnodeNums == 1:
|
||||||
|
createDnodeNums=dnodeNums
|
||||||
|
else:
|
||||||
|
createDnodeNums=createDnodeNums
|
||||||
|
cluster.create_dnode(conn,createDnodeNums)
|
||||||
try:
|
try:
|
||||||
if cluster.check_dnode(conn) :
|
if cluster.check_dnode(conn) :
|
||||||
print("check dnode ready")
|
print("check dnode ready")
|
||||||
|
@ -314,7 +324,11 @@ if __name__ == "__main__":
|
||||||
host,
|
host,
|
||||||
config=tdDnodes.getSimCfgPath())
|
config=tdDnodes.getSimCfgPath())
|
||||||
print(tdDnodes.getSimCfgPath(),host)
|
print(tdDnodes.getSimCfgPath(),host)
|
||||||
cluster.create_dnode(conn)
|
if createDnodeNums == 1:
|
||||||
|
createDnodeNums=dnodeNums
|
||||||
|
else:
|
||||||
|
createDnodeNums=createDnodeNums
|
||||||
|
cluster.create_dnode(conn,createDnodeNums)
|
||||||
try:
|
try:
|
||||||
if cluster.check_dnode(conn) :
|
if cluster.check_dnode(conn) :
|
||||||
print("check dnode ready")
|
print("check dnode ready")
|
||||||
|
|
|
@ -1,25 +1,46 @@
|
||||||
IF (TD_WEBSOCKET)
|
IF (TD_WEBSOCKET)
|
||||||
MESSAGE("${Green} use libtaos-ws${ColourReset}")
|
MESSAGE("${Green} use libtaos-ws${ColourReset}")
|
||||||
IF (TD_LINUX)
|
IF (TD_LINUX)
|
||||||
include(ExternalProject)
|
IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/taosws-rs/target/release/libtaosws.so" OR "${CMAKE_CURRENT_SOURCE_DIR}/taosws-rs/target/release/libtaosws.so" IS_NEWER_THAN "${CMAKE_SOURCE_DIR}/.git/modules/tools/taosws-rs/FETCH_HEAD")
|
||||||
ExternalProject_Add(taosws-rs
|
include(ExternalProject)
|
||||||
PREFIX "taosws-rs"
|
ExternalProject_Add(taosws-rs
|
||||||
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/taosws-rs
|
PREFIX "taosws-rs"
|
||||||
BUILD_ALWAYS off
|
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/taosws-rs
|
||||||
DEPENDS taos
|
BUILD_ALWAYS off
|
||||||
BUILD_IN_SOURCE 1
|
DEPENDS taos
|
||||||
CONFIGURE_COMMAND cmake -E echo "taosws-rs no need cmake to config"
|
BUILD_IN_SOURCE 1
|
||||||
PATCH_COMMAND
|
CONFIGURE_COMMAND cmake -E echo "taosws-rs no need cmake to config"
|
||||||
COMMAND git clean -f -d
|
PATCH_COMMAND
|
||||||
BUILD_COMMAND
|
COMMAND git clean -f -d
|
||||||
COMMAND cargo build --release -p taos-ws-sys
|
BUILD_COMMAND
|
||||||
COMMAND ./taos-ws-sys/ci/package.sh
|
COMMAND cargo build --release -p taos-ws-sys
|
||||||
INSTALL_COMMAND
|
COMMAND ./taos-ws-sys/ci/package.sh
|
||||||
COMMAND cmake -E copy target/libtaosws/libtaosws.so ${CMAKE_BINARY_DIR}/build/lib
|
INSTALL_COMMAND
|
||||||
COMMAND cmake -E make_directory ${CMAKE_BINARY_DIR}/build/include
|
COMMAND cmake -E copy target/libtaosws/libtaosws.so ${CMAKE_BINARY_DIR}/build/lib
|
||||||
COMMAND cmake -E copy target/libtaosws/taosws.h ${CMAKE_BINARY_DIR}/build/include
|
COMMAND cmake -E make_directory ${CMAKE_BINARY_DIR}/build/include
|
||||||
)
|
COMMAND cmake -E copy target/libtaosws/taosws.h ${CMAKE_BINARY_DIR}/build/include
|
||||||
ENDIF()
|
)
|
||||||
|
ELSE()
|
||||||
|
include(ExternalProject)
|
||||||
|
ExternalProject_Add(taosws-rs
|
||||||
|
PREFIX "taosws-rs"
|
||||||
|
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/taosws-rs
|
||||||
|
BUILD_ALWAYS on
|
||||||
|
DEPENDS taos
|
||||||
|
BUILD_IN_SOURCE 1
|
||||||
|
CONFIGURE_COMMAND cmake -E echo "taosws-rs no need cmake to config"
|
||||||
|
PATCH_COMMAND
|
||||||
|
COMMAND git clean -f -d
|
||||||
|
BUILD_COMMAND
|
||||||
|
COMMAND cargo build --release -p taos-ws-sys
|
||||||
|
COMMAND ./taos-ws-sys/ci/package.sh
|
||||||
|
INSTALL_COMMAND
|
||||||
|
COMMAND cmake -E copy target/libtaosws/libtaosws.so ${CMAKE_BINARY_DIR}/build/lib
|
||||||
|
COMMAND cmake -E make_directory ${CMAKE_BINARY_DIR}/build/include
|
||||||
|
COMMAND cmake -E copy target/libtaosws/taosws.h ${CMAKE_BINARY_DIR}/build/include
|
||||||
|
)
|
||||||
|
ENDIF ()
|
||||||
|
ENDIF()
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF (TD_TAOS_TOOLS)
|
IF (TD_TAOS_TOOLS)
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 9cb71e3c4c0474553aa961cbe19795541c29b5c7
|
Subproject commit 3f42d428eb6b90dea2651f4ccea66e44705c831b
|
|
@ -1 +1 @@
|
||||||
Subproject commit 430982a0c2c29a819ffc414d11f49f2d424ca3fe
|
Subproject commit 7a94ffab45f08e16f09b3f430fe75d717054adb6
|
Loading…
Reference in New Issue