Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
c94ca28b
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1193
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
c94ca28b
编写于
5月 27, 2022
作者:
C
Cary Xu
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '3.0' into feature/TD-14481-3.0
上级
c3bc4e56
d25a9028
变更
85
展开全部
显示空白变更内容
内联
并排
Showing
85 changed file
with
2217 addition
and
1633 deletion
+2217
-1633
include/common/tmsg.h
include/common/tmsg.h
+3
-0
include/common/tmsgdef.h
include/common/tmsgdef.h
+0
-2
include/libs/nodes/querynodes.h
include/libs/nodes/querynodes.h
+16
-15
include/libs/parser/parser.h
include/libs/parser/parser.h
+9
-0
include/libs/qworker/qworker.h
include/libs/qworker/qworker.h
+0
-10
include/util/taoserror.h
include/util/taoserror.h
+1
-0
source/client/src/clientImpl.c
source/client/src/clientImpl.c
+6
-12
source/common/src/tmsg.c
source/common/src/tmsg.c
+0
-25
source/dnode/mgmt/mgmt_qnode/src/qmHandle.c
source/dnode/mgmt/mgmt_qnode/src/qmHandle.c
+0
-2
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
+0
-2
source/dnode/mgmt/node_mgmt/src/dmTransport.c
source/dnode/mgmt/node_mgmt/src/dmTransport.c
+2
-0
source/dnode/mgmt/node_util/src/dmEps.c
source/dnode/mgmt/node_util/src/dmEps.c
+1
-0
source/dnode/mnode/impl/inc/mndDef.h
source/dnode/mnode/impl/inc/mndDef.h
+6
-0
source/dnode/mnode/impl/inc/mndInt.h
source/dnode/mnode/impl/inc/mndInt.h
+1
-0
source/dnode/mnode/impl/inc/mndSync.h
source/dnode/mnode/impl/inc/mndSync.h
+1
-1
source/dnode/mnode/impl/inc/mndTrans.h
source/dnode/mnode/impl/inc/mndTrans.h
+1
-0
source/dnode/mnode/impl/src/mndMnode.c
source/dnode/mnode/impl/src/mndMnode.c
+16
-12
source/dnode/mnode/impl/src/mndSma.c
source/dnode/mnode/impl/src/mndSma.c
+1
-0
source/dnode/mnode/impl/src/mndSync.c
source/dnode/mnode/impl/src/mndSync.c
+44
-20
source/dnode/mnode/impl/src/mndTrans.c
source/dnode/mnode/impl/src/mndTrans.c
+22
-2
source/dnode/mnode/sdb/inc/sdb.h
source/dnode/mnode/sdb/inc/sdb.h
+2
-0
source/dnode/mnode/sdb/src/sdbRaw.c
source/dnode/mnode/sdb/src/sdbRaw.c
+5
-0
source/dnode/qnode/src/qnode.c
source/dnode/qnode/src/qnode.c
+0
-9
source/dnode/vnode/src/vnd/vnodeSvr.c
source/dnode/vnode/src/vnd/vnodeSvr.c
+0
-4
source/libs/function/src/builtins.c
source/libs/function/src/builtins.c
+4
-2
source/libs/function/src/builtinsimpl.c
source/libs/function/src/builtinsimpl.c
+14
-4
source/libs/parser/inc/parAst.h
source/libs/parser/inc/parAst.h
+9
-8
source/libs/parser/inc/parUtil.h
source/libs/parser/inc/parUtil.h
+19
-1
source/libs/parser/src/parAstCreater.c
source/libs/parser/src/parAstCreater.c
+16
-1
source/libs/parser/src/parAstParser.c
source/libs/parser/src/parAstParser.c
+1
-0
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+59
-43
source/libs/parser/src/parUtil.c
source/libs/parser/src/parUtil.c
+191
-9
source/libs/parser/src/parser.c
source/libs/parser/src/parser.c
+37
-9
source/libs/parser/test/mockCatalog.cpp
source/libs/parser/test/mockCatalog.cpp
+10
-10
source/libs/parser/test/mockCatalogService.cpp
source/libs/parser/test/mockCatalogService.cpp
+49
-1
source/libs/parser/test/mockCatalogService.h
source/libs/parser/test/mockCatalogService.h
+2
-1
source/libs/parser/test/parTestMain.cpp
source/libs/parser/test/parTestMain.cpp
+6
-2
source/libs/parser/test/parTestUtil.cpp
source/libs/parser/test/parTestUtil.cpp
+77
-3
source/libs/parser/test/parTestUtil.h
source/libs/parser/test/parTestUtil.h
+3
-1
source/libs/qworker/inc/qwInt.h
source/libs/qworker/inc/qwInt.h
+22
-2
source/libs/qworker/inc/qwMsg.h
source/libs/qworker/inc/qwMsg.h
+2
-4
source/libs/qworker/src/qwDbg.c
source/libs/qworker/src/qwDbg.c
+128
-0
source/libs/qworker/src/qwMsg.c
source/libs/qworker/src/qwMsg.c
+5
-174
source/libs/qworker/src/qwUtil.c
source/libs/qworker/src/qwUtil.c
+502
-0
source/libs/qworker/src/qworker.c
source/libs/qworker/src/qworker.c
+28
-852
source/libs/qworker/test/qworkerTests.cpp
source/libs/qworker/test/qworkerTests.cpp
+1
-109
source/libs/scalar/test/scalar/CMakeLists.txt
source/libs/scalar/test/scalar/CMakeLists.txt
+1
-1
source/libs/scheduler/inc/schedulerInt.h
source/libs/scheduler/inc/schedulerInt.h
+1
-1
source/libs/scheduler/src/schJob.c
source/libs/scheduler/src/schJob.c
+1
-1
source/libs/scheduler/src/schRemote.c
source/libs/scheduler/src/schRemote.c
+4
-76
source/libs/scheduler/test/schedulerTests.cpp
source/libs/scheduler/test/schedulerTests.cpp
+1
-89
source/libs/sync/src/syncIndexMgr.c
source/libs/sync/src/syncIndexMgr.c
+3
-1
source/libs/sync/src/syncMain.c
source/libs/sync/src/syncMain.c
+10
-0
source/libs/transport/inc/transComm.h
source/libs/transport/inc/transComm.h
+19
-1
source/libs/transport/src/transCli.c
source/libs/transport/src/transCli.c
+5
-1
source/libs/transport/src/transComm.c
source/libs/transport/src/transComm.c
+13
-1
source/libs/transport/src/transSrv.c
source/libs/transport/src/transSrv.c
+1
-0
source/util/src/terror.c
source/util/src/terror.c
+2
-1
tests/script/general/alter/cached_schema_after_alter.sim
tests/script/general/alter/cached_schema_after_alter.sim
+0
-3
tests/script/general/alter/dnode.sim
tests/script/general/alter/dnode.sim
+0
-4
tests/script/general/alter/import.sim
tests/script/general/alter/import.sim
+0
-5
tests/script/general/alter/insert1.sim
tests/script/general/alter/insert1.sim
+0
-4
tests/script/general/alter/insert2.sim
tests/script/general/alter/insert2.sim
+0
-4
tests/script/general/alter/metrics.sim
tests/script/general/alter/metrics.sim
+0
-4
tests/script/general/alter/table.sim
tests/script/general/alter/table.sim
+0
-4
tests/script/general/alter/testSuite.sim
tests/script/general/alter/testSuite.sim
+0
-7
tests/script/jenkins/basic.txt
tests/script/jenkins/basic.txt
+7
-4
tests/script/tsim/mnode/basic1.sim
tests/script/tsim/mnode/basic1.sim
+4
-4
tests/script/tsim/mnode/basic2.sim
tests/script/tsim/mnode/basic2.sim
+10
-3
tests/script/tsim/mnode/basic3.sim
tests/script/tsim/mnode/basic3.sim
+5
-5
tests/script/tsim/stable/alter_comment.sim
tests/script/tsim/stable/alter_comment.sim
+1
-0
tests/script/tsim/stable/alter_count.sim
tests/script/tsim/stable/alter_count.sim
+3
-7
tests/script/tsim/stable/column_modify.sim
tests/script/tsim/stable/column_modify.sim
+29
-1
tests/script/tsim/stable/disk.sim
tests/script/tsim/stable/disk.sim
+1
-10
tests/script/tsim/stable/dnode3.sim
tests/script/tsim/stable/dnode3.sim
+0
-10
tests/script/tsim/stable/metrics.sim
tests/script/tsim/stable/metrics.sim
+0
-4
tests/script/tsim/stable/refcount.sim
tests/script/tsim/stable/refcount.sim
+0
-5
tests/script/tsim/stable/show.sim
tests/script/tsim/stable/show.sim
+0
-5
tests/script/tsim/stable/tag_add.sim
tests/script/tsim/stable/tag_add.sim
+193
-0
tests/script/tsim/stable/tag_drop.sim
tests/script/tsim/stable/tag_drop.sim
+337
-0
tests/script/tsim/stable/tag_modify.sim
tests/script/tsim/stable/tag_modify.sim
+123
-0
tests/script/tsim/stable/tag_rename.sim
tests/script/tsim/stable/tag_rename.sim
+120
-0
tests/script/tsim/stable/values.sim
tests/script/tsim/stable/values.sim
+0
-7
tests/script/tsim/stable/vnode3.sim
tests/script/tsim/stable/vnode3.sim
+0
-7
tests/script/tsim/valgrind/checkError.sim
tests/script/tsim/valgrind/checkError.sim
+1
-1
未找到文件。
include/common/tmsg.h
浏览文件 @
c94ca28b
...
...
@@ -656,6 +656,9 @@ typedef struct {
typedef
struct
{
int32_t
code
;
char
tbFName
[
TSDB_TABLE_FNAME_LEN
];
int32_t
sversion
;
int32_t
tversion
;
}
SQueryTableRsp
;
int32_t
tSerializeSQueryTableRsp
(
void
*
buf
,
int32_t
bufLen
,
SQueryTableRsp
*
pRsp
);
...
...
include/common/tmsgdef.h
浏览文件 @
c94ca28b
...
...
@@ -182,8 +182,6 @@ enum {
TD_DEF_MSG_TYPE
(
TDMT_VND_MQ_DISCONNECT
,
"vnode-mq-disconnect"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_VND_MQ_VG_CHANGE
,
"vnode-mq-vg-change"
,
SMqRebVgReq
,
SMqRebVgRsp
)
TD_DEF_MSG_TYPE
(
TDMT_VND_MQ_VG_DELETE
,
"vnode-mq-vg-delete"
,
SMqVDeleteReq
,
SMqVDeleteRsp
)
TD_DEF_MSG_TYPE
(
TDMT_VND_RES_READY
,
"vnode-res-ready"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_VND_TASKS_STATUS
,
"vnode-tasks-status"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_VND_CANCEL_TASK
,
"vnode-cancel-task"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_VND_DROP_TASK
,
"vnode-drop-task"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_VND_CREATE_TOPIC
,
"vnode-create-topic"
,
NULL
,
NULL
)
...
...
include/libs/nodes/querynodes.h
浏览文件 @
c94ca28b
...
...
@@ -337,6 +337,7 @@ typedef struct SQuery {
int32_t
placeholderNum
;
SArray
*
pPlaceholderValues
;
SNode
*
pPrepareRoot
;
struct
SParseMetaCache
*
pMetaCache
;
}
SQuery
;
void
nodesWalkSelectStmt
(
SSelectStmt
*
pSelect
,
ESqlClause
clause
,
FNodeWalker
walker
,
void
*
pContext
);
...
...
include/libs/parser/parser.h
浏览文件 @
c94ca28b
...
...
@@ -23,6 +23,9 @@ extern "C" {
#include "query.h"
#include "querynodes.h"
struct
SCatalogReq
;
struct
SMetaData
;
typedef
struct
SStmtCallback
{
TAOS_STMT
*
pStmt
;
int32_t
(
*
getTbNameFn
)(
TAOS_STMT
*
,
char
**
);
...
...
@@ -45,11 +48,17 @@ typedef struct SParseContext {
SStmtCallback
*
pStmtCb
;
const
char
*
pUser
;
bool
isSuperUser
;
bool
async
;
}
SParseContext
;
int32_t
qParseSql
(
SParseContext
*
pCxt
,
SQuery
**
pQuery
);
bool
qIsInsertSql
(
const
char
*
pStr
,
size_t
length
);
// for async mode
int32_t
qSyntaxParseSql
(
SParseContext
*
pCxt
,
SQuery
**
pQuery
,
struct
SCatalogReq
*
pCatalogReq
);
int32_t
qSemanticAnalysisSql
(
SParseContext
*
pCxt
,
const
struct
SCatalogReq
*
pCatalogReq
,
const
struct
SMetaData
*
pMetaData
,
SQuery
*
pQuery
);
void
qDestroyQuery
(
SQuery
*
pQueryNode
);
int32_t
qExtractResultSchema
(
const
SNode
*
pRoot
,
int32_t
*
numOfCols
,
SSchema
**
pSchema
);
...
...
include/libs/qworker/qworker.h
浏览文件 @
c94ca28b
...
...
@@ -56,12 +56,6 @@ int32_t qWorkerProcessQueryMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg);
int32_t
qWorkerProcessCQueryMsg
(
void
*
node
,
void
*
qWorkerMgmt
,
SRpcMsg
*
pMsg
);
int32_t
qWorkerProcessDataSinkMsg
(
void
*
node
,
void
*
qWorkerMgmt
,
SRpcMsg
*
pMsg
);
int32_t
qWorkerProcessReadyMsg
(
void
*
node
,
void
*
qWorkerMgmt
,
SRpcMsg
*
pMsg
);
int32_t
qWorkerProcessStatusMsg
(
void
*
node
,
void
*
qWorkerMgmt
,
SRpcMsg
*
pMsg
);
int32_t
qWorkerProcessFetchMsg
(
void
*
node
,
void
*
qWorkerMgmt
,
SRpcMsg
*
pMsg
);
int32_t
qWorkerProcessFetchRsp
(
void
*
node
,
void
*
qWorkerMgmt
,
SRpcMsg
*
pMsg
);
...
...
@@ -72,10 +66,6 @@ int32_t qWorkerProcessDropMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg);
int32_t
qWorkerProcessHbMsg
(
void
*
node
,
void
*
qWorkerMgmt
,
SRpcMsg
*
pMsg
);
int32_t
qWorkerProcessShowMsg
(
void
*
node
,
void
*
qWorkerMgmt
,
SRpcMsg
*
pMsg
);
int32_t
qWorkerProcessShowFetchMsg
(
void
*
node
,
void
*
qWorkerMgmt
,
SRpcMsg
*
pMsg
);
void
qWorkerDestroy
(
void
**
qWorkerMgmt
);
#ifdef __cplusplus
...
...
include/util/taoserror.h
浏览文件 @
c94ca28b
...
...
@@ -643,6 +643,7 @@ int32_t* taosGetErrno();
#define TSDB_CODE_PAR_INVALID_DROP_COL TAOS_DEF_ERROR_CODE(0, 0x2651)
#define TSDB_CODE_PAR_INVALID_COL_JSON TAOS_DEF_ERROR_CODE(0, 0x2652)
#define TSDB_CODE_PAR_VALUE_TOO_LONG TAOS_DEF_ERROR_CODE(0, 0x2653)
#define TSDB_CODE_PAR_INTERNAL_ERROR TAOS_DEF_ERROR_CODE(0, 0x2654)
//planner
#define TSDB_CODE_PLAN_INTERNAL_ERROR TAOS_DEF_ERROR_CODE(0, 0x2700)
...
...
source/client/src/clientImpl.c
浏览文件 @
c94ca28b
...
...
@@ -566,7 +566,6 @@ int32_t removeMeta(STscObj* pTscObj, SArray* tbList) {
return
TSDB_CODE_SUCCESS
;
}
SRequestObj
*
execQuery
(
STscObj
*
pTscObj
,
const
char
*
sql
,
int
sqlLen
)
{
SRequestObj
*
pRequest
=
NULL
;
int32_t
retryNum
=
0
;
...
...
@@ -730,11 +729,6 @@ static void destroySendMsgInfo(SMsgSendInfo* pMsgBody) {
taosMemoryFreeClear
(
pMsgBody
);
}
bool
persistConnForSpecificMsg
(
void
*
parenct
,
tmsg_t
msgType
)
{
return
msgType
==
TDMT_VND_QUERY_RSP
||
msgType
==
TDMT_VND_FETCH_RSP
||
msgType
==
TDMT_VND_RES_READY_RSP
||
msgType
==
TDMT_VND_QUERY_HEARTBEAT_RSP
;
}
void
processMsgFromServer
(
void
*
parent
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
)
{
SMsgSendInfo
*
pSendInfo
=
(
SMsgSendInfo
*
)
pMsg
->
info
.
ahandle
;
assert
(
pMsg
->
info
.
ahandle
!=
NULL
);
...
...
source/common/src/tmsg.c
浏览文件 @
c94ca28b
...
...
@@ -3507,31 +3507,6 @@ int32_t tDeserializeSSchedulerHbRsp(void *buf, int32_t bufLen, SSchedulerHbRsp *
void
tFreeSSchedulerHbRsp
(
SSchedulerHbRsp
*
pRsp
)
{
taosArrayDestroy
(
pRsp
->
taskStatus
);
}
int32_t
tSerializeSQueryTableRsp
(
void
*
buf
,
int32_t
bufLen
,
SQueryTableRsp
*
pRsp
)
{
SEncoder
encoder
=
{
0
};
tEncoderInit
(
&
encoder
,
buf
,
bufLen
);
if
(
tStartEncode
(
&
encoder
)
<
0
)
return
-
1
;
if
(
tEncodeI32
(
&
encoder
,
pRsp
->
code
)
<
0
)
return
-
1
;
tEndEncode
(
&
encoder
);
int32_t
tlen
=
encoder
.
pos
;
tEncoderClear
(
&
encoder
);
return
tlen
;
}
int32_t
tDeserializeSQueryTableRsp
(
void
*
buf
,
int32_t
bufLen
,
SQueryTableRsp
*
pRsp
)
{
SDecoder
decoder
=
{
0
};
tDecoderInit
(
&
decoder
,
buf
,
bufLen
);
if
(
tStartDecode
(
&
decoder
)
<
0
)
return
-
1
;
if
(
tDecodeI32
(
&
decoder
,
&
pRsp
->
code
)
<
0
)
return
-
1
;
tEndDecode
(
&
decoder
);
tDecoderClear
(
&
decoder
);
return
0
;
}
int32_t
tSerializeSVCreateTbBatchRsp
(
void
*
buf
,
int32_t
bufLen
,
SVCreateTbBatchRsp
*
pRsp
)
{
// SEncoder encoder = {0};
// tEncoderInit(&encoder, buf, bufLen);
...
...
source/dnode/mgmt/mgmt_qnode/src/qmHandle.c
浏览文件 @
c94ca28b
...
...
@@ -101,8 +101,6 @@ SArray *qmGetMsgHandles() {
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_FETCH_RSP
,
qmPutNodeMsgToFetchQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_QUERY_HEARTBEAT
,
qmPutNodeMsgToFetchQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_RES_READY
,
qmPutNodeMsgToFetchQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_TASKS_STATUS
,
qmPutNodeMsgToFetchQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_CANCEL_TASK
,
qmPutNodeMsgToFetchQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_DROP_TASK
,
qmPutNodeMsgToFetchQueue
,
1
)
==
NULL
)
goto
_OVER
;
...
...
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
浏览文件 @
c94ca28b
...
...
@@ -292,8 +292,6 @@ SArray *vmGetMsgHandles() {
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_MQ_CONNECT
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_MQ_DISCONNECT
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
// if (dmSetMgmtHandle(pArray, TDMT_VND_MQ_SET_CUR, vmPutNodeMsgToWriteQueue, 0)== NULL) goto _OVER;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_RES_READY
,
vmPutNodeMsgToFetchQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_TASKS_STATUS
,
vmPutNodeMsgToFetchQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_CANCEL_TASK
,
vmPutNodeMsgToFetchQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_DROP_TASK
,
vmPutNodeMsgToFetchQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_CREATE_STB
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
...
...
source/dnode/mgmt/node_mgmt/src/dmTransport.c
浏览文件 @
c94ca28b
...
...
@@ -64,6 +64,8 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) {
}
else
if
(
pRpc
->
msgType
==
TDMT_MND_SYSTABLE_RETRIEVE_RSP
||
pRpc
->
msgType
==
TDMT_VND_FETCH_RSP
)
{
qWorkerProcessFetchRsp
(
NULL
,
NULL
,
pRpc
);
return
;
}
else
if
(
pRpc
->
msgType
==
TDMT_MND_STATUS_RSP
&&
pEpSet
!=
NULL
)
{
dmSetMnodeEpSet
(
&
pDnode
->
data
,
pEpSet
);
}
else
{
}
...
...
source/dnode/mgmt/node_util/src/dmEps.c
浏览文件 @
c94ca28b
...
...
@@ -326,6 +326,7 @@ void dmGetMnodeEpSetForRedirect(SDnodeData *pData, SRpcMsg *pMsg, SEpSet *pEpSet
}
void
dmSetMnodeEpSet
(
SDnodeData
*
pData
,
SEpSet
*
pEpSet
)
{
if
(
memcmp
(
pEpSet
,
&
pData
->
mnodeEps
,
sizeof
(
SEpSet
))
==
0
)
return
;
taosThreadRwlockWrlock
(
&
pData
->
lock
);
pData
->
mnodeEps
=
*
pEpSet
;
taosThreadRwlockUnlock
(
&
pData
->
lock
);
...
...
source/dnode/mnode/impl/inc/mndDef.h
浏览文件 @
c94ca28b
...
...
@@ -124,6 +124,11 @@ typedef enum {
TRN_POLICY_RETRY
=
1
,
}
ETrnPolicy
;
typedef
enum
{
TRN_EXEC_PARALLEL
=
0
,
TRN_EXEC_ONE_BY_ONE
=
1
,
}
ETrnExecType
;
typedef
enum
{
DND_REASON_ONLINE
=
0
,
DND_REASON_STATUS_MSG_TIMEOUT
,
...
...
@@ -152,6 +157,7 @@ typedef struct {
ETrnStage
stage
;
ETrnPolicy
policy
;
ETrnType
type
;
ETrnExecType
parallel
;
int32_t
code
;
int32_t
failedTimes
;
SRpcHandleInfo
rpcInfo
;
...
...
source/dnode/mnode/impl/inc/mndInt.h
浏览文件 @
c94ca28b
...
...
@@ -81,6 +81,7 @@ typedef struct {
bool
standby
;
bool
restored
;
int32_t
errCode
;
int32_t
transId
;
}
SSyncMgmt
;
typedef
struct
{
...
...
source/dnode/mnode/impl/inc/mndSync.h
浏览文件 @
c94ca28b
...
...
@@ -25,7 +25,7 @@ extern "C" {
int32_t
mndInitSync
(
SMnode
*
pMnode
);
void
mndCleanupSync
(
SMnode
*
pMnode
);
bool
mndIsMaster
(
SMnode
*
pMnode
);
int32_t
mndSyncPropose
(
SMnode
*
pMnode
,
SSdbRaw
*
pRaw
);
int32_t
mndSyncPropose
(
SMnode
*
pMnode
,
SSdbRaw
*
pRaw
,
int32_t
transId
);
void
mndSyncStart
(
SMnode
*
pMnode
);
void
mndSyncStop
(
SMnode
*
pMnode
);
...
...
source/dnode/mnode/impl/inc/mndTrans.h
浏览文件 @
c94ca28b
...
...
@@ -57,6 +57,7 @@ int32_t mndTransAppendUndoAction(STrans *pTrans, STransAction *pAction);
void
mndTransSetRpcRsp
(
STrans
*
pTrans
,
void
*
pCont
,
int32_t
contLen
);
void
mndTransSetCb
(
STrans
*
pTrans
,
ETrnFuncType
startFunc
,
ETrnFuncType
stopFunc
,
void
*
param
,
int32_t
paramLen
);
void
mndTransSetDbInfo
(
STrans
*
pTrans
,
SDbObj
*
pDb
);
void
mndTransSetExecOneByOne
(
STrans
*
pTrans
);
int32_t
mndTransPrepare
(
SMnode
*
pMnode
,
STrans
*
pTrans
);
void
mndTransProcessRsp
(
SRpcMsg
*
pRsp
);
...
...
source/dnode/mnode/impl/src/mndMnode.c
浏览文件 @
c94ca28b
...
...
@@ -313,16 +313,16 @@ static int32_t mndSetCreateMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDno
memcpy
(
createEpset
.
eps
[
0
].
fqdn
,
pDnode
->
fqdn
,
TSDB_FQDN_LEN
);
{
int32_t
contLen
=
tSerializeSDCreateMnodeReq
(
NULL
,
0
,
&
alter
Req
);
int32_t
contLen
=
tSerializeSDCreateMnodeReq
(
NULL
,
0
,
&
create
Req
);
void
*
pReq
=
taosMemoryMalloc
(
contLen
);
tSerializeSDCreateMnodeReq
(
pReq
,
contLen
,
&
alter
Req
);
tSerializeSDCreateMnodeReq
(
pReq
,
contLen
,
&
create
Req
);
STransAction
action
=
{
.
epSet
=
alter
Epset
,
.
epSet
=
create
Epset
,
.
pCont
=
pReq
,
.
contLen
=
contLen
,
.
msgType
=
TDMT_DND_
ALTER
_MNODE
,
.
acceptableCode
=
0
,
.
msgType
=
TDMT_DND_
CREATE
_MNODE
,
.
acceptableCode
=
TSDB_CODE_NODE_ALREADY_DEPLOYED
,
};
if
(
mndTransAppendRedoAction
(
pTrans
,
&
action
)
!=
0
)
{
...
...
@@ -332,16 +332,16 @@ static int32_t mndSetCreateMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDno
}
{
int32_t
contLen
=
tSerializeSDCreateMnodeReq
(
NULL
,
0
,
&
create
Req
);
int32_t
contLen
=
tSerializeSDCreateMnodeReq
(
NULL
,
0
,
&
alter
Req
);
void
*
pReq
=
taosMemoryMalloc
(
contLen
);
tSerializeSDCreateMnodeReq
(
pReq
,
contLen
,
&
create
Req
);
tSerializeSDCreateMnodeReq
(
pReq
,
contLen
,
&
alter
Req
);
STransAction
action
=
{
.
epSet
=
create
Epset
,
.
epSet
=
alter
Epset
,
.
pCont
=
pReq
,
.
contLen
=
contLen
,
.
msgType
=
TDMT_DND_
CREATE
_MNODE
,
.
acceptableCode
=
TSDB_CODE_NODE_ALREADY_DEPLOYED
,
.
msgType
=
TDMT_DND_
ALTER
_MNODE
,
.
acceptableCode
=
0
,
};
if
(
mndTransAppendRedoAction
(
pTrans
,
&
action
)
!=
0
)
{
...
...
@@ -365,6 +365,7 @@ static int32_t mndCreateMnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode,
if
(
pTrans
==
NULL
)
goto
_OVER
;
mDebug
(
"trans:%d, used to create mnode:%d"
,
pTrans
->
id
,
pCreate
->
dnodeId
);
mndTransSetExecOneByOne
(
pTrans
);
if
(
mndSetCreateMnodeRedoLogs
(
pMnode
,
pTrans
,
&
mnodeObj
)
!=
0
)
goto
_OVER
;
if
(
mndSetCreateMnodeCommitLogs
(
pMnode
,
pTrans
,
&
mnodeObj
)
!=
0
)
goto
_OVER
;
if
(
mndSetCreateMnodeRedoActions
(
pMnode
,
pTrans
,
pDnode
,
&
mnodeObj
)
!=
0
)
goto
_OVER
;
...
...
@@ -536,7 +537,7 @@ static int32_t mndDropMnode(SMnode *pMnode, SRpcMsg *pReq, SMnodeObj *pObj) {
if
(
pTrans
==
NULL
)
goto
_OVER
;
mDebug
(
"trans:%d, used to drop mnode:%d"
,
pTrans
->
id
,
pObj
->
id
);
mndTransSetExecOneByOne
(
pTrans
);
if
(
mndSetDropMnodeRedoLogs
(
pMnode
,
pTrans
,
pObj
)
!=
0
)
goto
_OVER
;
if
(
mndSetDropMnodeCommitLogs
(
pMnode
,
pTrans
,
pObj
)
!=
0
)
goto
_OVER
;
if
(
mndSetDropMnodeRedoActions
(
pMnode
,
pTrans
,
pObj
->
pDnode
,
pObj
)
!=
0
)
goto
_OVER
;
...
...
@@ -701,14 +702,17 @@ static int32_t mndProcessAlterMnodeReq(SRpcMsg *pReq) {
}
}
mTrace
(
"trans:-1, sync reconfig will be proposed"
);
SSyncMgmt
*
pMgmt
=
&
pMnode
->
syncMgmt
;
pMgmt
->
standby
=
0
;
int32_t
code
=
syncReconfig
(
pMgmt
->
sync
,
&
cfg
);
if
(
code
!=
0
)
{
mError
(
"
failed to alter mnode sync
since %s"
,
terrstr
());
mError
(
"
trans:-1, failed to propose sync reconfig
since %s"
,
terrstr
());
return
code
;
}
else
{
pMgmt
->
errCode
=
0
;
pMgmt
->
transId
=
-
1
;
tsem_wait
(
&
pMgmt
->
syncSem
);
mInfo
(
"alter mnode sync result:%s"
,
tstrerror
(
pMgmt
->
errCode
));
terrno
=
pMgmt
->
errCode
;
...
...
source/dnode/mnode/impl/src/mndSma.c
浏览文件 @
c94ca28b
...
...
@@ -507,6 +507,7 @@ static int32_t mndCreateSma(SMnode *pMnode, SRpcMsg *pReq, SMCreateSmaReq *pCrea
mDebug
(
"trans:%d, used to create sma:%s"
,
pTrans
->
id
,
pCreate
->
name
);
mndTransSetDbInfo
(
pTrans
,
pDb
);
mndTransSetExecOneByOne
(
pTrans
);
if
(
mndSetCreateSmaRedoLogs
(
pMnode
,
pTrans
,
&
smaObj
)
!=
0
)
goto
_OVER
;
if
(
mndSetCreateSmaVgroupRedoLogs
(
pMnode
,
pTrans
,
&
streamObj
.
fixedSinkVg
)
!=
0
)
goto
_OVER
;
...
...
source/dnode/mnode/impl/src/mndSync.c
浏览文件 @
c94ca28b
...
...
@@ -29,15 +29,25 @@ int32_t mndSyncSendMsg(const SEpSet *pEpSet, SRpcMsg *pMsg) { return tmsgSendReq
void
mndSyncCommitMsg
(
struct
SSyncFSM
*
pFsm
,
const
SRpcMsg
*
pMsg
,
SFsmCbMeta
cbMeta
)
{
SMnode
*
pMnode
=
pFsm
->
data
;
SSyncMgmt
*
pMgmt
=
&
pMnode
->
syncMgmt
;
SSdbRaw
*
pRaw
=
pMsg
->
pCont
;
mTrace
(
"raw:%p, apply to sdb, ver:%"
PRId64
" term:%"
PRId64
" role:%s"
,
pRaw
,
cbMeta
.
index
,
cbMeta
.
term
,
syncStr
(
cbMeta
.
state
));
int32_t
transId
=
sdbGetIdFromRaw
(
pRaw
);
pMgmt
->
errCode
=
cbMeta
.
code
;
mTrace
(
"trans:%d, is proposed, savedTransId:%d code:0x%x, ver:%"
PRId64
" term:%"
PRId64
" role:%s raw:%p"
,
transId
,
pMgmt
->
transId
,
cbMeta
.
code
,
cbMeta
.
index
,
cbMeta
.
term
,
syncStr
(
cbMeta
.
state
),
pRaw
);
if
(
pMgmt
->
errCode
==
0
)
{
sdbWriteWithoutFree
(
pMnode
->
pSdb
,
pRaw
);
sdbSetApplyIndex
(
pMnode
->
pSdb
,
cbMeta
.
index
);
sdbSetApplyTerm
(
pMnode
->
pSdb
,
cbMeta
.
term
);
if
(
cbMeta
.
state
==
TAOS_SYNC_STATE_LEADER
)
{
tsem_post
(
&
pMnode
->
syncMgmt
.
syncSem
);
}
if
(
pMgmt
->
transId
==
transId
)
{
if
(
pMgmt
->
errCode
!=
0
)
{
mError
(
"trans:%d, failed to propose since %s"
,
transId
,
tstrerror
(
pMgmt
->
errCode
));
}
tsem_post
(
&
pMgmt
->
syncSem
);
}
}
...
...
@@ -78,11 +88,19 @@ int32_t mndSnapshotApply(struct SSyncFSM* pFsm, const SSnapshot* pSnapshot, char
}
void
mndReConfig
(
struct
SSyncFSM
*
pFsm
,
SSyncCfg
newCfg
,
SReConfigCbMeta
cbMeta
)
{
mInfo
(
"mndReConfig cbMeta.code:%d, cbMeta.currentTerm:%"
PRId64
", cbMeta.term:%"
PRId64
", cbMeta.index:%"
PRId64
,
cbMeta
.
code
,
cbMeta
.
currentTerm
,
cbMeta
.
term
,
cbMeta
.
index
);
SMnode
*
pMnode
=
pFsm
->
data
;
pMnode
->
syncMgmt
.
errCode
=
cbMeta
.
code
;
tsem_post
(
&
pMnode
->
syncMgmt
.
syncSem
);
SSyncMgmt
*
pMgmt
=
&
pMnode
->
syncMgmt
;
pMgmt
->
errCode
=
cbMeta
.
code
;
mInfo
(
"trans:-1, sync reconfig is proposed, savedTransId:%d code:0x%x, curTerm:%"
PRId64
" term:%"
PRId64
,
pMgmt
->
transId
,
cbMeta
.
code
,
cbMeta
.
index
,
cbMeta
.
term
);
if
(
pMgmt
->
transId
==
-
1
)
{
if
(
pMgmt
->
errCode
!=
0
)
{
mError
(
"trans:-1, failed to propose sync reconfig since %s"
,
tstrerror
(
pMgmt
->
errCode
));
}
tsem_post
(
&
pMgmt
->
syncSem
);
}
}
SSyncFSM
*
mndSyncMakeFsm
(
SMnode
*
pMnode
)
{
...
...
@@ -165,15 +183,17 @@ void mndCleanupSync(SMnode *pMnode) {
memset
(
pMgmt
,
0
,
sizeof
(
SSyncMgmt
));
}
int32_t
mndSyncPropose
(
SMnode
*
pMnode
,
SSdbRaw
*
pRaw
)
{
int32_t
mndSyncPropose
(
SMnode
*
pMnode
,
SSdbRaw
*
pRaw
,
int32_t
transId
)
{
SSyncMgmt
*
pMgmt
=
&
pMnode
->
syncMgmt
;
pMgmt
->
errCode
=
0
;
SRpcMsg
rsp
=
{.
code
=
TDMT_MND_APPLY_MSG
,
.
contLen
=
sdbGetRawTotalSize
(
pRaw
)};
rsp
.
pCont
=
rpcMallocCont
(
rsp
.
contLen
);
if
(
rsp
.
pCont
==
NULL
)
return
-
1
;
memcpy
(
rsp
.
pCont
,
pRaw
,
rsp
.
contLen
);
pMgmt
->
errCode
=
0
;
pMgmt
->
transId
=
transId
;
mTrace
(
"trans:%d, will be proposed"
,
pMgmt
->
transId
);
const
bool
isWeak
=
false
;
int32_t
code
=
syncPropose
(
pMgmt
->
sync
,
&
rsp
,
isWeak
);
if
(
code
==
0
)
{
...
...
@@ -187,7 +207,11 @@ int32_t mndSyncPropose(SMnode *pMnode, SSdbRaw *pRaw) {
}
rpcFreeCont
(
rsp
.
pCont
);
if
(
code
!=
0
)
return
code
;
if
(
code
!=
0
)
{
mError
(
"trans:%d, failed to propose, code:0x%x"
,
pMgmt
->
transId
,
code
);
return
code
;
}
return
pMgmt
->
errCode
;
}
...
...
source/dnode/mnode/impl/src/mndTrans.c
浏览文件 @
c94ca28b
...
...
@@ -140,6 +140,7 @@ static SSdbRaw *mndTransActionEncode(STrans *pTrans) {
SDB_SET_INT16
(
pRaw
,
dataPos
,
stage
,
_OVER
)
SDB_SET_INT16
(
pRaw
,
dataPos
,
pTrans
->
policy
,
_OVER
)
SDB_SET_INT16
(
pRaw
,
dataPos
,
pTrans
->
type
,
_OVER
)
SDB_SET_INT16
(
pRaw
,
dataPos
,
pTrans
->
parallel
,
_OVER
)
SDB_SET_INT64
(
pRaw
,
dataPos
,
pTrans
->
createdTime
,
_OVER
)
SDB_SET_INT64
(
pRaw
,
dataPos
,
pTrans
->
dbUid
,
_OVER
)
SDB_SET_BINARY
(
pRaw
,
dataPos
,
pTrans
->
dbname
,
TSDB_DB_FNAME_LEN
,
_OVER
)
...
...
@@ -245,12 +246,15 @@ static SSdbRow *mndTransActionDecode(SSdbRaw *pRaw) {
int16_t
stage
=
0
;
int16_t
policy
=
0
;
int16_t
type
=
0
;
int16_t
parallel
=
0
;
SDB_GET_INT16
(
pRaw
,
dataPos
,
&
stage
,
_OVER
)
SDB_GET_INT16
(
pRaw
,
dataPos
,
&
policy
,
_OVER
)
SDB_GET_INT16
(
pRaw
,
dataPos
,
&
type
,
_OVER
)
SDB_GET_INT16
(
pRaw
,
dataPos
,
&
parallel
,
_OVER
)
pTrans
->
stage
=
stage
;
pTrans
->
policy
=
policy
;
pTrans
->
type
=
type
;
pTrans
->
parallel
=
parallel
;
SDB_GET_INT64
(
pRaw
,
dataPos
,
&
pTrans
->
createdTime
,
_OVER
)
SDB_GET_INT64
(
pRaw
,
dataPos
,
&
pTrans
->
dbUid
,
_OVER
)
SDB_GET_BINARY
(
pRaw
,
dataPos
,
pTrans
->
dbname
,
TSDB_DB_FNAME_LEN
,
_OVER
)
...
...
@@ -665,6 +669,8 @@ void mndTransSetDbInfo(STrans *pTrans, SDbObj *pDb) {
memcpy
(
pTrans
->
dbname
,
pDb
->
name
,
TSDB_DB_FNAME_LEN
);
}
void
mndTransSetExecOneByOne
(
STrans
*
pTrans
)
{
pTrans
->
parallel
=
TRN_EXEC_ONE_BY_ONE
;
}
static
int32_t
mndTransSync
(
SMnode
*
pMnode
,
STrans
*
pTrans
)
{
SSdbRaw
*
pRaw
=
mndTransActionEncode
(
pTrans
);
if
(
pRaw
==
NULL
)
{
...
...
@@ -674,7 +680,7 @@ static int32_t mndTransSync(SMnode *pMnode, STrans *pTrans) {
sdbSetRawStatus
(
pRaw
,
SDB_STATUS_READY
);
mDebug
(
"trans:%d, sync to other nodes"
,
pTrans
->
id
);
int32_t
code
=
mndSyncPropose
(
pMnode
,
pRaw
);
int32_t
code
=
mndSyncPropose
(
pMnode
,
pRaw
,
pTrans
->
id
);
if
(
code
!=
0
)
{
mError
(
"trans:%d, failed to sync since %s"
,
pTrans
->
id
,
terrstr
());
sdbFreeRaw
(
pRaw
);
...
...
@@ -970,7 +976,18 @@ static int32_t mndTransSendActionMsg(SMnode *pMnode, STrans *pTrans, SArray *pAr
for
(
int32_t
action
=
0
;
action
<
numOfActions
;
++
action
)
{
STransAction
*
pAction
=
taosArrayGet
(
pArray
,
action
);
if
(
pAction
==
NULL
)
continue
;
if
(
pAction
->
msgSent
)
continue
;
if
(
pAction
->
msgSent
)
{
if
(
pAction
->
msgReceived
)
{
continue
;
}
else
{
if
(
pTrans
->
parallel
==
TRN_EXEC_ONE_BY_ONE
)
{
break
;
}
else
{
continue
;
}
}
}
int64_t
signature
=
pTrans
->
id
;
signature
=
(
signature
<<
32
);
...
...
@@ -990,6 +1007,9 @@ static int32_t mndTransSendActionMsg(SMnode *pMnode, STrans *pTrans, SArray *pAr
pAction
->
msgSent
=
1
;
pAction
->
msgReceived
=
0
;
pAction
->
errCode
=
0
;
if
(
pTrans
->
parallel
==
TRN_EXEC_ONE_BY_ONE
)
{
break
;
}
}
else
{
pAction
->
msgSent
=
0
;
pAction
->
msgReceived
=
0
;
...
...
source/dnode/mnode/sdb/inc/sdb.h
浏览文件 @
c94ca28b
...
...
@@ -386,6 +386,8 @@ SSdbIter *sdbIterRead(SSdb *pSdb, SSdbIter *iter, char **ppBuf, int32_t *len);
const
char
*
sdbTableName
(
ESdbType
type
);
void
sdbPrintOper
(
SSdb
*
pSdb
,
SSdbRow
*
pRow
,
const
char
*
oper
);
int32_t
sdbGetIdFromRaw
(
SSdbRaw
*
pRaw
);
#ifdef __cplusplus
}
#endif
...
...
source/dnode/mnode/sdb/src/sdbRaw.c
浏览文件 @
c94ca28b
...
...
@@ -16,6 +16,11 @@
#define _DEFAULT_SOURCE
#include "sdb.h"
int32_t
sdbGetIdFromRaw
(
SSdbRaw
*
pRaw
)
{
int32_t
id
=
*
((
int32_t
*
)(
pRaw
->
pData
));
return
id
;
}
SSdbRaw
*
sdbAllocRaw
(
ESdbType
type
,
int8_t
sver
,
int32_t
dataLen
)
{
SSdbRaw
*
pRaw
=
taosMemoryCalloc
(
1
,
dataLen
+
sizeof
(
SSdbRaw
));
if
(
pRaw
==
NULL
)
{
...
...
source/dnode/qnode/src/qnode.c
浏览文件 @
c94ca28b
...
...
@@ -60,21 +60,12 @@ int32_t qndProcessQueryMsg(SQnode *pQnode, SRpcMsg *pMsg) {
case
TDMT_VND_FETCH_RSP
:
code
=
qWorkerProcessFetchRsp
(
pQnode
,
pQnode
->
pQuery
,
pMsg
);
break
;
case
TDMT_VND_RES_READY
:
code
=
qWorkerProcessReadyMsg
(
pQnode
,
pQnode
->
pQuery
,
pMsg
);
break
;
case
TDMT_VND_TASKS_STATUS
:
code
=
qWorkerProcessStatusMsg
(
pQnode
,
pQnode
->
pQuery
,
pMsg
);
break
;
case
TDMT_VND_CANCEL_TASK
:
code
=
qWorkerProcessCancelMsg
(
pQnode
,
pQnode
->
pQuery
,
pMsg
);
break
;
case
TDMT_VND_DROP_TASK
:
code
=
qWorkerProcessDropMsg
(
pQnode
,
pQnode
->
pQuery
,
pMsg
);
break
;
case
TDMT_VND_TABLE_META
:
// code = vnodeGetTableMeta(pQnode, pMsg);
// break;
case
TDMT_VND_CONSUME
:
// code = tqProcessConsumeReq(pQnode->pTq, pMsg);
// break;
...
...
source/dnode/vnode/src/vnd/vnodeSvr.c
浏览文件 @
c94ca28b
...
...
@@ -209,10 +209,6 @@ int vnodeProcessFetchMsg(SVnode *pVnode, SRpcMsg *pMsg, SQueueInfo *pInfo) {
return
qWorkerProcessFetchMsg
(
pVnode
,
pVnode
->
pQuery
,
pMsg
);
case
TDMT_VND_FETCH_RSP
:
return
qWorkerProcessFetchRsp
(
pVnode
,
pVnode
->
pQuery
,
pMsg
);
case
TDMT_VND_RES_READY
:
return
qWorkerProcessReadyMsg
(
pVnode
,
pVnode
->
pQuery
,
pMsg
);
case
TDMT_VND_TASKS_STATUS
:
return
qWorkerProcessStatusMsg
(
pVnode
,
pVnode
->
pQuery
,
pMsg
);
case
TDMT_VND_CANCEL_TASK
:
return
qWorkerProcessCancelMsg
(
pVnode
,
pVnode
->
pQuery
,
pMsg
);
case
TDMT_VND_DROP_TASK
:
...
...
source/libs/function/src/builtins.c
浏览文件 @
c94ca28b
...
...
@@ -621,8 +621,10 @@ static int32_t translateTail(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
SValueNode
*
pValue
=
(
SValueNode
*
)
pParamNode
;
if
(
pValue
->
datum
.
i
<
((
i
>
1
)
?
0
:
1
)
||
pValue
->
datum
.
i
>
1000
)
{
return
invaildFuncParaValueErrMsg
(
pErrBuf
,
len
,
pFunc
->
functionName
);
if
(
pValue
->
datum
.
i
<
((
i
>
1
)
?
0
:
1
)
||
pValue
->
datum
.
i
>
100
)
{
return
buildFuncErrMsg
(
pErrBuf
,
len
,
TSDB_CODE_FUNC_FUNTION_ERROR
,
"TAIL function second parameter should be in range [1, 100], "
"third parameter should be in range [0, 100]"
);
}
pValue
->
notReserved
=
true
;
...
...
source/libs/function/src/builtinsimpl.c
浏览文件 @
c94ca28b
...
...
@@ -2349,7 +2349,7 @@ static void doHandleDiff(SDiffInfo* pDiffInfo, int32_t type, const char* pv, SCo
case
TSDB_DATA_TYPE_FLOAT
:
{
float
v
=
*
(
float
*
)
pv
;
float
delta
=
factor
*
(
v
-
pDiffInfo
->
prev
.
d64
);
// direct previous may be null
if
(
delta
<
0
&&
pDiffInfo
->
ignoreNegative
)
{
if
(
(
delta
<
0
&&
pDiffInfo
->
ignoreNegative
)
||
isinf
(
delta
)
||
isnan
(
delta
))
{
//check for overflow
colDataSetNull_f
(
pOutput
->
nullbitmap
,
pos
);
}
else
{
colDataAppendFloat
(
pOutput
,
pos
,
&
delta
);
...
...
@@ -2360,7 +2360,7 @@ static void doHandleDiff(SDiffInfo* pDiffInfo, int32_t type, const char* pv, SCo
case
TSDB_DATA_TYPE_DOUBLE
:
{
double
v
=
*
(
double
*
)
pv
;
double
delta
=
factor
*
(
v
-
pDiffInfo
->
prev
.
d64
);
// direct previous may be null
if
(
delta
<
0
&&
pDiffInfo
->
ignoreNegative
)
{
if
(
(
delta
<
0
&&
pDiffInfo
->
ignoreNegative
)
||
isinf
(
delta
)
||
isnan
(
delta
))
{
//check for overflow
colDataSetNull_f
(
pOutput
->
nullbitmap
,
pos
);
}
else
{
colDataAppendDouble
(
pOutput
,
pos
,
&
delta
);
...
...
@@ -3530,8 +3530,13 @@ int32_t csumFunction(SqlFunctionCtx* pCtx) {
double
v
;
GET_TYPED_DATA
(
v
,
double
,
type
,
data
);
pSumRes
->
dsum
+=
v
;
//check for overflow
if
(
isinf
(
pSumRes
->
dsum
)
||
isnan
(
pSumRes
->
dsum
))
{
colDataAppendNULL
(
pOutput
,
pos
);
}
else
{
colDataAppend
(
pOutput
,
pos
,
(
char
*
)
&
pSumRes
->
dsum
,
false
);
}
}
//TODO: remove this after pTsOutput is handled
if
(
pTsOutput
!=
NULL
)
{
...
...
@@ -3604,7 +3609,12 @@ int32_t mavgFunction(SqlFunctionCtx* pCtx) {
pInfo
->
points
[
pInfo
->
pos
]
=
v
;
double
result
=
pInfo
->
sum
/
pInfo
->
numOfPoints
;
//check for overflow
if
(
isinf
(
result
)
||
isnan
(
result
))
{
colDataAppendNULL
(
pOutput
,
pos
);
}
else
{
colDataAppend
(
pOutput
,
pos
,
(
char
*
)
&
result
,
false
);
}
//TODO: remove this after pTsOutput is handled
if
(
pTsOutput
!=
NULL
)
{
...
...
source/libs/parser/inc/parAst.h
浏览文件 @
c94ca28b
...
...
@@ -34,6 +34,7 @@ typedef struct SAstCreateContext {
int16_t
placeholderNo
;
SArray
*
pPlaceholderValues
;
int32_t
errCode
;
SParseMetaCache
*
pMetaCache
;
}
SAstCreateContext
;
typedef
enum
EDatabaseOptionType
{
...
...
@@ -74,7 +75,7 @@ typedef struct SAlterOption {
extern
SToken
nil_token
;
void
initAstCreateContext
(
SParseContext
*
pParseCxt
,
SAstCreateContext
*
pCxt
);
int32_t
initAstCreateContext
(
SParseContext
*
pParseCxt
,
SAstCreateContext
*
pCxt
);
SNode
*
createRawExprNode
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pToken
,
SNode
*
pNode
);
SNode
*
createRawExprNodeExt
(
SAstCreateContext
*
pCxt
,
const
SToken
*
pStart
,
const
SToken
*
pEnd
,
SNode
*
pNode
);
...
...
source/libs/parser/inc/parUtil.h
浏览文件 @
c94ca28b
...
...
@@ -20,6 +20,7 @@
extern
"C"
{
#endif
#include "catalog.h"
#include "os.h"
#include "query.h"
...
...
@@ -37,6 +38,13 @@ typedef struct SMsgBuf {
char
*
buf
;
}
SMsgBuf
;
typedef
struct
SParseMetaCache
{
SHashObj
*
pTableMeta
;
// key is tbFName, element is STableMeta*
SHashObj
*
pDbVgroup
;
// key is dbFName, element is SArray<SVgroupInfo>*
SHashObj
*
pTableVgroup
;
// key is tbFName, element is SVgroupInfo*
SHashObj
*
pDbCfg
;
// key is tbFName, element is SDbCfgInfo
}
SParseMetaCache
;
int32_t
generateSyntaxErrMsg
(
SMsgBuf
*
pBuf
,
int32_t
errCode
,
...);
int32_t
buildInvalidOperationMsg
(
SMsgBuf
*
pMsgBuf
,
const
char
*
msg
);
int32_t
buildSyntaxErrMsg
(
SMsgBuf
*
pBuf
,
const
char
*
additionalInfo
,
const
char
*
sourceStr
);
...
...
@@ -47,10 +55,20 @@ int32_t getNumOfColumns(const STableMeta* pTableMeta);
int32_t
getNumOfTags
(
const
STableMeta
*
pTableMeta
);
STableComInfo
getTableInfo
(
const
STableMeta
*
pTableMeta
);
STableMeta
*
tableMetaDup
(
const
STableMeta
*
pTableMeta
);
int
parseJsontoTagData
(
const
char
*
json
,
SKVRowBuilder
*
kvRowBuilder
,
SMsgBuf
*
errMsg
,
int16_t
startColId
);
int
32_t
parseJsontoTagData
(
const
char
*
json
,
SKVRowBuilder
*
kvRowBuilder
,
SMsgBuf
*
errMsg
,
int16_t
startColId
);
int32_t
trimString
(
const
char
*
src
,
int32_t
len
,
char
*
dst
,
int32_t
dlen
);
int32_t
buildCatalogReq
(
const
SParseMetaCache
*
pMetaCache
,
SCatalogReq
*
pCatalogReq
);
int32_t
putMetaDataToCache
(
const
SCatalogReq
*
pCatalogReq
,
const
SMetaData
*
pMetaData
,
SParseMetaCache
*
pMetaCache
);
int32_t
reserveTableMetaInCache
(
int32_t
acctId
,
const
char
*
pDb
,
const
char
*
pTable
,
SParseMetaCache
*
pMetaCache
);
int32_t
getTableMetaFromCache
(
SParseMetaCache
*
pMetaCache
,
const
SName
*
pName
,
STableMeta
**
pMeta
);
int32_t
getDBVgInfoFromCache
(
SParseMetaCache
*
pMetaCache
,
const
char
*
pDbFName
,
SArray
**
pVgInfo
);
int32_t
getTableHashVgroupFromCache
(
SParseMetaCache
*
pMetaCache
,
const
SName
*
pName
,
SVgroupInfo
*
pVgroup
);
int32_t
getDBVgVersionFromCache
(
SParseMetaCache
*
pMetaCache
,
const
char
*
pDbFName
,
int32_t
*
pVersion
,
int64_t
*
pDbId
,
int32_t
*
pTableNum
);
int32_t
getDBCfgFromCache
(
SParseMetaCache
*
pMetaCache
,
const
char
*
pDbFName
,
SDbCfgInfo
*
pInfo
);
#ifdef __cplusplus
}
#endif
...
...
source/libs/parser/src/parAstCreater.c
浏览文件 @
c94ca28b
...
...
@@ -38,7 +38,8 @@
SToken
nil_token
=
{.
type
=
TK_NK_NIL
,
.
n
=
0
,
.
z
=
NULL
};
void
initAstCreateContext
(
SParseContext
*
pParseCxt
,
SAstCreateContext
*
pCxt
)
{
int32_t
initAstCreateContext
(
SParseContext
*
pParseCxt
,
SAstCreateContext
*
pCxt
)
{
memset
(
pCxt
,
0
,
sizeof
(
SAstCreateContext
));
pCxt
->
pQueryCxt
=
pParseCxt
;
pCxt
->
msgBuf
.
buf
=
pParseCxt
->
pMsg
;
pCxt
->
msgBuf
.
len
=
pParseCxt
->
msgLen
;
...
...
@@ -47,6 +48,13 @@ void initAstCreateContext(SParseContext* pParseCxt, SAstCreateContext* pCxt) {
pCxt
->
placeholderNo
=
0
;
pCxt
->
pPlaceholderValues
=
NULL
;
pCxt
->
errCode
=
TSDB_CODE_SUCCESS
;
if
(
pParseCxt
->
async
)
{
pCxt
->
pMetaCache
=
taosMemoryCalloc
(
1
,
sizeof
(
SParseMetaCache
));
if
(
NULL
==
pCxt
->
pMetaCache
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
return
TSDB_CODE_SUCCESS
;
}
static
void
copyStringFormStringToken
(
SToken
*
pToken
,
char
*
pBuf
,
int32_t
len
)
{
...
...
@@ -464,6 +472,13 @@ SNode* createRealTableNode(SAstCreateContext* pCxt, SToken* pDbName, SToken* pTa
strncpy
(
realTable
->
table
.
tableAlias
,
pTableName
->
z
,
pTableName
->
n
);
}
strncpy
(
realTable
->
table
.
tableName
,
pTableName
->
z
,
pTableName
->
n
);
if
(
NULL
!=
pCxt
->
pMetaCache
)
{
if
(
TSDB_CODE_SUCCESS
!=
reserveTableMetaInCache
(
pCxt
->
pQueryCxt
->
acctId
,
realTable
->
table
.
dbName
,
realTable
->
table
.
tableName
,
pCxt
->
pMetaCache
))
{
nodesDestroyNode
(
realTable
);
CHECK_OUT_OF_MEM
(
NULL
);
}
}
return
(
SNode
*
)
realTable
;
}
...
...
source/libs/parser/src/parAstParser.c
浏览文件 @
c94ca28b
...
...
@@ -82,6 +82,7 @@ abort_parse:
(
*
pQuery
)
->
pRoot
=
cxt
.
pRootNode
;
(
*
pQuery
)
->
placeholderNum
=
cxt
.
placeholderNo
;
TSWAP
((
*
pQuery
)
->
pPlaceholderValues
,
cxt
.
pPlaceholderValues
);
TSWAP
((
*
pQuery
)
->
pMetaCache
,
cxt
.
pMetaCache
);
}
taosArrayDestroy
(
cxt
.
pPlaceholderValues
);
return
cxt
.
errCode
;
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
c94ca28b
...
...
@@ -40,6 +40,7 @@ typedef struct STranslateContext {
SHashObj
*
pDbs
;
SHashObj
*
pTables
;
SExplainOptions
*
pExplainOpt
;
SParseMetaCache
*
pMetaCache
;
}
STranslateContext
;
typedef
struct
SFullDatabaseName
{
...
...
@@ -102,13 +103,18 @@ static int32_t collectUseTable(const SName* pName, SHashObj* pDbs) {
static
int32_t
getTableMetaImpl
(
STranslateContext
*
pCxt
,
const
SName
*
pName
,
STableMeta
**
pMeta
)
{
SParseContext
*
pParCxt
=
pCxt
->
pParseCxt
;
int32_t
code
=
collectUseDatabase
(
pName
,
pCxt
->
pDbs
);
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
pParCxt
->
async
)
{
code
=
getTableMetaFromCache
(
pCxt
->
pMetaCache
,
pName
,
pMeta
);
}
else
{
code
=
collectUseDatabase
(
pName
,
pCxt
->
pDbs
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
collectUseTable
(
pName
,
pCxt
->
pTables
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
catalogGetTableMeta
(
pParCxt
->
pCatalog
,
pParCxt
->
pTransporter
,
&
pParCxt
->
mgmtEpSet
,
pName
,
pMeta
);
}
}
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
parserError
(
"catalogGetTableMeta error, code:%s, dbName:%s, tbName:%s"
,
tstrerror
(
code
),
pName
->
dbname
,
pName
->
tname
);
...
...
@@ -126,8 +132,13 @@ static int32_t refreshGetTableMeta(STranslateContext* pCxt, const char* pDbName,
SParseContext
*
pParCxt
=
pCxt
->
pParseCxt
;
SName
name
;
toName
(
pCxt
->
pParseCxt
->
acctId
,
pDbName
,
pTableName
,
&
name
);
int32_t
code
=
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
pParCxt
->
async
)
{
code
=
getTableMetaFromCache
(
pCxt
->
pMetaCache
,
&
name
,
pMeta
);
}
else
{
code
=
catalogRefreshGetTableMeta
(
pParCxt
->
pCatalog
,
pParCxt
->
pTransporter
,
&
pParCxt
->
mgmtEpSet
,
&
name
,
pMeta
,
false
);
}
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
parserError
(
"catalogRefreshGetTableMeta error, code:%s, dbName:%s, tbName:%s"
,
tstrerror
(
code
),
pDbName
,
pTableName
);
...
...
@@ -135,30 +146,19 @@ static int32_t refreshGetTableMeta(STranslateContext* pCxt, const char* pDbName,
return
code
;
}
static
int32_t
getTableDistVgInfo
(
STranslateContext
*
pCxt
,
const
SName
*
pName
,
SArray
**
pVgInfo
)
{
SParseContext
*
pParCxt
=
pCxt
->
pParseCxt
;
int32_t
code
=
collectUseDatabase
(
pName
,
pCxt
->
pDbs
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
collectUseTable
(
pName
,
pCxt
->
pTables
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
catalogGetTableDistVgInfo
(
pParCxt
->
pCatalog
,
pParCxt
->
pTransporter
,
&
pParCxt
->
mgmtEpSet
,
pName
,
pVgInfo
);
}
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
parserError
(
"catalogGetTableDistVgInfo error, code:%s, dbName:%s, tbName:%s"
,
tstrerror
(
code
),
pName
->
dbname
,
pName
->
tname
);
}
return
code
;
}
static
int32_t
getDBVgInfoImpl
(
STranslateContext
*
pCxt
,
const
SName
*
pName
,
SArray
**
pVgInfo
)
{
SParseContext
*
pParCxt
=
pCxt
->
pParseCxt
;
char
fullDbName
[
TSDB_DB_FNAME_LEN
];
tNameGetFullDbName
(
pName
,
fullDbName
);
int32_t
code
=
collectUseDatabaseImpl
(
fullDbName
,
pCxt
->
pDbs
);
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
pParCxt
->
async
)
{
code
=
getDBVgInfoFromCache
(
pCxt
->
pMetaCache
,
fullDbName
,
pVgInfo
);
}
else
{
code
=
collectUseDatabaseImpl
(
fullDbName
,
pCxt
->
pDbs
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
catalogGetDBVgInfo
(
pParCxt
->
pCatalog
,
pParCxt
->
pTransporter
,
&
pParCxt
->
mgmtEpSet
,
fullDbName
,
pVgInfo
);
}
}
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
parserError
(
"catalogGetDBVgInfo error, code:%s, dbFName:%s"
,
tstrerror
(
code
),
fullDbName
);
}
...
...
@@ -175,13 +175,18 @@ static int32_t getDBVgInfo(STranslateContext* pCxt, const char* pDbName, SArray*
static
int32_t
getTableHashVgroupImpl
(
STranslateContext
*
pCxt
,
const
SName
*
pName
,
SVgroupInfo
*
pInfo
)
{
SParseContext
*
pParCxt
=
pCxt
->
pParseCxt
;
int32_t
code
=
collectUseDatabase
(
pName
,
pCxt
->
pDbs
);
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
pParCxt
->
async
)
{
code
=
getTableHashVgroupFromCache
(
pCxt
->
pMetaCache
,
pName
,
pInfo
);
}
else
{
code
=
collectUseDatabase
(
pName
,
pCxt
->
pDbs
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
collectUseTable
(
pName
,
pCxt
->
pTables
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
catalogGetTableHashVgroup
(
pParCxt
->
pCatalog
,
pParCxt
->
pTransporter
,
&
pParCxt
->
mgmtEpSet
,
pName
,
pInfo
);
}
}
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
parserError
(
"catalogGetTableHashVgroup error, code:%s, dbName:%s, tbName:%s"
,
tstrerror
(
code
),
pName
->
dbname
,
pName
->
tname
);
...
...
@@ -198,10 +203,15 @@ static int32_t getTableHashVgroup(STranslateContext* pCxt, const char* pDbName,
static
int32_t
getDBVgVersion
(
STranslateContext
*
pCxt
,
const
char
*
pDbFName
,
int32_t
*
pVersion
,
int64_t
*
pDbId
,
int32_t
*
pTableNum
)
{
SParseContext
*
pParCxt
=
pCxt
->
pParseCxt
;
int32_t
code
=
collectUseDatabaseImpl
(
pDbFName
,
pCxt
->
pDbs
);
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
pParCxt
->
async
)
{
code
=
getDBVgVersionFromCache
(
pCxt
->
pMetaCache
,
pDbFName
,
pVersion
,
pDbId
,
pTableNum
);
}
else
{
code
=
collectUseDatabaseImpl
(
pDbFName
,
pCxt
->
pDbs
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
catalogGetDBVgVersion
(
pParCxt
->
pCatalog
,
pDbFName
,
pVersion
,
pDbId
,
pTableNum
);
}
}
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
parserError
(
"catalogGetDBVgVersion error, code:%s, dbFName:%s"
,
tstrerror
(
code
),
pDbFName
);
}
...
...
@@ -214,17 +224,22 @@ static int32_t getDBCfg(STranslateContext* pCxt, const char* pDbName, SDbCfgInfo
tNameSetDbName
(
&
name
,
pCxt
->
pParseCxt
->
acctId
,
pDbName
,
strlen
(
pDbName
));
char
dbFname
[
TSDB_DB_FNAME_LEN
]
=
{
0
};
tNameGetFullDbName
(
&
name
,
dbFname
);
int32_t
code
=
collectUseDatabaseImpl
(
dbFname
,
pCxt
->
pDbs
);
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
pParCxt
->
async
)
{
code
=
getDBCfgFromCache
(
pCxt
->
pMetaCache
,
dbFname
,
pInfo
);
}
else
{
code
=
collectUseDatabaseImpl
(
dbFname
,
pCxt
->
pDbs
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
catalogGetDBCfg
(
pParCxt
->
pCatalog
,
pParCxt
->
pTransporter
,
&
pParCxt
->
mgmtEpSet
,
dbFname
,
pInfo
);
}
}
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
parserError
(
"catalogGetDBCfg error, code:%s, dbFName:%s"
,
tstrerror
(
code
),
dbFname
);
}
return
code
;
}
static
int32_t
initTranslateContext
(
SParseContext
*
pParseCxt
,
STranslateContext
*
pCxt
)
{
static
int32_t
initTranslateContext
(
SParseContext
*
pParseCxt
,
S
ParseMetaCache
*
pMetaCache
,
S
TranslateContext
*
pCxt
)
{
pCxt
->
pParseCxt
=
pParseCxt
;
pCxt
->
errCode
=
TSDB_CODE_SUCCESS
;
pCxt
->
msgBuf
.
buf
=
pParseCxt
->
pMsg
;
...
...
@@ -232,6 +247,7 @@ static int32_t initTranslateContext(SParseContext* pParseCxt, STranslateContext*
pCxt
->
pNsLevel
=
taosArrayInit
(
TARRAY_MIN_SIZE
,
POINTER_BYTES
);
pCxt
->
currLevel
=
0
;
pCxt
->
currClause
=
0
;
pCxt
->
pMetaCache
=
pMetaCache
;
pCxt
->
pDbs
=
taosHashInit
(
4
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
true
,
HASH_NO_LOCK
);
pCxt
->
pTables
=
taosHashInit
(
4
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
true
,
HASH_NO_LOCK
);
if
(
NULL
==
pCxt
->
pNsLevel
||
NULL
==
pCxt
->
pDbs
||
NULL
==
pCxt
->
pTables
)
{
...
...
@@ -1225,7 +1241,7 @@ static int32_t setTableVgroupList(STranslateContext* pCxt, SName* pName, SRealTa
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
TSDB_SUPER_TABLE
==
pRealTable
->
pMeta
->
tableType
)
{
SArray
*
vgroupList
=
NULL
;
code
=
get
TableDistVgInfo
(
pCxt
,
pName
,
&
vgroupList
);
code
=
get
DBVgInfoImpl
(
pCxt
,
pName
,
&
vgroupList
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
toVgroupsInfo
(
vgroupList
,
&
pRealTable
->
pVgroupList
);
}
...
...
@@ -2797,7 +2813,7 @@ static int32_t buildRollupAst(STranslateContext* pCxt, SCreateTableStmt* pStmt,
for
(
int32_t
i
=
1
;
i
<
num
;
++
i
)
{
SRetention
*
pRetension
=
taosArrayGet
(
dbCfg
.
pRetensions
,
i
);
STranslateContext
cxt
=
{
0
};
initTranslateContext
(
pCxt
->
pParseCxt
,
&
cxt
);
initTranslateContext
(
pCxt
->
pParseCxt
,
pCxt
->
pMetaCache
,
&
cxt
);
code
=
getRollupAst
(
&
cxt
,
pStmt
,
pRetension
,
dbCfg
.
precision
,
1
==
i
?
&
pReq
->
pAst1
:
&
pReq
->
pAst2
,
1
==
i
?
&
pReq
->
ast1Len
:
&
pReq
->
ast2Len
);
destroyTranslateContext
(
&
cxt
);
...
...
@@ -4893,7 +4909,7 @@ static int32_t setQuery(STranslateContext* pCxt, SQuery* pQuery) {
int32_t
translate
(
SParseContext
*
pParseCxt
,
SQuery
*
pQuery
)
{
STranslateContext
cxt
=
{
0
};
int32_t
code
=
initTranslateContext
(
pParseCxt
,
&
cxt
);
int32_t
code
=
initTranslateContext
(
pParseCxt
,
pQuery
->
pMetaCache
,
&
cxt
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
fmFuncMgtInit
();
}
...
...
source/libs/parser/src/parUtil.c
浏览文件 @
c94ca28b
...
...
@@ -328,11 +328,11 @@ static bool isValidateTag(char* input) {
return
true
;
}
int
parseJsontoTagData
(
const
char
*
json
,
SKVRowBuilder
*
kvRowBuilder
,
SMsgBuf
*
pMsgBuf
,
int16_t
startColId
)
{
int
32_t
parseJsontoTagData
(
const
char
*
json
,
SKVRowBuilder
*
kvRowBuilder
,
SMsgBuf
*
pMsgBuf
,
int16_t
startColId
)
{
// set json NULL data
uint8_t
jsonNULL
=
TSDB_DATA_TYPE_NULL
;
int
jsonIndex
=
startColId
+
1
;
if
(
!
json
||
strtrim
((
char
*
)
json
)
==
0
||
strcasecmp
(
json
,
TSDB_DATA_NULL_STR_L
)
==
0
)
{
int
32_t
jsonIndex
=
startColId
+
1
;
if
(
!
json
||
strtrim
((
char
*
)
json
)
==
0
||
strcasecmp
(
json
,
TSDB_DATA_NULL_STR_L
)
==
0
)
{
tdAddColToKVRow
(
kvRowBuilder
,
jsonIndex
,
&
jsonNULL
,
CHAR_BYTES
);
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -343,15 +343,15 @@ int parseJsontoTagData(const char* json, SKVRowBuilder* kvRowBuilder, SMsgBuf* p
return
buildSyntaxErrMsg
(
pMsgBuf
,
"json parse error"
,
json
);
}
int
size
=
cJSON_GetArraySize
(
root
);
int
32_t
size
=
cJSON_GetArraySize
(
root
);
if
(
!
cJSON_IsObject
(
root
))
{
return
buildSyntaxErrMsg
(
pMsgBuf
,
"json error invalide value"
,
json
);
}
int
retCode
=
0
;
int
32_t
retCode
=
0
;
char
*
tagKV
=
NULL
;
SHashObj
*
keyHash
=
taosHashInit
(
8
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
false
,
false
);
for
(
int
i
=
0
;
i
<
size
;
i
++
)
{
for
(
int
32_t
i
=
0
;
i
<
size
;
i
++
)
{
cJSON
*
item
=
cJSON_GetArrayItem
(
root
,
i
);
if
(
!
item
)
{
qError
(
"json inner error:%d"
,
i
);
...
...
@@ -365,7 +365,7 @@ int parseJsontoTagData(const char* json, SKVRowBuilder* kvRowBuilder, SMsgBuf* p
goto
end
;
}
size_t
keyLen
=
strlen
(
jsonKey
);
if
(
keyLen
>
TSDB_MAX_JSON_KEY_LEN
)
{
if
(
keyLen
>
TSDB_MAX_JSON_KEY_LEN
)
{
qError
(
"json key too long error"
);
retCode
=
buildSyntaxErrMsg
(
pMsgBuf
,
"json key too long, more than 256"
,
jsonKey
);
goto
end
;
...
...
@@ -448,3 +448,185 @@ end:
cJSON_Delete
(
root
);
return
retCode
;
}
static
int32_t
buildTableReq
(
SHashObj
*
pTablesHash
,
SArray
**
pTables
)
{
if
(
NULL
!=
pTablesHash
)
{
*
pTables
=
taosArrayInit
(
taosHashGetSize
(
pTablesHash
),
sizeof
(
SName
));
if
(
NULL
==
*
pTables
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
void
*
p
=
taosHashIterate
(
pTablesHash
,
NULL
);
while
(
NULL
!=
p
)
{
size_t
len
=
0
;
char
*
pKey
=
taosHashGetKey
(
p
,
&
len
);
char
fullName
[
TSDB_TABLE_FNAME_LEN
]
=
{
0
};
strncpy
(
fullName
,
pKey
,
len
);
SName
name
=
{
0
};
tNameFromString
(
&
name
,
fullName
,
T_NAME_ACCT
|
T_NAME_DB
|
T_NAME_TABLE
);
taosArrayPush
(
*
pTables
,
&
name
);
p
=
taosHashIterate
(
pTablesHash
,
p
);
}
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
buildDbReq
(
SHashObj
*
pDbsHash
,
SArray
**
pDbs
)
{
if
(
NULL
!=
pDbsHash
)
{
*
pDbs
=
taosArrayInit
(
taosHashGetSize
(
pDbsHash
),
TSDB_DB_FNAME_LEN
);
if
(
NULL
==
*
pDbs
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
void
*
p
=
taosHashIterate
(
pDbsHash
,
NULL
);
while
(
NULL
!=
p
)
{
size_t
len
=
0
;
char
*
pKey
=
taosHashGetKey
(
p
,
&
len
);
char
fullName
[
TSDB_DB_FNAME_LEN
]
=
{
0
};
strncpy
(
fullName
,
pKey
,
len
);
taosArrayPush
(
*
pDbs
,
fullName
);
p
=
taosHashIterate
(
pDbsHash
,
p
);
}
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
buildTableMetaReq
(
SHashObj
*
pTableMetaHash
,
SArray
**
pTableMeta
)
{
return
buildTableReq
(
pTableMetaHash
,
pTableMeta
);
}
static
int32_t
buildDbVgroupReq
(
SHashObj
*
pDbVgroupHash
,
SArray
**
pDbVgroup
)
{
return
buildDbReq
(
pDbVgroupHash
,
pDbVgroup
);
}
static
int32_t
buildTableVgroupReq
(
SHashObj
*
pTableVgroupHash
,
SArray
**
pTableVgroup
)
{
return
buildTableReq
(
pTableVgroupHash
,
pTableVgroup
);
}
static
int32_t
buildDbCfgReq
(
SHashObj
*
pDbCfgHash
,
SArray
**
pDbCfg
)
{
return
buildDbReq
(
pDbCfgHash
,
pDbCfg
);
}
int32_t
buildCatalogReq
(
const
SParseMetaCache
*
pMetaCache
,
SCatalogReq
*
pCatalogReq
)
{
int32_t
code
=
buildTableMetaReq
(
pMetaCache
->
pTableMeta
,
&
pCatalogReq
->
pTableMeta
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
buildDbVgroupReq
(
pMetaCache
->
pDbVgroup
,
&
pCatalogReq
->
pDbVgroup
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
buildTableVgroupReq
(
pMetaCache
->
pTableVgroup
,
&
pCatalogReq
->
pTableHash
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
buildDbCfgReq
(
pMetaCache
->
pDbVgroup
,
&
pCatalogReq
->
pDbCfg
);
}
return
code
;
}
static
int32_t
putTableMetaToCache
(
const
SArray
*
pTableMetaReq
,
const
SArray
*
pTableMetaData
,
SHashObj
*
pTableMeta
)
{
int32_t
ntables
=
taosArrayGetSize
(
pTableMetaReq
);
for
(
int32_t
i
=
0
;
i
<
ntables
;
++
i
)
{
char
fullName
[
TSDB_TABLE_FNAME_LEN
];
tNameExtractFullName
(
taosArrayGet
(
pTableMetaReq
,
i
),
fullName
);
if
(
TSDB_CODE_SUCCESS
!=
taosHashPut
(
pTableMeta
,
fullName
,
strlen
(
fullName
),
taosArrayGet
(
pTableMetaData
,
i
),
POINTER_BYTES
))
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
putDbVgroupToCache
(
const
SArray
*
pDbVgroupReq
,
const
SArray
*
pDbVgroupData
,
SHashObj
*
pDbVgroup
)
{
int32_t
nvgs
=
taosArrayGetSize
(
pDbVgroupReq
);
for
(
int32_t
i
=
0
;
i
<
nvgs
;
++
i
)
{
char
*
pDbFName
=
taosArrayGet
(
pDbVgroupReq
,
i
);
if
(
TSDB_CODE_SUCCESS
!=
taosHashPut
(
pDbVgroup
,
pDbFName
,
strlen
(
pDbFName
),
taosArrayGet
(
pDbVgroupData
,
i
),
POINTER_BYTES
))
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
putTableVgroupToCache
(
const
SArray
*
pTableVgroupReq
,
const
SArray
*
pTableVgroupData
,
SHashObj
*
pTableVgroup
)
{
int32_t
ntables
=
taosArrayGetSize
(
pTableVgroupReq
);
for
(
int32_t
i
=
0
;
i
<
ntables
;
++
i
)
{
char
fullName
[
TSDB_TABLE_FNAME_LEN
];
tNameExtractFullName
(
taosArrayGet
(
pTableVgroupReq
,
i
),
fullName
);
SVgroupInfo
*
pInfo
=
taosArrayGet
(
pTableVgroupData
,
i
);
if
(
TSDB_CODE_SUCCESS
!=
taosHashPut
(
pTableVgroup
,
fullName
,
strlen
(
fullName
),
&
pInfo
,
POINTER_BYTES
))
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
putDbCfgToCache
(
const
SArray
*
pDbCfgReq
,
const
SArray
*
pDbCfgData
,
SHashObj
*
pDbCfg
)
{
int32_t
nvgs
=
taosArrayGetSize
(
pDbCfgReq
);
for
(
int32_t
i
=
0
;
i
<
nvgs
;
++
i
)
{
char
*
pDbFName
=
taosArrayGet
(
pDbCfgReq
,
i
);
SDbCfgInfo
*
pInfo
=
taosArrayGet
(
pDbCfgData
,
i
);
if
(
TSDB_CODE_SUCCESS
!=
taosHashPut
(
pDbCfg
,
pDbFName
,
strlen
(
pDbFName
),
&
pInfo
,
POINTER_BYTES
))
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
return
TSDB_CODE_SUCCESS
;
}
int32_t
putMetaDataToCache
(
const
SCatalogReq
*
pCatalogReq
,
const
SMetaData
*
pMetaData
,
SParseMetaCache
*
pMetaCache
)
{
int32_t
code
=
putTableMetaToCache
(
pCatalogReq
->
pTableMeta
,
pMetaData
->
pTableMeta
,
pMetaCache
->
pTableMeta
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
putDbVgroupToCache
(
pCatalogReq
->
pDbVgroup
,
pMetaData
->
pDbVgroup
,
pMetaCache
->
pDbVgroup
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
putTableVgroupToCache
(
pCatalogReq
->
pTableHash
,
pMetaData
->
pTableHash
,
pMetaCache
->
pTableVgroup
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
putDbCfgToCache
(
pCatalogReq
->
pDbCfg
,
pMetaData
->
pDbCfg
,
pMetaCache
->
pDbCfg
);
}
return
code
;
}
int32_t
reserveTableMetaInCache
(
int32_t
acctId
,
const
char
*
pDb
,
const
char
*
pTable
,
SParseMetaCache
*
pMetaCache
)
{
if
(
NULL
==
pMetaCache
->
pTableMeta
)
{
pMetaCache
->
pTableMeta
=
taosHashInit
(
4
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
true
,
HASH_NO_LOCK
);
if
(
NULL
==
pMetaCache
->
pTableMeta
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
char
fullName
[
TSDB_TABLE_FNAME_LEN
];
int32_t
len
=
snprintf
(
fullName
,
sizeof
(
fullName
),
"%d.%s.%s"
,
acctId
,
pDb
,
pTable
);
return
taosHashPut
(
pMetaCache
->
pTableMeta
,
fullName
,
len
,
&
len
,
POINTER_BYTES
);
}
int32_t
getTableMetaFromCache
(
SParseMetaCache
*
pMetaCache
,
const
SName
*
pName
,
STableMeta
**
pMeta
)
{
char
fullName
[
TSDB_TABLE_FNAME_LEN
];
tNameExtractFullName
(
pName
,
fullName
);
*
pMeta
=
taosHashGet
(
pMetaCache
->
pTableMeta
,
fullName
,
strlen
(
fullName
));
return
NULL
==
*
pMeta
?
TSDB_CODE_PAR_INTERNAL_ERROR
:
TSDB_CODE_SUCCESS
;
}
int32_t
getDBVgInfoFromCache
(
SParseMetaCache
*
pMetaCache
,
const
char
*
pDbFName
,
SArray
**
pVgInfo
)
{
*
pVgInfo
=
taosHashGet
(
pMetaCache
->
pDbVgroup
,
pDbFName
,
strlen
(
pDbFName
));
return
NULL
==
*
pVgInfo
?
TSDB_CODE_PAR_INTERNAL_ERROR
:
TSDB_CODE_SUCCESS
;
}
int32_t
getTableHashVgroupFromCache
(
SParseMetaCache
*
pMetaCache
,
const
SName
*
pName
,
SVgroupInfo
*
pVgroup
)
{
char
fullName
[
TSDB_TABLE_FNAME_LEN
];
tNameExtractFullName
(
pName
,
fullName
);
SVgroupInfo
*
pInfo
=
taosHashGet
(
pMetaCache
->
pTableVgroup
,
fullName
,
strlen
(
fullName
));
if
(
NULL
==
pInfo
)
{
return
TSDB_CODE_PAR_INTERNAL_ERROR
;
}
memcpy
(
pVgroup
,
pInfo
,
sizeof
(
SVgroupInfo
));
return
TSDB_CODE_SUCCESS
;
}
int32_t
getDBVgVersionFromCache
(
SParseMetaCache
*
pMetaCache
,
const
char
*
pDbFName
,
int32_t
*
pVersion
,
int64_t
*
pDbId
,
int32_t
*
pTableNum
)
{
return
TSDB_CODE_PAR_INTERNAL_ERROR
;
}
int32_t
getDBCfgFromCache
(
SParseMetaCache
*
pMetaCache
,
const
char
*
pDbFName
,
SDbCfgInfo
*
pInfo
)
{
SDbCfgInfo
*
pDbCfg
=
taosHashGet
(
pMetaCache
->
pDbCfg
,
pDbFName
,
strlen
(
pDbFName
));
if
(
NULL
==
pDbCfg
)
{
return
TSDB_CODE_PAR_INTERNAL_ERROR
;
}
memcpy
(
pInfo
,
pDbCfg
,
sizeof
(
SDbCfgInfo
));
return
TSDB_CODE_SUCCESS
;
}
source/libs/parser/src/parser.c
浏览文件 @
c94ca28b
...
...
@@ -34,22 +34,27 @@ bool qIsInsertSql(const char* pStr, size_t length) {
}
while
(
1
);
}
static
int32_t
parseSqlIntoAst
(
SParseContext
*
pCxt
,
SQuery
**
pQuery
)
{
int32_t
code
=
parse
(
pCxt
,
pQuery
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
authenticate
(
pCxt
,
*
pQuery
);
}
static
int32_t
semanticAnalysis
(
SParseContext
*
pCxt
,
SQuery
*
pQuery
)
{
int32_t
code
=
authenticate
(
pCxt
,
pQuery
);
if
(
TSDB_CODE_SUCCESS
==
code
&&
(
*
pQuery
)
->
placeholderNum
>
0
)
{
TSWAP
(
(
*
pQuery
)
->
pPrepareRoot
,
(
*
pQuery
)
->
pRoot
);
if
(
TSDB_CODE_SUCCESS
==
code
&&
pQuery
->
placeholderNum
>
0
)
{
TSWAP
(
pQuery
->
pPrepareRoot
,
pQuery
->
pRoot
);
return
TSDB_CODE_SUCCESS
;
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
translate
(
pCxt
,
*
pQuery
);
code
=
translate
(
pCxt
,
pQuery
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
calculateConstant
(
pCxt
,
*
pQuery
);
code
=
calculateConstant
(
pCxt
,
pQuery
);
}
return
code
;
}
static
int32_t
parseSqlIntoAst
(
SParseContext
*
pCxt
,
SQuery
**
pQuery
)
{
int32_t
code
=
parse
(
pCxt
,
pQuery
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
semanticAnalysis
(
pCxt
,
*
pQuery
);
}
return
code
;
}
...
...
@@ -178,6 +183,29 @@ int32_t qParseSql(SParseContext* pCxt, SQuery** pQuery) {
return
code
;
}
int32_t
qSyntaxParseSql
(
SParseContext
*
pCxt
,
SQuery
**
pQuery
,
struct
SCatalogReq
*
pCatalogReq
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
qIsInsertSql
(
pCxt
->
pSql
,
pCxt
->
sqlLen
))
{
// todo insert sql
}
else
{
code
=
parse
(
pCxt
,
pQuery
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
buildCatalogReq
((
*
pQuery
)
->
pMetaCache
,
pCatalogReq
);
}
terrno
=
code
;
return
code
;
}
int32_t
qSemanticAnalysisSql
(
SParseContext
*
pCxt
,
const
struct
SCatalogReq
*
pCatalogReq
,
const
struct
SMetaData
*
pMetaData
,
SQuery
*
pQuery
)
{
int32_t
code
=
putMetaDataToCache
(
pCatalogReq
,
pMetaData
,
pQuery
->
pMetaCache
);
if
(
NULL
==
pQuery
->
pRoot
)
{
// todo insert sql
}
return
semanticAnalysis
(
pCxt
,
pQuery
);
}
void
qDestroyQuery
(
SQuery
*
pQueryNode
)
{
nodesDestroyNode
(
pQueryNode
);
}
int32_t
qExtractResultSchema
(
const
SNode
*
pRoot
,
int32_t
*
numOfCols
,
SSchema
**
pSchema
)
{
...
...
source/libs/parser/test/mockCatalog.cpp
浏览文件 @
c94ca28b
...
...
@@ -163,17 +163,17 @@ int32_t __catalogGetHandle(const char* clusterId, struct SCatalog** catalogHandl
int32_t
__catalogGetTableMeta
(
struct
SCatalog
*
pCatalog
,
void
*
pRpc
,
const
SEpSet
*
pMgmtEps
,
const
SName
*
pTableName
,
STableMeta
**
pTableMeta
)
{
return
mockCatalogService
->
catalogGetTableMeta
(
pTableName
,
pTableMeta
);
return
g_
mockCatalogService
->
catalogGetTableMeta
(
pTableName
,
pTableMeta
);
}
int32_t
__catalogGetTableHashVgroup
(
struct
SCatalog
*
pCatalog
,
void
*
pRpc
,
const
SEpSet
*
pMgmtEps
,
const
SName
*
pTableName
,
SVgroupInfo
*
vgInfo
)
{
return
mockCatalogService
->
catalogGetTableHashVgroup
(
pTableName
,
vgInfo
);
return
g_
mockCatalogService
->
catalogGetTableHashVgroup
(
pTableName
,
vgInfo
);
}
int32_t
__catalogGetTableDistVgInfo
(
SCatalog
*
pCtg
,
void
*
pRpc
,
const
SEpSet
*
pMgmtEps
,
const
SName
*
pTableName
,
SArray
**
pVgList
)
{
return
mockCatalogService
->
catalogGetTableDistVgInfo
(
pTableName
,
pVgList
);
return
g_
mockCatalogService
->
catalogGetTableDistVgInfo
(
pTableName
,
pVgList
);
}
int32_t
__catalogGetDBVgVersion
(
SCatalog
*
pCtg
,
const
char
*
dbFName
,
int32_t
*
version
,
int64_t
*
dbId
,
...
...
@@ -197,7 +197,7 @@ int32_t __catalogChkAuth(SCatalog* pCtg, void* pRpc, const SEpSet* pMgmtEps, con
}
void
initMetaDataEnv
()
{
mockCatalogService
.
reset
(
new
MockCatalogService
());
g_
mockCatalogService
.
reset
(
new
MockCatalogService
());
static
Stub
stub
;
stub
.
set
(
catalogGetHandle
,
__catalogGetHandle
);
...
...
@@ -252,11 +252,11 @@ void initMetaDataEnv() {
}
void
generateMetaData
()
{
generateInformationSchema
(
mockCatalogService
.
get
());
generatePerformanceSchema
(
mockCatalogService
.
get
());
generateTestT1
(
mockCatalogService
.
get
());
generateTestST1
(
mockCatalogService
.
get
());
mockCatalogService
->
showTables
();
generateInformationSchema
(
g_
mockCatalogService
.
get
());
generatePerformanceSchema
(
g_
mockCatalogService
.
get
());
generateTestT1
(
g_
mockCatalogService
.
get
());
generateTestST1
(
g_
mockCatalogService
.
get
());
g_
mockCatalogService
->
showTables
();
}
void
destroyMetaDataEnv
()
{
mockCatalogService
.
reset
();
}
void
destroyMetaDataEnv
()
{
g_
mockCatalogService
.
reset
();
}
source/libs/parser/test/mockCatalogService.cpp
浏览文件 @
c94ca28b
...
...
@@ -23,7 +23,7 @@
#include "tname.h"
#include "ttypes.h"
std
::
unique_ptr
<
MockCatalogService
>
mockCatalogService
;
std
::
unique_ptr
<
MockCatalogService
>
g_
mockCatalogService
;
class
TableBuilder
:
public
ITableBuilder
{
public:
...
...
@@ -120,6 +120,14 @@ class MockCatalogServiceImpl {
return
copyTableVgroup
(
db
,
tNameGetTableName
(
pTableName
),
vgList
);
}
int32_t
catalogGetAllMeta
(
const
SCatalogReq
*
pCatalogReq
,
SMetaData
*
pMetaData
)
const
{
int32_t
code
=
getAllTableMeta
(
pCatalogReq
->
pTableMeta
,
&
pMetaData
->
pTableMeta
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
getAllTableVgroup
(
pCatalogReq
->
pTableHash
,
&
pMetaData
->
pTableHash
);
}
return
code
;
}
TableBuilder
&
createTableBuilder
(
const
std
::
string
&
db
,
const
std
::
string
&
tbname
,
int8_t
tableType
,
int32_t
numOfColumns
,
int32_t
numOfTags
)
{
builder_
=
TableBuilder
::
createTableBuilder
(
tableType
,
numOfColumns
,
numOfTags
);
...
...
@@ -300,6 +308,42 @@ class MockCatalogServiceImpl {
return
TSDB_CODE_SUCCESS
;
}
int32_t
getAllTableMeta
(
SArray
*
pTableMetaReq
,
SArray
**
pTableMetaData
)
const
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
NULL
!=
pTableMetaReq
)
{
int32_t
ntables
=
taosArrayGetSize
(
pTableMetaReq
);
*
pTableMetaData
=
taosArrayInit
(
ntables
,
POINTER_BYTES
);
for
(
int32_t
i
=
0
;
i
<
ntables
;
++
i
)
{
STableMeta
*
pMeta
=
NULL
;
code
=
catalogGetTableMeta
((
const
SName
*
)
taosArrayGet
(
pTableMetaReq
,
i
),
&
pMeta
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
taosArrayPush
(
*
pTableMetaData
,
&
pMeta
);
}
else
{
break
;
}
}
}
return
code
;
}
int32_t
getAllTableVgroup
(
SArray
*
pTableVgroupReq
,
SArray
**
pTableVgroupData
)
const
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
NULL
!=
pTableVgroupReq
)
{
int32_t
ntables
=
taosArrayGetSize
(
pTableVgroupReq
);
*
pTableVgroupData
=
taosArrayInit
(
ntables
,
POINTER_BYTES
);
for
(
int32_t
i
=
0
;
i
<
ntables
;
++
i
)
{
SVgroupInfo
*
pVgInfo
=
(
SVgroupInfo
*
)
taosMemoryCalloc
(
1
,
sizeof
(
SVgroupInfo
));
code
=
catalogGetTableHashVgroup
((
const
SName
*
)
taosArrayGet
(
pTableVgroupReq
,
i
),
pVgInfo
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
taosArrayPush
(
*
pTableVgroupData
,
&
pVgInfo
);
}
else
{
break
;
}
}
}
return
code
;
}
uint64_t
id_
;
std
::
unique_ptr
<
TableBuilder
>
builder_
;
DbMetaCache
meta_
;
...
...
@@ -337,3 +381,7 @@ int32_t MockCatalogService::catalogGetTableHashVgroup(const SName* pTableName, S
int32_t
MockCatalogService
::
catalogGetTableDistVgInfo
(
const
SName
*
pTableName
,
SArray
**
pVgList
)
const
{
return
impl_
->
catalogGetTableDistVgInfo
(
pTableName
,
pVgList
);
}
int32_t
MockCatalogService
::
catalogGetAllMeta
(
const
SCatalogReq
*
pCatalogReq
,
SMetaData
*
pMetaData
)
const
{
return
impl_
->
catalogGetAllMeta
(
pCatalogReq
,
pMetaData
);
}
source/libs/parser/test/mockCatalogService.h
浏览文件 @
c94ca28b
...
...
@@ -61,11 +61,12 @@ class MockCatalogService {
int32_t
catalogGetTableMeta
(
const
SName
*
pTableName
,
STableMeta
**
pTableMeta
)
const
;
int32_t
catalogGetTableHashVgroup
(
const
SName
*
pTableName
,
SVgroupInfo
*
vgInfo
)
const
;
int32_t
catalogGetTableDistVgInfo
(
const
SName
*
pTableName
,
SArray
**
pVgList
)
const
;
int32_t
catalogGetAllMeta
(
const
SCatalogReq
*
pCatalogReq
,
SMetaData
*
pMetaData
)
const
;
private:
std
::
unique_ptr
<
MockCatalogServiceImpl
>
impl_
;
};
extern
std
::
unique_ptr
<
MockCatalogService
>
mockCatalogService
;
extern
std
::
unique_ptr
<
MockCatalogService
>
g_
mockCatalogService
;
#endif // MOCK_CATALOG_SERVICE_H
source/libs/parser/test/parTestMain.cpp
浏览文件 @
c94ca28b
...
...
@@ -52,11 +52,15 @@ class ParserEnv : public testing::Environment {
static
void
parseArg
(
int
argc
,
char
*
argv
[])
{
int
opt
=
0
;
const
char
*
optstring
=
""
;
static
struct
option
long_options
[]
=
{{
"dump"
,
no_argument
,
NULL
,
'd'
},
{
0
,
0
,
0
,
0
}};
static
struct
option
long_options
[]
=
{
{
"dump"
,
no_argument
,
NULL
,
'd'
},
{
"async"
,
no_argument
,
NULL
,
'a'
},
{
0
,
0
,
0
,
0
}};
while
((
opt
=
getopt_long
(
argc
,
argv
,
optstring
,
long_options
,
NULL
))
!=
-
1
)
{
switch
(
opt
)
{
case
'd'
:
g_isDump
=
true
;
g_dump
=
true
;
break
;
case
'a'
:
g_testAsyncApis
=
true
;
break
;
default:
break
;
...
...
source/libs/parser/test/parTestUtil.cpp
浏览文件 @
c94ca28b
...
...
@@ -17,7 +17,10 @@
#include <algorithm>
#include <array>
#include <thread>
#include "catalog.h"
#include "mockCatalogService.h"
#include "parInt.h"
using
namespace
std
;
...
...
@@ -41,7 +44,8 @@ namespace ParserTest {
} \
} while (0);
bool
g_isDump
=
false
;
bool
g_dump
=
false
;
bool
g_testAsyncApis
=
false
;
struct
TerminateFlag
:
public
exception
{
const
char
*
what
()
const
throw
()
{
return
"success and terminate"
;
}
...
...
@@ -69,7 +73,60 @@ class ParserTestBaseImpl {
doCalculateConstant
(
&
cxt
,
pQuery
);
if
(
g_isDump
)
{
if
(
g_dump
)
{
dump
();
}
}
catch
(
const
TerminateFlag
&
e
)
{
// success and terminate
return
;
}
catch
(...)
{
dump
();
throw
;
}
if
(
g_testAsyncApis
)
{
runAsync
(
sql
,
expect
,
checkStage
);
}
}
void
runAsync
(
const
string
&
sql
,
int32_t
expect
,
ParserStage
checkStage
)
{
reset
(
expect
,
checkStage
);
try
{
SParseContext
cxt
=
{
0
};
setParseContext
(
sql
,
&
cxt
,
true
);
SQuery
*
pQuery
=
nullptr
;
doParse
(
&
cxt
,
&
pQuery
);
SCatalogReq
catalogReq
=
{
0
};
doBuildCatalogReq
(
pQuery
->
pMetaCache
,
&
catalogReq
);
string
err
;
thread
t1
([
&
]()
{
try
{
SMetaData
metaData
=
{
0
};
doGetAllMeta
(
&
catalogReq
,
&
metaData
);
doPutMetaDataToCache
(
&
catalogReq
,
&
metaData
,
pQuery
->
pMetaCache
);
doTranslate
(
&
cxt
,
pQuery
);
doCalculateConstant
(
&
cxt
,
pQuery
);
}
catch
(
const
TerminateFlag
&
e
)
{
// success and terminate
}
catch
(
const
runtime_error
&
e
)
{
err
=
e
.
what
();
}
catch
(...)
{
err
=
"unknown error"
;
}
});
t1
.
join
();
if
(
!
err
.
empty
())
{
throw
runtime_error
(
err
);
}
if
(
g_dump
)
{
dump
();
}
}
catch
(
const
TerminateFlag
&
e
)
{
...
...
@@ -144,7 +201,7 @@ class ParserTestBaseImpl {
cout
<<
res_
.
calcConstAst_
<<
endl
;
}
void
setParseContext
(
const
string
&
sql
,
SParseContext
*
pCxt
)
{
void
setParseContext
(
const
string
&
sql
,
SParseContext
*
pCxt
,
bool
async
=
false
)
{
stmtEnv_
.
sql_
=
sql
;
transform
(
stmtEnv_
.
sql_
.
begin
(),
stmtEnv_
.
sql_
.
end
(),
stmtEnv_
.
sql_
.
begin
(),
::
tolower
);
...
...
@@ -154,6 +211,7 @@ class ParserTestBaseImpl {
pCxt
->
sqlLen
=
stmtEnv_
.
sql_
.
length
();
pCxt
->
pMsg
=
stmtEnv_
.
msgBuf_
.
data
();
pCxt
->
msgLen
=
stmtEnv_
.
msgBuf_
.
max_size
();
pCxt
->
async
=
async
;
}
void
doParse
(
SParseContext
*
pCxt
,
SQuery
**
pQuery
)
{
...
...
@@ -162,6 +220,18 @@ class ParserTestBaseImpl {
res_
.
parsedAst_
=
toString
((
*
pQuery
)
->
pRoot
);
}
void
doBuildCatalogReq
(
const
SParseMetaCache
*
pMetaCache
,
SCatalogReq
*
pCatalogReq
)
{
DO_WITH_THROW
(
buildCatalogReq
,
pMetaCache
,
pCatalogReq
);
}
void
doGetAllMeta
(
const
SCatalogReq
*
pCatalogReq
,
SMetaData
*
pMetaData
)
{
DO_WITH_THROW
(
g_mockCatalogService
->
catalogGetAllMeta
,
pCatalogReq
,
pMetaData
);
}
void
doPutMetaDataToCache
(
const
SCatalogReq
*
pCatalogReq
,
const
SMetaData
*
pMetaData
,
SParseMetaCache
*
pMetaCache
)
{
DO_WITH_THROW
(
putMetaDataToCache
,
pCatalogReq
,
pMetaData
,
pMetaCache
);
}
void
doTranslate
(
SParseContext
*
pCxt
,
SQuery
*
pQuery
)
{
DO_WITH_THROW
(
translate
,
pCxt
,
pQuery
);
checkQuery
(
pQuery
,
PARSER_STAGE_TRANSLATE
);
...
...
@@ -200,6 +270,10 @@ void ParserTestBase::run(const std::string& sql, int32_t expect, ParserStage che
return
impl_
->
run
(
sql
,
expect
,
checkStage
);
}
void
ParserTestBase
::
runAsync
(
const
std
::
string
&
sql
,
int32_t
expect
,
ParserStage
checkStage
)
{
return
impl_
->
runAsync
(
sql
,
expect
,
checkStage
);
}
void
ParserTestBase
::
checkDdl
(
const
SQuery
*
pQuery
,
ParserStage
stage
)
{
return
;
}
}
// namespace ParserTest
source/libs/parser/test/parTestUtil.h
浏览文件 @
c94ca28b
...
...
@@ -36,6 +36,7 @@ class ParserTestBase : public testing::Test {
void
useDb
(
const
std
::
string
&
acctId
,
const
std
::
string
&
db
);
void
run
(
const
std
::
string
&
sql
,
int32_t
expect
=
TSDB_CODE_SUCCESS
,
ParserStage
checkStage
=
PARSER_STAGE_ALL
);
void
runAsync
(
const
std
::
string
&
sql
,
int32_t
expect
=
TSDB_CODE_SUCCESS
,
ParserStage
checkStage
=
PARSER_STAGE_ALL
);
virtual
void
checkDdl
(
const
SQuery
*
pQuery
,
ParserStage
stage
);
...
...
@@ -63,7 +64,8 @@ class ParserDdlTest : public ParserTestBase {
std
::
function
<
void
(
const
SQuery
*
,
ParserStage
)
>
checkDdl_
;
};
extern
bool
g_isDump
;
extern
bool
g_dump
;
extern
bool
g_testAsyncApis
;
}
// namespace ParserTest
...
...
source/libs/qworker/inc/qw
orker
Int.h
→
source/libs/qworker/inc/qwInt.h
浏览文件 @
c94ca28b
...
...
@@ -26,7 +26,7 @@ extern "C" {
#include "ttimer.h"
#include "tref.h"
#include "plannodes.h"
#include "executor.h"
#include "trpc.h"
#define QW_DEFAULT_SCHEDULER_NUMBER 10000
...
...
@@ -76,6 +76,8 @@ typedef struct SQWDebug {
bool
dumpEnable
;
}
SQWDebug
;
extern
SQWDebug
gQWDebug
;
typedef
struct
SQWMsg
{
void
*
node
;
int32_t
code
;
...
...
@@ -303,9 +305,27 @@ typedef struct SQWorkerMgmt {
extern
SQWorkerMgmt
gQwMgmt
;
static
FORCE_INLINE
SQWorker
*
qwAcquire
(
int64_t
refId
)
{
return
(
SQWorker
*
)
taosAcquireRef
(
atomic_load_32
(
&
gQwMgmt
.
qwRef
),
refId
);
}
static
FORCE_INLINE
int32_t
qwRelease
(
int64_t
refId
)
{
return
taosReleaseRef
(
gQwMgmt
.
qwRef
,
refId
);
}
char
*
qwPhaseStr
(
int32_t
phase
);
char
*
qwBufStatusStr
(
int32_t
bufStatus
);
int32_t
qwAcquireAddScheduler
(
SQWorker
*
mgmt
,
uint64_t
sId
,
int32_t
rwType
,
SQWSchStatus
**
sch
);
void
qwReleaseScheduler
(
int32_t
rwType
,
SQWorker
*
mgmt
);
int32_t
qwAddTaskStatus
(
QW_FPARAMS_DEF
,
int32_t
status
);
int32_t
qwAcquireTaskCtx
(
QW_FPARAMS_DEF
,
SQWTaskCtx
**
ctx
);
int32_t
qwGetTaskCtx
(
QW_FPARAMS_DEF
,
SQWTaskCtx
**
ctx
);
int32_t
qwAddAcquireTaskCtx
(
QW_FPARAMS_DEF
,
SQWTaskCtx
**
ctx
);
void
qwReleaseTaskCtx
(
SQWorker
*
mgmt
,
void
*
ctx
);
int32_t
qwKillTaskHandle
(
QW_FPARAMS_DEF
,
SQWTaskCtx
*
ctx
);
int32_t
qwUpdateTaskStatus
(
QW_FPARAMS_DEF
,
int8_t
status
);
int32_t
qwDropTask
(
QW_FPARAMS_DEF
);
void
qwSaveTbVersionInfo
(
qTaskInfo_t
pTaskInfo
,
SQWTaskCtx
*
ctx
);
int32_t
qwOpenRef
(
void
);
void
qwSetHbParam
(
int64_t
refId
,
SQWHbParam
**
pParam
);
void
qwDbgDumpMgmtInfo
(
SQWorker
*
mgmt
);
int32_t
qwDbgValidateStatus
(
QW_FPARAMS_DEF
,
int8_t
oriStatus
,
int8_t
newStatus
,
bool
*
ignore
);
#ifdef __cplusplus
}
...
...
source/libs/qworker/inc/qw
orker
Msg.h
→
source/libs/qworker/inc/qwMsg.h
浏览文件 @
c94ca28b
...
...
@@ -20,7 +20,7 @@
extern
"C"
{
#endif
#include "qw
orker
Int.h"
#include "qwInt.h"
#include "dataSinkMgt.h"
int32_t
qwProcessQuery
(
QW_FPARAMS_DEF
,
SQWMsg
*
qwMsg
,
int8_t
taskType
,
int8_t
explain
);
...
...
@@ -36,12 +36,10 @@ int32_t qwBuildAndSendFetchRsp(SRpcHandleInfo *pConn, SRetrieveTableRsp *pRsp, i
int32_t
code
);
void
qwBuildFetchRsp
(
void
*
msg
,
SOutputData
*
input
,
int32_t
len
,
bool
qComplete
);
int32_t
qwBuildAndSendCQueryMsg
(
QW_FPARAMS_DEF
,
SRpcHandleInfo
*
pConn
);
int32_t
qwBuildAndSendReadyRsp
(
SRpcHandleInfo
*
pConn
,
int32_t
code
,
STbVerInfo
*
tbInfo
);
int32_t
qwBuildAndSendQueryRsp
(
SRpcHandleInfo
*
pConn
,
int32_t
code
);
int32_t
qwBuildAndSendQueryRsp
(
SRpcHandleInfo
*
pConn
,
int32_t
code
,
STbVerInfo
*
tbInfo
);
int32_t
qwBuildAndSendExplainRsp
(
SRpcHandleInfo
*
pConn
,
SExplainExecInfo
*
execInfo
,
int32_t
num
);
void
qwFreeFetchRsp
(
void
*
msg
);
int32_t
qwMallocFetchRsp
(
int32_t
length
,
SRetrieveTableRsp
**
rsp
);
int32_t
qwGetSchTasksStatus
(
SQWorker
*
mgmt
,
uint64_t
sId
,
SSchedulerStatusRsp
**
rsp
);
int32_t
qwBuildAndSendHbRsp
(
SRpcHandleInfo
*
pConn
,
SSchedulerHbRsp
*
rsp
,
int32_t
code
);
int32_t
qwRegisterQueryBrokenLinkArg
(
QW_FPARAMS_DEF
,
SRpcHandleInfo
*
pConn
);
int32_t
qwRegisterHbBrokenLinkArg
(
SQWorker
*
mgmt
,
uint64_t
sId
,
SRpcHandleInfo
*
pConn
);
...
...
source/libs/qworker/src/qwDbg.c
0 → 100644
浏览文件 @
c94ca28b
#include "qworker.h"
#include "dataSinkMgt.h"
#include "executor.h"
#include "planner.h"
#include "query.h"
#include "qwInt.h"
#include "qwMsg.h"
#include "tcommon.h"
#include "tmsg.h"
#include "tname.h"
SQWDebug
gQWDebug
=
{.
statusEnable
=
true
,
.
dumpEnable
=
true
};
int32_t
qwDbgValidateStatus
(
QW_FPARAMS_DEF
,
int8_t
oriStatus
,
int8_t
newStatus
,
bool
*
ignore
)
{
if
(
!
gQWDebug
.
statusEnable
)
{
return
TSDB_CODE_SUCCESS
;
}
int32_t
code
=
0
;
if
(
oriStatus
==
newStatus
)
{
if
(
newStatus
==
JOB_TASK_STATUS_EXECUTING
||
newStatus
==
JOB_TASK_STATUS_FAILED
)
{
*
ignore
=
true
;
return
TSDB_CODE_SUCCESS
;
}
QW_ERR_JRET
(
TSDB_CODE_QRY_APP_ERROR
);
}
switch
(
oriStatus
)
{
case
JOB_TASK_STATUS_NULL
:
if
(
newStatus
!=
JOB_TASK_STATUS_EXECUTING
&&
newStatus
!=
JOB_TASK_STATUS_FAILED
&&
newStatus
!=
JOB_TASK_STATUS_NOT_START
)
{
QW_ERR_JRET
(
TSDB_CODE_QRY_APP_ERROR
);
}
break
;
case
JOB_TASK_STATUS_NOT_START
:
if
(
newStatus
!=
JOB_TASK_STATUS_CANCELLED
)
{
QW_ERR_JRET
(
TSDB_CODE_QRY_APP_ERROR
);
}
break
;
case
JOB_TASK_STATUS_EXECUTING
:
if
(
newStatus
!=
JOB_TASK_STATUS_PARTIAL_SUCCEED
&&
newStatus
!=
JOB_TASK_STATUS_SUCCEED
&&
newStatus
!=
JOB_TASK_STATUS_FAILED
&&
newStatus
!=
JOB_TASK_STATUS_CANCELLING
&&
newStatus
!=
JOB_TASK_STATUS_CANCELLED
&&
newStatus
!=
JOB_TASK_STATUS_DROPPING
)
{
QW_ERR_JRET
(
TSDB_CODE_QRY_APP_ERROR
);
}
break
;
case
JOB_TASK_STATUS_PARTIAL_SUCCEED
:
if
(
newStatus
!=
JOB_TASK_STATUS_EXECUTING
&&
newStatus
!=
JOB_TASK_STATUS_SUCCEED
&&
newStatus
!=
JOB_TASK_STATUS_CANCELLED
&&
newStatus
!=
JOB_TASK_STATUS_FAILED
&&
newStatus
!=
JOB_TASK_STATUS_DROPPING
)
{
QW_ERR_JRET
(
TSDB_CODE_QRY_APP_ERROR
);
}
break
;
case
JOB_TASK_STATUS_SUCCEED
:
if
(
newStatus
!=
JOB_TASK_STATUS_CANCELLED
&&
newStatus
!=
JOB_TASK_STATUS_DROPPING
&&
newStatus
!=
JOB_TASK_STATUS_FAILED
)
{
QW_ERR_JRET
(
TSDB_CODE_QRY_APP_ERROR
);
}
break
;
case
JOB_TASK_STATUS_FAILED
:
if
(
newStatus
!=
JOB_TASK_STATUS_CANCELLED
&&
newStatus
!=
JOB_TASK_STATUS_DROPPING
)
{
QW_ERR_JRET
(
TSDB_CODE_QRY_APP_ERROR
);
}
break
;
case
JOB_TASK_STATUS_CANCELLING
:
if
(
newStatus
!=
JOB_TASK_STATUS_CANCELLED
)
{
QW_ERR_JRET
(
TSDB_CODE_QRY_APP_ERROR
);
}
break
;
case
JOB_TASK_STATUS_CANCELLED
:
case
JOB_TASK_STATUS_DROPPING
:
if
(
newStatus
!=
JOB_TASK_STATUS_FAILED
&&
newStatus
!=
JOB_TASK_STATUS_PARTIAL_SUCCEED
)
{
QW_ERR_JRET
(
TSDB_CODE_QRY_APP_ERROR
);
}
break
;
default:
QW_TASK_ELOG
(
"invalid task origStatus:%s"
,
jobTaskStatusStr
(
oriStatus
));
return
TSDB_CODE_QRY_APP_ERROR
;
}
return
TSDB_CODE_SUCCESS
;
_return:
QW_TASK_ELOG
(
"invalid task status update from %s to %s"
,
jobTaskStatusStr
(
oriStatus
),
jobTaskStatusStr
(
newStatus
));
QW_RET
(
code
);
}
void
qwDbgDumpSchInfo
(
SQWSchStatus
*
sch
,
int32_t
i
)
{}
void
qwDbgDumpMgmtInfo
(
SQWorker
*
mgmt
)
{
if
(
!
gQWDebug
.
dumpEnable
)
{
return
;
}
QW_LOCK
(
QW_READ
,
&
mgmt
->
schLock
);
/*QW_DUMP("total remain schduler num:%d", taosHashGetSize(mgmt->schHash));*/
void
*
key
=
NULL
;
size_t
keyLen
=
0
;
int32_t
i
=
0
;
SQWSchStatus
*
sch
=
NULL
;
void
*
pIter
=
taosHashIterate
(
mgmt
->
schHash
,
NULL
);
while
(
pIter
)
{
sch
=
(
SQWSchStatus
*
)
pIter
;
qwDbgDumpSchInfo
(
sch
,
i
);
++
i
;
pIter
=
taosHashIterate
(
mgmt
->
schHash
,
pIter
);
}
QW_UNLOCK
(
QW_READ
,
&
mgmt
->
schLock
);
/*QW_DUMP("total remain ctx num:%d", taosHashGetSize(mgmt->ctxHash));*/
}
source/libs/qworker/src/qw
orker
Msg.c
→
source/libs/qworker/src/qwMsg.c
浏览文件 @
c94ca28b
#include "qw
orker
Msg.h"
#include "qwMsg.h"
#include "dataSinkMgt.h"
#include "executor.h"
#include "planner.h"
#include "query.h"
#include "qworker.h"
#include "qw
orker
Int.h"
#include "qwInt.h"
#include "tcommon.h"
#include "tmsg.h"
#include "tname.h"
...
...
@@ -43,28 +43,8 @@ void qwFreeFetchRsp(void *msg) {
}
}
int32_t
qwBuildAndSendQueryRsp
(
SRpcHandleInfo
*
pConn
,
int32_t
code
)
{
SQueryTableRsp
rsp
=
{.
code
=
code
};
int32_t
contLen
=
tSerializeSQueryTableRsp
(
NULL
,
0
,
&
rsp
);
void
*
msg
=
rpcMallocCont
(
contLen
);
tSerializeSQueryTableRsp
(
msg
,
contLen
,
&
rsp
);
SRpcMsg
rpcRsp
=
{
.
msgType
=
TDMT_VND_QUERY_RSP
,
.
pCont
=
msg
,
.
contLen
=
contLen
,
.
code
=
code
,
.
info
=
*
pConn
,
};
tmsgSendRsp
(
&
rpcRsp
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwBuildAndSendReadyRsp
(
SRpcHandleInfo
*
pConn
,
int32_t
code
,
STbVerInfo
*
tbInfo
)
{
SResReadyRsp
*
pRsp
=
(
SResReadyRsp
*
)
rpcMallocCont
(
sizeof
(
SResReadyRsp
));
int32_t
qwBuildAndSendQueryRsp
(
SRpcHandleInfo
*
pConn
,
int32_t
code
,
STbVerInfo
*
tbInfo
)
{
SQueryTableRsp
*
pRsp
=
(
SQueryTableRsp
*
)
rpcMallocCont
(
sizeof
(
SQueryTableRsp
));
pRsp
->
code
=
code
;
if
(
tbInfo
)
{
strcpy
(
pRsp
->
tbFName
,
tbInfo
->
tbFName
);
...
...
@@ -73,13 +53,12 @@ int32_t qwBuildAndSendReadyRsp(SRpcHandleInfo *pConn, int32_t code, STbVerInfo*
}
SRpcMsg
rpcRsp
=
{
.
msgType
=
TDMT_VND_
RES_READ
Y_RSP
,
.
msgType
=
TDMT_VND_
QUER
Y_RSP
,
.
pCont
=
pRsp
,
.
contLen
=
sizeof
(
*
pRsp
),
.
code
=
code
,
.
info
=
*
pConn
,
};
rpcRsp
.
info
.
ahandle
=
NULL
;
tmsgSendRsp
(
&
rpcRsp
);
...
...
@@ -177,76 +156,6 @@ int32_t qwBuildAndSendDropRsp(SRpcHandleInfo *pConn, int32_t code) {
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwBuildAndSendShowRsp
(
SRpcMsg
*
pMsg
,
int32_t
code
)
{
int32_t
numOfCols
=
6
;
SVShowTablesRsp
showRsp
=
{
0
};
// showRsp.showId = 1;
showRsp
.
tableMeta
.
pSchemas
=
taosMemoryCalloc
(
numOfCols
,
sizeof
(
SSchema
));
if
(
showRsp
.
tableMeta
.
pSchemas
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
return
-
1
;
}
col_id_t
cols
=
0
;
SSchema
*
pSchema
=
showRsp
.
tableMeta
.
pSchemas
;
const
SSchema
*
s
=
tGetTbnameColumnSchema
();
*
pSchema
=
createSchema
(
s
->
type
,
s
->
bytes
,
++
cols
,
"name"
);
pSchema
++
;
int32_t
type
=
TSDB_DATA_TYPE_TIMESTAMP
;
*
pSchema
=
createSchema
(
type
,
tDataTypes
[
type
].
bytes
,
++
cols
,
"created"
);
pSchema
++
;
type
=
TSDB_DATA_TYPE_SMALLINT
;
*
pSchema
=
createSchema
(
type
,
tDataTypes
[
type
].
bytes
,
++
cols
,
"columns"
);
pSchema
++
;
*
pSchema
=
createSchema
(
s
->
type
,
s
->
bytes
,
++
cols
,
"stable"
);
pSchema
++
;
type
=
TSDB_DATA_TYPE_BIGINT
;
*
pSchema
=
createSchema
(
type
,
tDataTypes
[
type
].
bytes
,
++
cols
,
"uid"
);
pSchema
++
;
type
=
TSDB_DATA_TYPE_INT
;
*
pSchema
=
createSchema
(
type
,
tDataTypes
[
type
].
bytes
,
++
cols
,
"vgId"
);
assert
(
cols
==
numOfCols
);
showRsp
.
tableMeta
.
numOfColumns
=
cols
;
int32_t
bufLen
=
tSerializeSShowRsp
(
NULL
,
0
,
&
showRsp
);
void
*
pBuf
=
rpcMallocCont
(
bufLen
);
tSerializeSShowRsp
(
pBuf
,
bufLen
,
&
showRsp
);
SRpcMsg
rpcMsg
=
{
.
info
=
pMsg
->
info
,
.
pCont
=
pBuf
,
.
contLen
=
bufLen
,
.
code
=
code
,
};
tmsgSendRsp
(
&
rpcMsg
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwBuildAndSendShowFetchRsp
(
SRpcMsg
*
pMsg
,
SVShowTablesFetchReq
*
pFetchReq
)
{
SVShowTablesFetchRsp
*
pRsp
=
(
SVShowTablesFetchRsp
*
)
rpcMallocCont
(
sizeof
(
SVShowTablesFetchRsp
));
int32_t
handle
=
htonl
(
pFetchReq
->
id
);
pRsp
->
numOfRows
=
0
;
SRpcMsg
rpcMsg
=
{
.
info
=
pMsg
->
info
,
.
pCont
=
pRsp
,
.
contLen
=
sizeof
(
*
pRsp
),
.
code
=
0
,
};
tmsgSendRsp
(
&
rpcMsg
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwBuildAndSendCQueryMsg
(
QW_FPARAMS_DEF
,
SRpcHandleInfo
*
pConn
)
{
SQueryContinueReq
*
req
=
(
SQueryContinueReq
*
)
rpcMallocCont
(
sizeof
(
SQueryContinueReq
));
if
(
NULL
==
req
)
{
...
...
@@ -407,65 +316,6 @@ int32_t qWorkerProcessCQueryMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg) {
return
TSDB_CODE_SUCCESS
;
}
int32_t
qWorkerProcessReadyMsg
(
void
*
node
,
void
*
qWorkerMgmt
,
SRpcMsg
*
pMsg
)
{
if
(
NULL
==
node
||
NULL
==
qWorkerMgmt
||
NULL
==
pMsg
)
{
return
TSDB_CODE_QRY_INVALID_INPUT
;
}
SQWorker
*
mgmt
=
(
SQWorker
*
)
qWorkerMgmt
;
SResReadyReq
*
msg
=
pMsg
->
pCont
;
if
(
NULL
==
msg
||
pMsg
->
contLen
<
sizeof
(
*
msg
))
{
QW_ELOG
(
"invalid task ready msg, msg:%p, msgLen:%d"
,
msg
,
pMsg
->
contLen
);
QW_ERR_RET
(
TSDB_CODE_QRY_INVALID_INPUT
);
}
msg
->
sId
=
be64toh
(
msg
->
sId
);
msg
->
queryId
=
be64toh
(
msg
->
queryId
);
msg
->
taskId
=
be64toh
(
msg
->
taskId
);
uint64_t
sId
=
msg
->
sId
;
uint64_t
qId
=
msg
->
queryId
;
uint64_t
tId
=
msg
->
taskId
;
int64_t
rId
=
0
;
SQWMsg
qwMsg
=
{.
node
=
node
,
.
msg
=
NULL
,
.
msgLen
=
0
,
.
connInfo
=
pMsg
->
info
};
QW_SCH_TASK_DLOG
(
"processReady start, node:%p, handle:%p"
,
node
,
pMsg
->
info
.
handle
);
QW_ERR_RET
(
qwProcessReady
(
QW_FPARAMS
(),
&
qwMsg
));
QW_SCH_TASK_DLOG
(
"processReady end, node:%p"
,
node
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
qWorkerProcessStatusMsg
(
void
*
node
,
void
*
qWorkerMgmt
,
SRpcMsg
*
pMsg
)
{
if
(
NULL
==
node
||
NULL
==
qWorkerMgmt
||
NULL
==
pMsg
)
{
return
TSDB_CODE_QRY_INVALID_INPUT
;
}
int32_t
code
=
0
;
SSchTasksStatusReq
*
msg
=
pMsg
->
pCont
;
if
(
NULL
==
msg
||
pMsg
->
contLen
<
sizeof
(
*
msg
))
{
qError
(
"invalid task status msg"
);
QW_ERR_RET
(
TSDB_CODE_QRY_INVALID_INPUT
);
}
SQWorker
*
mgmt
=
(
SQWorker
*
)
qWorkerMgmt
;
msg
->
sId
=
htobe64
(
msg
->
sId
);
uint64_t
sId
=
msg
->
sId
;
SSchedulerStatusRsp
*
sStatus
=
NULL
;
// QW_ERR_JRET(qwGetSchTasksStatus(qWorkerMgmt, msg->sId, &sStatus));
_return:
// QW_ERR_RET(qwBuildAndSendStatusRsp(pMsg, sStatus));
return
TSDB_CODE_SUCCESS
;
}
int32_t
qWorkerProcessFetchMsg
(
void
*
node
,
void
*
qWorkerMgmt
,
SRpcMsg
*
pMsg
)
{
if
(
NULL
==
node
||
NULL
==
qWorkerMgmt
||
NULL
==
pMsg
)
{
return
TSDB_CODE_QRY_INVALID_INPUT
;
...
...
@@ -613,22 +463,3 @@ int32_t qWorkerProcessHbMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg) {
return
TSDB_CODE_SUCCESS
;
}
int32_t
qWorkerProcessShowMsg
(
void
*
node
,
void
*
qWorkerMgmt
,
SRpcMsg
*
pMsg
)
{
if
(
NULL
==
node
||
NULL
==
qWorkerMgmt
||
NULL
==
pMsg
)
{
return
TSDB_CODE_QRY_INVALID_INPUT
;
}
int32_t
code
=
0
;
SVShowTablesReq
*
pReq
=
pMsg
->
pCont
;
QW_RET
(
qwBuildAndSendShowRsp
(
pMsg
,
code
));
}
int32_t
qWorkerProcessShowFetchMsg
(
void
*
node
,
void
*
qWorkerMgmt
,
SRpcMsg
*
pMsg
)
{
if
(
NULL
==
node
||
NULL
==
qWorkerMgmt
||
NULL
==
pMsg
)
{
return
TSDB_CODE_QRY_INVALID_INPUT
;
}
SVShowTablesFetchReq
*
pFetchReq
=
pMsg
->
pCont
;
QW_RET
(
qwBuildAndSendShowFetchRsp
(
pMsg
,
pFetchReq
));
}
source/libs/qworker/src/qwUtil.c
0 → 100644
浏览文件 @
c94ca28b
#include "qworker.h"
#include "dataSinkMgt.h"
#include "executor.h"
#include "planner.h"
#include "query.h"
#include "qwInt.h"
#include "qwMsg.h"
#include "tcommon.h"
#include "tmsg.h"
#include "tname.h"
char
*
qwPhaseStr
(
int32_t
phase
)
{
switch
(
phase
)
{
case
QW_PHASE_PRE_QUERY
:
return
"PRE_QUERY"
;
case
QW_PHASE_POST_QUERY
:
return
"POST_QUERY"
;
case
QW_PHASE_PRE_FETCH
:
return
"PRE_FETCH"
;
case
QW_PHASE_POST_FETCH
:
return
"POST_FETCH"
;
case
QW_PHASE_PRE_CQUERY
:
return
"PRE_CQUERY"
;
case
QW_PHASE_POST_CQUERY
:
return
"POST_CQUERY"
;
default:
break
;
}
return
"UNKNOWN"
;
}
char
*
qwBufStatusStr
(
int32_t
bufStatus
)
{
switch
(
bufStatus
)
{
case
DS_BUF_LOW
:
return
"LOW"
;
case
DS_BUF_FULL
:
return
"FULL"
;
case
DS_BUF_EMPTY
:
return
"EMPTY"
;
default:
break
;
}
return
"UNKNOWN"
;
}
int32_t
qwSetTaskStatus
(
QW_FPARAMS_DEF
,
SQWTaskStatus
*
task
,
int8_t
status
)
{
int32_t
code
=
0
;
int8_t
origStatus
=
0
;
bool
ignore
=
false
;
while
(
true
)
{
origStatus
=
atomic_load_8
(
&
task
->
status
);
QW_ERR_RET
(
qwDbgValidateStatus
(
QW_FPARAMS
(),
origStatus
,
status
,
&
ignore
));
if
(
ignore
)
{
break
;
}
if
(
origStatus
!=
atomic_val_compare_exchange_8
(
&
task
->
status
,
origStatus
,
status
))
{
continue
;
}
QW_TASK_DLOG
(
"task status updated from %s to %s"
,
jobTaskStatusStr
(
origStatus
),
jobTaskStatusStr
(
status
));
break
;
}
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwAddSchedulerImpl
(
SQWorker
*
mgmt
,
uint64_t
sId
,
int32_t
rwType
)
{
SQWSchStatus
newSch
=
{
0
};
newSch
.
tasksHash
=
taosHashInit
(
mgmt
->
cfg
.
maxSchTaskNum
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
false
,
HASH_NO_LOCK
);
if
(
NULL
==
newSch
.
tasksHash
)
{
QW_SCH_ELOG
(
"taosHashInit %d failed"
,
mgmt
->
cfg
.
maxSchTaskNum
);
QW_ERR_RET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
QW_LOCK
(
QW_WRITE
,
&
mgmt
->
schLock
);
int32_t
code
=
taosHashPut
(
mgmt
->
schHash
,
&
sId
,
sizeof
(
sId
),
&
newSch
,
sizeof
(
newSch
));
if
(
0
!=
code
)
{
if
(
!
HASH_NODE_EXIST
(
code
))
{
QW_UNLOCK
(
QW_WRITE
,
&
mgmt
->
schLock
);
QW_SCH_ELOG
(
"taosHashPut new sch to scheduleHash failed, errno:%d"
,
errno
);
taosHashCleanup
(
newSch
.
tasksHash
);
QW_ERR_RET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
taosHashCleanup
(
newSch
.
tasksHash
);
}
QW_UNLOCK
(
QW_WRITE
,
&
mgmt
->
schLock
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwAcquireSchedulerImpl
(
SQWorker
*
mgmt
,
uint64_t
sId
,
int32_t
rwType
,
SQWSchStatus
**
sch
,
int32_t
nOpt
)
{
while
(
true
)
{
QW_LOCK
(
rwType
,
&
mgmt
->
schLock
);
*
sch
=
taosHashGet
(
mgmt
->
schHash
,
&
sId
,
sizeof
(
sId
));
if
(
NULL
==
(
*
sch
))
{
QW_UNLOCK
(
rwType
,
&
mgmt
->
schLock
);
if
(
QW_NOT_EXIST_ADD
==
nOpt
)
{
QW_ERR_RET
(
qwAddSchedulerImpl
(
mgmt
,
sId
,
rwType
));
nOpt
=
QW_NOT_EXIST_RET_ERR
;
continue
;
}
else
if
(
QW_NOT_EXIST_RET_ERR
==
nOpt
)
{
QW_RET
(
TSDB_CODE_QRY_SCH_NOT_EXIST
);
}
else
{
QW_SCH_ELOG
(
"unknown notExistOpt:%d"
,
nOpt
);
QW_ERR_RET
(
TSDB_CODE_QRY_APP_ERROR
);
}
}
break
;
}
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwAcquireAddScheduler
(
SQWorker
*
mgmt
,
uint64_t
sId
,
int32_t
rwType
,
SQWSchStatus
**
sch
)
{
return
qwAcquireSchedulerImpl
(
mgmt
,
sId
,
rwType
,
sch
,
QW_NOT_EXIST_ADD
);
}
int32_t
qwAcquireScheduler
(
SQWorker
*
mgmt
,
uint64_t
sId
,
int32_t
rwType
,
SQWSchStatus
**
sch
)
{
return
qwAcquireSchedulerImpl
(
mgmt
,
sId
,
rwType
,
sch
,
QW_NOT_EXIST_RET_ERR
);
}
void
qwReleaseScheduler
(
int32_t
rwType
,
SQWorker
*
mgmt
)
{
QW_UNLOCK
(
rwType
,
&
mgmt
->
schLock
);
}
int32_t
qwAcquireTaskStatus
(
QW_FPARAMS_DEF
,
int32_t
rwType
,
SQWSchStatus
*
sch
,
SQWTaskStatus
**
task
)
{
char
id
[
sizeof
(
qId
)
+
sizeof
(
tId
)]
=
{
0
};
QW_SET_QTID
(
id
,
qId
,
tId
);
QW_LOCK
(
rwType
,
&
sch
->
tasksLock
);
*
task
=
taosHashGet
(
sch
->
tasksHash
,
id
,
sizeof
(
id
));
if
(
NULL
==
(
*
task
))
{
QW_UNLOCK
(
rwType
,
&
sch
->
tasksLock
);
QW_ERR_RET
(
TSDB_CODE_QRY_TASK_NOT_EXIST
);
}
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwAddTaskStatusImpl
(
QW_FPARAMS_DEF
,
SQWSchStatus
*
sch
,
int32_t
rwType
,
int32_t
status
,
SQWTaskStatus
**
task
)
{
int32_t
code
=
0
;
char
id
[
sizeof
(
qId
)
+
sizeof
(
tId
)]
=
{
0
};
QW_SET_QTID
(
id
,
qId
,
tId
);
SQWTaskStatus
ntask
=
{
0
};
ntask
.
status
=
status
;
ntask
.
refId
=
rId
;
QW_LOCK
(
QW_WRITE
,
&
sch
->
tasksLock
);
code
=
taosHashPut
(
sch
->
tasksHash
,
id
,
sizeof
(
id
),
&
ntask
,
sizeof
(
ntask
));
if
(
0
!=
code
)
{
QW_UNLOCK
(
QW_WRITE
,
&
sch
->
tasksLock
);
if
(
HASH_NODE_EXIST
(
code
))
{
if
(
rwType
&&
task
)
{
QW_RET
(
qwAcquireTaskStatus
(
QW_FPARAMS
(),
rwType
,
sch
,
task
));
}
else
{
QW_TASK_ELOG
(
"task status already exist, newStatus:%s"
,
jobTaskStatusStr
(
status
));
QW_ERR_RET
(
TSDB_CODE_QRY_TASK_ALREADY_EXIST
);
}
}
else
{
QW_TASK_ELOG
(
"taosHashPut to tasksHash failed, error:%x - %s"
,
code
,
tstrerror
(
code
));
QW_ERR_RET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
}
QW_UNLOCK
(
QW_WRITE
,
&
sch
->
tasksLock
);
QW_TASK_DLOG
(
"task status added, newStatus:%s"
,
jobTaskStatusStr
(
status
));
if
(
rwType
&&
task
)
{
QW_ERR_RET
(
qwAcquireTaskStatus
(
QW_FPARAMS
(),
rwType
,
sch
,
task
));
}
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwAddTaskStatus
(
QW_FPARAMS_DEF
,
int32_t
status
)
{
SQWSchStatus
*
tsch
=
NULL
;
int32_t
code
=
0
;
QW_ERR_RET
(
qwAcquireAddScheduler
(
mgmt
,
sId
,
QW_READ
,
&
tsch
));
QW_ERR_JRET
(
qwAddTaskStatusImpl
(
QW_FPARAMS
(),
tsch
,
0
,
status
,
NULL
));
_return:
qwReleaseScheduler
(
QW_READ
,
mgmt
);
QW_RET
(
code
);
}
int32_t
qwAddAcquireTaskStatus
(
QW_FPARAMS_DEF
,
int32_t
rwType
,
SQWSchStatus
*
sch
,
int32_t
status
,
SQWTaskStatus
**
task
)
{
return
qwAddTaskStatusImpl
(
QW_FPARAMS
(),
sch
,
rwType
,
status
,
task
);
}
void
qwReleaseTaskStatus
(
int32_t
rwType
,
SQWSchStatus
*
sch
)
{
QW_UNLOCK
(
rwType
,
&
sch
->
tasksLock
);
}
int32_t
qwAcquireTaskCtx
(
QW_FPARAMS_DEF
,
SQWTaskCtx
**
ctx
)
{
char
id
[
sizeof
(
qId
)
+
sizeof
(
tId
)]
=
{
0
};
QW_SET_QTID
(
id
,
qId
,
tId
);
*
ctx
=
taosHashAcquire
(
mgmt
->
ctxHash
,
id
,
sizeof
(
id
));
if
(
NULL
==
(
*
ctx
))
{
QW_TASK_DLOG_E
(
"task ctx not exist, may be dropped"
);
QW_ERR_RET
(
TSDB_CODE_QRY_TASK_CTX_NOT_EXIST
);
}
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwGetTaskCtx
(
QW_FPARAMS_DEF
,
SQWTaskCtx
**
ctx
)
{
char
id
[
sizeof
(
qId
)
+
sizeof
(
tId
)]
=
{
0
};
QW_SET_QTID
(
id
,
qId
,
tId
);
*
ctx
=
taosHashGet
(
mgmt
->
ctxHash
,
id
,
sizeof
(
id
));
if
(
NULL
==
(
*
ctx
))
{
QW_TASK_DLOG_E
(
"task ctx not exist, may be dropped"
);
QW_ERR_RET
(
TSDB_CODE_QRY_TASK_CTX_NOT_EXIST
);
}
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwAddTaskCtxImpl
(
QW_FPARAMS_DEF
,
bool
acquire
,
SQWTaskCtx
**
ctx
)
{
char
id
[
sizeof
(
qId
)
+
sizeof
(
tId
)]
=
{
0
};
QW_SET_QTID
(
id
,
qId
,
tId
);
SQWTaskCtx
nctx
=
{
0
};
int32_t
code
=
taosHashPut
(
mgmt
->
ctxHash
,
id
,
sizeof
(
id
),
&
nctx
,
sizeof
(
SQWTaskCtx
));
if
(
0
!=
code
)
{
if
(
HASH_NODE_EXIST
(
code
))
{
if
(
acquire
&&
ctx
)
{
QW_RET
(
qwAcquireTaskCtx
(
QW_FPARAMS
(),
ctx
));
}
else
if
(
ctx
)
{
QW_RET
(
qwGetTaskCtx
(
QW_FPARAMS
(),
ctx
));
}
else
{
QW_TASK_ELOG_E
(
"task ctx already exist"
);
QW_ERR_RET
(
TSDB_CODE_QRY_TASK_ALREADY_EXIST
);
}
}
else
{
QW_TASK_ELOG
(
"taosHashPut to ctxHash failed, error:%x"
,
code
);
QW_ERR_RET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
}
if
(
acquire
&&
ctx
)
{
QW_RET
(
qwAcquireTaskCtx
(
QW_FPARAMS
(),
ctx
));
}
else
if
(
ctx
)
{
QW_RET
(
qwGetTaskCtx
(
QW_FPARAMS
(),
ctx
));
}
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwAddTaskCtx
(
QW_FPARAMS_DEF
)
{
QW_RET
(
qwAddTaskCtxImpl
(
QW_FPARAMS
(),
false
,
NULL
));
}
int32_t
qwAddAcquireTaskCtx
(
QW_FPARAMS_DEF
,
SQWTaskCtx
**
ctx
)
{
return
qwAddTaskCtxImpl
(
QW_FPARAMS
(),
true
,
ctx
);
}
void
qwReleaseTaskCtx
(
SQWorker
*
mgmt
,
void
*
ctx
)
{
taosHashRelease
(
mgmt
->
ctxHash
,
ctx
);
}
void
qwFreeTaskHandle
(
QW_FPARAMS_DEF
,
qTaskInfo_t
*
taskHandle
)
{
// Note: free/kill may in RC
qTaskInfo_t
otaskHandle
=
atomic_load_ptr
(
taskHandle
);
if
(
otaskHandle
&&
atomic_val_compare_exchange_ptr
(
taskHandle
,
otaskHandle
,
NULL
))
{
qDestroyTask
(
otaskHandle
);
}
}
int32_t
qwKillTaskHandle
(
QW_FPARAMS_DEF
,
SQWTaskCtx
*
ctx
)
{
int32_t
code
=
0
;
// Note: free/kill may in RC
qTaskInfo_t
taskHandle
=
atomic_load_ptr
(
&
ctx
->
taskHandle
);
if
(
taskHandle
&&
atomic_val_compare_exchange_ptr
(
&
ctx
->
taskHandle
,
taskHandle
,
NULL
))
{
code
=
qAsyncKillTask
(
taskHandle
);
atomic_store_ptr
(
&
ctx
->
taskHandle
,
taskHandle
);
}
QW_RET
(
code
);
}
void
qwFreeTask
(
QW_FPARAMS_DEF
,
SQWTaskCtx
*
ctx
)
{
tmsgReleaseHandle
(
&
ctx
->
ctrlConnInfo
,
TAOS_CONN_SERVER
);
ctx
->
ctrlConnInfo
.
handle
=
NULL
;
ctx
->
ctrlConnInfo
.
refId
=
-
1
;
// NO need to release dataConnInfo
qwFreeTaskHandle
(
QW_FPARAMS
(),
&
ctx
->
taskHandle
);
if
(
ctx
->
sinkHandle
)
{
dsDestroyDataSinker
(
ctx
->
sinkHandle
);
ctx
->
sinkHandle
=
NULL
;
}
if
(
ctx
->
plan
)
{
nodesDestroyNode
(
ctx
->
plan
);
ctx
->
plan
=
NULL
;
}
}
int32_t
qwDropTaskCtx
(
QW_FPARAMS_DEF
)
{
char
id
[
sizeof
(
qId
)
+
sizeof
(
tId
)]
=
{
0
};
QW_SET_QTID
(
id
,
qId
,
tId
);
SQWTaskCtx
octx
;
SQWTaskCtx
*
ctx
=
taosHashGet
(
mgmt
->
ctxHash
,
id
,
sizeof
(
id
));
if
(
NULL
==
ctx
)
{
QW_ERR_RET
(
TSDB_CODE_QRY_TASK_CTX_NOT_EXIST
);
}
octx
=
*
ctx
;
atomic_store_ptr
(
&
ctx
->
taskHandle
,
NULL
);
atomic_store_ptr
(
&
ctx
->
sinkHandle
,
NULL
);
atomic_store_ptr
(
&
ctx
->
plan
,
NULL
);
QW_SET_EVENT_PROCESSED
(
ctx
,
QW_EVENT_DROP
);
if
(
taosHashRemove
(
mgmt
->
ctxHash
,
id
,
sizeof
(
id
)))
{
QW_TASK_ELOG_E
(
"taosHashRemove from ctx hash failed"
);
QW_ERR_RET
(
TSDB_CODE_QRY_TASK_CTX_NOT_EXIST
);
}
qwFreeTask
(
QW_FPARAMS
(),
&
octx
);
QW_TASK_DLOG_E
(
"task ctx dropped"
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwDropTaskStatus
(
QW_FPARAMS_DEF
)
{
SQWSchStatus
*
sch
=
NULL
;
SQWTaskStatus
*
task
=
NULL
;
int32_t
code
=
0
;
char
id
[
sizeof
(
qId
)
+
sizeof
(
tId
)]
=
{
0
};
QW_SET_QTID
(
id
,
qId
,
tId
);
if
(
qwAcquireScheduler
(
mgmt
,
sId
,
QW_WRITE
,
&
sch
))
{
QW_TASK_WLOG_E
(
"scheduler does not exist"
);
return
TSDB_CODE_SUCCESS
;
}
if
(
qwAcquireTaskStatus
(
QW_FPARAMS
(),
QW_WRITE
,
sch
,
&
task
))
{
qwReleaseScheduler
(
QW_WRITE
,
mgmt
);
QW_TASK_WLOG_E
(
"task does not exist"
);
return
TSDB_CODE_SUCCESS
;
}
if
(
taosHashRemove
(
sch
->
tasksHash
,
id
,
sizeof
(
id
)))
{
QW_TASK_ELOG_E
(
"taosHashRemove task from hash failed"
);
QW_ERR_JRET
(
TSDB_CODE_QRY_APP_ERROR
);
}
QW_TASK_DLOG_E
(
"task status dropped"
);
_return:
if
(
task
)
{
qwReleaseTaskStatus
(
QW_WRITE
,
sch
);
}
qwReleaseScheduler
(
QW_WRITE
,
mgmt
);
QW_RET
(
code
);
}
int32_t
qwUpdateTaskStatus
(
QW_FPARAMS_DEF
,
int8_t
status
)
{
SQWSchStatus
*
sch
=
NULL
;
SQWTaskStatus
*
task
=
NULL
;
int32_t
code
=
0
;
QW_ERR_RET
(
qwAcquireScheduler
(
mgmt
,
sId
,
QW_READ
,
&
sch
));
QW_ERR_JRET
(
qwAcquireTaskStatus
(
QW_FPARAMS
(),
QW_READ
,
sch
,
&
task
));
QW_ERR_JRET
(
qwSetTaskStatus
(
QW_FPARAMS
(),
task
,
status
));
_return:
if
(
task
)
{
qwReleaseTaskStatus
(
QW_READ
,
sch
);
}
qwReleaseScheduler
(
QW_READ
,
mgmt
);
QW_RET
(
code
);
}
int32_t
qwDropTask
(
QW_FPARAMS_DEF
)
{
QW_ERR_RET
(
qwDropTaskStatus
(
QW_FPARAMS
()));
QW_ERR_RET
(
qwDropTaskCtx
(
QW_FPARAMS
()));
QW_TASK_DLOG_E
(
"task is dropped"
);
return
TSDB_CODE_SUCCESS
;
}
void
qwSetHbParam
(
int64_t
refId
,
SQWHbParam
**
pParam
)
{
int32_t
paramIdx
=
0
;
int32_t
newParamIdx
=
0
;
while
(
true
)
{
paramIdx
=
atomic_load_32
(
&
gQwMgmt
.
paramIdx
);
if
(
paramIdx
==
tListLen
(
gQwMgmt
.
param
))
{
newParamIdx
=
0
;
}
else
{
newParamIdx
=
paramIdx
+
1
;
}
if
(
paramIdx
==
atomic_val_compare_exchange_32
(
&
gQwMgmt
.
paramIdx
,
paramIdx
,
newParamIdx
))
{
break
;
}
}
gQwMgmt
.
param
[
paramIdx
].
qwrId
=
gQwMgmt
.
qwRef
;
gQwMgmt
.
param
[
paramIdx
].
refId
=
refId
;
*
pParam
=
&
gQwMgmt
.
param
[
paramIdx
];
}
void
qwSaveTbVersionInfo
(
qTaskInfo_t
pTaskInfo
,
SQWTaskCtx
*
ctx
)
{
char
dbFName
[
TSDB_DB_FNAME_LEN
];
char
tbName
[
TSDB_TABLE_NAME_LEN
];
qGetQueriedTableSchemaVersion
(
pTaskInfo
,
dbFName
,
tbName
,
&
ctx
->
tbInfo
.
sversion
,
&
ctx
->
tbInfo
.
tversion
);
if
(
dbFName
[
0
]
&&
tbName
[
0
])
{
sprintf
(
ctx
->
tbInfo
.
tbFName
,
"%s.%s"
,
dbFName
,
tbName
);
}
else
{
ctx
->
tbInfo
.
tbFName
[
0
]
=
0
;
}
}
void
qwCloseRef
(
void
)
{
taosWLockLatch
(
&
gQwMgmt
.
lock
);
if
(
atomic_load_32
(
&
gQwMgmt
.
qwNum
)
<=
0
&&
gQwMgmt
.
qwRef
>=
0
)
{
taosCloseRef
(
gQwMgmt
.
qwRef
);
gQwMgmt
.
qwRef
=
-
1
;
}
taosWUnLockLatch
(
&
gQwMgmt
.
lock
);
}
void
qwDestroySchStatus
(
SQWSchStatus
*
pStatus
)
{
taosHashCleanup
(
pStatus
->
tasksHash
);
}
void
qwDestroyImpl
(
void
*
pMgmt
)
{
SQWorker
*
mgmt
=
(
SQWorker
*
)
pMgmt
;
taosTmrStopA
(
&
mgmt
->
hbTimer
);
taosTmrCleanUp
(
mgmt
->
timer
);
// TODO STOP ALL QUERY
// TODO FREE ALL
taosHashCleanup
(
mgmt
->
ctxHash
);
void
*
pIter
=
taosHashIterate
(
mgmt
->
schHash
,
NULL
);
while
(
pIter
)
{
SQWSchStatus
*
sch
=
(
SQWSchStatus
*
)
pIter
;
qwDestroySchStatus
(
sch
);
pIter
=
taosHashIterate
(
mgmt
->
schHash
,
pIter
);
}
taosHashCleanup
(
mgmt
->
schHash
);
taosMemoryFree
(
mgmt
);
atomic_sub_fetch_32
(
&
gQwMgmt
.
qwNum
,
1
);
qwCloseRef
();
}
int32_t
qwOpenRef
(
void
)
{
taosWLockLatch
(
&
gQwMgmt
.
lock
);
if
(
gQwMgmt
.
qwRef
<
0
)
{
gQwMgmt
.
qwRef
=
taosOpenRef
(
100
,
qwDestroyImpl
);
if
(
gQwMgmt
.
qwRef
<
0
)
{
taosWUnLockLatch
(
&
gQwMgmt
.
lock
);
qError
(
"init qworker ref failed"
);
QW_RET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
}
taosWUnLockLatch
(
&
gQwMgmt
.
lock
);
return
TSDB_CODE_SUCCESS
;
}
source/libs/qworker/src/qworker.c
浏览文件 @
c94ca28b
此差异已折叠。
点击以展开。
source/libs/qworker/test/qworkerTests.cpp
浏览文件 @
c94ca28b
...
...
@@ -127,15 +127,6 @@ void qwtBuildQueryReqMsg(SRpcMsg *queryRpc) {
queryRpc
->
contLen
=
sizeof
(
SSubQueryMsg
)
+
100
;
}
void
qwtBuildReadyReqMsg
(
SResReadyReq
*
readyMsg
,
SRpcMsg
*
readyRpc
)
{
readyMsg
->
sId
=
htobe64
(
1
);
readyMsg
->
queryId
=
htobe64
(
atomic_load_64
(
&
qwtTestQueryId
));
readyMsg
->
taskId
=
htobe64
(
1
);
readyRpc
->
msgType
=
TDMT_VND_RES_READY
;
readyRpc
->
pCont
=
readyMsg
;
readyRpc
->
contLen
=
sizeof
(
SResReadyReq
);
}
void
qwtBuildFetchReqMsg
(
SResFetchReq
*
fetchMsg
,
SRpcMsg
*
fetchRpc
)
{
fetchMsg
->
sId
=
htobe64
(
1
);
fetchMsg
->
queryId
=
htobe64
(
atomic_load_64
(
&
qwtTestQueryId
));
...
...
@@ -154,13 +145,6 @@ void qwtBuildDropReqMsg(STaskDropReq *dropMsg, SRpcMsg *dropRpc) {
dropRpc
->
contLen
=
sizeof
(
STaskDropReq
);
}
void
qwtBuildStatusReqMsg
(
SSchTasksStatusReq
*
statusMsg
,
SRpcMsg
*
statusRpc
)
{
statusMsg
->
sId
=
htobe64
(
1
);
statusRpc
->
pCont
=
statusMsg
;
statusRpc
->
contLen
=
sizeof
(
SSchTasksStatusReq
);
statusRpc
->
msgType
=
TDMT_VND_TASKS_STATUS
;
}
int32_t
qwtStringToPlan
(
const
char
*
str
,
SSubplan
**
subplan
)
{
*
subplan
=
(
SSubplan
*
)
0x1
;
return
0
;
...
...
@@ -222,10 +206,7 @@ void qwtRpcSendResponse(const SRpcMsg *pRsp) {
case
TDMT_VND_QUERY_RSP
:
{
SQueryTableRsp
*
rsp
=
(
SQueryTableRsp
*
)
pRsp
->
pCont
;
if
(
0
==
pRsp
->
code
)
{
qwtBuildReadyReqMsg
(
&
qwtreadyMsg
,
&
qwtreadyRpc
);
qwtPutReqToFetchQueue
((
void
*
)
0x1
,
&
qwtreadyRpc
);
}
else
{
if
(
pRsp
->
code
)
{
qwtBuildDropReqMsg
(
&
qwtdropMsg
,
&
qwtdropRpc
);
qwtPutReqToFetchQueue
((
void
*
)
0x1
,
&
qwtdropRpc
);
}
...
...
@@ -233,19 +214,6 @@ void qwtRpcSendResponse(const SRpcMsg *pRsp) {
rpcFreeCont
(
rsp
);
break
;
}
case
TDMT_VND_RES_READY_RSP
:
{
SResReadyRsp
*
rsp
=
(
SResReadyRsp
*
)
pRsp
->
pCont
;
if
(
0
==
pRsp
->
code
)
{
qwtBuildFetchReqMsg
(
&
qwtfetchMsg
,
&
qwtfetchRpc
);
qwtPutReqToFetchQueue
((
void
*
)
0x1
,
&
qwtfetchRpc
);
}
else
{
qwtBuildDropReqMsg
(
&
qwtdropMsg
,
&
qwtdropRpc
);
qwtPutReqToFetchQueue
((
void
*
)
0x1
,
&
qwtdropRpc
);
}
rpcFreeCont
(
rsp
);
break
;
}
case
TDMT_VND_FETCH_RSP
:
{
SRetrieveTableRsp
*
rsp
=
(
SRetrieveTableRsp
*
)
pRsp
->
pCont
;
...
...
@@ -679,28 +647,6 @@ void *queryThread(void *param) {
return
NULL
;
}
void
*
readyThread
(
void
*
param
)
{
SRpcMsg
readyRpc
=
{
0
};
int32_t
code
=
0
;
uint32_t
n
=
0
;
void
*
mockPointer
=
(
void
*
)
0x1
;
void
*
mgmt
=
param
;
SResReadyReq
readyMsg
=
{
0
};
while
(
!
qwtTestStop
)
{
qwtBuildReadyReqMsg
(
&
readyMsg
,
&
readyRpc
);
code
=
qWorkerProcessReadyMsg
(
mockPointer
,
mgmt
,
&
readyRpc
);
if
(
qwtTestEnableSleep
)
{
taosUsleep
(
taosRand
()
%
5
);
}
if
(
++
n
%
qwtTestPrintNum
==
0
)
{
printf
(
"ready:%d
\n
"
,
n
);
}
}
return
NULL
;
}
void
*
fetchThread
(
void
*
param
)
{
SRpcMsg
fetchRpc
=
{
0
};
int32_t
code
=
0
;
...
...
@@ -745,29 +691,6 @@ void *dropThread(void *param) {
return
NULL
;
}
void
*
statusThread
(
void
*
param
)
{
SRpcMsg
statusRpc
=
{
0
};
int32_t
code
=
0
;
uint32_t
n
=
0
;
void
*
mockPointer
=
(
void
*
)
0x1
;
void
*
mgmt
=
param
;
SSchTasksStatusReq
statusMsg
=
{
0
};
while
(
!
qwtTestStop
)
{
qwtBuildStatusReqMsg
(
&
statusMsg
,
&
statusRpc
);
code
=
qWorkerProcessStatusMsg
(
mockPointer
,
mgmt
,
&
statusRpc
);
if
(
qwtTestEnableSleep
)
{
taosUsleep
(
taosRand
()
%
5
);
}
if
(
++
n
%
qwtTestPrintNum
==
0
)
{
printf
(
"status:%d
\n
"
,
n
);
}
}
return
NULL
;
}
void
*
qwtclientThread
(
void
*
param
)
{
int32_t
code
=
0
;
uint32_t
n
=
0
;
...
...
@@ -894,12 +817,6 @@ void *fetchQueueThread(void *param) {
case
TDMT_VND_FETCH
:
qWorkerProcessFetchMsg
(
mockPointer
,
mgmt
,
fetchRpc
);
break
;
case
TDMT_VND_RES_READY
:
qWorkerProcessReadyMsg
(
mockPointer
,
mgmt
,
fetchRpc
);
break
;
case
TDMT_VND_TASKS_STATUS
:
qWorkerProcessStatusMsg
(
mockPointer
,
mgmt
,
fetchRpc
);
break
;
case
TDMT_VND_CANCEL_TASK
:
qWorkerProcessCancelMsg
(
mockPointer
,
mgmt
,
fetchRpc
);
break
;
...
...
@@ -934,15 +851,12 @@ TEST(seqTest, normalCase) {
int32_t
code
=
0
;
void
*
mockPointer
=
(
void
*
)
0x1
;
SRpcMsg
queryRpc
=
{
0
};
SRpcMsg
readyRpc
=
{
0
};
SRpcMsg
fetchRpc
=
{
0
};
SRpcMsg
dropRpc
=
{
0
};
SRpcMsg
statusRpc
=
{
0
};
qwtInitLogFile
();
qwtBuildQueryReqMsg
(
&
queryRpc
);
qwtBuildReadyReqMsg
(
&
qwtreadyMsg
,
&
readyRpc
);
qwtBuildFetchReqMsg
(
&
qwtfetchMsg
,
&
fetchRpc
);
qwtBuildDropReqMsg
(
&
qwtdropMsg
,
&
dropRpc
);
...
...
@@ -976,10 +890,6 @@ TEST(seqTest, normalCase) {
code
=
qWorkerProcessDropMsg
(
mockPointer
,
mgmt
,
&
dropRpc
);
ASSERT_EQ
(
code
,
0
);
qwtBuildStatusReqMsg
(
&
qwtstatusMsg
,
&
statusRpc
);
code
=
qWorkerProcessStatusMsg
(
mockPointer
,
mgmt
,
&
statusRpc
);
ASSERT_EQ
(
code
,
0
);
qWorkerDestroy
(
&
mgmt
);
}
...
...
@@ -989,13 +899,11 @@ TEST(seqTest, cancelFirst) {
void
*
mockPointer
=
(
void
*
)
0x1
;
SRpcMsg
queryRpc
=
{
0
};
SRpcMsg
dropRpc
=
{
0
};
SRpcMsg
statusRpc
=
{
0
};
qwtInitLogFile
();
qwtBuildQueryReqMsg
(
&
queryRpc
);
qwtBuildDropReqMsg
(
&
qwtdropMsg
,
&
dropRpc
);
qwtBuildStatusReqMsg
(
&
qwtstatusMsg
,
&
statusRpc
);
stubSetStringToPlan
();
stubSetRpcSendResponse
();
...
...
@@ -1006,24 +914,12 @@ TEST(seqTest, cancelFirst) {
code
=
qWorkerInit
(
NODE_TYPE_VNODE
,
1
,
NULL
,
&
mgmt
,
&
msgCb
);
ASSERT_EQ
(
code
,
0
);
qwtBuildStatusReqMsg
(
&
qwtstatusMsg
,
&
statusRpc
);
code
=
qWorkerProcessStatusMsg
(
mockPointer
,
mgmt
,
&
statusRpc
);
ASSERT_EQ
(
code
,
0
);
code
=
qWorkerProcessDropMsg
(
mockPointer
,
mgmt
,
&
dropRpc
);
ASSERT_EQ
(
code
,
0
);
qwtBuildStatusReqMsg
(
&
qwtstatusMsg
,
&
statusRpc
);
code
=
qWorkerProcessStatusMsg
(
mockPointer
,
mgmt
,
&
statusRpc
);
ASSERT_EQ
(
code
,
0
);
code
=
qWorkerProcessQueryMsg
(
mockPointer
,
mgmt
,
&
queryRpc
);
ASSERT_TRUE
(
0
!=
code
);
qwtBuildStatusReqMsg
(
&
qwtstatusMsg
,
&
statusRpc
);
code
=
qWorkerProcessStatusMsg
(
mockPointer
,
mgmt
,
&
statusRpc
);
ASSERT_EQ
(
code
,
0
);
qWorkerDestroy
(
&
mgmt
);
}
...
...
@@ -1087,9 +983,6 @@ TEST(seqTest, randCase) {
}
}
else
if
(
r
>=
maxr
*
4
/
5
&&
r
<
maxr
-
1
)
{
printf
(
"Status,%d
\n
"
,
t
++
);
qwtBuildStatusReqMsg
(
&
statusMsg
,
&
statusRpc
);
code
=
qWorkerProcessStatusMsg
(
mockPointer
,
mgmt
,
&
statusRpc
);
ASSERT_EQ
(
code
,
0
);
if
(
qwtTestEnableSleep
)
{
taosUsleep
(
1
);
}
...
...
@@ -1137,7 +1030,6 @@ TEST(seqTest, multithreadRand) {
//taosThreadCreate(&(t2), &thattr, readyThread, NULL);
taosThreadCreate
(
&
(
t3
),
&
thattr
,
fetchThread
,
NULL
);
taosThreadCreate
(
&
(
t4
),
&
thattr
,
dropThread
,
NULL
);
taosThreadCreate
(
&
(
t5
),
&
thattr
,
statusThread
,
NULL
);
taosThreadCreate
(
&
(
t6
),
&
thattr
,
fetchQueueThread
,
mgmt
);
while
(
true
)
{
...
...
source/libs/scalar/test/scalar/CMakeLists.txt
浏览文件 @
c94ca28b
...
...
@@ -8,7 +8,7 @@ AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
ADD_EXECUTABLE
(
scalarTest
${
SOURCE_LIST
}
)
TARGET_LINK_LIBRARIES
(
scalarTest
PUBLIC os util common gtest qcom function nodes scalar parser
PUBLIC os util common gtest qcom function nodes scalar parser
catalog transport
)
TARGET_INCLUDE_DIRECTORIES
(
...
...
source/libs/scheduler/inc/schedulerInt.h
浏览文件 @
c94ca28b
...
...
@@ -297,7 +297,7 @@ void schFreeRpcCtx(SRpcCtx *pCtx);
int32_t
schGetCallbackFp
(
int32_t
msgType
,
__async_send_cb_fn_t
*
fp
);
bool
schJobNeedToStop
(
SSchJob
*
pJob
,
int8_t
*
pStatus
);
int32_t
schProcessOnTaskSuccess
(
SSchJob
*
pJob
,
SSchTask
*
pTask
);
int32_t
schSaveJobQueryRes
(
SSchJob
*
pJob
,
S
ResReady
Rsp
*
rsp
);
int32_t
schSaveJobQueryRes
(
SSchJob
*
pJob
,
S
QueryTable
Rsp
*
rsp
);
int32_t
schProcessOnExplainDone
(
SSchJob
*
pJob
,
SSchTask
*
pTask
,
SRetrieveTableRsp
*
pRsp
);
void
schProcessOnDataFetched
(
SSchJob
*
job
);
int32_t
schGetTaskFromTaskList
(
SHashObj
*
pTaskList
,
uint64_t
taskId
,
SSchTask
**
pTask
);
...
...
source/libs/scheduler/src/schJob.c
浏览文件 @
c94ca28b
...
...
@@ -1067,7 +1067,7 @@ int32_t schProcessOnExplainDone(SSchJob *pJob, SSchTask *pTask, SRetrieveTableRs
return
TSDB_CODE_SUCCESS
;
}
int32_t
schSaveJobQueryRes
(
SSchJob
*
pJob
,
S
ResReady
Rsp
*
rsp
)
{
int32_t
schSaveJobQueryRes
(
SSchJob
*
pJob
,
S
QueryTable
Rsp
*
rsp
)
{
if
(
rsp
->
tbFName
[
0
])
{
if
(
NULL
==
pJob
->
queryRes
)
{
pJob
->
queryRes
=
taosArrayInit
(
pJob
->
taskNum
,
sizeof
(
STbVerInfo
));
...
...
source/libs/scheduler/src/schRemote.c
浏览文件 @
c94ca28b
...
...
@@ -31,7 +31,7 @@ int32_t schValidateReceivedMsgType(SSchJob *pJob, SSchTask *pTask, int32_t msgTy
case
TDMT_VND_EXPLAIN_RSP
:
return
TSDB_CODE_SUCCESS
;
case
TDMT_VND_QUERY_RSP
:
// query_rsp may be processed later than ready_rsp
if
(
lastMsgType
!=
reqMsgType
&&
-
1
!=
lastMsgType
&&
TDMT_VND_FETCH
!=
lastMsgType
)
{
if
(
lastMsgType
!=
reqMsgType
&&
-
1
!=
lastMsgType
)
{
SCH_TASK_DLOG
(
"rsp msg type mis-match, last sent msgType:%s, rspType:%s"
,
TMSG_INFO
(
lastMsgType
),
TMSG_INFO
(
msgType
));
}
...
...
@@ -41,22 +41,6 @@ int32_t schValidateReceivedMsgType(SSchJob *pJob, SSchTask *pTask, int32_t msgTy
TMSG_INFO
(
msgType
));
}
SCH_SET_TASK_LASTMSG_TYPE
(
pTask
,
-
1
);
return
TSDB_CODE_SUCCESS
;
case
TDMT_VND_RES_READY_RSP
:
reqMsgType
=
TDMT_VND_QUERY
;
if
(
lastMsgType
!=
reqMsgType
&&
-
1
!=
lastMsgType
)
{
SCH_TASK_ELOG
(
"rsp msg type mis-match, last sent msgType:%s, rspType:%s"
,
(
lastMsgType
>
0
?
TMSG_INFO
(
lastMsgType
)
:
"null"
),
TMSG_INFO
(
msgType
));
SCH_ERR_RET
(
TSDB_CODE_SCH_STATUS_ERROR
);
}
if
(
taskStatus
!=
JOB_TASK_STATUS_EXECUTING
&&
taskStatus
!=
JOB_TASK_STATUS_PARTIAL_SUCCEED
)
{
SCH_TASK_ELOG
(
"rsp msg conflicted with task status, status:%s, rspType:%s"
,
jobTaskStatusStr
(
taskStatus
),
TMSG_INFO
(
msgType
));
SCH_ERR_RET
(
TSDB_CODE_SCH_STATUS_ERROR
);
}
SCH_SET_TASK_LASTMSG_TYPE
(
pTask
,
-
1
);
return
TSDB_CODE_SUCCESS
;
case
TDMT_VND_FETCH_RSP
:
...
...
@@ -231,24 +215,7 @@ int32_t schHandleResponseMsg(SSchJob *pJob, SSchTask *pTask, int32_t msgType, ch
break
;
}
case
TDMT_VND_QUERY_RSP
:
{
SQueryTableRsp
rsp
=
{
0
};
if
(
msg
)
{
SCH_ERR_JRET
(
tDeserializeSQueryTableRsp
(
msg
,
msgSize
,
&
rsp
));
SCH_ERR_JRET
(
rsp
.
code
);
}
SCH_ERR_JRET
(
rspCode
);
if
(
NULL
==
msg
)
{
SCH_ERR_JRET
(
TSDB_CODE_QRY_INVALID_INPUT
);
}
// SCH_ERR_JRET(schBuildAndSendMsg(pJob, pTask, NULL, TDMT_VND_RES_READY));
break
;
}
case
TDMT_VND_RES_READY_RSP
:
{
SResReadyRsp
*
rsp
=
(
SResReadyRsp
*
)
msg
;
SQueryTableRsp
*
rsp
=
(
SQueryTableRsp
*
)
msg
;
SCH_ERR_JRET
(
rspCode
);
if
(
NULL
==
msg
)
{
...
...
@@ -429,10 +396,6 @@ int32_t schHandleFetchCallback(void *param, const SDataBuf *pMsg, int32_t code)
return
schHandleCallback
(
param
,
pMsg
,
TDMT_VND_FETCH_RSP
,
code
);
}
int32_t
schHandleReadyCallback
(
void
*
param
,
const
SDataBuf
*
pMsg
,
int32_t
code
)
{
return
schHandleCallback
(
param
,
pMsg
,
TDMT_VND_RES_READY_RSP
,
code
);
}
int32_t
schHandleExplainCallback
(
void
*
param
,
const
SDataBuf
*
pMsg
,
int32_t
code
)
{
return
schHandleCallback
(
param
,
pMsg
,
TDMT_VND_EXPLAIN_RSP
,
code
);
}
...
...
@@ -518,9 +481,6 @@ int32_t schGetCallbackFp(int32_t msgType, __async_send_cb_fn_t *fp) {
case
TDMT_VND_QUERY
:
*
fp
=
schHandleQueryCallback
;
break
;
case
TDMT_VND_RES_READY
:
*
fp
=
schHandleReadyCallback
;
break
;
case
TDMT_VND_EXPLAIN
:
*
fp
=
schHandleExplainCallback
;
break
;
...
...
@@ -933,7 +893,6 @@ _return:
int32_t
schMakeQueryRpcCtx
(
SSchJob
*
pJob
,
SSchTask
*
pTask
,
SRpcCtx
*
pCtx
)
{
int32_t
code
=
0
;
SMsgSendInfo
*
pReadyMsgSendInfo
=
NULL
;
SMsgSendInfo
*
pExplainMsgSendInfo
=
NULL
;
pCtx
->
args
=
taosHashInit
(
1
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_INT
),
false
,
HASH_ENTRY_LOCK
);
...
...
@@ -942,18 +901,10 @@ int32_t schMakeQueryRpcCtx(SSchJob *pJob, SSchTask *pTask, SRpcCtx *pCtx) {
SCH_ERR_RET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
SCH_ERR_JRET
(
schGenerateCallBackInfo
(
pJob
,
pTask
,
TDMT_VND_RES_READY
,
&
pReadyMsgSendInfo
));
SCH_ERR_JRET
(
schGenerateCallBackInfo
(
pJob
,
pTask
,
TDMT_VND_EXPLAIN
,
&
pExplainMsgSendInfo
));
int32_t
msgType
=
TDMT_VND_RES_READY_RSP
;
SRpcCtxVal
ctxVal
=
{.
val
=
pReadyMsgSendInfo
,
.
clone
=
schCloneSMsgSendInfo
};
if
(
taosHashPut
(
pCtx
->
args
,
&
msgType
,
sizeof
(
msgType
),
&
ctxVal
,
sizeof
(
ctxVal
)))
{
SCH_TASK_ELOG
(
"taosHashPut msg %d to rpcCtx failed"
,
msgType
);
SCH_ERR_JRET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
msgType
=
TDMT_VND_EXPLAIN_RSP
;
ctxVal
.
val
=
pExplainMsgSendInfo
;
int32_t
msgType
=
TDMT_VND_EXPLAIN_RSP
;
SRpcCtxVal
ctxVal
=
{.
val
=
pExplainMsgSendInfo
,
.
clone
=
schCloneSMsgSendInfo
};
if
(
taosHashPut
(
pCtx
->
args
,
&
msgType
,
sizeof
(
msgType
),
&
ctxVal
,
sizeof
(
ctxVal
)))
{
SCH_TASK_ELOG
(
"taosHashPut msg %d to rpcCtx failed"
,
msgType
);
SCH_ERR_JRET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
...
...
@@ -968,11 +919,6 @@ _return:
taosHashCleanup
(
pCtx
->
args
);
if
(
pReadyMsgSendInfo
)
{
taosMemoryFreeClear
(
pReadyMsgSendInfo
->
param
);
taosMemoryFreeClear
(
pReadyMsgSendInfo
);
}
if
(
pExplainMsgSendInfo
)
{
taosMemoryFreeClear
(
pExplainMsgSendInfo
->
param
);
taosMemoryFreeClear
(
pExplainMsgSendInfo
);
...
...
@@ -1128,24 +1074,6 @@ int32_t schBuildAndSendMsg(SSchJob *pJob, SSchTask *pTask, SQueryNodeAddr *addr,
persistHandle
=
true
;
break
;
}
case
TDMT_VND_RES_READY
:
{
msgSize
=
sizeof
(
SResReadyReq
);
msg
=
taosMemoryCalloc
(
1
,
msgSize
);
if
(
NULL
==
msg
)
{
SCH_TASK_ELOG
(
"calloc %d failed"
,
msgSize
);
SCH_ERR_RET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
SResReadyReq
*
pMsg
=
msg
;
pMsg
->
header
.
vgId
=
htonl
(
addr
->
nodeId
);
pMsg
->
sId
=
htobe64
(
schMgmt
.
sId
);
pMsg
->
queryId
=
htobe64
(
pJob
->
queryId
);
pMsg
->
taskId
=
htobe64
(
pTask
->
taskId
);
break
;
}
case
TDMT_VND_FETCH
:
{
msgSize
=
sizeof
(
SResFetchReq
);
msg
=
taosMemoryCalloc
(
1
,
msgSize
);
...
...
source/libs/scheduler/test/schedulerTests.cpp
浏览文件 @
c94ca28b
...
...
@@ -542,27 +542,6 @@ void* schtRunJobThread(void *aa) {
pIter
=
taosHashIterate
(
execTasks
,
pIter
);
}
param
=
(
SSchTaskCallbackParam
*
)
taosMemoryCalloc
(
1
,
sizeof
(
*
param
));
param
->
refId
=
queryJobRefId
;
param
->
queryId
=
pJob
->
queryId
;
pIter
=
taosHashIterate
(
execTasks
,
NULL
);
while
(
pIter
)
{
SSchTask
*
task
=
(
SSchTask
*
)
pIter
;
param
->
taskId
=
task
->
taskId
;
SResReadyRsp
rsp
=
{
0
};
dataBuf
.
pData
=
&
rsp
;
dataBuf
.
len
=
sizeof
(
rsp
);
code
=
schHandleCallback
(
param
,
&
dataBuf
,
TDMT_VND_RES_READY_RSP
,
0
);
assert
(
code
==
0
||
code
);
pIter
=
taosHashIterate
(
execTasks
,
pIter
);
}
param
=
(
SSchTaskCallbackParam
*
)
taosMemoryCalloc
(
1
,
sizeof
(
*
param
));
param
->
refId
=
queryJobRefId
;
param
->
queryId
=
pJob
->
queryId
;
...
...
@@ -583,25 +562,6 @@ void* schtRunJobThread(void *aa) {
}
param
=
(
SSchTaskCallbackParam
*
)
taosMemoryCalloc
(
1
,
sizeof
(
*
param
));
param
->
refId
=
queryJobRefId
;
param
->
queryId
=
pJob
->
queryId
;
pIter
=
taosHashIterate
(
execTasks
,
NULL
);
while
(
pIter
)
{
SSchTask
*
task
=
(
SSchTask
*
)
pIter
;
param
->
taskId
=
task
->
taskId
-
1
;
SResReadyRsp
rsp
=
{
0
};
dataBuf
.
pData
=
&
rsp
;
dataBuf
.
len
=
sizeof
(
rsp
);
code
=
schHandleCallback
(
param
,
&
dataBuf
,
TDMT_VND_RES_READY_RSP
,
0
);
assert
(
code
==
0
||
code
);
pIter
=
taosHashIterate
(
execTasks
,
pIter
);
}
while
(
true
)
{
if
(
queryDone
)
{
break
;
...
...
@@ -701,17 +661,6 @@ TEST(queryTest, normalCase) {
pIter
=
taosHashIterate
(
pJob
->
execTasks
,
pIter
);
}
pIter
=
taosHashIterate
(
pJob
->
execTasks
,
NULL
);
while
(
pIter
)
{
SSchTask
*
task
=
*
(
SSchTask
**
)
pIter
;
SResReadyRsp
rsp
=
{
0
};
code
=
schHandleResponseMsg
(
pJob
,
task
,
TDMT_VND_RES_READY_RSP
,
(
char
*
)
&
rsp
,
sizeof
(
rsp
),
0
);
printf
(
"code:%d"
,
code
);
ASSERT_EQ
(
code
,
0
);
pIter
=
taosHashIterate
(
pJob
->
execTasks
,
pIter
);
}
pIter
=
taosHashIterate
(
pJob
->
execTasks
,
NULL
);
while
(
pIter
)
{
SSchTask
*
task
=
*
(
SSchTask
**
)
pIter
;
...
...
@@ -723,17 +672,6 @@ TEST(queryTest, normalCase) {
pIter
=
taosHashIterate
(
pJob
->
execTasks
,
pIter
);
}
pIter
=
taosHashIterate
(
pJob
->
execTasks
,
NULL
);
while
(
pIter
)
{
SSchTask
*
task
=
*
(
SSchTask
**
)
pIter
;
SResReadyRsp
rsp
=
{
0
};
code
=
schHandleResponseMsg
(
pJob
,
task
,
TDMT_VND_RES_READY_RSP
,
(
char
*
)
&
rsp
,
sizeof
(
rsp
),
0
);
ASSERT_EQ
(
code
,
0
);
pIter
=
taosHashIterate
(
pJob
->
execTasks
,
pIter
);
}
while
(
true
)
{
if
(
queryDone
)
{
break
;
...
...
@@ -809,17 +747,6 @@ TEST(queryTest, readyFirstCase) {
while
(
pIter
)
{
SSchTask
*
task
=
*
(
SSchTask
**
)
pIter
;
SResReadyRsp
rsp
=
{
0
};
code
=
schHandleResponseMsg
(
pJob
,
task
,
TDMT_VND_RES_READY_RSP
,
(
char
*
)
&
rsp
,
sizeof
(
rsp
),
0
);
printf
(
"code:%d"
,
code
);
ASSERT_EQ
(
code
,
0
);
pIter
=
taosHashIterate
(
pJob
->
execTasks
,
pIter
);
}
pIter
=
taosHashIterate
(
pJob
->
execTasks
,
NULL
);
while
(
pIter
)
{
SSchTask
*
task
=
*
(
SSchTask
**
)
pIter
;
SQueryTableRsp
rsp
=
{
0
};
code
=
schHandleResponseMsg
(
pJob
,
task
,
TDMT_VND_QUERY_RSP
,
(
char
*
)
&
rsp
,
sizeof
(
rsp
),
0
);
...
...
@@ -827,17 +754,6 @@ TEST(queryTest, readyFirstCase) {
pIter
=
taosHashIterate
(
pJob
->
execTasks
,
pIter
);
}
pIter
=
taosHashIterate
(
pJob
->
execTasks
,
NULL
);
while
(
pIter
)
{
SSchTask
*
task
=
*
(
SSchTask
**
)
pIter
;
SResReadyRsp
rsp
=
{
0
};
code
=
schHandleResponseMsg
(
pJob
,
task
,
TDMT_VND_RES_READY_RSP
,
(
char
*
)
&
rsp
,
sizeof
(
rsp
),
0
);
ASSERT_EQ
(
code
,
0
);
pIter
=
taosHashIterate
(
pJob
->
execTasks
,
pIter
);
}
pIter
=
taosHashIterate
(
pJob
->
execTasks
,
NULL
);
while
(
pIter
)
{
SSchTask
*
task
=
*
(
SSchTask
**
)
pIter
;
...
...
@@ -942,10 +858,6 @@ TEST(queryTest, flowCtrlCase) {
SQueryTableRsp
rsp
=
{
0
};
code
=
schHandleResponseMsg
(
pJob
,
task
,
TDMT_VND_QUERY_RSP
,
(
char
*
)
&
rsp
,
sizeof
(
rsp
),
0
);
ASSERT_EQ
(
code
,
0
);
}
else
if
(
task
->
lastMsgType
==
TDMT_VND_RES_READY
)
{
SResReadyRsp
rsp
=
{
0
};
code
=
schHandleResponseMsg
(
pJob
,
task
,
TDMT_VND_RES_READY_RSP
,
(
char
*
)
&
rsp
,
sizeof
(
rsp
),
0
);
ASSERT_EQ
(
code
,
0
);
}
else
{
qDone
=
true
;
...
...
source/libs/sync/src/syncIndexMgr.c
浏览文件 @
c94ca28b
...
...
@@ -60,7 +60,9 @@ void syncIndexMgrSetIndex(SSyncIndexMgr *pSyncIndexMgr, const SRaftId *pRaftId,
return
;
}
}
assert
(
0
);
// maybe config change
// assert(0);
}
SyncIndex
syncIndexMgrGetIndex
(
SSyncIndexMgr
*
pSyncIndexMgr
,
const
SRaftId
*
pRaftId
)
{
...
...
source/libs/sync/src/syncMain.c
浏览文件 @
c94ca28b
...
...
@@ -981,6 +981,7 @@ char* syncNode2SimpleStr(const SSyncNode* pSyncNode) {
}
void
syncNodeUpdateConfig
(
SSyncNode
*
pSyncNode
,
SSyncCfg
*
newConfig
,
bool
*
isDrop
)
{
SSyncCfg
oldConfig
=
pSyncNode
->
pRaftCfg
->
cfg
;
pSyncNode
->
pRaftCfg
->
cfg
=
*
newConfig
;
int32_t
ret
=
0
;
...
...
@@ -1014,6 +1015,15 @@ void syncNodeUpdateConfig(SSyncNode* pSyncNode, SSyncCfg* newConfig, bool* isDro
// isDrop
*
isDrop
=
true
;
bool
IamInOld
,
IamInNew
;
for
(
int
i
=
0
;
i
<
oldConfig
.
replicaNum
;
++
i
)
{
if
(
strcmp
((
oldConfig
.
nodeInfo
)[
i
].
nodeFqdn
,
pSyncNode
->
myNodeInfo
.
nodeFqdn
)
==
0
&&
(
oldConfig
.
nodeInfo
)[
i
].
nodePort
==
pSyncNode
->
myNodeInfo
.
nodePort
)
{
*
isDrop
=
false
;
break
;
}
}
for
(
int
i
=
0
;
i
<
newConfig
->
replicaNum
;
++
i
)
{
if
(
strcmp
((
newConfig
->
nodeInfo
)[
i
].
nodeFqdn
,
pSyncNode
->
myNodeInfo
.
nodeFqdn
)
==
0
&&
(
newConfig
->
nodeInfo
)[
i
].
nodePort
==
pSyncNode
->
myNodeInfo
.
nodePort
)
{
...
...
source/libs/transport/inc/transComm.h
浏览文件 @
c94ca28b
...
...
@@ -113,6 +113,7 @@ typedef struct SCvtAddr {
typedef
struct
{
SEpSet
epSet
;
// ip list provided by app
SEpSet
origEpSet
;
void
*
ahandle
;
// handle provided by app
tmsg_t
msgType
;
// message type
int8_t
connType
;
// connection type cli/srv
...
...
@@ -217,6 +218,22 @@ SAsyncPool* transCreateAsyncPool(uv_loop_t* loop, int sz, void* arg, AsyncCB cb)
void
transDestroyAsyncPool
(
SAsyncPool
*
pool
);
int
transSendAsync
(
SAsyncPool
*
pool
,
queue
*
mq
);
#define TRANS_DESTROY_ASYNC_POOL_MSG(pool, msgType, freeFunc) \
do { \
for (int i = 0; i < pool->nAsync; i++) { \
uv_async_t* async = &(pool->asyncs[i]); \
SAsyncItem* item = async->data; \
while (!QUEUE_IS_EMPTY(&item->qmsg)) { \
tTrace("destroy msg in async pool "); \
queue* h = QUEUE_HEAD(&item->qmsg); \
QUEUE_REMOVE(h); \
msgType* msg = QUEUE_DATA(h, msgType, q); \
if (msg != NULL) { \
freeFunc(msg); \
} \
} \
} \
} while (0)
int
transInitBuffer
(
SConnBuffer
*
buf
);
int
transClearBuffer
(
SConnBuffer
*
buf
);
int
transDestroyBuffer
(
SConnBuffer
*
buf
);
...
...
@@ -328,6 +345,7 @@ void transDQDestroy(SDelayQueue* queue);
int
transDQSched
(
SDelayQueue
*
queue
,
void
(
*
func
)(
void
*
arg
),
void
*
arg
,
uint64_t
timeoutMs
);
void
transPrintEpSet
(
SEpSet
*
pEpSet
);
bool
transEpSetIsEqual
(
SEpSet
*
a
,
SEpSet
*
b
);
/*
* init global func
*/
...
...
source/libs/transport/src/transCli.c
浏览文件 @
c94ca28b
...
...
@@ -892,6 +892,7 @@ static void destroyThrdObj(SCliThrdObj* pThrd) {
taosThreadJoin
(
pThrd
->
thread
,
NULL
);
CLI_RELEASE_UV
(
pThrd
->
loop
);
taosThreadMutexDestroy
(
&
pThrd
->
msgMtx
);
TRANS_DESTROY_ASYNC_POOL_MSG
(
pThrd
->
asyncPool
,
SCliMsg
,
destroyCmsg
);
transDestroyAsyncPool
(
pThrd
->
asyncPool
);
transDQDestroy
(
pThrd
->
delayQueue
);
...
...
@@ -946,6 +947,9 @@ int cliAppCb(SCliConn* pConn, STransMsg* pResp, SCliMsg* pMsg) {
SEpSet
*
pEpSet
=
&
pCtx
->
epSet
;
transPrintEpSet
(
pEpSet
);
if
(
pCtx
->
retryCount
==
0
)
{
pCtx
->
origEpSet
=
pCtx
->
epSet
;
}
/*
* upper layer handle retry if code equal TSDB_CODE_RPC_NETWORK_UNAVAIL
*/
...
...
@@ -998,7 +1002,7 @@ int cliAppCb(SCliConn* pConn, STransMsg* pResp, SCliMsg* pMsg) {
pCtx
->
pRsp
=
NULL
;
}
else
{
tTrace
(
"%s cli conn %p handle resp"
,
pTransInst
->
label
,
pConn
);
if
(
pResp
->
code
!=
0
)
{
if
(
pResp
->
code
!=
0
||
pCtx
->
retryCount
==
0
||
transEpSetIsEqual
(
&
pCtx
->
epSet
,
&
pCtx
->
origEpSet
)
)
{
pTransInst
->
cfp
(
pTransInst
->
parent
,
pResp
,
NULL
);
}
else
{
pTransInst
->
cfp
(
pTransInst
->
parent
,
pResp
,
pEpSet
);
...
...
source/libs/transport/src/transComm.c
浏览文件 @
c94ca28b
...
...
@@ -190,6 +190,7 @@ SAsyncPool* transCreateAsyncPool(uv_loop_t* loop, int sz, void* arg, AsyncCB cb)
}
return
pool
;
}
void
transDestroyAsyncPool
(
SAsyncPool
*
pool
)
{
for
(
int
i
=
0
;
i
<
pool
->
nAsync
;
i
++
)
{
uv_async_t
*
async
=
&
(
pool
->
asyncs
[
i
]);
...
...
@@ -452,10 +453,21 @@ void transPrintEpSet(SEpSet* pEpSet) {
tTrace
(
"NULL epset"
);
return
;
}
tTrace
(
"epset begin
:
inUse: %d"
,
pEpSet
->
inUse
);
tTrace
(
"epset begin
inUse: %d"
,
pEpSet
->
inUse
);
for
(
int
i
=
0
;
i
<
pEpSet
->
numOfEps
;
i
++
)
{
tTrace
(
"ip: %s, port: %d"
,
pEpSet
->
eps
[
i
].
fqdn
,
pEpSet
->
eps
[
i
].
port
);
}
tTrace
(
"epset end"
);
}
bool
transEpSetIsEqual
(
SEpSet
*
a
,
SEpSet
*
b
)
{
if
(
a
->
numOfEps
!=
b
->
numOfEps
||
a
->
inUse
!=
b
->
inUse
)
{
return
false
;
}
for
(
int
i
=
0
;
i
<
a
->
numOfEps
;
i
++
)
{
if
(
strncmp
(
a
->
eps
[
i
].
fqdn
,
b
->
eps
[
i
].
fqdn
,
TSDB_FQDN_LEN
)
!=
0
||
a
->
eps
[
i
].
port
!=
b
->
eps
[
i
].
port
)
{
return
false
;
}
}
return
true
;
}
#endif
source/libs/transport/src/transSrv.c
浏览文件 @
c94ca28b
...
...
@@ -1036,6 +1036,7 @@ void destroyWorkThrd(SWorkThrdObj* pThrd) {
}
taosThreadJoin
(
pThrd
->
thread
,
NULL
);
SRV_RELEASE_UV
(
pThrd
->
loop
);
TRANS_DESTROY_ASYNC_POOL_MSG
(
pThrd
->
asyncPool
,
SSrvMsg
,
destroySmsg
);
transDestroyAsyncPool
(
pThrd
->
asyncPool
);
taosMemoryFree
(
pThrd
->
loop
);
taosMemoryFree
(
pThrd
);
...
...
source/util/src/terror.c
浏览文件 @
c94ca28b
...
...
@@ -447,9 +447,10 @@ TAOS_DEFINE_ERROR(TSDB_CODE_QW_MSG_ERROR, "Invalid msg order")
// parser
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_TABLE_NOT_EXIST
,
"Table does not exist"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_PERMISSION_DENIED
,
"Permission denied"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PAR_INTERNAL_ERROR
,
"Parser internal error"
)
//planner
TAOS_DEFINE_ERROR
(
TSDB_CODE_PLAN_INTERNAL_ERROR
,
"
p
lanner internal error"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_PLAN_INTERNAL_ERROR
,
"
P
lanner internal error"
)
//udf
TAOS_DEFINE_ERROR
(
TSDB_CODE_UDF_STOPPING
,
"udf is stopping"
)
...
...
tests/script/general/alter/cached_schema_after_alter.sim
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c wallevel -v 2
system sh/exec.sh -n dnode1 -s start
sleep 2000
sql connect
$db = csaa_db
...
...
tests/script/general/alter/dnode.sim
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c walLevel -v 2
system sh/exec.sh -n dnode1 -s start
sleep 2000
sql connect
print ======== step1
...
...
tests/script/general/alter/import.sim
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c wallevel -v 2
system sh/cfg.sh -n dnode1 -c numOfMnodes -v 1
system sh/cfg.sh -n dnode1 -c mnodeEqualVnodeNum -v 4
print ========= start dnode1 as master
system sh/exec.sh -n dnode1 -s start
sleep 2000
sql connect
print ======== step1
...
...
tests/script/general/alter/insert1.sim
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c wallevel -v 2
system sh/exec.sh -n dnode1 -s start
sleep 2000
sql connect
print ======== step1
...
...
tests/script/general/alter/insert2.sim
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c wallevel -v 2
system sh/exec.sh -n dnode1 -s start
sleep 2000
sql connect
print ======== step1
...
...
tests/script/general/alter/metrics.sim
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c walLevel -v 2
system sh/exec.sh -n dnode1 -s start
sleep 2000
sql connect
print ======== step1
...
...
tests/script/general/alter/table.sim
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c walLevel -v 2
system sh/exec.sh -n dnode1 -s start
sleep 2000
sql connect
print ======== step1
...
...
tests/script/general/alter/testSuite.sim
已删除
100644 → 0
浏览文件 @
c3bc4e56
run general/alter/cached_schema_after_alter.sim
run general/alter/count.sim
run general/alter/import.sim
run general/alter/insert1.sim
run general/alter/insert2.sim
run general/alter/metrics.sim
run general/alter/table.sim
\ No newline at end of file
tests/script/jenkins/basic.txt
浏览文件 @
c94ca28b
...
...
@@ -55,7 +55,7 @@
./test.sh -f tsim/bnode/basic1.sim
# ---- mnode
#
./test.sh -f tsim/mnode/basic1.sim
./test.sh -f tsim/mnode/basic1.sim
./test.sh -f tsim/mnode/basic2.sim
# ---- show
...
...
@@ -88,7 +88,6 @@
./test.sh -f tsim/tmq/topic.sim
# --- stable
./test.sh -f tsim/stable/alter1.sim
./test.sh -f tsim/stable/disk.sim
./test.sh -f tsim/stable/dnode3.sim
./test.sh -f tsim/stable/metrics.sim
...
...
@@ -98,8 +97,12 @@
./test.sh -f tsim/stable/vnode3.sim
./test.sh -f tsim/stable/column_add.sim
./test.sh -f tsim/stable/column_drop.sim
#./test.sh -f tsim/stable/column_modify.sim
./test.sh -f tsim/stable/column_modify.sim
./test.sh -f tsim/stable/tag_add.sim
./test.sh -f tsim/stable/tag_drop.sim
./test.sh -f tsim/stable/tag_modify.sim
./test.sh -f tsim/stable/tag_rename.sim
./test.sh -f tsim/stable/alter_comment.sim
# --- for multi process mode
./test.sh -f tsim/user/basic1.sim -m
...
...
tests/script/tsim/mnode/basic1.sim
浏览文件 @
c94ca28b
...
...
@@ -88,7 +88,7 @@ sql show mnodes
print $data(1)[0] $data(1)[1] $data(1)[2]
print $data(2)[0] $data(2)[1] $data(2)[2]
if $rows !=
2
then
if $rows !=
1
then
return -1
endi
if $data(1)[0] != 1 then
...
...
@@ -97,16 +97,16 @@ endi
if $data(1)[2] != LEADER then
return -1
endi
if $data(2)[0] !=
NULL
then
if $data(2)[0] !=
null
then
goto step2
endi
if $data(2)[2] !=
NULL
then
if $data(2)[2] !=
null
then
goto step2
endi
sleep 2000
print =============== create
drop
mnodes
print =============== create mnodes
sql create mnode on dnode 2
sql show mnodes
if $rows != 2 then
...
...
tests/script/tsim/mnode/basic2.sim
浏览文件 @
c94ca28b
...
...
@@ -119,9 +119,16 @@ if $data(2)[4] != ready then
endi
print =============== insert data
#sql create table db.stb (ts timestamp, c1 int, c2 binary(4)) tags(t1 int, t2 float, t3 binary(16)) comment "abd"
#sql create table db.ctb using db.stb tags(101, 102, "103")
#sql insert into db.ctb values(now, 1, "2")
sql create table db.stb (ts timestamp, c1 int, c2 binary(4)) tags(t1 int, t2 float, t3 binary(16)) comment "abd"
sql create table db.ctb using db.stb tags(101, 102, "103")
sql insert into db.ctb values(now, 1, "2")
sql select * from db.ctb
print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
if $rows != 1 then
return -1
endi
system sh/exec.sh -n dnode1 -s stop
system sh/exec.sh -n dnode2 -s stop
\ No newline at end of file
tests/script/tsim/mnode/basic3.sim
浏览文件 @
c94ca28b
...
...
@@ -15,7 +15,7 @@ $x = 0
step1:
$x = $x + 1
sleep 1000
if $x ==
2
0 then
if $x ==
5
0 then
return -1
endi
sql show dnodes -x step1
...
...
@@ -37,7 +37,7 @@ $x = 0
step2:
$x = $x + 1
sleep 1000
if $x ==
2
0 then
if $x ==
5
0 then
return -1
endi
sql show mnodes -x step2
...
...
@@ -68,7 +68,7 @@ $x = 0
step4:
$x = $x + 1
sleep 1000
if $x ==
2
0 then
if $x ==
5
0 then
return -1
endi
sql show mnodes -x step4
...
...
@@ -98,7 +98,7 @@ $x = 0
step5:
$x = $x + 1
sleep 1000
if $x ==
2
0 then
if $x ==
5
0 then
return -1
endi
sql show mnodes -x step5
...
...
@@ -119,7 +119,7 @@ $x = 0
step6:
$x = $x + 1
sleep 1000
if $x ==
2
0 then
if $x ==
5
0 then
return -1
endi
sql show mnodes -x step6
...
...
tests/script/tsim/stable/alter
1
.sim
→
tests/script/tsim/stable/alter
_comment
.sim
浏览文件 @
c94ca28b
...
...
@@ -166,4 +166,5 @@ if $data[0][6] != abcde then
return -1
endi
return
system sh/exec.sh -n dnode1 -s stop -x SIGINT
tests/script/
general/alter/
count.sim
→
tests/script/
tsim/stable/alter_
count.sim
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c wallevel -v 2
system sh/cfg.sh -n dnode1 -c numOfMnodes -v 1
system sh/cfg.sh -n dnode1 -c mnodeEqualVnodeNum -v 4
print ========= start dnode1 as master
system sh/exec.sh -n dnode1 -s start
sleep 2000
sql connect
print ======== step1
...
...
@@ -141,10 +136,11 @@ endi
print ============= step10
system sh/exec.sh -n dnode1 -s stop -x SIGINT
sleep 3000
system sh/exec.sh -n dnode1 -s start
s
leep 3000
s
ql connect
sql select count(a), count(b), count(c), count(d), count(e), count(f), count(g), count(h) from d1.tb;
sql select count(a), count(b), count(c), count(d), count(e), count(f), count(g), count(h) from d1.tb;
sql select count(a), count(b), count(c), count(d), count(e), count(f), count(g), count(h) from tb
if $data00 != 24 then
return -1
...
...
tests/script/tsim/stable/column_modify.sim
浏览文件 @
c94ca28b
...
...
@@ -47,7 +47,7 @@ endi
print ========== step2 describe
sql describe db.ctb
if $rows !=
7
then
if $rows !=
6
then
return -1
endi
if $data[0][0] != ts then
...
...
@@ -76,3 +76,31 @@ if $data[5][0] != t3 then
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT
system sh/exec.sh -n dnode1 -s start
sql connect
sql select * from db.ctb
if $rows != 2 then
return -1
endi
#if $data[0][1] != 1 then
# return -1
#endi
#if $data[0][2] != 1234 then
# return -1
#endi
#if $data[0][3] != 101 then
# return -1
#endi
#if $data[1][1] != 1 then
# return -1
#endi
#if $data[1][2] != 12345 then
# return -1
#endi
#if $data[1][3] != 101 then
# return -1
#endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT
\ No newline at end of file
tests/script/tsim/stable/disk.sim
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c walLevel -v 1
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 4
system sh/exec.sh -n dnode1 -s start
sleep 2000
sql connect
print ======================== dnode1 start
$dbPrefix = d_db
$tbPrefix = d_tb
$mtPrefix = d_mt
...
...
@@ -59,9 +51,8 @@ endi
sleep 1000
system sh/exec.sh -n dnode1 -s stop -x SIGINT
sleep
3
000
sleep
1
000
system sh/exec.sh -n dnode1 -s start
sleep 6000
sql use $db
sql show vgroups
...
...
tests/script/tsim/stable/dnode3.sim
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/deploy.sh -n dnode2 -i 2
system sh/deploy.sh -n dnode3 -i 3
system sh/deploy.sh -n dnode4 -i 4
system sh/cfg.sh -n dnode1 -c walLevel -v 1
system sh/cfg.sh -n dnode2 -c walLevel -v 1
system sh/cfg.sh -n dnode3 -c walLevel -v 1
system sh/cfg.sh -n dnode4 -c walLevel -v 1
# system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
# system sh/cfg.sh -n dnode2 -c maxtablesPerVnode -v 4
# system sh/cfg.sh -n dnode3 -c maxtablesPerVnode -v 4
# system sh/cfg.sh -n dnode4 -c maxtablesPerVnode -v 4
system sh/exec.sh -n dnode1 -s start
sql connect
sql create dnode $hostname PORT 7200
...
...
tests/script/tsim/stable/metrics.sim
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c walLevel -v 1
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
system sh/exec.sh -n dnode1 -s start
sleep 1000
sql connect
$dbPrefix = m_me_db
...
...
tests/script/tsim/stable/refcount.sim
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c walLevel -v 1
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
system sh/exec.sh -n dnode1 -s start
sleep 2000
sql connect
print =============== step1
...
...
tests/script/tsim/stable/show.sim
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c walLevel -v 1
system sh/exec.sh -n dnode1 -s start
sleep 2000
sql connect
print ======================== create stable
sql create database d1
sql use d1
...
...
tests/script/tsim/stable/tag_add.sim
0 → 100644
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/exec.sh -n dnode1 -s start
sql connect
print ========== prepare stb and ctb
sql create database db vgroups 1
sql create table db.stb (ts timestamp, c1 int, c2 binary(4)) tags(t1 int, t2 binary(16)) comment "abd"
sql create table db.ctb using db.stb tags(101, "102")
sql insert into db.ctb values(now, 1, "2")
sql show db.stables
if $rows != 1 then
return -1
endi
if $data[0][0] != stb then
return -1
endi
if $data[0][1] != db then
return -1
endi
if $data[0][3] != 3 then
return -1
endi
if $data[0][4] != 2 then
return -1
endi
if $data[0][6] != abd then
return -1
endi
sql show db.tables
if $rows != 1 then
return -1
endi
if $data[0][0] != ctb then
return -1
endi
if $data[0][1] != db then
return -1
endi
if $data[0][3] != 3 then
return -1
endi
if $data[0][4] != stb then
return -1
endi
if $data[0][6] != 2 then
return -1
endi
if $data[0][9] != CHILD_TABLE then
return -1
endi
sql select * from db.stb
if $rows != 1 then
return -1
endi
if $data[0][1] != 1 then
return -1
endi
if $data[0][2] != 2 then
return -1
endi
if $data[0][3] != 101 then
return -1
endi
if $data[0][4] != 102 then
return -1
endi
sql_error alter table db.stb add tag ts int
sql_error alter table db.stb add tag t1 int
sql_error alter table db.stb add tag t2 int
sql_error alter table db.stb add tag c1 int
sql_error alter table db.stb add tag c2 int
print ========== step1 add tag t3
sql alter table db.stb add tag t3 int
sql show db.stables
if $data[0][3] != 3 then
return -1
endi
sql show db.tables
if $data[0][3] != 3 then
return -1
endi
sql describe db.ctb
if $rows != 6 then
return -1
endi
if $data[5][0] != t3 then
return -1
endi
if $data[5][1] != INT then
return -1
endi
if $data[5][2] != 4 then
return -1
endi
sql select * from db.stb
print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
if $rows != 1 then
return -1
endi
if $data[0][1] != 1 then
return -1
endi
if $data[0][2] != 2 then
return -1
endi
if $data[0][3] != 101 then
return -1
endi
if $data[0][4] != 102 then
return -1
endi
if $data[0][5] != NULL then
return -1
endi
print ========== step2 add tag t4
sql alter table db.stb add tag t4 bigint
sql select * from db.stb
sql select * from db.stb
print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
if $rows != 1 then
return -1
endi
if $data[0][1] != 1 then
return -1
endi
if $data[0][2] != 2 then
return -1
endi
if $data[0][3] != 101 then
return -1
endi
if $data[0][4] != 102 then
return -1
endi
if $data[0][5] != NULL then
return -1
endi
if $data[0][6] != NULL then
return -1
endi
sql_error create table db.ctb2 using db.stb tags(101, "102")
sql create table db.ctb2 using db.stb tags(101, "102", 103, 104)
sql insert into db.ctb2 values(now, 1, "2")
sql select * from db.stb where tbname = 'ctb2';
print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
if $rows != 1 then
return -1
endi
if $data[0][1] != 1 then
return -1
endi
if $data[0][2] != 2 then
return -1
endi
if $data[0][3] != 101 then
return -1
endi
if $data[0][4] != 102 then
return -1
endi
if $data[0][5] != 103 then
return -1
endi
if $data[0][6] != 104 then
return -1
endi
print ========== step3 describe
sql describe db.ctb
if $rows != 7 then
return -1
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT
\ No newline at end of file
tests/script/tsim/stable/tag_drop.sim
0 → 100644
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/exec.sh -n dnode1 -s start
sql connect
print ========== prepare stb and ctb
sql create database db vgroups 1
sql create table db.stb (ts timestamp, c1 int, c2 binary(4)) tags(t1 int, t2 binary(16)) comment "abd"
sql create table db.ctb using db.stb tags(101, "102")
sql insert into db.ctb values(now, 1, "2")
sql show db.stables
if $rows != 1 then
return -1
endi
if $data[0][0] != stb then
return -1
endi
if $data[0][1] != db then
return -1
endi
if $data[0][3] != 3 then
return -1
endi
if $data[0][4] != 2 then
return -1
endi
if $data[0][6] != abd then
return -1
endi
sql show db.tables
if $rows != 1 then
return -1
endi
if $data[0][0] != ctb then
return -1
endi
if $data[0][1] != db then
return -1
endi
if $data[0][3] != 3 then
return -1
endi
if $data[0][4] != stb then
return -1
endi
if $data[0][6] != 2 then
return -1
endi
if $data[0][9] != CHILD_TABLE then
return -1
endi
sql select * from db.stb
if $rows != 1 then
return -1
endi
if $data[0][1] != 1 then
return -1
endi
if $data[0][2] != 2 then
return -1
endi
if $data[0][3] != 101 then
return -1
endi
if $data[0][4] != 102 then
return -1
endi
sql_error alter table db.stb drop tag ts int
sql_error alter table db.stb drop tag t3 int
sql_error alter table db.stb drop tag t4 int
sql_error alter table db.stb drop tag c1 int
sql_error alter table db.stb drop tag c2 int
print ========== step1 drop tag t2
sql alter table db.stb drop tag t2
sql show db.stables
if $data[0][4] != 1 then
return -1
endi
sql describe db.ctb
if $rows != 4 then
return -1
endi
if $data[4][0] != null then
return -1
endi
sql select * from db.stb
print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
if $rows != 1 then
return -1
endi
if $data[0][1] != 1 then
return -1
endi
if $data[0][2] != 2 then
return -1
endi
if $data[0][3] != 101 then
return -1
endi
if $data[0][4] != null then
return -1
endi
print ========== step2 add tag t3
sql alter table db.stb add tag t3 int
sql show db.stables
if $data[0][4] != 2 then
return -1
endi
sql describe db.ctb
if $rows != 5 then
return -1
endi
if $data[4][0] != t3 then
return -1
endi
if $data[4][1] != INT then
return -1
endi
if $data[4][2] != 4 then
return -1
endi
sql select * from db.stb
print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
if $rows != 1 then
return -1
endi
if $data[0][1] != 1 then
return -1
endi
if $data[0][2] != 2 then
return -1
endi
if $data[0][3] != 101 then
return -1
endi
if $data[0][4] != NULL then
return -1
endi
print ========== step3 add tag t4
sql alter table db.stb add tag t4 bigint
sql select * from db.stb
sql select * from db.stb
print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
if $rows != 1 then
return -1
endi
if $data[0][1] != 1 then
return -1
endi
if $data[0][2] != 2 then
return -1
endi
if $data[0][3] != 101 then
return -1
endi
if $data[0][4] != NULL then
return -1
endi
if $data[0][5] != NULL then
return -1
endi
if $data[0][6] != null then
return -1
endi
sql_error create table db.ctb2 using db.stb tags(101, "102")
sql create table db.ctb2 using db.stb tags(201, 202, 203)
sql insert into db.ctb2 values(now, 1, "2")
sql select * from db.stb where tbname = 'ctb2';
print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
if $rows != 1 then
return -1
endi
if $data[0][1] != 1 then
return -1
endi
if $data[0][2] != 2 then
return -1
endi
if $data[0][3] != 201 then
return -1
endi
if $data[0][4] != 202 then
return -1
endi
if $data[0][5] != 203 then
return -1
endi
print ========== step4 describe
sql describe db.ctb
if $rows != 6 then
return -1
endi
print ========== step5 add tag2
sql alter table db.stb add tag t2 bigint
sql select * from db.stb where tbname = 'ctb2';
sql select * from db.stb where tbname = 'ctb2';
print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
if $rows != 1 then
return -1
endi
if $data[0][1] != 1 then
return -1
endi
if $data[0][2] != 2 then
return -1
endi
if $data[0][3] != 201 then
return -1
endi
if $data[0][4] != 202 then
return -1
endi
if $data[0][5] != 203 then
return -1
endi
if $data[0][6] != NULL then
return -1
endi
sql_error create table db.ctb2 using db.stb tags(101, "102")
sql_error create table db.ctb2 using db.stb tags(201, 202, 203)
sql create table db.ctb3 using db.stb tags(301, 302, 303, 304)
sql insert into db.ctb3 values(now, 1, "2")
sql select * from db.stb where tbname = 'ctb3';
print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
if $rows != 1 then
return -1
endi
if $data[0][1] != 1 then
return -1
endi
if $data[0][2] != 2 then
return -1
endi
if $data[0][3] != 301 then
return -1
endi
if $data[0][4] != 302 then
return -1
endi
if $data[0][5] != 303 then
return -1
endi
if $data[0][6] != 304 then
return -1
endi
print ========== step6 describe
sql describe db.ctb
if $rows != 7 then
return -1
endi
if $data[3][0] != t1 then
return -1
endi
if $data[4][0] != t3 then
return -1
endi
if $data[5][0] != t4 then
return -1
endi
if $data[6][0] != t2 then
return -1
endi
if $data[6][1] != BIGINT then
return -1
endi
print ========== step7 drop tag t1
sql alter table db.stb drop tag t1
sql show db.stables
if $data[0][4] != 3 then
return -1
endi
sql describe db.ctb
if $rows != 6 then
return -1
endi
sql select * from db.stb where tbname = 'ctb3';
print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
if $rows != 1 then
return -1
endi
if $data[0][1] != 1 then
return -1
endi
if $data[0][2] != 2 then
return -1
endi
if $data[0][3] != 302 then
return -1
endi
if $data[0][4] != 303 then
return -1
endi
if $data[0][5] != 304 then
return -1
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT
\ No newline at end of file
tests/script/tsim/stable/tag_modify.sim
0 → 100644
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/exec.sh -n dnode1 -s start
sql connect
print ========== prepare stb and ctb
sql create database db vgroups 1
sql create table db.stb (ts timestamp, c1 int, c2 binary(4)) tags(t1 int, t2 binary(4)) comment "abd"
sql_error alter table db.stb MODIFY tag c2 binary(3)
sql_error alter table db.stb MODIFY tag c2 int
sql_error alter table db.stb MODIFY tag c1 int
sql_error alter table db.stb MODIFY tag ts int
sql_error alter table db.stb MODIFY tag t2 binary(3)
sql_error alter table db.stb MODIFY tag t2 int
sql_error alter table db.stb MODIFY tag t1 int
sql create table db.ctb using db.stb tags(101, "12345")
sql insert into db.ctb values(now, 1, "1234")
sql select * from db.stb
print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
if $rows != 1 then
return -1
endi
if $data[0][1] != 1 then
return -1
endi
if $data[0][2] != 1234 then
return -1
endi
if $data[0][3] != 101 then
return -1
endi
if $data[0][4] != 1234 then
return -1
endi
print ========== step1 modify tag
sql alter table db.stb MODIFY tag t2 binary(5)
sql select * from db.stb
sql create table db.ctb2 using db.stb tags(101, "12345")
sql insert into db.ctb2 values(now, 1, "1234")
sql select * from db.stb where tbname = 'ctb2';
print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] $data[0][5] $data[0][6]
print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] $data[1][5] $data[1][6]
if $rows != 1 then
return -1
endi
if $data[0][1] != 1 then
return -1
endi
if $data[0][2] != 1234 then
return -1
endi
if $data[0][3] != 101 then
return -1
endi
if $data[0][4] != 12345 then
return -1
endi
print ========== step2 describe
sql describe db.ctb2
if $rows != 5 then
return -1
endi
if $data[0][0] != ts then
return -1
endi
if $data[1][0] != c1 then
return -1
endi
if $data[2][0] != c2 then
return -1
endi
if $data[3][0] != t1 then
return -1
endi
if $data[4][0] != t2 then
return -1
endi
if $data[4][1] != VARCHAR then
return -1
endi
if $data[4][2] != 5 then
return -1
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT
system sh/exec.sh -n dnode1 -s start
sql connect
sql describe db.ctb2
if $rows != 5 then
return -1
endi
if $data[0][0] != ts then
return -1
endi
if $data[1][0] != c1 then
return -1
endi
if $data[2][0] != c2 then
return -1
endi
if $data[3][0] != t1 then
return -1
endi
if $data[4][0] != t2 then
return -1
endi
if $data[4][1] != VARCHAR then
return -1
endi
if $data[4][2] != 5 then
return -1
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT
\ No newline at end of file
tests/script/tsim/stable/tag_rename.sim
0 → 100644
浏览文件 @
c94ca28b
此差异已折叠。
点击以展开。
tests/script/tsim/stable/values.sim
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c walLevel -v 1
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
system sh/exec.sh -n dnode1 -s start
sleep 2000
sql connect
print ======================== dnode1 start
sql create database vdb0
sql create table vdb0.mt (ts timestamp, tbcol int) TAGS(tgcol int)
...
...
tests/script/tsim/stable/vnode3.sim
浏览文件 @
c94ca28b
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c walLevel -v 1
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 4
system sh/exec.sh -n dnode1 -s start
sleep 2000
sql connect
print ======================== dnode1 start
$dbPrefix = v3_db
$tbPrefix = v3_tb
$mtPrefix = v3_mt
...
...
tests/script/tsim/valgrind/checkError.sim
浏览文件 @
c94ca28b
...
...
@@ -71,7 +71,7 @@ print ====> start to check if there are ERRORS in vagrind log file for each dnod
# -n : dnode[x] be check
system_content sh/checkValgrind.sh -n dnode1
print cmd return result----> [ $system_content ]
if $system_content <=
1
then
if $system_content <=
3
then
return 0
endi
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录