Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
5b2d664d
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
5b2d664d
编写于
3月 30, 2022
作者:
wmmhello
浏览文件
操作
浏览文件
下载
差异文件
fix conflicts
上级
bceb5578
869ce1e0
变更
120
展开全部
隐藏空白更改
内联
并排
Showing
120 changed file
with
4321 addition
and
4056 deletion
+4321
-4056
example/src/tmq.c
example/src/tmq.c
+3
-2
include/client/taos.h
include/client/taos.h
+28
-10
include/common/tcommon.h
include/common/tcommon.h
+5
-0
include/common/tmsg.h
include/common/tmsg.h
+11
-45
include/common/tmsgcb.h
include/common/tmsgcb.h
+3
-2
include/common/ttokendef.h
include/common/ttokendef.h
+12
-12
include/libs/executor/executor.h
include/libs/executor/executor.h
+3
-4
include/os/os.h
include/os/os.h
+3
-0
include/util/taoserror.h
include/util/taoserror.h
+1
-1
include/util/tprocess.h
include/util/tprocess.h
+1
-1
source/client/src/clientMain.c
source/client/src/clientMain.c
+130
-90
source/client/src/tmq.c
source/client/src/tmq.c
+30
-10
source/client/test/tmqTest.cpp
source/client/test/tmqTest.cpp
+8
-6
source/common/src/tmsgcb.c
source/common/src/tmsgcb.c
+7
-3
source/dnode/mgmt/CMakeLists.txt
source/dnode/mgmt/CMakeLists.txt
+21
-17
source/dnode/mgmt/bm/inc/bm.h
source/dnode/mgmt/bm/inc/bm.h
+0
-0
source/dnode/mgmt/bm/inc/bmInt.h
source/dnode/mgmt/bm/inc/bmInt.h
+0
-0
source/dnode/mgmt/bm/src/bmInt.c
source/dnode/mgmt/bm/src/bmInt.c
+0
-0
source/dnode/mgmt/bm/src/bmMsg.c
source/dnode/mgmt/bm/src/bmMsg.c
+0
-0
source/dnode/mgmt/bm/src/bmWorker.c
source/dnode/mgmt/bm/src/bmWorker.c
+0
-0
source/dnode/mgmt/dm/inc/dm.h
source/dnode/mgmt/dm/inc/dm.h
+0
-0
source/dnode/mgmt/dm/inc/dmInt.h
source/dnode/mgmt/dm/inc/dmInt.h
+0
-0
source/dnode/mgmt/dm/src/dmFile.c
source/dnode/mgmt/dm/src/dmFile.c
+0
-0
source/dnode/mgmt/dm/src/dmInt.c
source/dnode/mgmt/dm/src/dmInt.c
+0
-0
source/dnode/mgmt/dm/src/dmMsg.c
source/dnode/mgmt/dm/src/dmMsg.c
+0
-0
source/dnode/mgmt/dm/src/dmWorker.c
source/dnode/mgmt/dm/src/dmWorker.c
+0
-0
source/dnode/mgmt/main/CMakeLists.txt
source/dnode/mgmt/main/CMakeLists.txt
+0
-9
source/dnode/mgmt/main/exe/dndMain.c
source/dnode/mgmt/main/exe/dndMain.c
+199
-0
source/dnode/mgmt/main/inc/dnd.h
source/dnode/mgmt/main/inc/dnd.h
+9
-5
source/dnode/mgmt/main/inc/dndInt.h
source/dnode/mgmt/main/inc/dndInt.h
+0
-0
source/dnode/mgmt/main/inc/dndMain.h
source/dnode/mgmt/main/inc/dndMain.h
+0
-48
source/dnode/mgmt/main/src/dndExec.c
source/dnode/mgmt/main/src/dndExec.c
+29
-11
source/dnode/mgmt/main/src/dndFile.c
source/dnode/mgmt/main/src/dndFile.c
+0
-0
source/dnode/mgmt/main/src/dndInt.c
source/dnode/mgmt/main/src/dndInt.c
+0
-13
source/dnode/mgmt/main/src/dndMonitor.c
source/dnode/mgmt/main/src/dndMonitor.c
+0
-0
source/dnode/mgmt/main/src/dndMsg.c
source/dnode/mgmt/main/src/dndMsg.c
+0
-0
source/dnode/mgmt/main/src/dndObj.c
source/dnode/mgmt/main/src/dndObj.c
+0
-0
source/dnode/mgmt/main/src/dndStr.c
source/dnode/mgmt/main/src/dndStr.c
+64
-0
source/dnode/mgmt/main/src/dndTransport.c
source/dnode/mgmt/main/src/dndTransport.c
+46
-31
source/dnode/mgmt/mm/inc/mm.h
source/dnode/mgmt/mm/inc/mm.h
+0
-0
source/dnode/mgmt/mm/inc/mmInt.h
source/dnode/mgmt/mm/inc/mmInt.h
+0
-0
source/dnode/mgmt/mm/src/mmFile.c
source/dnode/mgmt/mm/src/mmFile.c
+0
-0
source/dnode/mgmt/mm/src/mmInt.c
source/dnode/mgmt/mm/src/mmInt.c
+0
-0
source/dnode/mgmt/mm/src/mmMsg.c
source/dnode/mgmt/mm/src/mmMsg.c
+0
-0
source/dnode/mgmt/mm/src/mmWorker.c
source/dnode/mgmt/mm/src/mmWorker.c
+0
-0
source/dnode/mgmt/qm/inc/qm.h
source/dnode/mgmt/qm/inc/qm.h
+0
-0
source/dnode/mgmt/qm/inc/qmInt.h
source/dnode/mgmt/qm/inc/qmInt.h
+0
-0
source/dnode/mgmt/qm/src/qmInt.c
source/dnode/mgmt/qm/src/qmInt.c
+0
-0
source/dnode/mgmt/qm/src/qmMsg.c
source/dnode/mgmt/qm/src/qmMsg.c
+0
-0
source/dnode/mgmt/qm/src/qmWorker.c
source/dnode/mgmt/qm/src/qmWorker.c
+0
-0
source/dnode/mgmt/sm/inc/sm.h
source/dnode/mgmt/sm/inc/sm.h
+0
-0
source/dnode/mgmt/sm/inc/smInt.h
source/dnode/mgmt/sm/inc/smInt.h
+0
-0
source/dnode/mgmt/sm/src/smInt.c
source/dnode/mgmt/sm/src/smInt.c
+0
-0
source/dnode/mgmt/sm/src/smMsg.c
source/dnode/mgmt/sm/src/smMsg.c
+0
-0
source/dnode/mgmt/sm/src/smWorker.c
source/dnode/mgmt/sm/src/smWorker.c
+0
-0
source/dnode/mgmt/vm/inc/vm.h
source/dnode/mgmt/vm/inc/vm.h
+0
-0
source/dnode/mgmt/vm/inc/vmInt.h
source/dnode/mgmt/vm/inc/vmInt.h
+0
-0
source/dnode/mgmt/vm/src/vmFile.c
source/dnode/mgmt/vm/src/vmFile.c
+0
-0
source/dnode/mgmt/vm/src/vmInt.c
source/dnode/mgmt/vm/src/vmInt.c
+0
-0
source/dnode/mgmt/vm/src/vmMsg.c
source/dnode/mgmt/vm/src/vmMsg.c
+0
-0
source/dnode/mgmt/vm/src/vmWorker.c
source/dnode/mgmt/vm/src/vmWorker.c
+0
-0
source/dnode/mnode/impl/src/mndInfoSchema.c
source/dnode/mnode/impl/src/mndInfoSchema.c
+177
-139
source/dnode/mnode/impl/src/mndSubscribe.c
source/dnode/mnode/impl/src/mndSubscribe.c
+1
-295
source/dnode/mnode/impl/src/mndTopic.c
source/dnode/mnode/impl/src/mndTopic.c
+6
-5
source/dnode/mnode/impl/src/mndTrans.c
source/dnode/mnode/impl/src/mndTrans.c
+3
-3
source/dnode/vnode/src/tq/tq.c
source/dnode/vnode/src/tq/tq.c
+4
-3
source/dnode/vnode/src/tq/tqRead.c
source/dnode/vnode/src/tq/tqRead.c
+6
-57
source/dnode/vnode/src/vnd/vnodeQuery.c
source/dnode/vnode/src/vnd/vnodeQuery.c
+2
-4
source/libs/executor/src/executor.c
source/libs/executor/src/executor.c
+7
-6
source/libs/executor/src/executorimpl.c
source/libs/executor/src/executorimpl.c
+2174
-1975
source/libs/function/src/builtins.c
source/libs/function/src/builtins.c
+18
-2
source/libs/index/inc/indexCache.h
source/libs/index/inc/indexCache.h
+2
-3
source/libs/index/inc/indexComm.h
source/libs/index/inc/indexComm.h
+0
-0
source/libs/index/inc/indexFst.h
source/libs/index/inc/indexFst.h
+5
-5
source/libs/index/inc/indexFstAutomation.h
source/libs/index/inc/indexFstAutomation.h
+1
-1
source/libs/index/inc/indexFstCommon.h
source/libs/index/inc/indexFstCommon.h
+0
-0
source/libs/index/inc/indexFstCountingWriter.h
source/libs/index/inc/indexFstCountingWriter.h
+0
-0
source/libs/index/inc/indexFstNode.h
source/libs/index/inc/indexFstNode.h
+2
-2
source/libs/index/inc/indexFstRegistry.h
source/libs/index/inc/indexFstRegistry.h
+2
-2
source/libs/index/inc/indexFstUtil.h
source/libs/index/inc/indexFstUtil.h
+1
-1
source/libs/index/inc/indexSparse.h
source/libs/index/inc/indexSparse.h
+18
-7
source/libs/index/inc/indexTfile.h
source/libs/index/inc/indexTfile.h
+4
-4
source/libs/index/inc/indexUtil.h
source/libs/index/inc/indexUtil.h
+0
-0
source/libs/index/src/index.c
source/libs/index/src/index.c
+6
-6
source/libs/index/src/indexCache.c
source/libs/index/src/indexCache.c
+3
-3
source/libs/index/src/indexComm.c
source/libs/index/src/indexComm.c
+0
-0
source/libs/index/src/indexFst.c
source/libs/index/src/indexFst.c
+2
-2
source/libs/index/src/indexFstAutomation.c
source/libs/index/src/indexFstAutomation.c
+1
-1
source/libs/index/src/indexFstCommon.c
source/libs/index/src/indexFstCommon.c
+20
-17
source/libs/index/src/indexFstCountingWriter.c
source/libs/index/src/indexFstCountingWriter.c
+21
-9
source/libs/index/src/indexFstNode.c
source/libs/index/src/indexFstNode.c
+25
-9
source/libs/index/src/indexFstRegister.c
source/libs/index/src/indexFstRegister.c
+17
-9
source/libs/index/src/indexFstUtil.c
source/libs/index/src/indexFstUtil.c
+2
-2
source/libs/index/src/indexJson.c
source/libs/index/src/indexJson.c
+0
-0
source/libs/index/src/indexSparse.c
source/libs/index/src/indexSparse.c
+71
-0
source/libs/index/src/indexTfile.c
source/libs/index/src/indexTfile.c
+5
-5
source/libs/index/src/indexUtil.c
source/libs/index/src/indexUtil.c
+1
-1
source/libs/index/test/fstTest.cc
source/libs/index/test/fstTest.cc
+5
-5
source/libs/index/test/fstUT.cc
source/libs/index/test/fstUT.cc
+5
-5
source/libs/index/test/indexTests.cc
source/libs/index/test/indexTests.cc
+6
-6
source/libs/index/test/jsonUT.cc
source/libs/index/test/jsonUT.cc
+6
-6
source/libs/index/test/utilUT.cc
source/libs/index/test/utilUT.cc
+6
-6
source/libs/parser/inc/sql.y
source/libs/parser/inc/sql.y
+2
-0
source/libs/parser/src/parAstCreater.c
source/libs/parser/src/parAstCreater.c
+6
-4
source/libs/parser/src/sql.c
source/libs/parser/src/sql.c
+854
-845
source/libs/parser/test/parserAstTest.cpp
source/libs/parser/test/parserAstTest.cpp
+4
-1
source/libs/qworker/inc/qworkerMsg.h
source/libs/qworker/inc/qworkerMsg.h
+6
-6
source/libs/qworker/src/qworker.c
source/libs/qworker/src/qworker.c
+18
-18
source/libs/qworker/src/qworkerMsg.c
source/libs/qworker/src/qworkerMsg.c
+19
-23
source/libs/scalar/src/sclfunc.c
source/libs/scalar/src/sclfunc.c
+41
-90
source/libs/scalar/test/scalar/scalarTests.cpp
source/libs/scalar/test/scalar/scalarTests.cpp
+10
-10
source/libs/stream/src/tstream.c
source/libs/stream/src/tstream.c
+15
-14
source/util/src/tprocess.c
source/util/src/tprocess.c
+23
-30
tests/script/jenkins/basic.txt
tests/script/jenkins/basic.txt
+1
-1
tests/script/sh/deploy.sh
tests/script/sh/deploy.sh
+7
-10
tests/script/sh/exec.sh
tests/script/sh/exec.sh
+1
-1
tests/script/tsim/parser/groupby-basic.sim
tests/script/tsim/parser/groupby-basic.sim
+25
-51
tests/script/tsim/testCaseSuite.sim
tests/script/tsim/testCaseSuite.sim
+1
-1
tests/script/tsim/tmq/basic1.sim
tests/script/tsim/tmq/basic1.sim
+8
-7
tests/test/c/tmqSim.c
tests/test/c/tmqSim.c
+32
-18
未找到文件。
example/src/tmq.c
浏览文件 @
5b2d664d
...
...
@@ -80,8 +80,9 @@ int32_t create_topic() {
}
taos_free_result
(
pRes
);
const
char
*
sql
=
"select * from tu1"
;
pRes
=
tmq_create_topic
(
pConn
,
"test_stb_topic_1"
,
sql
,
strlen
(
sql
));
/*const char* sql = "select * from tu1";*/
/*pRes = tmq_create_topic(pConn, "test_stb_topic_1", sql, strlen(sql));*/
pRes
=
taos_query
(
pConn
,
"create topic test_stb_topic_1 as select * from tu1"
);
if
(
taos_errno
(
pRes
)
!=
0
)
{
printf
(
"failed to create topic test_stb_topic_1, reason:%s
\n
"
,
taos_errstr
(
pRes
));
return
-
1
;
...
...
include/client/taos.h
浏览文件 @
5b2d664d
...
...
@@ -26,9 +26,11 @@ extern "C" {
typedef
void
TAOS
;
typedef
void
TAOS_STMT
;
typedef
void
TAOS_RES
;
typedef
void
**
TAOS_ROW
;
#if 0
typedef void TAOS_STREAM;
#endif
typedef
void
TAOS_SUB
;
typedef
void
**
TAOS_ROW
;
// Data type definition
#define TSDB_DATA_TYPE_NULL 0 // 1 bytes
...
...
@@ -149,6 +151,7 @@ DLL_EXPORT int taos_stmt_execute(TAOS_STMT *stmt);
DLL_EXPORT
TAOS_RES
*
taos_stmt_use_result
(
TAOS_STMT
*
stmt
);
DLL_EXPORT
int
taos_stmt_close
(
TAOS_STMT
*
stmt
);
DLL_EXPORT
char
*
taos_stmt_errstr
(
TAOS_STMT
*
stmt
);
DLL_EXPORT
int
taos_stmt_affected_rows
(
TAOS_STMT
*
stmt
);
DLL_EXPORT
TAOS_RES
*
taos_query
(
TAOS
*
taos
,
const
char
*
sql
);
DLL_EXPORT
TAOS_RES
*
taos_query_l
(
TAOS
*
taos
,
const
char
*
sql
,
int
sqlLen
);
...
...
@@ -179,15 +182,20 @@ DLL_EXPORT int taos_errno(TAOS_RES *tres);
DLL_EXPORT
void
taos_query_a
(
TAOS
*
taos
,
const
char
*
sql
,
__taos_async_fn_t
fp
,
void
*
param
);
DLL_EXPORT
void
taos_fetch_rows_a
(
TAOS_RES
*
res
,
__taos_async_fn_t
fp
,
void
*
param
);
// Shuduo: temporary enable for app build
#if 1
typedef
void
(
*
__taos_sub_fn_t
)(
TAOS_SUB
*
tsub
,
TAOS_RES
*
res
,
void
*
param
,
int
code
);
DLL_EXPORT
TAOS_SUB
*
taos_subscribe
(
TAOS
*
taos
,
int
restart
,
const
char
*
topic
,
const
char
*
sql
,
__taos_sub_fn_t
fp
,
void
*
param
,
int
interval
);
DLL_EXPORT
TAOS_RES
*
taos_consume
(
TAOS_SUB
*
tsub
);
DLL_EXPORT
void
taos_unsubscribe
(
TAOS_SUB
*
tsub
,
int
keepProgress
);
#endif
#if 0
DLL_EXPORT TAOS_STREAM *taos_open_stream(TAOS *taos, const char *sql, void (*fp)(void *param, TAOS_RES *, TAOS_ROW row),
int64_t stime, void *param, void (*callback)(void *));
DLL_EXPORT void taos_close_stream(TAOS_STREAM *tstr);
#endif
DLL_EXPORT
int
taos_load_table_info
(
TAOS
*
taos
,
const
char
*
tableNameList
);
DLL_EXPORT
TAOS_RES
*
taos_schemaless_insert
(
TAOS
*
taos
,
char
*
lines
[],
int
numLines
,
int
protocol
,
int
precision
);
...
...
@@ -215,8 +223,12 @@ DLL_EXPORT tmq_list_t *tmq_list_new();
DLL_EXPORT
int32_t
tmq_list_append
(
tmq_list_t
*
,
const
char
*
);
DLL_EXPORT
void
tmq_list_destroy
(
tmq_list_t
*
);
DLL_EXPORT
tmq_t
*
tmq_consumer_new
(
void
*
conn
,
tmq_conf_t
*
conf
,
char
*
errstr
,
int32_t
errstrLen
);
DLL_EXPORT
tmq_t
*
tmq_consumer_new1
(
tmq_conf_t
*
conf
,
char
*
errstr
,
int32_t
errstrLen
);
// will be removed in 3.0
DLL_EXPORT
tmq_t
*
tmq_consumer_new
(
void
*
conn
,
tmq_conf_t
*
conf
,
char
*
errstr
,
int32_t
errstrLen
);
// will replace last one
DLL_EXPORT
tmq_t
*
tmq_consumer_new1
(
tmq_conf_t
*
conf
,
char
*
errstr
,
int32_t
errstrLen
);
DLL_EXPORT
const
char
*
tmq_err2str
(
tmq_resp_err_t
);
/* ------------------------TMQ CONSUMER INTERFACE------------------------ */
...
...
@@ -255,20 +267,26 @@ int32_t tmqGetSkipLogNum(tmq_message_t *tmq_message);
/* -------------------------TMQ MSG HANDLE INTERFACE---------------------- */
DLL_EXPORT
TAOS_ROW
tmq_get_row
(
tmq_message_t
*
message
);
DLL_EXPORT
char
*
tmq_get_topic_name
(
tmq_message_t
*
message
);
DLL_EXPORT
void
*
tmq_get_topic_schema
(
tmq_t
*
tmq
,
const
char
*
topic
);
DLL_EXPORT
void
tmq_message_destroy
(
tmq_message_t
*
tmq_message
);
DLL_EXPORT
TAOS_ROW
tmq_get_row
(
tmq_message_t
*
message
);
DLL_EXPORT
char
*
tmq_get_topic_name
(
tmq_message_t
*
message
);
DLL_EXPORT
int32_t
tmq_get_vgroup_id
(
tmq_message_t
*
message
);
DLL_EXPORT
int64_t
tmq_get_request_offset
(
tmq_message_t
*
message
);
DLL_EXPORT
int64_t
tmq_get_response_offset
(
tmq_message_t
*
message
);
DLL_EXPORT
TAOS_FIELD
*
tmq_get_fields
(
tmq_t
*
tmq
,
const
char
*
topic
);
DLL_EXPORT
int32_t
tmq_field_count
(
tmq_t
*
tmq
,
const
char
*
topic
);
DLL_EXPORT
void
tmq_message_destroy
(
tmq_message_t
*
tmq_message
);
/* --------------------TMPORARY INTERFACE FOR TESTING--------------------- */
#if 0
DLL_EXPORT TAOS_RES *tmq_create_topic(TAOS *taos, const char *name, const char *sql, int sqlLen);
#endif
DLL_EXPORT
TAOS_RES
*
tmq_create_stream
(
TAOS
*
taos
,
const
char
*
streamName
,
const
char
*
tbName
,
const
char
*
sql
);
/* -------------------------------- OTHER -------------------------------- */
/* ------------------------------ TMQ END -------------------------------- */
#if 1 // Shuduo: temporary enable for app build
typedef
void
(
*
TAOS_SUBSCRIBE_CALLBACK
)(
TAOS_SUB
*
tsub
,
TAOS_RES
*
res
,
void
*
param
,
int
code
);
DLL_EXPORT
int
taos_stmt_affected_rows
(
TAOS_STMT
*
stmt
);
#endif
#ifdef __cplusplus
}
...
...
include/common/tcommon.h
浏览文件 @
5b2d664d
...
...
@@ -197,6 +197,11 @@ typedef struct SGroupbyExpr {
bool
groupbyTag
;
// group by tag or column
}
SGroupbyExpr
;
enum
{
FUNC_PARAM_TYPE_VALUE
=
0
,
FUNC_PARAM_TYPE_COLUMN
,
};
typedef
struct
SFunctParam
{
int32_t
type
;
SColumn
*
pCol
;
...
...
include/common/tmsg.h
浏览文件 @
5b2d664d
...
...
@@ -2215,23 +2215,6 @@ static FORCE_INLINE void* tDecodeTSmaWrapper(void* buf, STSmaWrapper* pSW) {
return
buf
;
}
typedef
struct
{
int64_t
uid
;
int32_t
numOfRows
;
char
*
colData
;
}
SMqTbData
;
typedef
struct
{
char
topicName
[
TSDB_TOPIC_FNAME_LEN
];
int64_t
committedOffset
;
int64_t
reqOffset
;
int64_t
rspOffset
;
int32_t
skipLogNum
;
int32_t
bodyLen
;
int32_t
numOfTb
;
SMqTbData
*
tbData
;
}
SMqTopicData
;
typedef
struct
{
int8_t
mqMsgType
;
int32_t
code
;
...
...
@@ -2259,8 +2242,11 @@ typedef struct {
}
SMqSubVgEp
;
typedef
struct
{
char
topic
[
TSDB_TOPIC_FNAME_LEN
];
SArray
*
vgs
;
// SArray<SMqSubVgEp>
char
topic
[
TSDB_TOPIC_FNAME_LEN
];
int8_t
isSchemaAdaptive
;
SArray
*
vgs
;
// SArray<SMqSubVgEp>
int32_t
numOfFields
;
TAOS_FIELD
*
fields
;
}
SMqSubTopicEp
;
typedef
struct
{
...
...
@@ -2281,32 +2267,6 @@ typedef struct {
SArray
*
topics
;
// SArray<SMqSubTopicEp>
}
SMqCMGetSubEpRsp
;
typedef
struct
{
int32_t
curBlock
;
int32_t
curRow
;
void
**
uData
;
}
SMqRowIter
;
struct
tmq_message_t
{
SMqPollRsp
msg
;
void
*
vg
;
SMqRowIter
iter
;
};
#if 0
struct tmq_message_t {
SMqRspHead head;
union {
SMqPollRsp consumeRsp;
SMqCMGetSubEpRsp getEpRsp;
};
void* extra;
int32_t curBlock;
int32_t curRow;
void** uData;
};
#endif
static
FORCE_INLINE
void
tDeleteSMqSubTopicEp
(
SMqSubTopicEp
*
pSubTopicEp
)
{
taosArrayDestroy
(
pSubTopicEp
->
vgs
);
}
static
FORCE_INLINE
int32_t
tEncodeSMqSubVgEp
(
void
**
buf
,
const
SMqSubVgEp
*
pVgEp
)
{
...
...
@@ -2331,17 +2291,21 @@ static FORCE_INLINE void tDeleteSMqCMGetSubEpRsp(SMqCMGetSubEpRsp* pRsp) {
static
FORCE_INLINE
int32_t
tEncodeSMqSubTopicEp
(
void
**
buf
,
const
SMqSubTopicEp
*
pTopicEp
)
{
int32_t
tlen
=
0
;
tlen
+=
taosEncodeString
(
buf
,
pTopicEp
->
topic
);
tlen
+=
taosEncodeFixedI8
(
buf
,
pTopicEp
->
isSchemaAdaptive
);
int32_t
sz
=
taosArrayGetSize
(
pTopicEp
->
vgs
);
tlen
+=
taosEncodeFixedI32
(
buf
,
sz
);
for
(
int32_t
i
=
0
;
i
<
sz
;
i
++
)
{
SMqSubVgEp
*
pVgEp
=
(
SMqSubVgEp
*
)
taosArrayGet
(
pTopicEp
->
vgs
,
i
);
tlen
+=
tEncodeSMqSubVgEp
(
buf
,
pVgEp
);
}
tlen
+=
taosEncodeFixedI32
(
buf
,
pTopicEp
->
numOfFields
);
// tlen += taosEncodeBinary(buf, pTopicEp->fields, pTopicEp->numOfFields * sizeof(TAOS_FIELD));
return
tlen
;
}
static
FORCE_INLINE
void
*
tDecodeSMqSubTopicEp
(
void
*
buf
,
SMqSubTopicEp
*
pTopicEp
)
{
buf
=
taosDecodeStringTo
(
buf
,
pTopicEp
->
topic
);
buf
=
taosDecodeFixedI8
(
buf
,
&
pTopicEp
->
isSchemaAdaptive
);
int32_t
sz
;
buf
=
taosDecodeFixedI32
(
buf
,
&
sz
);
pTopicEp
->
vgs
=
taosArrayInit
(
sz
,
sizeof
(
SMqSubVgEp
));
...
...
@@ -2353,6 +2317,8 @@ static FORCE_INLINE void* tDecodeSMqSubTopicEp(void* buf, SMqSubTopicEp* pTopicE
buf
=
tDecodeSMqSubVgEp
(
buf
,
&
vgEp
);
taosArrayPush
(
pTopicEp
->
vgs
,
&
vgEp
);
}
buf
=
taosDecodeFixedI32
(
buf
,
&
pTopicEp
->
numOfFields
);
// buf = taosDecodeBinary(buf, (void**)&pTopicEp->fields, pTopicEp->numOfFields * sizeof(TAOS_FIELD));
return
buf
;
}
...
...
include/common/tmsgcb.h
浏览文件 @
5b2d664d
...
...
@@ -56,13 +56,14 @@ typedef struct {
ReleaseHandleFp
releaseHandleFp
;
}
SMsgCb
;
void
tmsgSetDefaultMsgCb
(
const
SMsgCb
*
pMsgCb
);
int32_t
tmsgPutToQueue
(
const
SMsgCb
*
pMsgCb
,
EQueueType
qtype
,
SRpcMsg
*
pReq
);
int32_t
tmsgGetQueueSize
(
const
SMsgCb
*
pMsgCb
,
int32_t
vgId
,
EQueueType
qtype
);
int32_t
tmsgSendReq
(
const
SMsgCb
*
pMsgCb
,
const
SEpSet
*
epSet
,
SRpcMsg
*
pReq
);
int32_t
tmsgSendMnodeReq
(
const
SMsgCb
*
pMsgCb
,
SRpcMsg
*
pReq
);
void
tmsgSendRsp
(
const
S
MsgCb
*
pMsgCb
,
const
S
RpcMsg
*
pRsp
);
void
tmsgSendRsp
(
const
SRpcMsg
*
pRsp
);
void
tmsgRegisterBrokenLinkArg
(
const
SMsgCb
*
pMsgCb
,
SRpcMsg
*
pMsg
);
void
tmsgReleaseHandle
(
const
SMsgCb
*
pMsgCb
,
void
*
handle
,
int8_t
type
);
void
tmsgReleaseHandle
(
void
*
handle
,
int8_t
type
);
#ifdef __cplusplus
}
...
...
include/common/ttokendef.h
浏览文件 @
5b2d664d
...
...
@@ -139,18 +139,18 @@
#define TK_TOPIC 121
#define TK_AS 122
#define TK_NK_BOOL 123
#define TK_N
K_VARIABLE
124
#define TK_NK_
UNDERLINE
125
#define TK_
ROWTS
126
#define TK_
TBNAME
127
#define TK_
QSTARTTS
128
#define TK_Q
ENDTS
129
#define TK_
WSTARTTS
130
#define TK_W
ENDTS
131
#define TK_W
DURATION
132
#define TK_
BETWEEN
133
#define TK_
IS
134
#define TK_
NULL
135
#define TK_N
ULL
124
#define TK_NK_
VARIABLE
125
#define TK_
NK_UNDERLINE
126
#define TK_
ROWTS
127
#define TK_
TBNAME
128
#define TK_Q
STARTTS
129
#define TK_
QENDTS
130
#define TK_W
STARTTS
131
#define TK_W
ENDTS
132
#define TK_
WDURATION
133
#define TK_
BETWEEN
134
#define TK_
IS
135
#define TK_NK_LT 136
#define TK_NK_GT 137
#define TK_NK_LE 138
...
...
include/libs/executor/executor.h
浏览文件 @
5b2d664d
...
...
@@ -20,8 +20,8 @@
extern
"C"
{
#endif
#include "tcommon.h"
#include "query.h"
#include "tcommon.h"
typedef
void
*
qTaskInfo_t
;
typedef
void
*
DataSinkHandle
;
...
...
@@ -36,7 +36,7 @@ typedef struct SReadHandle {
#define STREAM_DATA_TYPE_SUBMIT_BLOCK 0x1
#define STREAM_DATA_TYPE_SSDATA_BLOCK 0x2
/**
* Create the exec task for streaming mode
* @param pMsg
...
...
@@ -62,7 +62,7 @@ int32_t qSetStreamInput(qTaskInfo_t tinfo, const void* input, int32_t type);
* @param type
* @return
*/
int32_t
qSetMultiStreamInput
(
qTaskInfo_t
tinfo
,
void
*
*
pBlocks
,
size_t
numOfBlocks
,
int32_t
type
);
int32_t
qSetMultiStreamInput
(
qTaskInfo_t
tinfo
,
const
void
*
pBlocks
,
size_t
numOfBlocks
,
int32_t
type
);
/**
* Update the table id list, add or remove.
...
...
@@ -167,7 +167,6 @@ int32_t qUpdateQueriedTableIdList(qTaskInfo_t tinfo, int64_t uid, int32_t type);
*/
void
**
qReleaseTask
(
void
*
pMgmt
,
void
*
pQInfo
,
bool
freeHandle
);
void
qProcessFetchRsp
(
void
*
parent
,
struct
SRpcMsg
*
pMsg
,
struct
SEpSet
*
pEpSet
);
#ifdef __cplusplus
...
...
include/os/os.h
浏览文件 @
5b2d664d
...
...
@@ -42,6 +42,9 @@ extern "C" {
#include <sys/types.h>
#include <termios.h>
#include <sys/statvfs.h>
#include <sys/prctl.h>
#include <sys/shm.h>
#include <sys/wait.h>
#if defined(DARWIN)
#else
...
...
include/util/taoserror.h
浏览文件 @
5b2d664d
...
...
@@ -16,7 +16,7 @@
#ifndef _TD_UTIL_TAOS_ERROR_H_
#define _TD_UTIL_TAOS_ERROR_H_
#include
"os.h"
#include
<stdint.h>
#ifdef __cplusplus
extern
"C"
{
...
...
include/util/tprocess.h
浏览文件 @
5b2d664d
...
...
@@ -22,7 +22,7 @@
extern
"C"
{
#endif
typedef
enum
{
PROC_REQ
,
PROC_RSP
,
PROC_REG
ISTER
}
ProcFuncType
;
typedef
enum
{
PROC_REQ
,
PROC_RSP
,
PROC_REG
,
PROC_RELEASE
}
ProcFuncType
;
typedef
struct
SProcQueue
SProcQueue
;
typedef
struct
SProcObj
SProcObj
;
...
...
source/client/src/clientMain.c
浏览文件 @
5b2d664d
#include "os.h"
#include "tref.h"
#include "trpc.h"
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "catalog.h"
#include "clientInt.h"
#include "clientLog.h"
#include "os.h"
#include "query.h"
#include "tmsg.h"
#include "tglobal.h"
#include "catalog.h"
#include "tmsg.h"
#include "tref.h"
#include "trpc.h"
#include "version.h"
#define TSC_VAR_NOT_RELEASE 1
...
...
@@ -24,7 +39,7 @@ int taos_options(TSDB_OPTION option, const void *arg, ...) {
}
}
int
ret
=
taos_options_imp
(
option
,
(
const
char
*
)
arg
);
int
ret
=
taos_options_imp
(
option
,
(
const
char
*
)
arg
);
atomic_store_32
(
&
lock
,
0
);
return
ret
;
}
...
...
@@ -69,13 +84,13 @@ TAOS *taos_connect(const char *ip, const char *user, const char *pass, const cha
return
taos_connect_internal
(
ip
,
user
,
pass
,
NULL
,
db
,
port
);
}
void
taos_close
(
TAOS
*
taos
)
{
void
taos_close
(
TAOS
*
taos
)
{
if
(
taos
==
NULL
)
{
return
;
}
STscObj
*
pTscObj
=
(
STscObj
*
)
taos
;
tscDebug
(
"0x%"
PRIx64
" try to close connection, numOfReq:%d"
,
pTscObj
->
id
,
pTscObj
->
numOfReqs
);
tscDebug
(
"0x%"
PRIx64
" try to close connection, numOfReq:%d"
,
pTscObj
->
id
,
pTscObj
->
numOfReqs
);
/*taosRemoveRef(clientConnRefPool, pTscObj->id);*/
}
...
...
@@ -85,48 +100,46 @@ int taos_errno(TAOS_RES *tres) {
return
terrno
;
}
return
((
SRequestObj
*
)
tres
)
->
code
;
return
((
SRequestObj
*
)
tres
)
->
code
;
}
const
char
*
taos_errstr
(
TAOS_RES
*
res
)
{
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
if
(
pRequest
==
NULL
)
{
return
(
const
char
*
)
tstrerror
(
terrno
);
return
(
const
char
*
)
tstrerror
(
terrno
);
}
if
(
strlen
(
pRequest
->
msgBuf
)
>
0
||
pRequest
->
code
==
TSDB_CODE_RPC_FQDN_ERROR
)
{
return
pRequest
->
msgBuf
;
}
else
{
return
(
const
char
*
)
tstrerror
(
pRequest
->
code
);
return
(
const
char
*
)
tstrerror
(
pRequest
->
code
);
}
}
void
taos_free_result
(
TAOS_RES
*
res
)
{
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
destroyRequest
(
pRequest
);
}
int
taos_field_count
(
TAOS_RES
*
res
)
{
int
taos_field_count
(
TAOS_RES
*
res
)
{
if
(
res
==
NULL
)
{
return
0
;
}
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
SReqResultInfo
*
pResInfo
=
&
pRequest
->
body
.
resInfo
;
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
SReqResultInfo
*
pResInfo
=
&
pRequest
->
body
.
resInfo
;
return
pResInfo
->
numOfCols
;
}
int
taos_num_fields
(
TAOS_RES
*
res
)
{
return
taos_field_count
(
res
);
}
int
taos_num_fields
(
TAOS_RES
*
res
)
{
return
taos_field_count
(
res
);
}
TAOS_FIELD
*
taos_fetch_fields
(
TAOS_RES
*
res
)
{
if
(
taos_num_fields
(
res
)
==
0
)
{
return
NULL
;
}
SReqResultInfo
*
pResInfo
=
&
(((
SRequestObj
*
)
res
)
->
body
.
resInfo
);
SReqResultInfo
*
pResInfo
=
&
(((
SRequestObj
*
)
res
)
->
body
.
resInfo
);
return
pResInfo
->
fields
;
}
...
...
@@ -135,7 +148,7 @@ TAOS_RES *taos_query(TAOS *taos, const char *sql) {
return
NULL
;
}
return
taos_query_l
(
taos
,
sql
,
(
int32_t
)
strlen
(
sql
));
return
taos_query_l
(
taos
,
sql
,
(
int32_t
)
strlen
(
sql
));
}
TAOS_ROW
taos_fetch_row
(
TAOS_RES
*
res
)
{
...
...
@@ -143,18 +156,16 @@ TAOS_ROW taos_fetch_row(TAOS_RES *res) {
return
NULL
;
}
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
if
(
pRequest
->
type
==
TSDB_SQL_RETRIEVE_EMPTY_RESULT
||
pRequest
->
type
==
TSDB_SQL_INSERT
||
pRequest
->
code
!=
TSDB_CODE_SUCCESS
||
taos_num_fields
(
res
)
==
0
)
{
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
if
(
pRequest
->
type
==
TSDB_SQL_RETRIEVE_EMPTY_RESULT
||
pRequest
->
type
==
TSDB_SQL_INSERT
||
pRequest
->
code
!=
TSDB_CODE_SUCCESS
||
taos_num_fields
(
res
)
==
0
)
{
return
NULL
;
}
return
doFetchRow
(
pRequest
,
true
);
}
int
taos_print_row
(
char
*
str
,
TAOS_ROW
row
,
TAOS_FIELD
*
fields
,
int
num_fields
)
{
int
taos_print_row
(
char
*
str
,
TAOS_ROW
row
,
TAOS_FIELD
*
fields
,
int
num_fields
)
{
int32_t
len
=
0
;
for
(
int
i
=
0
;
i
<
num_fields
;
++
i
)
{
if
(
i
>
0
)
{
...
...
@@ -213,7 +224,7 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields)
case
TSDB_DATA_TYPE_BINARY
:
case
TSDB_DATA_TYPE_NCHAR
:
{
int32_t
charLen
=
varDataLen
((
char
*
)
row
[
i
]
-
VARSTR_HEADER_SIZE
);
int32_t
charLen
=
varDataLen
((
char
*
)
row
[
i
]
-
VARSTR_HEADER_SIZE
);
if
(
fields
[
i
].
type
==
TSDB_DATA_TYPE_BINARY
)
{
assert
(
charLen
<=
fields
[
i
].
bytes
&&
charLen
>=
0
);
}
else
{
...
...
@@ -238,31 +249,44 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields)
return
len
;
}
int
*
taos_fetch_lengths
(
TAOS_RES
*
res
)
{
int
*
taos_fetch_lengths
(
TAOS_RES
*
res
)
{
if
(
res
==
NULL
)
{
return
NULL
;
}
return
((
SRequestObj
*
)
res
)
->
body
.
resInfo
.
length
;
return
((
SRequestObj
*
)
res
)
->
body
.
resInfo
.
length
;
}
// todo intergrate with tDataTypes
const
char
*
taos_data_type
(
int
type
)
{
switch
(
type
)
{
case
TSDB_DATA_TYPE_NULL
:
return
"TSDB_DATA_TYPE_NULL"
;
case
TSDB_DATA_TYPE_BOOL
:
return
"TSDB_DATA_TYPE_BOOL"
;
case
TSDB_DATA_TYPE_TINYINT
:
return
"TSDB_DATA_TYPE_TINYINT"
;
case
TSDB_DATA_TYPE_SMALLINT
:
return
"TSDB_DATA_TYPE_SMALLINT"
;
case
TSDB_DATA_TYPE_INT
:
return
"TSDB_DATA_TYPE_INT"
;
case
TSDB_DATA_TYPE_BIGINT
:
return
"TSDB_DATA_TYPE_BIGINT"
;
case
TSDB_DATA_TYPE_FLOAT
:
return
"TSDB_DATA_TYPE_FLOAT"
;
case
TSDB_DATA_TYPE_DOUBLE
:
return
"TSDB_DATA_TYPE_DOUBLE"
;
case
TSDB_DATA_TYPE_VARCHAR
:
return
"TSDB_DATA_TYPE_VARCHAR"
;
// case TSDB_DATA_TYPE_BINARY: return "TSDB_DATA_TYPE_VARCHAR";
case
TSDB_DATA_TYPE_TIMESTAMP
:
return
"TSDB_DATA_TYPE_TIMESTAMP"
;
case
TSDB_DATA_TYPE_NCHAR
:
return
"TSDB_DATA_TYPE_NCHAR"
;
case
TSDB_DATA_TYPE_JSON
:
return
"TSDB_DATA_TYPE_JSON"
;
default:
return
"UNKNOWN"
;
case
TSDB_DATA_TYPE_NULL
:
return
"TSDB_DATA_TYPE_NULL"
;
case
TSDB_DATA_TYPE_BOOL
:
return
"TSDB_DATA_TYPE_BOOL"
;
case
TSDB_DATA_TYPE_TINYINT
:
return
"TSDB_DATA_TYPE_TINYINT"
;
case
TSDB_DATA_TYPE_SMALLINT
:
return
"TSDB_DATA_TYPE_SMALLINT"
;
case
TSDB_DATA_TYPE_INT
:
return
"TSDB_DATA_TYPE_INT"
;
case
TSDB_DATA_TYPE_BIGINT
:
return
"TSDB_DATA_TYPE_BIGINT"
;
case
TSDB_DATA_TYPE_FLOAT
:
return
"TSDB_DATA_TYPE_FLOAT"
;
case
TSDB_DATA_TYPE_DOUBLE
:
return
"TSDB_DATA_TYPE_DOUBLE"
;
case
TSDB_DATA_TYPE_VARCHAR
:
return
"TSDB_DATA_TYPE_VARCHAR"
;
// case TSDB_DATA_TYPE_BINARY: return "TSDB_DATA_TYPE_VARCHAR";
case
TSDB_DATA_TYPE_TIMESTAMP
:
return
"TSDB_DATA_TYPE_TIMESTAMP"
;
case
TSDB_DATA_TYPE_NCHAR
:
return
"TSDB_DATA_TYPE_NCHAR"
;
case
TSDB_DATA_TYPE_JSON
:
return
"TSDB_DATA_TYPE_JSON"
;
default:
return
"UNKNOWN"
;
}
}
...
...
@@ -273,8 +297,8 @@ int taos_affected_rows(TAOS_RES *res) {
return
0
;
}
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
SReqResultInfo
*
pResInfo
=
&
pRequest
->
body
.
resInfo
;
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
SReqResultInfo
*
pResInfo
=
&
pRequest
->
body
.
resInfo
;
return
pResInfo
->
numOfRows
;
}
...
...
@@ -295,8 +319,8 @@ int taos_select_db(TAOS *taos, const char *db) {
char
sql
[
256
]
=
{
0
};
snprintf
(
sql
,
tListLen
(
sql
),
"use %s"
,
db
);
TAOS_RES
*
pRequest
=
taos_query
(
taos
,
sql
);
int32_t
code
=
taos_errno
(
pRequest
);
TAOS_RES
*
pRequest
=
taos_query
(
taos
,
sql
);
int32_t
code
=
taos_errno
(
pRequest
);
taos_free_result
(
pRequest
);
return
code
;
...
...
@@ -307,61 +331,57 @@ void taos_stop_query(TAOS_RES *res) {
return
;
}
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
int32_t
numOfFields
=
taos_num_fields
(
pRequest
);
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
int32_t
numOfFields
=
taos_num_fields
(
pRequest
);
// It is not a query, no need to stop.
if
(
numOfFields
==
0
)
{
return
;
}
// scheduleCancelJob(pRequest->body.pQueryJob);
// scheduleCancelJob(pRequest->body.pQueryJob);
}
bool
taos_is_null
(
TAOS_RES
*
res
,
int32_t
row
,
int32_t
col
)
{
SRequestObj
*
pRequestObj
=
res
;
SReqResultInfo
*
pResultInfo
=
&
pRequestObj
->
body
.
resInfo
;
SRequestObj
*
pRequestObj
=
res
;
SReqResultInfo
*
pResultInfo
=
&
pRequestObj
->
body
.
resInfo
;
if
(
col
>=
pResultInfo
->
numOfCols
||
col
<
0
||
row
>=
pResultInfo
->
numOfRows
||
row
<
0
)
{
return
true
;
}
SResultColumn
*
pCol
=
&
pRequestObj
->
body
.
resInfo
.
pCol
[
col
];
SResultColumn
*
pCol
=
&
pRequestObj
->
body
.
resInfo
.
pCol
[
col
];
return
colDataIsNull_f
(
pCol
->
nullbitmap
,
row
);
}
int
taos_fetch_block
(
TAOS_RES
*
res
,
TAOS_ROW
*
rows
)
{
int
taos_fetch_block
(
TAOS_RES
*
res
,
TAOS_ROW
*
rows
)
{
if
(
res
==
NULL
)
{
return
0
;
}
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
if
(
pRequest
->
type
==
TSDB_SQL_RETRIEVE_EMPTY_RESULT
||
pRequest
->
type
==
TSDB_SQL_INSERT
||
pRequest
->
code
!=
TSDB_CODE_SUCCESS
||
taos_num_fields
(
res
)
==
0
)
{
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
res
;
if
(
pRequest
->
type
==
TSDB_SQL_RETRIEVE_EMPTY_RESULT
||
pRequest
->
type
==
TSDB_SQL_INSERT
||
pRequest
->
code
!=
TSDB_CODE_SUCCESS
||
taos_num_fields
(
res
)
==
0
)
{
return
0
;
}
doFetchRow
(
pRequest
,
false
);
// TODO refactor
SReqResultInfo
*
pResultInfo
=
&
pRequest
->
body
.
resInfo
;
SReqResultInfo
*
pResultInfo
=
&
pRequest
->
body
.
resInfo
;
pResultInfo
->
current
=
pResultInfo
->
numOfRows
;
*
rows
=
pResultInfo
->
row
;
return
pResultInfo
->
numOfRows
;
}
int
taos_validate_sql
(
TAOS
*
taos
,
const
char
*
sql
)
{
return
true
;
}
int
taos_validate_sql
(
TAOS
*
taos
,
const
char
*
sql
)
{
return
true
;
}
const
char
*
taos_get_server_info
(
TAOS
*
taos
)
{
if
(
taos
==
NULL
)
{
return
NULL
;
}
STscObj
*
pTscObj
=
(
STscObj
*
)
taos
;
STscObj
*
pTscObj
=
(
STscObj
*
)
taos
;
return
pTscObj
->
ver
;
}
...
...
@@ -387,52 +407,67 @@ void taos_unsubscribe(TAOS_SUB *tsub, int keepProgress) {
// TODO
}
TAOS_STMT
*
taos_stmt_init
(
TAOS
*
taos
)
{
// TODO
return
NULL
;
int
taos_load_table_info
(
TAOS
*
taos
,
const
char
*
tableNameList
)
{
// TODO
return
-
1
;
}
int
taos_stmt_close
(
TAOS_STMT
*
stmt
)
{
// TODO
return
-
1
;
TAOS_STMT
*
taos_stmt_init
(
TAOS
*
taos
)
{
// TODO
return
NULL
;
}
int
taos_stmt_execute
(
TAOS_STMT
*
stmt
)
{
// TODO
return
-
1
;
int
taos_stmt_close
(
TAOS_STMT
*
stmt
)
{
// TODO
return
-
1
;
}
int
taos_stmt_execute
(
TAOS_STMT
*
stmt
)
{
// TODO
return
-
1
;
}
char
*
taos_stmt_errstr
(
TAOS_STMT
*
stmt
)
{
// TODO
return
NULL
;
// TODO
return
NULL
;
}
int
taos_stmt_affected_rows
(
TAOS_STMT
*
stmt
)
{
// TODO
return
-
1
;
int
taos_stmt_affected_rows
(
TAOS_STMT
*
stmt
)
{
// TODO
return
-
1
;
}
TAOS_RES
*
taos_schemaless_insert
(
TAOS
*
taos
,
char
*
lines
[],
int
numLines
,
int
protocol
,
int
precision
)
{
// TODO
return
NULL
;
TAOS_RES
*
taos_schemaless_insert
(
TAOS
*
taos
,
char
*
lines
[],
int
numLines
,
int
protocol
,
int
precision
)
{
// TODO
return
NULL
;
}
int
taos_stmt_bind_param
(
TAOS_STMT
*
stmt
,
TAOS_BIND
*
bind
)
{
// TODO
return
-
1
;
int
taos_stmt_bind_param
(
TAOS_STMT
*
stmt
,
TAOS_BIND
*
bind
)
{
// TODO
return
-
1
;
}
int
taos_stmt_prepare
(
TAOS_STMT
*
stmt
,
const
char
*
sql
,
unsigned
long
length
)
{
// TODO
return
-
1
;
int
taos_stmt_prepare
(
TAOS_STMT
*
stmt
,
const
char
*
sql
,
unsigned
long
length
)
{
// TODO
return
-
1
;
}
int
taos_stmt_set_tbname_tags
(
TAOS_STMT
*
stmt
,
const
char
*
name
,
TAOS_BIND
*
tags
)
{
// TODO
return
-
1
;
}
int
taos_stmt_set_tbname
(
TAOS_STMT
*
stmt
,
const
char
*
name
)
{
// TODO
return
-
1
;
}
int
taos_stmt_
set_tbname_tags
(
TAOS_STMT
*
stmt
,
const
char
*
name
,
TAOS_BIND
*
tags
)
{
int
taos_stmt_
is_insert
(
TAOS_STMT
*
stmt
,
int
*
insert
)
{
// TODO
return
-
1
;
}
int
taos_stmt_
set_tbname
(
TAOS_STMT
*
stmt
,
const
char
*
name
)
{
int
taos_stmt_
num_params
(
TAOS_STMT
*
stmt
,
int
*
nums
)
{
// TODO
return
-
1
;
}
...
...
@@ -442,6 +477,11 @@ int taos_stmt_add_batch(TAOS_STMT* stmt) {
return
-
1
;
}
TAOS_RES
*
taos_stmt_use_result
(
TAOS_STMT
*
stmt
)
{
// TODO
return
NULL
;
}
int
taos_stmt_bind_param_batch
(
TAOS_STMT
*
stmt
,
TAOS_MULTI_BIND
*
bind
)
{
// TODO
return
-
1
;
...
...
source/client/src/tmq.c
浏览文件 @
5b2d664d
...
...
@@ -26,6 +26,18 @@
#include "tqueue.h"
#include "tref.h"
typedef
struct
{
int32_t
curBlock
;
int32_t
curRow
;
void
**
uData
;
}
SMqRowIter
;
struct
tmq_message_t
{
SMqPollRsp
msg
;
void
*
vg
;
SMqRowIter
iter
;
};
struct
tmq_list_t
{
SArray
container
;
};
...
...
@@ -99,13 +111,14 @@ typedef struct {
typedef
struct
{
// subscribe info
int32_t
sqlLen
;
char
*
sql
;
char
*
topicName
;
int64_t
topicId
;
int32_t
nextVgIdx
;
SArray
*
vgs
;
// SArray<SMqClientVg>
SSchemaWrapper
schema
;
int32_t
sqlLen
;
char
*
sql
;
char
*
topicName
;
int64_t
topicId
;
SArray
*
vgs
;
// SArray<SMqClientVg>
int8_t
isSchemaAdaptive
;
int32_t
numOfFields
;
TAOS_FIELD
*
fields
;
}
SMqClientTopic
;
typedef
struct
{
...
...
@@ -130,11 +143,11 @@ typedef struct {
}
SMqPollCbParam
;
typedef
struct
{
tmq_t
*
tmq
;
/*SMqClientVg* pVg;*/
tmq_t
*
tmq
;
int32_t
async
;
tsem_t
rspSem
;
tmq_resp_err_t
rspErr
;
/*SMqClientVg* pVg;*/
}
SMqCommitCbParam
;
tmq_conf_t
*
tmq_conf_new
()
{
...
...
@@ -471,7 +484,12 @@ tmq_resp_err_t tmq_subscribe(tmq_t* tmq, tmq_list_t* topic_list) {
tNameExtractFullName
(
&
name
,
topicFname
);
tscDebug
(
"subscribe topic: %s"
,
topicFname
);
SMqClientTopic
topic
=
{
.
nextVgIdx
=
0
,
.
sql
=
NULL
,
.
sqlLen
=
0
,
.
topicId
=
0
,
.
topicName
=
topicFname
,
.
vgs
=
NULL
};
.
sql
=
NULL
,
.
sqlLen
=
0
,
.
topicId
=
0
,
.
topicName
=
topicFname
,
.
vgs
=
NULL
,
};
topic
.
vgs
=
taosArrayInit
(
0
,
sizeof
(
SMqClientVg
));
taosArrayPush
(
tmq
->
clientTopics
,
&
topic
);
taosArrayPush
(
req
.
topicNames
,
&
topicFname
);
...
...
@@ -615,6 +633,7 @@ _return:
return
pRequest
;
}
#if 0
TAOS_RES* tmq_create_topic(TAOS* taos, const char* topicName, const char* sql, int sqlLen) {
STscObj* pTscObj = (STscObj*)taos;
SRequestObj* pRequest = NULL;
...
...
@@ -700,6 +719,7 @@ _return:
return pRequest;
}
#endif
static
char
*
formatTimestamp
(
char
*
buf
,
int64_t
val
,
int
precision
)
{
time_t
tt
;
...
...
source/client/test/tmqTest.cpp
浏览文件 @
5b2d664d
...
...
@@ -35,7 +35,7 @@ int main(int argc, char** argv) {
TEST
(
testCase
,
driverInit_Test
)
{
// taosInitGlobalCfg();
// taos_init();
// taos_init();
}
TEST
(
testCase
,
create_topic_ctb_Test
)
{
...
...
@@ -55,8 +55,9 @@ TEST(testCase, create_topic_ctb_Test) {
taos_free_result
(
pRes
);
char
*
sql
=
"select * from tu"
;
pRes
=
tmq_create_topic
(
pConn
,
"test_ctb_topic_1"
,
sql
,
strlen
(
sql
));
// char* sql = "select * from tu";
// pRes = tmq_create_topic(pConn, "test_ctb_topic_1", sql, strlen(sql));
pRes
=
taos_query
(
pConn
,
"create test_ctb_topic_1 as select * from tu"
);
taos_free_result
(
pRes
);
taos_close
(
pConn
);
}
...
...
@@ -69,7 +70,7 @@ TEST(testCase, create_topic_stb_Test) {
if
(
taos_errno
(
pRes
)
!=
0
)
{
printf
(
"error in use db, reason:%s
\n
"
,
taos_errstr
(
pRes
));
}
//taos_free_result(pRes);
//
taos_free_result(pRes);
TAOS_FIELD
*
pFields
=
taos_fetch_fields
(
pRes
);
ASSERT_TRUE
(
pFields
==
nullptr
);
...
...
@@ -79,8 +80,9 @@ TEST(testCase, create_topic_stb_Test) {
taos_free_result
(
pRes
);
char
*
sql
=
"select * from st1"
;
pRes
=
tmq_create_topic
(
pConn
,
"test_stb_topic_1"
,
sql
,
strlen
(
sql
));
// char* sql = "select * from st1";
// pRes = tmq_create_topic(pConn, "test_stb_topic_1", sql, strlen(sql));
pRes
=
taos_query
(
pConn
,
"create test_ctb_topic_1 as select * from st1"
);
taos_free_result
(
pRes
);
taos_close
(
pConn
);
}
...
...
source/common/src/tmsgcb.c
浏览文件 @
5b2d664d
...
...
@@ -16,6 +16,10 @@
#define _DEFAULT_SOURCE
#include "tmsgcb.h"
static
SMsgCb
tsDefaultMsgCb
;
void
tmsgSetDefaultMsgCb
(
const
SMsgCb
*
pMsgCb
)
{
tsDefaultMsgCb
=
*
pMsgCb
;
}
int32_t
tmsgPutToQueue
(
const
SMsgCb
*
pMsgCb
,
EQueueType
qtype
,
SRpcMsg
*
pReq
)
{
return
(
*
pMsgCb
->
queueFps
[
qtype
])(
pMsgCb
->
pWrapper
,
pReq
);
}
...
...
@@ -32,12 +36,12 @@ int32_t tmsgSendMnodeReq(const SMsgCb* pMsgCb, SRpcMsg* pReq) {
return
(
*
pMsgCb
->
sendMnodeReqFp
)(
pMsgCb
->
pWrapper
,
pReq
);
}
void
tmsgSendRsp
(
const
S
MsgCb
*
pMsgCb
,
const
SRpcMsg
*
pRsp
)
{
return
(
*
pMsgCb
->
sendRspFp
)(
pMsgCb
->
pWrapper
,
pRsp
);
}
void
tmsgSendRsp
(
const
S
RpcMsg
*
pRsp
)
{
return
(
*
tsDefaultMsgCb
.
sendRspFp
)(
tsDefaultMsgCb
.
pWrapper
,
pRsp
);
}
void
tmsgRegisterBrokenLinkArg
(
const
SMsgCb
*
pMsgCb
,
SRpcMsg
*
pMsg
)
{
(
*
pMsgCb
->
registerBrokenLinkArgFp
)(
pMsgCb
->
pWrapper
,
pMsg
);
}
void
tmsgReleaseHandle
(
const
SMsgCb
*
pMsgCb
,
void
*
handle
,
int8_t
type
)
{
(
*
pMsgCb
->
releaseHandleFp
)(
pMsgCb
->
pWrapper
,
handle
,
type
);
void
tmsgReleaseHandle
(
void
*
handle
,
int8_t
type
)
{
(
*
tsDefaultMsgCb
.
releaseHandleFp
)(
tsDefaultMsgCb
.
pWrapper
,
handle
,
type
);
}
\ No newline at end of file
source/dnode/mgmt/CMakeLists.txt
浏览文件 @
5b2d664d
aux_source_directory
(
src DNODE_SRC
)
aux_source_directory
(
dnode/src DNODE_SRC
)
aux_source_directory
(
qnode/src DNODE_SRC
)
aux_source_directory
(
bnode/src DNODE_SRC
)
aux_source_directory
(
snode/src DNODE_SRC
)
aux_source_directory
(
vnode/src DNODE_SRC
)
aux_source_directory
(
mnode/src DNODE_SRC
)
aux_source_directory
(
container/src DNODE_SRC
)
aux_source_directory
(
dm/src DNODE_SRC
)
aux_source_directory
(
qm/src DNODE_SRC
)
aux_source_directory
(
bm/src DNODE_SRC
)
aux_source_directory
(
sm/src DNODE_SRC
)
aux_source_directory
(
vm/src DNODE_SRC
)
aux_source_directory
(
mm/src DNODE_SRC
)
aux_source_directory
(
main/src DNODE_SRC
)
add_library
(
dnode STATIC
${
DNODE_SRC
}
)
target_link_libraries
(
dnode cjson mnode vnode qnode snode bnode wal sync taos tfs monitor
...
...
@@ -14,16 +12,22 @@ target_link_libraries(
target_include_directories
(
dnode
PUBLIC
"
${
CMAKE_SOURCE_DIR
}
/include/dnode/mgmt"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/d
node
/inc"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/q
node
/inc"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/b
node
/inc"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/s
node
/inc"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/v
node
/inc"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/m
node
/inc"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/
container
/inc"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/d
m
/inc"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/q
m
/inc"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/b
m
/inc"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/s
m
/inc"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/v
m
/inc"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/m
m
/inc"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/
main
/inc"
)
add_subdirectory
(
main
)
aux_source_directory
(
main/exe EXEC_SRC
)
add_executable
(
taosd
${
EXEC_SRC
}
)
target_include_directories
(
taosd
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/main/inc"
)
target_link_libraries
(
taosd dnode
)
if
(
${
BUILD_TEST
}
)
add_subdirectory
(
test
)
...
...
source/dnode/mgmt/b
node
/inc/bm.h
→
source/dnode/mgmt/b
m
/inc/bm.h
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/b
node
/inc/bmInt.h
→
source/dnode/mgmt/b
m
/inc/bmInt.h
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/b
node
/src/bmInt.c
→
source/dnode/mgmt/b
m
/src/bmInt.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/b
node
/src/bmMsg.c
→
source/dnode/mgmt/b
m
/src/bmMsg.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/b
node
/src/bmWorker.c
→
source/dnode/mgmt/b
m
/src/bmWorker.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/d
node
/inc/dm.h
→
source/dnode/mgmt/d
m
/inc/dm.h
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/d
node
/inc/dmInt.h
→
source/dnode/mgmt/d
m
/inc/dmInt.h
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/d
node
/src/dmFile.c
→
source/dnode/mgmt/d
m
/src/dmFile.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/d
node
/src/dmInt.c
→
source/dnode/mgmt/d
m
/src/dmInt.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/d
node
/src/dmMsg.c
→
source/dnode/mgmt/d
m
/src/dmMsg.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/d
node
/src/dmWorker.c
→
source/dnode/mgmt/d
m
/src/dmWorker.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/main/CMakeLists.txt
已删除
100644 → 0
浏览文件 @
bceb5578
aux_source_directory
(
src EXEC_SRC
)
add_executable
(
taosd
${
EXEC_SRC
}
)
target_include_directories
(
taosd
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
)
target_link_libraries
(
taosd dnode
)
source/dnode/mgmt/main/
src
/dndMain.c
→
source/dnode/mgmt/main/
exe
/dndMain.c
浏览文件 @
5b2d664d
...
...
@@ -14,16 +14,19 @@
*/
#define _DEFAULT_SOURCE
#include "dndMain.h"
#include "dnd.h"
#include "tconfig.h"
static
struct
{
bool
dumpConfig
;
bool
generateGrant
;
bool
printAuth
;
bool
printVersion
;
char
envFile
[
PATH_MAX
];
char
apolloUrl
[
PATH_MAX
];
SDnode
*
pDnode
;
bool
dumpConfig
;
bool
generateGrant
;
bool
printAuth
;
bool
printVersion
;
char
envFile
[
PATH_MAX
];
char
apolloUrl
[
PATH_MAX
];
SArray
*
pArgs
;
// SConfigPair
SDnode
*
pDnode
;
ENodeType
ntype
;
}
global
=
{
0
};
static
void
dndSigintHandle
(
int
signum
,
void
*
info
,
void
*
ctx
)
{
...
...
@@ -42,7 +45,7 @@ static void dndSetSignalHandle() {
taosSetSignal
(
SIGBREAK
,
dndSigintHandle
);
}
static
int32_t
dndParse
Option
(
int32_t
argc
,
char
const
*
argv
[])
{
static
int32_t
dndParse
Args
(
int32_t
argc
,
char
const
*
argv
[])
{
for
(
int32_t
i
=
1
;
i
<
argc
;
++
i
)
{
if
(
strcmp
(
argv
[
i
],
"-c"
)
==
0
)
{
if
(
i
<
argc
-
1
)
{
...
...
@@ -55,10 +58,16 @@ static int32_t dndParseOption(int32_t argc, char const *argv[]) {
printf
(
"'-c' requires a parameter, default is %s
\n
"
,
configDir
);
return
-
1
;
}
}
else
if
(
strcmp
(
argv
[
i
],
"-C"
)
==
0
)
{
global
.
dumpConfig
=
true
;
}
else
if
(
strcmp
(
argv
[
i
],
"-a"
)
==
0
)
{
tstrncpy
(
global
.
apolloUrl
,
argv
[
++
i
],
PATH_MAX
);
}
else
if
(
strcmp
(
argv
[
i
],
"-e"
)
==
0
)
{
tstrncpy
(
global
.
envFile
,
argv
[
++
i
],
PATH_MAX
);
}
else
if
(
strcmp
(
argv
[
i
],
"-k"
)
==
0
)
{
global
.
generateGrant
=
true
;
}
else
if
(
strcmp
(
argv
[
i
],
"-n"
)
==
0
)
{
global
.
ntype
=
atoi
(
argv
[
++
i
]);
}
else
if
(
strcmp
(
argv
[
i
],
"-C"
)
==
0
)
{
global
.
dumpConfig
=
true
;
}
else
if
(
strcmp
(
argv
[
i
],
"-V"
)
==
0
)
{
global
.
printVersion
=
true
;
}
else
{
...
...
@@ -68,15 +77,65 @@ static int32_t dndParseOption(int32_t argc, char const *argv[]) {
return
0
;
}
static
void
dndGenerateGrant
()
{
// grantParseParameter();
printf
(
"this feature is not implemented yet
\n
"
);
}
static
void
dndPrintVersion
()
{
#ifdef TD_ENTERPRISE
char
*
releaseName
=
"enterprise"
;
#else
char
*
releaseName
=
"community"
;
#endif
printf
(
"%s version: %s compatible_version: %s
\n
"
,
releaseName
,
version
,
compatible_version
);
printf
(
"gitinfo: %s
\n
"
,
gitinfo
);
printf
(
"buildInfo: %s
\n
"
,
buildinfo
);
}
static
void
dndDumpCfg
()
{
SConfig
*
pCfg
=
taosGetCfg
();
cfgDumpCfg
(
pCfg
,
0
,
1
);
}
static
SDnodeOpt
dndGetOpt
()
{
SConfig
*
pCfg
=
taosGetCfg
();
SDnodeOpt
option
=
{
0
};
option
.
numOfSupportVnodes
=
cfgGetItem
(
pCfg
,
"supportVnodes"
)
->
i32
;
tstrncpy
(
option
.
dataDir
,
tsDataDir
,
sizeof
(
option
.
dataDir
));
tstrncpy
(
option
.
firstEp
,
tsFirst
,
sizeof
(
option
.
firstEp
));
tstrncpy
(
option
.
secondEp
,
tsSecond
,
sizeof
(
option
.
firstEp
));
option
.
serverPort
=
tsServerPort
;
tstrncpy
(
option
.
localFqdn
,
tsLocalFqdn
,
sizeof
(
option
.
localFqdn
));
snprintf
(
option
.
localEp
,
sizeof
(
option
.
localEp
),
"%s:%u"
,
option
.
localFqdn
,
option
.
serverPort
);
option
.
pDisks
=
tsDiskCfg
;
option
.
numOfDisks
=
tsDiskCfgNum
;
return
option
;
}
static
int32_t
dndInitLog
()
{
char
logName
[
12
]
=
{
0
};
snprintf
(
logName
,
sizeof
(
logName
),
"%slog"
,
dndNodeLogStr
(
global
.
ntype
));
return
taosCreateLog
(
logName
,
1
,
configDir
,
global
.
envFile
,
global
.
apolloUrl
,
global
.
pArgs
,
0
);
}
static
void
dndSetProcName
(
char
**
argv
)
{
if
(
global
.
ntype
!=
0
)
{
const
char
*
name
=
dndNodeProcStr
(
global
.
ntype
);
prctl
(
PR_SET_NAME
,
name
);
strcpy
(
argv
[
0
],
name
);
}
}
static
int32_t
dndRunDnode
()
{
if
(
dndInit
()
!=
0
)
{
d
Info
(
"failed to initialize dnod
e environment since %s"
,
terrstr
());
d
Error
(
"failed to initializ
e environment since %s"
,
terrstr
());
return
-
1
;
}
SDnodeOpt
option
=
dndGetOpt
();
SDnode
*
pDnode
=
dndCreate
(
&
option
);
SDnode
*
pDnode
=
dndCreate
(
&
option
);
if
(
pDnode
==
NULL
)
{
dError
(
"failed to to create dnode object since %s"
,
terrstr
());
return
-
1
;
...
...
@@ -85,9 +144,9 @@ static int32_t dndRunDnode() {
dndSetSignalHandle
();
}
dInfo
(
"start the
TDengine
service"
);
dInfo
(
"start the service"
);
int32_t
code
=
dndRun
(
pDnode
);
dInfo
(
"start shutting down the
TDengine
service"
);
dInfo
(
"start shutting down the service"
);
global
.
pDnode
=
NULL
;
dndClose
(
pDnode
);
...
...
@@ -99,11 +158,12 @@ static int32_t dndRunDnode() {
int
main
(
int
argc
,
char
const
*
argv
[])
{
if
(
!
taosCheckSystemIsSmallEnd
())
{
dError
(
"failed to start TDengine since on non-small-end machines
"
);
printf
(
"failed to start since on non-small-end machines
\n
"
);
return
-
1
;
}
if
(
dndParseOption
(
argc
,
argv
)
!=
0
)
{
if
(
dndParseArgs
(
argc
,
argv
)
!=
0
)
{
printf
(
"failed to start since parse args error
\n
"
);
return
-
1
;
}
...
...
@@ -117,13 +177,13 @@ int main(int argc, char const *argv[]) {
return
0
;
}
if
(
taosCreateLog
(
"taosdlog"
,
1
,
configDir
,
global
.
envFile
,
global
.
apolloUrl
,
NULL
,
0
)
!=
0
)
{
dError
(
"failed to start TDengine since read log config error
"
);
if
(
dndInitLog
(
)
!=
0
)
{
printf
(
"failed to start since init log error
\n
"
);
return
-
1
;
}
if
(
taosInitCfg
(
configDir
,
global
.
envFile
,
global
.
apolloUrl
,
NULL
,
0
)
!=
0
)
{
dError
(
"failed to start
TDengine
since read config error"
);
if
(
taosInitCfg
(
configDir
,
global
.
envFile
,
global
.
apolloUrl
,
global
.
pArgs
,
0
)
!=
0
)
{
dError
(
"failed to start since read config error"
);
return
-
1
;
}
...
...
@@ -134,5 +194,6 @@ int main(int argc, char const *argv[]) {
return
0
;
}
dndSetProcName
((
char
**
)
argv
);
return
dndRunDnode
();
}
source/dnode/mgmt/
container
/inc/dnd.h
→
source/dnode/mgmt/
main
/inc/dnd.h
浏览文件 @
5b2d664d
...
...
@@ -33,6 +33,7 @@
#include "tthread.h"
#include "ttime.h"
#include "tworker.h"
#include "tmsgcb.h"
#include "dnode.h"
#include "monitor.h"
...
...
@@ -130,16 +131,19 @@ typedef struct SDnode {
SMgmtWrapper
wrappers
[
NODE_MAX
];
}
SDnode
;
EDndStatus
dndGetStatus
(
SDnode
*
pDnode
);
void
dndSetStatus
(
SDnode
*
pDnode
,
EDndStatus
stat
);
void
dndSetMsgHandle
(
SMgmtWrapper
*
pWrapper
,
int32_t
msgType
,
NodeMsgFp
nodeMsgFp
,
int32_t
vgId
);
void
dndReportStartup
(
SDnode
*
pDnode
,
const
char
*
pName
,
const
char
*
pDesc
);
void
dndSendMonitorReport
(
SDnode
*
pDnode
);
const
char
*
dndNodeLogStr
(
ENodeType
ntype
);
const
char
*
dndNodeProcStr
(
ENodeType
ntype
);
EDndStatus
dndGetStatus
(
SDnode
*
pDnode
);
void
dndSetStatus
(
SDnode
*
pDnode
,
EDndStatus
stat
);
void
dndSetMsgHandle
(
SMgmtWrapper
*
pWrapper
,
int32_t
msgType
,
NodeMsgFp
nodeMsgFp
,
int32_t
vgId
);
void
dndReportStartup
(
SDnode
*
pDnode
,
const
char
*
pName
,
const
char
*
pDesc
);
void
dndSendMonitorReport
(
SDnode
*
pDnode
);
int32_t
dndSendReqToMnode
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pMsg
);
int32_t
dndSendReqToDnode
(
SMgmtWrapper
*
pWrapper
,
const
SEpSet
*
pEpSet
,
SRpcMsg
*
pMsg
);
void
dndSendRsp
(
SMgmtWrapper
*
pWrapper
,
const
SRpcMsg
*
pRsp
);
void
dndRegisterBrokenLinkArg
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pMsg
);
SMsgCb
dndCreateMsgcb
(
SMgmtWrapper
*
pWrapper
);
int32_t
dndProcessNodeMsg
(
SDnode
*
pDnode
,
SNodeMsg
*
pMsg
);
int32_t
dndReadFile
(
SMgmtWrapper
*
pWrapper
,
bool
*
pDeployed
);
...
...
source/dnode/mgmt/
container
/inc/dndInt.h
→
source/dnode/mgmt/
main
/inc/dndInt.h
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/main/inc/dndMain.h
已删除
100644 → 0
浏览文件 @
bceb5578
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _TD_DND_MAIN_H_
#define _TD_DND_MAIN_H_
#include "dnode.h"
#include "taoserror.h"
#include "tconfig.h"
#include "tglobal.h"
#include "tlog.h"
#include "version.h"
#ifdef __cplusplus
extern
"C"
{
#endif
#define dFatal(...) { if (dDebugFlag & DEBUG_FATAL) { taosPrintLog("DND FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }}
#define dError(...) { if (dDebugFlag & DEBUG_ERROR) { taosPrintLog("DND ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); }}
#define dWarn(...) { if (dDebugFlag & DEBUG_WARN) { taosPrintLog("DND WARN ", DEBUG_WARN, 255, __VA_ARGS__); }}
#define dInfo(...) { if (dDebugFlag & DEBUG_INFO) { taosPrintLog("DND ", DEBUG_INFO, 255, __VA_ARGS__); }}
#define dDebug(...) { if (dDebugFlag & DEBUG_DEBUG) { taosPrintLog("DND ", DEBUG_DEBUG, dDebugFlag, __VA_ARGS__); }}
#define dTrace(...) { if (dDebugFlag & DEBUG_TRACE) { taosPrintLog("DND ", DEBUG_TRACE, dDebugFlag, __VA_ARGS__); }}
void
dndDumpCfg
();
void
dndPrintVersion
();
void
dndGenerateGrant
();
SDnodeOpt
dndGetOpt
();
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DND_MAIN_H_*/
source/dnode/mgmt/
container
/src/dndExec.c
→
source/dnode/mgmt/
main
/src/dndExec.c
浏览文件 @
5b2d664d
...
...
@@ -77,6 +77,8 @@ static int32_t dndRunInSingleProcess(SDnode *pDnode) {
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
pWrapper
->
required
=
dndRequireNode
(
pWrapper
);
if
(
!
pWrapper
->
required
)
continue
;
SMsgCb
msgCb
=
dndCreateMsgcb
(
pWrapper
);
tmsgSetDefaultMsgCb
(
&
msgCb
);
if
(
taosMkDir
(
pWrapper
->
path
)
!=
0
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
...
...
@@ -120,8 +122,7 @@ static void dndConsumeChildQueue(SMgmtWrapper *pWrapper, SNodeMsg *pMsg, int16_t
ProcFuncType
ftype
)
{
SRpcMsg
*
pRpc
=
&
pMsg
->
rpcMsg
;
pRpc
->
pCont
=
pCont
;
dTrace
(
"msg:%p, get from child queue, type:%s handle:%p app:%p"
,
pMsg
,
TMSG_INFO
(
pRpc
->
msgType
),
pRpc
->
handle
,
pRpc
->
ahandle
);
dTrace
(
"msg:%p, get from child queue, handle:%p app:%p"
,
pMsg
,
pRpc
->
handle
,
pRpc
->
ahandle
);
NodeMsgFp
msgFp
=
pWrapper
->
msgFps
[
TMSG_INDEX
(
pRpc
->
msgType
)];
int32_t
code
=
(
*
msgFp
)(
pWrapper
,
pMsg
);
...
...
@@ -142,13 +143,19 @@ static void dndConsumeChildQueue(SMgmtWrapper *pWrapper, SNodeMsg *pMsg, int16_t
static
void
dndConsumeParentQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pMsg
,
int16_t
msgLen
,
void
*
pCont
,
int32_t
contLen
,
ProcFuncType
ftype
)
{
pMsg
->
pCont
=
pCont
;
dTrace
(
"msg:%p, get from parent queue, type:%s handle:%p app:%p"
,
pMsg
,
TMSG_INFO
(
pMsg
->
msgType
),
pMsg
->
handle
,
pMsg
->
ahandle
);
dTrace
(
"msg:%p, get from parent queue, handle:%p app:%p"
,
pMsg
,
pMsg
->
handle
,
pMsg
->
ahandle
);
switch
(
ftype
)
{
case
PROC_REG
ISTER
:
case
PROC_REG
:
rpcRegisterBrokenLinkArg
(
pMsg
);
break
;
case
PROC_RELEASE
:
rpcReleaseHandle
(
pMsg
->
handle
,
(
int8_t
)
pMsg
->
code
);
rpcFreeCont
(
pCont
);
break
;
case
PROC_REQ
:
// todo send to dnode
dndSendReqToMnode
(
pWrapper
,
pMsg
);
default:
dndSendRpcRsp
(
pWrapper
,
pMsg
);
break
;
...
...
@@ -164,6 +171,9 @@ static int32_t dndRunInMultiProcess(SDnode *pDnode) {
pWrapper
->
required
=
dndRequireNode
(
pWrapper
);
if
(
!
pWrapper
->
required
)
continue
;
SMsgCb
msgCb
=
dndCreateMsgcb
(
pWrapper
);
tmsgSetDefaultMsgCb
(
&
msgCb
);
if
(
taosMkDir
(
pWrapper
->
path
)
!=
0
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
dError
(
"failed to create dir:%s since %s"
,
pWrapper
->
path
,
terrstr
());
...
...
@@ -211,15 +221,23 @@ static int32_t dndRunInMultiProcess(SDnode *pDnode) {
dndClearNodesExecpt
(
pDnode
,
n
);
dInfo
(
"node:%s, will be initialized in child process"
,
pWrapper
->
name
);
dndOpenNode
(
pWrapper
);
if
(
dndOpenNode
(
pWrapper
)
!=
0
)
{
dInfo
(
"node:%s, failed to init in child process since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
}
if
(
taosProcRun
(
pProc
)
!=
0
)
{
dError
(
"node:%s, failed to run proc since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
}
break
;
}
else
{
dInfo
(
"node:%s, will not start in parent process, child pid:%d"
,
pWrapper
->
name
,
taosProcChildId
(
pProc
));
pWrapper
->
procType
=
PROC_PARENT
;
}
if
(
taosProcRun
(
pProc
)
!=
0
)
{
dError
(
"node:%s, failed to run proc since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
if
(
taosProcRun
(
pProc
)
!=
0
)
{
dError
(
"node:%s, failed to run proc since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
}
}
}
...
...
source/dnode/mgmt/
container
/src/dndFile.c
→
source/dnode/mgmt/
main
/src/dndFile.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/
container
/src/dndInt.c
→
source/dnode/mgmt/
main
/src/dndInt.c
浏览文件 @
5b2d664d
...
...
@@ -80,19 +80,6 @@ void dndSetStatus(SDnode *pDnode, EDndStatus status) {
}
}
const
char
*
dndStatStr
(
EDndStatus
status
)
{
switch
(
status
)
{
case
DND_STAT_INIT
:
return
"init"
;
case
DND_STAT_RUNNING
:
return
"running"
;
case
DND_STAT_STOPPED
:
return
"stopped"
;
default:
return
"unknown"
;
}
}
void
dndReportStartup
(
SDnode
*
pDnode
,
const
char
*
pName
,
const
char
*
pDesc
)
{
SStartupReq
*
pStartup
=
&
pDnode
->
startup
;
tstrncpy
(
pStartup
->
name
,
pName
,
TSDB_STEP_NAME_LEN
);
...
...
source/dnode/mgmt/
container
/src/dndMonitor.c
→
source/dnode/mgmt/
main
/src/dndMonitor.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/
container
/src/dndMsg.c
→
source/dnode/mgmt/
main
/src/dndMsg.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/
container
/src/dndObj.c
→
source/dnode/mgmt/
main
/src/dndObj.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/main/src/dndStr.c
0 → 100644
浏览文件 @
5b2d664d
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#define _DEFAULT_SOURCE
#include "dndInt.h"
const
char
*
dndStatStr
(
EDndStatus
status
)
{
switch
(
status
)
{
case
DND_STAT_INIT
:
return
"init"
;
case
DND_STAT_RUNNING
:
return
"running"
;
case
DND_STAT_STOPPED
:
return
"stopped"
;
default:
return
"unknown"
;
}
}
const
char
*
dndNodeLogStr
(
ENodeType
ntype
)
{
switch
(
ntype
)
{
case
VNODES
:
return
"vnode"
;
case
QNODE
:
return
"qnode"
;
case
SNODE
:
return
"snode"
;
case
MNODE
:
return
"mnode"
;
case
BNODE
:
return
"bnode"
;
default:
return
"taosd"
;
}
}
const
char
*
dndNodeProcStr
(
ENodeType
ntype
)
{
switch
(
ntype
)
{
case
VNODES
:
return
"taosv"
;
case
QNODE
:
return
"taosq"
;
case
SNODE
:
return
"taoss"
;
case
MNODE
:
return
"taosm"
;
case
BNODE
:
return
"taosb"
;
default:
return
"taosd"
;
}
}
source/dnode/mgmt/
container
/src/dndTransport.c
→
source/dnode/mgmt/
main
/src/dndTransport.c
浏览文件 @
5b2d664d
...
...
@@ -320,8 +320,7 @@ static int32_t dndSendRpcReq(STransMgmt *pMgmt, const SEpSet *pEpSet, SRpcMsg *p
}
int32_t
dndSendReqToDnode
(
SMgmtWrapper
*
pWrapper
,
const
SEpSet
*
pEpSet
,
SRpcMsg
*
pReq
)
{
if
(
pWrapper
->
procType
==
PROC_CHILD
)
{
}
else
{
if
(
pWrapper
->
procType
!=
PROC_CHILD
)
{
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
if
(
dndGetStatus
(
pDnode
)
!=
DND_STAT_RUNNING
)
{
terrno
=
TSDB_CODE_DND_OFFLINE
;
...
...
@@ -329,23 +328,24 @@ int32_t dndSendReqToDnode(SMgmtWrapper *pWrapper, const SEpSet *pEpSet, SRpcMsg
return
-
1
;
}
return
dndSendRpcReq
(
&
pDnode
->
trans
,
pEpSet
,
pReq
);
}
else
{
while
(
taosProcPutToParentQ
(
pWrapper
->
pProc
,
pReq
,
sizeof
(
SRpcMsg
),
pReq
->
pCont
,
pReq
->
contLen
,
PROC_REQ
)
!=
0
)
{
taosMsleep
(
1
);
}
}
}
int32_t
dndSendReqToMnode
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pReq
)
{
if
(
pWrapper
->
procType
==
PROC_CHILD
)
{
}
else
{
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
STransMgmt
*
pTrans
=
&
pDnode
->
trans
;
SEpSet
epSet
=
{
0
};
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
STransMgmt
*
pTrans
=
&
pDnode
->
trans
;
SEpSet
epSet
=
{
0
};
SMgmtWrapper
*
pWrapper
=
dndAcquireWrapper
(
pDnode
,
DNODE
);
if
(
pWrapper
!=
NULL
)
{
dmGetMnodeEpSet
(
pWrapper
->
pMgmt
,
&
epSet
);
dndReleaseWrapper
(
pWrapper
);
}
return
dndSendRpcReq
(
pTrans
,
&
epSet
,
pReq
);
SMgmtWrapper
*
pWrapper2
=
dndAcquireWrapper
(
pDnode
,
DNODE
);
if
(
pWrapper2
!=
NULL
)
{
dmGetMnodeEpSet
(
pWrapper2
->
pMgmt
,
&
epSet
);
dndReleaseWrapper
(
pWrapper2
);
}
return
dndSendRpcReq
(
pTrans
,
&
epSet
,
pReq
);
}
void
dndSendRpcRsp
(
SMgmtWrapper
*
pWrapper
,
const
SRpcMsg
*
pRsp
)
{
...
...
@@ -363,29 +363,44 @@ void dndSendRpcRsp(SMgmtWrapper *pWrapper, const SRpcMsg *pRsp) {
}
void
dndSendRsp
(
SMgmtWrapper
*
pWrapper
,
const
SRpcMsg
*
pRsp
)
{
if
(
pWrapper
->
procType
==
PROC_CHILD
)
{
int32_t
code
=
-
1
;
do
{
code
=
taosProcPutToParentQ
(
pWrapper
->
pProc
,
pRsp
,
sizeof
(
SRpcMsg
),
pRsp
->
pCont
,
pRsp
->
contLen
,
PROC_RSP
);
if
(
code
!=
0
)
{
taosMsleep
(
10
);
}
}
while
(
code
!=
0
);
}
else
{
if
(
pWrapper
->
procType
!=
PROC_CHILD
)
{
dndSendRpcRsp
(
pWrapper
,
pRsp
);
}
else
{
while
(
taosProcPutToParentQ
(
pWrapper
->
pProc
,
pRsp
,
sizeof
(
SRpcMsg
),
pRsp
->
pCont
,
pRsp
->
contLen
,
PROC_RSP
)
!=
0
)
{
taosMsleep
(
1
);
}
}
}
void
dndRegisterBrokenLinkArg
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pMsg
)
{
if
(
pWrapper
->
procType
==
PROC_CHILD
)
{
int32_t
code
=
-
1
;
do
{
code
=
taosProcPutToParentQ
(
pWrapper
->
pProc
,
pMsg
,
sizeof
(
SRpcMsg
),
pMsg
->
pCont
,
pMsg
->
contLen
,
PROC_REGISTER
);
if
(
code
!=
0
)
{
taosMsleep
(
10
);
}
}
while
(
code
!=
0
);
}
else
{
if
(
pWrapper
->
procType
!=
PROC_CHILD
)
{
rpcRegisterBrokenLinkArg
(
pMsg
);
}
else
{
while
(
taosProcPutToParentQ
(
pWrapper
->
pProc
,
pMsg
,
sizeof
(
SRpcMsg
),
pMsg
->
pCont
,
pMsg
->
contLen
,
PROC_REG
)
!=
0
)
{
taosMsleep
(
1
);
}
}
}
static
void
dndReleaseHandle
(
SMgmtWrapper
*
pWrapper
,
void
*
handle
,
int8_t
type
)
{
if
(
pWrapper
->
procType
!=
PROC_CHILD
)
{
rpcReleaseHandle
(
handle
,
type
);
}
else
{
SRpcMsg
msg
=
{.
handle
=
handle
,
.
code
=
type
};
while
(
taosProcPutToParentQ
(
pWrapper
->
pProc
,
&
msg
,
sizeof
(
SRpcMsg
),
NULL
,
0
,
PROC_RELEASE
)
!=
0
)
{
taosMsleep
(
1
);
}
}
}
SMsgCb
dndCreateMsgcb
(
SMgmtWrapper
*
pWrapper
)
{
SMsgCb
msgCb
=
{
.
pWrapper
=
pWrapper
,
.
registerBrokenLinkArgFp
=
dndRegisterBrokenLinkArg
,
.
releaseHandleFp
=
dndReleaseHandle
,
.
sendMnodeReqFp
=
dndSendReqToMnode
,
.
sendReqFp
=
dndSendReqToDnode
,
.
sendRspFp
=
dndSendRsp
,
};
return
msgCb
;
}
\ No newline at end of file
source/dnode/mgmt/m
node
/inc/mm.h
→
source/dnode/mgmt/m
m
/inc/mm.h
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/m
node
/inc/mmInt.h
→
source/dnode/mgmt/m
m
/inc/mmInt.h
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/m
node
/src/mmFile.c
→
source/dnode/mgmt/m
m
/src/mmFile.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/m
node
/src/mmInt.c
→
source/dnode/mgmt/m
m
/src/mmInt.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/m
node
/src/mmMsg.c
→
source/dnode/mgmt/m
m
/src/mmMsg.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/m
node
/src/mmWorker.c
→
source/dnode/mgmt/m
m
/src/mmWorker.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/q
node
/inc/qm.h
→
source/dnode/mgmt/q
m
/inc/qm.h
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/q
node
/inc/qmInt.h
→
source/dnode/mgmt/q
m
/inc/qmInt.h
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/q
node
/src/qmInt.c
→
source/dnode/mgmt/q
m
/src/qmInt.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/q
node
/src/qmMsg.c
→
source/dnode/mgmt/q
m
/src/qmMsg.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/q
node
/src/qmWorker.c
→
source/dnode/mgmt/q
m
/src/qmWorker.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/s
node
/inc/sm.h
→
source/dnode/mgmt/s
m
/inc/sm.h
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/s
node
/inc/smInt.h
→
source/dnode/mgmt/s
m
/inc/smInt.h
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/s
node
/src/smInt.c
→
source/dnode/mgmt/s
m
/src/smInt.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/s
node
/src/smMsg.c
→
source/dnode/mgmt/s
m
/src/smMsg.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/s
node
/src/smWorker.c
→
source/dnode/mgmt/s
m
/src/smWorker.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/v
node
/inc/vm.h
→
source/dnode/mgmt/v
m
/inc/vm.h
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/v
node
/inc/vmInt.h
→
source/dnode/mgmt/v
m
/inc/vmInt.h
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/v
node
/src/vmFile.c
→
source/dnode/mgmt/v
m
/src/vmFile.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/v
node
/src/vmInt.c
→
source/dnode/mgmt/v
m
/src/vmInt.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/v
node
/src/vmMsg.c
→
source/dnode/mgmt/v
m
/src/vmMsg.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mgmt/v
node
/src/vmWorker.c
→
source/dnode/mgmt/v
m
/src/vmWorker.c
浏览文件 @
5b2d664d
文件已移动
source/dnode/mnode/impl/src/mndInfoSchema.c
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
source/dnode/mnode/impl/src/mndSubscribe.c
浏览文件 @
5b2d664d
...
...
@@ -62,8 +62,6 @@ static int32_t mndPersistMqSetConnReq(SMnode *pMnode, STrans *pTrans, const SMqT
static
int32_t
mndPersistRebalanceMsg
(
SMnode
*
pMnode
,
STrans
*
pTrans
,
const
SMqConsumerEp
*
pConsumerEp
);
static
int32_t
mndInitUnassignedVg
(
SMnode
*
pMnode
,
const
SMqTopicObj
*
pTopic
,
SMqSubscribeObj
*
pSub
);
int32_t
mndInitSubscribe
(
SMnode
*
pMnode
)
{
SSdbTable
table
=
{.
sdbType
=
SDB_SUBSCRIBE
,
.
keyType
=
SDB_KEY_BINARY
,
...
...
@@ -98,14 +96,6 @@ static SMqSubscribeObj *mndCreateSubscription(SMnode *pMnode, const SMqTopicObj
return
NULL
;
}
#if 0
if (mndInitUnassignedVg(pMnode, pTopic, pSub) < 0) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
tDeleteSMqSubscribeObj(pSub);
taosMemoryFree(pSub);
return NULL;
}
#endif
// TODO: disable alter subscribed table
return
pSub
;
}
...
...
@@ -210,45 +200,6 @@ static int32_t mndPersistCancelConnReq(SMnode *pMnode, STrans *pTrans, const SMq
return
0
;
}
#if 0
static int32_t mndProcessResetOffsetReq(SNodeMsg *pMsg) {
SMnode *pMnode = pMsg->pNode;
uint8_t *str = pMsg->rpcMsg.pCont;
SMqCMResetOffsetReq req;
SCoder decoder;
tCoderInit(&decoder, TD_LITTLE_ENDIAN, str, pMsg->rpcMsg.contLen, TD_DECODER);
tDecodeSMqCMResetOffsetReq(&decoder, &req);
SHashObj *pHash = taosHashInit(64, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), false, HASH_NO_LOCK);
if (pHash == NULL) {
return -1;
}
for (int32_t i = 0; i < req.num; i++) {
SMqOffset *pOffset = &req.offsets[i];
SMqVgOffsets *pVgOffset = taosHashGet(pHash, &pOffset->vgId, sizeof(int32_t));
if (pVgOffset == NULL) {
pVgOffset = taosMemoryMalloc(sizeof(SMqVgOffsets));
if (pVgOffset == NULL) {
return -1;
}
pVgOffset->offsets = taosArrayInit(0, sizeof(void *));
taosArrayPush(pVgOffset->offsets, &pOffset);
}
taosHashPut(pHash, &pOffset->vgId, sizeof(int32_t), &pVgOffset, sizeof(void *));
}
STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_ROLLBACK, &pMsg->rpcMsg);
if (pTrans == NULL) {
mError("mq-reset-offset: failed since %s", terrstr());
return -1;
}
return 0;
}
#endif
static
int32_t
mndProcessGetSubEpReq
(
SNodeMsg
*
pMsg
)
{
SMnode
*
pMnode
=
pMsg
->
pNode
;
SMqCMGetSubEpReq
*
pReq
=
(
SMqCMGetSubEpReq
*
)
pMsg
->
rpcMsg
.
pCont
;
...
...
@@ -574,251 +525,6 @@ static int32_t mndProcessDoRebalanceMsg(SNodeMsg *pMsg) {
return
0
;
}
#if 0
for (int32_t j = 0; j < consumerNum; j++) {
bool changed = false;
bool unfished = false;
bool canUseLeft = imbalanceSolved < imbalanceVg;
bool mustUseLeft = canUseLeft && (imbalanceVg - imbalanceSolved >= consumerNum - j);
ASSERT(imbalanceVg - imbalanceSolved <= consumerNum - j);
int32_t maxVg = vgEachConsumer + canUseLeft;
int32_t minVg = vgEachConsumer + mustUseLeft;
SMqSubConsumer *pSubConsumer = taosArrayGet(pSub->consumers, j);
int32_t vgThisConsumerBeforeRb = taosArrayGetSize(pSubConsumer->vgInfo);
int32_t vgThisConsumerAfterRb;
if (vgThisConsumerBeforeRb > maxVg) {
vgThisConsumerAfterRb = maxVg;
imbalanceSolved++;
changed = true;
} else if (vgThisConsumerBeforeRb < minVg) {
vgThisConsumerAfterRb = minVg;
if (mustUseLeft) imbalanceSolved++;
changed = true;
} else {
vgThisConsumerAfterRb = vgThisConsumerBeforeRb;
}
if (vgThisConsumerBeforeRb > vgThisConsumerAfterRb) {
while (taosArrayGetSize(pSubConsumer->vgInfo) > vgThisConsumerAfterRb) {
// put into unassigned
SMqConsumerEp *pConsumerEp = taosArrayPop(pSubConsumer->vgInfo);
ASSERT(pConsumerEp != NULL);
ASSERT(pConsumerEp->consumerId == pSubConsumer->consumerId);
taosArrayPush(unassignedVgStash, pConsumerEp);
}
} else if (vgThisConsumerBeforeRb < vgThisConsumerAfterRb) {
// assign from unassigned
while (taosArrayGetSize(pSubConsumer->vgInfo) < vgThisConsumerAfterRb) {
// if no unassgined, save j
if (taosArrayGetSize(unassignedVgStash) == 0) {
taosArrayPush(unassignedConsumerIdx, &j);
unfished = true;
break;
}
// assign vg to consumer
SMqConsumerEp *pConsumerEp = taosArrayPop(unassignedVgStash);
ASSERT(pConsumerEp != NULL);
pConsumerEp->oldConsumerId = pConsumerEp->consumerId;
pConsumerEp->consumerId = pSubConsumer->consumerId;
taosArrayPush(pSubConsumer->vgInfo, pConsumerEp);
// build msg and persist into trans
}
}
if (changed && !unfished) {
SMqConsumerObj *pRebConsumer = mndAcquireConsumer(pMnode, pSubConsumer->consumerId);
pRebConsumer->epoch++;
if (vgThisConsumerAfterRb != 0) {
atomic_store_32(&pRebConsumer->status, MQ_CONSUMER_STATUS__ACTIVE);
} else {
atomic_store_32(&pRebConsumer->status, MQ_CONSUMER_STATUS__IDLE);
}
SSdbRaw *pConsumerRaw = mndConsumerActionEncode(pRebConsumer);
sdbSetRawStatus(pConsumerRaw, SDB_STATUS_READY);
mndTransAppendRedolog(pTrans, pConsumerRaw);
mndReleaseConsumer(pMnode, pRebConsumer);
// TODO: save history
}
}
for (int32_t j = 0; j < taosArrayGetSize(unassignedConsumerIdx); j++) {
bool canUseLeft = imbalanceSolved < imbalanceVg;
int32_t consumerIdx = *(int32_t *)taosArrayGet(unassignedConsumerIdx, j);
SMqSubConsumer *pSubConsumer = taosArrayGet(pSub->consumers, consumerIdx);
if (canUseLeft) imbalanceSolved++;
// must use
int32_t vgThisConsumerAfterRb = taosArrayGetSize(pSubConsumer->vgInfo) + canUseLeft;
while (taosArrayGetSize(pSubConsumer->vgInfo) < vgEachConsumer + canUseLeft) {
// assign vg to consumer
SMqConsumerEp *pConsumerEp = taosArrayPop(unassignedVgStash);
ASSERT(pConsumerEp != NULL);
pConsumerEp->oldConsumerId = pConsumerEp->consumerId;
pConsumerEp->consumerId = pSubConsumer->consumerId;
taosArrayPush(pSubConsumer->vgInfo, pConsumerEp);
// build msg and persist into trans
}
SMqConsumerObj *pRebConsumer = mndAcquireConsumer(pMnode, pSubConsumer->consumerId);
pRebConsumer->epoch++;
atomic_store_32(&pRebConsumer->status, MQ_CONSUMER_STATUS__ACTIVE);
SSdbRaw *pConsumerRaw = mndConsumerActionEncode(pRebConsumer);
sdbSetRawStatus(pConsumerRaw, SDB_STATUS_READY);
mndTransAppendRedolog(pTrans, pConsumerRaw);
mndReleaseConsumer(pMnode, pRebConsumer);
// TODO: save history
}
#endif
#if 0
//update consumer status for the subscribption
for (int32_t i = 0; i < taosArrayGetSize(pSub->assigned); i++) {
SMqConsumerEp *pCEp = taosArrayGet(pSub->assigned, i);
int64_t consumerId = pCEp->consumerId;
if (pCEp->status != -1) {
int32_t consumerHbStatus = atomic_fetch_add_32(&pCEp->consumerHbStatus, 1);
if (consumerHbStatus < MND_SUBSCRIBE_REBALANCE_CNT) {
continue;
}
// put consumer into lostConsumer
SMqConsumerEp* lostConsumer = taosArrayPush(pSub->lostConsumer, pCEp);
lostConsumer->qmsg = NULL;
// put vg into unassigned
taosArrayPush(pSub->unassignedVg, pCEp);
// remove from assigned
// TODO: swap with last one, reduce size and reset i
taosArrayRemove(pSub->assigned, i);
// remove from available consumer
for (int32_t j = 0; j < taosArrayGetSize(pSub->availConsumer); j++) {
if (*(int64_t *)taosArrayGet(pSub->availConsumer, i) == pCEp->consumerId) {
taosArrayRemove(pSub->availConsumer, j);
break;
}
// TODO: acquire consumer, set status to unavail
}
#if 0
SMqConsumerObj* pConsumer = mndAcquireConsumer(pMnode, consumerId);
pConsumer->epoch++;
printf("current epoch %ld size %ld", pConsumer->epoch, pConsumer->topics->size);
SSdbRaw* pRaw = mndConsumerActionEncode(pConsumer);
sdbSetRawStatus(pRaw, SDB_STATUS_READY);
sdbWriteNotFree(pMnode->pSdb, pRaw);
mndReleaseConsumer(pMnode, pConsumer);
#endif
}
}
// no available consumer, skip rebalance
if (taosArrayGetSize(pSub->availConsumer) == 0) {
continue;
}
taosArrayGet(pSub->availConsumer, 0);
// rebalance condition1 : have unassigned vg
// assign vg to a consumer, trying to find the least assigned one
if ((sz = taosArrayGetSize(pSub->unassignedVg)) > 0) {
char *topic = NULL;
char *cgroup = NULL;
mndSplitSubscribeKey(pSub->key, &topic, &cgroup);
SMqTopicObj *pTopic = mndAcquireTopic(pMnode, topic);
STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY, &pMsg->rpcMsg);
for (int32_t i = 0; i < sz; i++) {
int64_t consumerId = *(int64_t *)taosArrayGet(pSub->availConsumer, pSub->nextConsumerIdx);
pSub->nextConsumerIdx = (pSub->nextConsumerIdx + 1) % taosArrayGetSize(pSub->availConsumer);
SMqConsumerEp *pCEp = taosArrayPop(pSub->unassignedVg);
pCEp->oldConsumerId = pCEp->consumerId;
pCEp->consumerId = consumerId;
taosArrayPush(pSub->assigned, pCEp);
SMqConsumerObj *pConsumer = mndAcquireConsumer(pMnode, consumerId);
pConsumer->epoch++;
SSdbRaw* pConsumerRaw = mndConsumerActionEncode(pConsumer);
sdbSetRawStatus(pConsumerRaw, SDB_STATUS_READY);
sdbWrite(pMnode->pSdb, pConsumerRaw);
mndReleaseConsumer(pMnode, pConsumer);
void* msg;
int32_t msgLen;
mndBuildRebalanceMsg(&msg, &msgLen, pTopic, pCEp, cgroup, topic);
// persist msg
STransAction action = {0};
action.epSet = pCEp->epSet;
action.pCont = msg;
action.contLen = sizeof(SMsgHead) + msgLen;
action.msgType = TDMT_VND_MQ_SET_CONN;
mndTransAppendRedoAction(pTrans, &action);
// persist data
SSdbRaw *pRaw = mndSubActionEncode(pSub);
sdbSetRawStatus(pRaw, SDB_STATUS_READY);
mndTransAppendRedolog(pTrans, pRaw);
}
if (mndTransPrepare(pMnode, pTrans) != 0) {
mError("trans:%d, failed to prepare since %s", pTrans->id, terrstr());
}
mndReleaseTopic(pMnode, pTopic);
mndTransDrop(pTrans);
taosMemoryFreeClear(topic);
taosMemoryFreeClear(cgroup);
}
// rebalance condition2 : imbalance assignment
}
return 0;
}
#endif
#if 0
static int32_t mndInitUnassignedVg(SMnode *pMnode, const SMqTopicObj *pTopic, SMqSubscribeObj *pSub) {
SSdb *pSdb = pMnode->pSdb;
SVgObj *pVgroup = NULL;
SQueryPlan *pPlan = qStringToQueryPlan(pTopic->physicalPlan);
SArray *pArray = NULL;
SNodeListNode *inner = (SNodeListNode*)nodesListGetNode(pPlan->pSubplans, 0);
SSubplan *plan = (SSubplan*)nodesListGetNode(inner->pNodeList, 0);
SArray *unassignedVg = pSub->unassignedVg;
void *pIter = NULL;
while (1) {
pIter = sdbFetch(pSdb, SDB_VGROUP, pIter, (void **)&pVgroup);
if (pIter == NULL) break;
if (pVgroup->dbUid != pTopic->dbUid) {
sdbRelease(pSdb, pVgroup);
continue;
}
pSub->vgNum++;
plan->execNode.nodeId = pVgroup->vgId;
plan->execNode.epset = mndGetVgroupEpset(pMnode, pVgroup);
if (schedulerConvertDagToTaskList(pPlan, &pArray) < 0) {
terrno = TSDB_CODE_MND_UNSUPPORTED_TOPIC;
mError("unsupport topic: %s, sql: %s", pTopic->name, pTopic->sql);
return -1;
}
SMqConsumerEp consumerEp = {0};
consumerEp.status = 0;
consumerEp.consumerId = -1;
STaskInfo *pTaskInfo = taosArrayGet(pArray, 0);
consumerEp.epSet = pTaskInfo->addr.epset;
consumerEp.vgId = pTaskInfo->addr.nodeId;
ASSERT(consumerEp.vgId == pVgroup->vgId);
consumerEp.qmsg = strdup(pTaskInfo->msg->msg);
taosArrayPush(unassignedVg, &consumerEp);
// TODO: free taskInfo
taosArrayDestroy(pArray);
}
/*qDestroyQueryDag(pDag);*/
return 0;
}
#endif
static
int32_t
mndPersistMqSetConnReq
(
SMnode
*
pMnode
,
STrans
*
pTrans
,
const
SMqTopicObj
*
pTopic
,
const
char
*
cgroup
,
const
SMqConsumerEp
*
pConsumerEp
)
{
ASSERT
(
pConsumerEp
->
oldConsumerId
==
-
1
);
...
...
@@ -1140,7 +846,7 @@ static int32_t mndProcessSubscribeReq(SNodeMsg *pMsg) {
}
}
if
(
oldSub
)
taosArrayDestroyEx
(
oldSub
,
(
void
(
*
)(
void
*
))
taosMemoryFree
);
if
(
oldSub
)
taosArrayDestroyEx
(
oldSub
,
(
void
(
*
)(
void
*
))
taosMemoryFree
);
// persist consumerObj
SSdbRaw
*
pConsumerRaw
=
mndConsumerActionEncode
(
pConsumer
);
...
...
source/dnode/mnode/impl/src/mndTopic.c
浏览文件 @
5b2d664d
...
...
@@ -65,9 +65,11 @@ void mndCleanupTopic(SMnode *pMnode) {}
SSdbRaw
*
mndTopicActionEncode
(
SMqTopicObj
*
pTopic
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
int32_t
logicalPlanLen
=
strlen
(
pTopic
->
logicalPlan
)
+
1
;
int32_t
physicalPlanLen
=
strlen
(
pTopic
->
physicalPlan
)
+
1
;
int32_t
size
=
sizeof
(
SMqTopicObj
)
+
logicalPlanLen
+
physicalPlanLen
+
pTopic
->
sqlLen
+
MND_TOPIC_RESERVE_SIZE
;
int32_t
logicalPlanLen
=
strlen
(
pTopic
->
logicalPlan
)
+
1
;
int32_t
physicalPlanLen
=
strlen
(
pTopic
->
physicalPlan
)
+
1
;
int32_t
swLen
=
taosEncodeSSchemaWrapper
(
NULL
,
&
pTopic
->
schema
);
int32_t
size
=
sizeof
(
SMqTopicObj
)
+
logicalPlanLen
+
physicalPlanLen
+
pTopic
->
sqlLen
+
swLen
+
MND_TOPIC_RESERVE_SIZE
;
SSdbRaw
*
pRaw
=
sdbAllocRaw
(
SDB_TOPIC
,
MND_TOPIC_VER_NUMBER
,
size
);
if
(
pRaw
==
NULL
)
goto
TOPIC_ENCODE_OVER
;
...
...
@@ -86,8 +88,7 @@ SSdbRaw *mndTopicActionEncode(SMqTopicObj *pTopic) {
SDB_SET_INT32
(
pRaw
,
dataPos
,
physicalPlanLen
,
TOPIC_ENCODE_OVER
);
SDB_SET_BINARY
(
pRaw
,
dataPos
,
pTopic
->
physicalPlan
,
physicalPlanLen
,
TOPIC_ENCODE_OVER
);
int32_t
swLen
=
taosEncodeSSchemaWrapper
(
NULL
,
&
pTopic
->
schema
);
void
*
swBuf
=
taosMemoryMalloc
(
swLen
);
void
*
swBuf
=
taosMemoryMalloc
(
swLen
);
if
(
swBuf
==
NULL
)
{
goto
TOPIC_ENCODE_OVER
;
}
...
...
source/dnode/mnode/impl/src/mndTrans.c
浏览文件 @
5b2d664d
...
...
@@ -771,7 +771,7 @@ static void mndTransSendRpcRsp(SMnode *pMnode, STrans *pTrans) {
.
ahandle
=
pTrans
->
rpcAHandle
,
.
pCont
=
rpcCont
,
.
contLen
=
pTrans
->
rpcRspLen
};
tmsgSendRsp
(
&
pMnode
->
msgCb
,
&
rspMsg
);
tmsgSendRsp
(
&
rspMsg
);
pTrans
->
rpcHandle
=
NULL
;
pTrans
->
rpcRsp
=
NULL
;
pTrans
->
rpcRspLen
=
0
;
...
...
@@ -898,7 +898,7 @@ static int32_t mndTransSendActionMsg(SMnode *pMnode, STrans *pTrans, SArray *pAr
pAction
->
msgReceived
=
0
;
pAction
->
errCode
=
0
;
}
else
{
m
Debug
(
"trans:%d, action:%d not send since %s"
,
pTrans
->
id
,
action
,
terrstr
());
m
Error
(
"trans:%d, action:%d not send since %s"
,
pTrans
->
id
,
action
,
terrstr
());
return
-
1
;
}
}
...
...
@@ -938,7 +938,7 @@ static int32_t mndTransExecuteActions(SMnode *pMnode, STrans *pTrans, SArray *pA
return
errCode
;
}
}
else
{
mDebug
(
"trans:%d, %d of %d actions execut
ed, code:0x%04x"
,
pTrans
->
id
,
numOfReceived
,
numOfActions
,
errCode
&
0XFFFF
);
mDebug
(
"trans:%d, %d of %d actions execut
ing"
,
pTrans
->
id
,
numOfReceived
,
numOfActions
);
return
TSDB_CODE_MND_ACTION_IN_PROGRESS
;
}
}
...
...
source/dnode/vnode/src/tq/tq.c
浏览文件 @
5b2d664d
...
...
@@ -275,7 +275,7 @@ int32_t tqProcessPollReq(STQ* pTq, SRpcMsg* pMsg) {
pMsg
->
pCont
=
NULL
;
pMsg
->
contLen
=
0
;
pMsg
->
code
=
-
1
;
rpcSendResponse
(
pMsg
);
tmsgSendRsp
(
pMsg
);
return
0
;
}
...
...
@@ -340,7 +340,7 @@ int32_t tqProcessPollReq(STQ* pTq, SRpcMsg* pMsg) {
pMsg
->
pCont
=
buf
;
pMsg
->
contLen
=
tlen
;
pMsg
->
code
=
0
;
rpcSendResponse
(
pMsg
);
tmsgSendRsp
(
pMsg
);
return
0
;
}
}
else
{
...
...
@@ -356,6 +356,7 @@ int32_t tqProcessPollReq(STQ* pTq, SRpcMsg* pMsg) {
void
*
buf
=
rpcMallocCont
(
tlen
);
if
(
buf
==
NULL
)
{
pMsg
->
code
=
-
1
;
ASSERT
(
0
);
return
-
1
;
}
((
SMqRspHead
*
)
buf
)
->
mqMsgType
=
TMQ_MSG_TYPE__POLL_RSP
;
...
...
@@ -367,7 +368,7 @@ int32_t tqProcessPollReq(STQ* pTq, SRpcMsg* pMsg) {
pMsg
->
pCont
=
buf
;
pMsg
->
contLen
=
tlen
;
pMsg
->
code
=
0
;
rpcSendResponse
(
pMsg
);
tmsgSendRsp
(
pMsg
);
/*}*/
return
0
;
...
...
source/dnode/vnode/src/tq/tqRead.c
浏览文件 @
5b2d664d
...
...
@@ -114,10 +114,9 @@ SArray* tqRetrieveDataBlock(STqReadHandle* pHandle) {
SSchemaWrapper
*
pSchemaWrapper
=
pHandle
->
pSchemaWrapper
;
int32_t
numOfRows
=
pHandle
->
pBlock
->
numOfRows
;
int32_t
numOfCols
=
pHandle
->
pSchema
->
numOfCols
;
/*int32_t numOfCols = pHandle->pSchema->numOfCols;*/
int32_t
colNumNeed
=
taosArrayGetSize
(
pHandle
->
pColIdList
);
// TODO: stable case
if
(
colNumNeed
>
pSchemaWrapper
->
nCols
)
{
colNumNeed
=
pSchemaWrapper
->
nCols
;
}
...
...
@@ -138,58 +137,24 @@ SArray* tqRetrieveDataBlock(STqReadHandle* pHandle) {
colNeed
++
;
}
else
{
SColumnInfoData
colInfo
=
{
0
};
int
sz
=
numOfRows
*
pColSchema
->
bytes
;
/*int sz = numOfRows * pColSchema->bytes;*/
colInfo
.
info
.
bytes
=
pColSchema
->
bytes
;
colInfo
.
info
.
colId
=
pColSchema
->
colId
;
colInfo
.
info
.
type
=
pColSchema
->
type
;
colInfo
.
pData
=
taosMemoryCalloc
(
1
,
sz
);
if
(
colInfo
.
pData
==
NULL
)
{
// TODO free
taosArrayDestroy
(
pArray
);
if
(
blockDataEnsureColumnCapacity
(
&
colInfo
,
numOfRows
)
<
0
)
{
taosArrayDestroyEx
(
pArray
,
(
void
(
*
)(
void
*
))
tDeleteSSDataBlock
);
return
NULL
;
}
blockDataEnsureColumnCapacity
(
&
colInfo
,
numOfRows
);
taosArrayPush
(
pArray
,
&
colInfo
);
colMeta
++
;
colNeed
++
;
}
}
#if 0
int j = 0;
for (int32_t i = 0; i < colNumNeed; i++) {
col_id_t colId = *(col_id_t*)taosArrayGet(pHandle->pColIdList, i);
while (j < pSchemaWrapper->nCols && pSchemaWrapper->pSchema[j].colId < colId) {
j++;
}
if (j >= pSchemaWrapper->nCols) {
continue;
}
SSchema* pColSchema = &pSchemaWrapper->pSchema[j];
SColumnInfoData colInfo = {0};
int sz = numOfRows * pColSchema->bytes;
colInfo.info.bytes = pColSchema->bytes;
colInfo.info.colId = colId;
colInfo.info.type = pColSchema->type;
colInfo.pData = taosMemoryCalloc(1, sz);
if (colInfo.pData == NULL) {
// TODO free
taosArrayDestroy(pArray);
return NULL;
}
blockDataEnsureColumnCapacity(&colInfo, numOfRows);
taosArrayPush(pArray, &colInfo);
}
#endif
STSRowIter
iter
=
{
0
};
tdSTSRowIterInit
(
&
iter
,
pTschema
);
STSRow
*
row
;
// int32_t kvIdx = 0;
int32_t
curRow
=
0
;
tInitSubmitBlkIter
(
pHandle
->
pBlock
,
&
pHandle
->
blkIter
);
while
((
row
=
tGetSubmitBlkNext
(
&
pHandle
->
blkIter
))
!=
NULL
)
{
...
...
@@ -202,25 +167,9 @@ SArray* tqRetrieveDataBlock(STqReadHandle* pHandle) {
if
(
!
tdSTSRowIterNext
(
&
iter
,
pColData
->
info
.
colId
,
pColData
->
info
.
type
,
&
sVal
))
{
break
;
}
memcpy
(
POINTER_SHIFT
(
pColData
->
pData
,
curRow
*
pColData
->
info
.
bytes
),
sVal
.
val
,
pColData
->
info
.
bytes
);
}
#if 0
for (int32_t i = 0; i < colNumNeed; i++) {
SColumnInfoData* pColData = taosArrayGet(pArray, i);
STColumn* pCol = schemaColAt(pTschema, i);
// TODO
if(pCol->colId != pColData->info.colId) {
continue;
}
// void* val = tdGetMemRowDataOfColEx(row, pCol->colId, pCol->type, TD_DATA_ROW_HEAD_SIZE + pCol->offset, &kvIdx);
SCellVal sVal = {0};
if (!tdSTSRowIterNext(&iter, pCol->colId, pCol->type, &sVal)) {
// TODO: reach end
break;
}
memcpy(POINTER_SHIFT(pColData->pData, curRow * pCol->bytes), sVal.val, pCol->bytes);
// TODO handle null
colDataAppend
(
pColData
,
curRow
,
sVal
.
val
,
sVal
.
valType
==
TD_VTYPE_NULL
);
}
#endif
curRow
++
;
}
return
pArray
;
...
...
source/dnode/vnode/src/vnd/vnodeQuery.c
浏览文件 @
5b2d664d
...
...
@@ -205,8 +205,7 @@ _exit:
rpcMsg
.
contLen
=
rspLen
;
rpcMsg
.
code
=
code
;
rpcSendResponse
(
&
rpcMsg
);
tmsgSendRsp
(
&
rpcMsg
);
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -276,8 +275,7 @@ static int32_t vnodeGetTableList(SVnode *pVnode, SRpcMsg *pMsg) {
.
code
=
0
,
};
rpcSendResponse
(
&
rpcMsg
);
tmsgSendRsp
(
&
rpcMsg
);
taosArrayDestroyEx
(
pArray
,
freeItemHelper
);
return
0
;
}
source/libs/executor/src/executor.c
浏览文件 @
5b2d664d
...
...
@@ -14,12 +14,12 @@
*/
#include "executor.h"
#include "tdatablock.h"
#include "executorimpl.h"
#include "planner.h"
#include "tdatablock.h"
#include "vnode.h"
static
int32_t
doSetStreamBlock
(
SOperatorInfo
*
pOperator
,
void
*
*
input
,
size_t
numOfBlocks
,
int32_t
type
,
char
*
id
)
{
static
int32_t
doSetStreamBlock
(
SOperatorInfo
*
pOperator
,
void
*
input
,
size_t
numOfBlocks
,
int32_t
type
,
char
*
id
)
{
ASSERT
(
pOperator
!=
NULL
);
if
(
pOperator
->
operatorType
!=
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
)
{
if
(
pOperator
->
numOfDownstream
==
0
)
{
...
...
@@ -44,17 +44,18 @@ static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void** input, size_t n
}
if
(
type
==
STREAM_DATA_TYPE_SUBMIT_BLOCK
)
{
if
(
tqReadHandleSetMsg
(
pInfo
->
readerHandle
,
input
[
0
]
,
0
)
<
0
)
{
if
(
tqReadHandleSetMsg
(
pInfo
->
readerHandle
,
input
,
0
)
<
0
)
{
qError
(
"submit msg messed up when initing stream block, %s"
PRIx64
,
id
);
return
TSDB_CODE_QRY_APP_ERROR
;
}
}
else
{
for
(
int32_t
i
=
0
;
i
<
numOfBlocks
;
++
i
)
{
SSDataBlock
*
pDataBlock
=
input
[
i
];
SSDataBlock
*
pDataBlock
=
&
((
SSDataBlock
*
)
input
)
[
i
];
SSDataBlock
*
p
=
createOneDataBlock
(
pDataBlock
);
p
->
info
=
pDataBlock
->
info
;
taosArrayClear
(
p
->
pDataBlock
);
taosArrayAddAll
(
p
->
pDataBlock
,
pDataBlock
->
pDataBlock
);
taosArrayPush
(
pInfo
->
pBlockLists
,
&
p
);
}
...
...
@@ -65,10 +66,10 @@ static int32_t doSetStreamBlock(SOperatorInfo* pOperator, void** input, size_t n
}
int32_t
qSetStreamInput
(
qTaskInfo_t
tinfo
,
const
void
*
input
,
int32_t
type
)
{
qSetMultiStreamInput
(
tinfo
,
(
void
**
)
&
input
,
1
,
type
);
return
qSetMultiStreamInput
(
tinfo
,
input
,
1
,
type
);
}
int32_t
qSetMultiStreamInput
(
qTaskInfo_t
tinfo
,
void
*
*
pBlocks
,
size_t
numOfBlocks
,
int32_t
type
)
{
int32_t
qSetMultiStreamInput
(
qTaskInfo_t
tinfo
,
const
void
*
pBlocks
,
size_t
numOfBlocks
,
int32_t
type
)
{
if
(
tinfo
==
NULL
)
{
return
TSDB_CODE_QRY_APP_ERROR
;
}
...
...
source/libs/executor/src/executorimpl.c
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
source/libs/function/src/builtins.c
浏览文件 @
5b2d664d
...
...
@@ -173,7 +173,7 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
.
finalizeFunc
=
NULL
},
{
.
name
=
"pow
er
"
,
.
name
=
"pow"
,
.
type
=
FUNCTION_TYPE_POW
,
.
classification
=
FUNC_MGT_SCALAR_FUNC
,
.
checkFunc
=
stubCheckAndGetResultType
,
...
...
@@ -409,13 +409,29 @@ int32_t stubCheckAndGetResultType(SFunctionNode* pFunc) {
// todo
break
;
case
FUNCTION_TYPE_ABS
:
{
case
FUNCTION_TYPE_ABS
:
case
FUNCTION_TYPE_CEIL
:
case
FUNCTION_TYPE_FLOOR
:
case
FUNCTION_TYPE_ROUND
:
{
SColumnNode
*
pParam
=
nodesListGetNode
(
pFunc
->
pParameterList
,
0
);
int32_t
paraType
=
pParam
->
node
.
resType
.
type
;
pFunc
->
node
.
resType
=
(
SDataType
)
{
.
bytes
=
tDataTypes
[
paraType
].
bytes
,
.
type
=
paraType
};
break
;
}
case
FUNCTION_TYPE_SIN
:
case
FUNCTION_TYPE_COS
:
case
FUNCTION_TYPE_TAN
:
case
FUNCTION_TYPE_ASIN
:
case
FUNCTION_TYPE_ACOS
:
case
FUNCTION_TYPE_ATAN
:
case
FUNCTION_TYPE_SQRT
:
case
FUNCTION_TYPE_LOG
:
case
FUNCTION_TYPE_POW
:
{
pFunc
->
node
.
resType
=
(
SDataType
)
{
.
bytes
=
tDataTypes
[
TSDB_DATA_TYPE_DOUBLE
].
bytes
,
.
type
=
TSDB_DATA_TYPE_DOUBLE
};
break
;
}
default:
ASSERT
(
0
);
// to found the fault ASAP.
}
...
...
source/libs/index/inc/index
_c
ache.h
→
source/libs/index/inc/index
C
ache.h
浏览文件 @
5b2d664d
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com> *
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
...
...
@@ -16,7 +15,7 @@
#define __INDEX_CACHE_H__
#include "indexInt.h"
#include "index
_u
til.h"
#include "index
U
til.h"
#include "tskiplist.h"
// ----------------- key structure in skiplist ---------------------
...
...
source/libs/index/inc/index
_c
omm.h
→
source/libs/index/inc/index
C
omm.h
浏览文件 @
5b2d664d
文件已移动
source/libs/index/inc/index
_f
st.h
→
source/libs/index/inc/index
F
st.h
浏览文件 @
5b2d664d
...
...
@@ -20,12 +20,12 @@
extern
"C"
{
#endif
#include "indexFstAutomation.h"
#include "indexFstCountingWriter.h"
#include "indexFstNode.h"
#include "indexFstRegistry.h"
#include "indexFstUtil.h"
#include "indexInt.h"
#include "index_fst_automation.h"
#include "index_fst_counting_writer.h"
#include "index_fst_node.h"
#include "index_fst_registry.h"
#include "index_fst_util.h"
#define OUTPUT_PREFIX(a, b) ((a) > (b) ? (b) : (a)
...
...
source/libs/index/inc/index
_fst_a
utomation.h
→
source/libs/index/inc/index
FstA
utomation.h
浏览文件 @
5b2d664d
...
...
@@ -19,8 +19,8 @@
extern
"C"
{
#endif
#include "indexFstUtil.h"
#include "indexInt.h"
#include "index_fst_util.h"
typedef
struct
AutomationCtx
AutomationCtx
;
...
...
source/libs/index/inc/index
_fst_c
ommon.h
→
source/libs/index/inc/index
FstC
ommon.h
浏览文件 @
5b2d664d
文件已移动
source/libs/index/inc/index
_fst_counting_w
riter.h
→
source/libs/index/inc/index
FstCountingW
riter.h
浏览文件 @
5b2d664d
文件已移动
source/libs/index/inc/index
_fst_n
ode.h
→
source/libs/index/inc/index
FstN
ode.h
浏览文件 @
5b2d664d
...
...
@@ -20,9 +20,9 @@
extern
"C"
{
#endif
#include "indexFstCountingWriter.h"
#include "indexFstUtil.h"
#include "indexInt.h"
#include "index_fst_counting_writer.h"
#include "index_fst_util.h"
#define FST_BUILDER_NODE_IS_FINAL(bn) (bn->isFinal)
#define FST_BUILDER_NODE_TRANS_ISEMPTY(bn) (taosArrayGetSize(bn->trans) == 0)
...
...
source/libs/index/inc/index
_fst_r
egistry.h
→
source/libs/index/inc/index
FstR
egistry.h
浏览文件 @
5b2d664d
...
...
@@ -19,9 +19,9 @@
extern
"C"
{
#endif
#include "indexFstNode.h"
#include "indexFstUtil.h"
#include "indexInt.h"
#include "index_fst_node.h"
#include "index_fst_util.h"
typedef
struct
FstRegistryCell
{
CompiledAddr
addr
;
...
...
source/libs/index/inc/index
_fst_u
til.h
→
source/libs/index/inc/index
FstU
til.h
浏览文件 @
5b2d664d
...
...
@@ -20,8 +20,8 @@
extern
"C"
{
#endif
#include "indexFstCommon.h"
#include "indexInt.h"
#include "index_fst_common.h"
typedef
uint64_t
FstType
;
typedef
uint64_t
CompiledAddr
;
...
...
source/libs/
scalar/inc/sclfunc
.h
→
source/libs/
index/inc/indexSparse
.h
浏览文件 @
5b2d664d
...
...
@@ -12,21 +12,32 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef TDENGINE_TSCALARFUNCTION_H
#define TDENGINE_TSCALARFUNCTION_H
#ifndef _TD_INDEX_SPARSE_H_
#define _TD_INDEX_SPARSE_H_
#include "tarray.h"
#ifdef __cplusplus
extern
"C"
{
#endif
#include "function.h"
#include "scalar.h"
typedef
struct
FstSparseSet
{
SArray
*
dense
;
SArray
*
sparse
;
int32_t
size
;
}
FstSparseSet
;
FstSparseSet
*
sparSetCreate
(
int32_t
sz
);
void
sparSetDestroy
(
FstSparseSet
*
s
);
uint32_t
sparSetLen
(
FstSparseSet
*
ss
);
uint32_t
sparSetAdd
(
FstSparseSet
*
ss
,
uint32_t
ip
);
uint32_t
sparSetGet
(
FstSparseSet
*
ss
,
uint32_t
i
);
bool
sparSetContains
(
FstSparseSet
*
ss
,
uint32_t
ip
);
void
sparSetClear
(
FstSparseSet
*
ss
);
#ifdef __cplusplus
}
#endif
#endif
// TDENGINE_TSCALARFUNCTION_H
#endif
source/libs/index/inc/index
_t
file.h
→
source/libs/index/inc/index
T
file.h
浏览文件 @
5b2d664d
...
...
@@ -15,11 +15,11 @@
#ifndef __INDEX_TFILE_H__
#define __INDEX_TFILE_H__
#include "indexFst.h"
#include "indexFstCountingWriter.h"
#include "indexInt.h"
#include "index_fst.h"
#include "index_fst_counting_writer.h"
#include "index_tfile.h"
#include "index_util.h"
#include "indexTfile.h"
#include "indexUtil.h"
#include "tlockfree.h"
#ifdef __cplusplus
...
...
source/libs/index/inc/index
_u
til.h
→
source/libs/index/inc/index
U
til.h
浏览文件 @
5b2d664d
文件已移动
source/libs/index/src/index.c
浏览文件 @
5b2d664d
...
...
@@ -14,11 +14,11 @@
*/
#include "index.h"
#include "indexCache.h"
#include "indexComm.h"
#include "indexInt.h"
#include "index_cache.h"
#include "index_comm.h"
#include "index_tfile.h"
#include "index_util.h"
#include "indexTfile.h"
#include "indexUtil.h"
#include "tdef.h"
#include "tsched.h"
...
...
@@ -236,11 +236,11 @@ int indexDelete(SIndex* index, SIndexMultiTermQuery* query) {
return
1
;
}
int
indexRebuild
(
SIndex
*
index
,
SIndexOpts
*
opts
){
int
indexRebuild
(
SIndex
*
index
,
SIndexOpts
*
opts
)
{
#ifdef USE_INVERTED_INDEX
#endif
return
0
;
return
0
;
}
SIndexOpts
*
indexOptsCreate
()
{
...
...
source/libs/index/src/index
_c
ache.c
→
source/libs/index/src/index
C
ache.c
浏览文件 @
5b2d664d
...
...
@@ -13,9 +13,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "index
_c
ache.h"
#include "index
_c
omm.h"
#include "index
_u
til.h"
#include "index
C
ache.h"
#include "index
C
omm.h"
#include "index
U
til.h"
#include "tcompare.h"
#include "tsched.h"
...
...
source/libs/index/src/index
_c
omm.c
→
source/libs/index/src/index
C
omm.c
浏览文件 @
5b2d664d
文件已移动
source/libs/index/src/index
_f
st.c
→
source/libs/index/src/index
F
st.c
浏览文件 @
5b2d664d
...
...
@@ -13,9 +13,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "index_fst.h"
#include "indexFst.h"
#include "indexFstAutomation.h"
#include "indexInt.h"
#include "index_fst_automation.h"
#include "tchecksum.h"
#include "tcoding.h"
...
...
source/libs/index/src/index
_fst_a
utomation.c
→
source/libs/index/src/index
FstA
utomation.c
浏览文件 @
5b2d664d
...
...
@@ -13,7 +13,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "index
_fst_a
utomation.h"
#include "index
FstA
utomation.h"
StartWithStateValue
*
startWithStateValueCreate
(
StartWithStateKind
kind
,
ValueType
ty
,
void
*
val
)
{
StartWithStateValue
*
sv
=
taosMemoryCalloc
(
1
,
sizeof
(
StartWithStateValue
));
...
...
source/libs/index/src/index
_fst_c
ommon.c
→
source/libs/index/src/index
FstC
ommon.c
浏览文件 @
5b2d664d
...
...
@@ -12,7 +12,7 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "index
_fst_c
ommon.h"
#include "index
FstC
ommon.h"
const
uint8_t
COMMON_INPUTS
[]
=
{
84
,
// '\x00'
...
...
@@ -274,20 +274,23 @@ const uint8_t COMMON_INPUTS[] = {
};
const
char
COMMON_INPUTS_INV
[]
=
{
't'
,
'e'
,
'/'
,
'o'
,
'a'
,
's'
,
'r'
,
'i'
,
'p'
,
'c'
,
'n'
,
'w'
,
'.'
,
'h'
,
'l'
,
'm'
,
'-'
,
'd'
,
'u'
,
'0'
,
'1'
,
'2'
,
'g'
,
'='
,
':'
,
'b'
,
'f'
,
'3'
,
'y'
,
'5'
,
'&'
,
'_'
,
'4'
,
'v'
,
'9'
,
'6'
,
'7'
,
'8'
,
'k'
,
'%'
,
'?'
,
'x'
,
'C'
,
'D'
,
'A'
,
'S'
,
'F'
,
'I'
,
'B'
,
'E'
,
'j'
,
'P'
,
'T'
,
'z'
,
'R'
,
'N'
,
'M'
,
'+'
,
'L'
,
'O'
,
'q'
,
'H'
,
'G'
,
'W'
,
'U'
,
'V'
,
','
,
'Y'
,
'K'
,
'J'
,
'Z'
,
'X'
,
'Q'
,
';'
,
')'
,
'('
,
'~'
,
'['
,
']'
,
'$'
,
'!'
,
'\''
,
'*'
,
'@'
,
'\x00'
,
'\x01'
,
'\x02'
,
'\x03'
,
'\x04'
,
'\x05'
,
'\x06'
,
'\x07'
,
'\x08'
,
'\t'
,
'\n'
,
'\x0b'
,
'\x0c'
,
'\r'
,
'\x0e'
,
'\x0f'
,
'\x10'
,
'\x11'
,
'\x12'
,
'\x13'
,
'\x14'
,
'\x15'
,
'\x16'
,
'\x17'
,
'\x18'
,
'\x19'
,
'\x1a'
,
'\x1b'
,
'\x1c'
,
'\x1d'
,
'\x1e'
,
'\x1f'
,
' '
,
'"'
,
'#'
,
'<'
,
'>'
,
'\\'
,
'^'
,
'`'
,
'{'
,
'|'
,
'}'
,
'\x7f'
,
'\x80'
,
'\x81'
,
'\x82'
,
'\x83'
,
'\x84'
,
'\x85'
,
'\x86'
,
'\x87'
,
'\x88'
,
'\x89'
,
'\x8a'
,
'\x8b'
,
'\x8c'
,
'\x8d'
,
'\x8e'
,
'\x8f'
,
'\x90'
,
'\x91'
,
'\x92'
,
'\x93'
,
'\x94'
,
'\x95'
,
'\x96'
,
'\x97'
,
'\x98'
,
'\x99'
,
'\x9a'
,
'\x9b'
,
'\x9c'
,
'\x9d'
,
'\x9e'
,
'\x9f'
,
'\xa0'
,
'\xa1'
,
'\xa2'
,
'\xa3'
,
'\xa4'
,
'\xa5'
,
'\xa6'
,
'\xa7'
,
'\xa8'
,
'\xa9'
,
'\xaa'
,
'\xab'
,
'\xac'
,
'\xad'
,
'\xae'
,
'\xaf'
,
'\xb0'
,
'\xb1'
,
'\xb2'
,
'\xb3'
,
'\xb4'
,
'\xb5'
,
'\xb6'
,
'\xb7'
,
'\xb8'
,
'\xb9'
,
'\xba'
,
'\xbb'
,
'\xbc'
,
'\xbd'
,
'\xbe'
,
'\xbf'
,
'\xc0'
,
'\xc1'
,
'\xc2'
,
'\xc3'
,
'\xc4'
,
'\xc5'
,
'\xc6'
,
'\xc7'
,
'\xc8'
,
'\xc9'
,
'\xca'
,
'\xcb'
,
'\xcc'
,
'\xcd'
,
'\xce'
,
'\xcf'
,
'\xd0'
,
'\xd1'
,
'\xd2'
,
'\xd3'
,
'\xd4'
,
'\xd5'
,
'\xd6'
,
'\xd7'
,
'\xd8'
,
'\xd9'
,
'\xda'
,
'\xdb'
,
'\xdc'
,
'\xdd'
,
'\xde'
,
'\xdf'
,
'\xe0'
,
'\xe1'
,
'\xe2'
,
'\xe3'
,
'\xe4'
,
'\xe5'
,
'\xe6'
,
'\xe7'
,
'\xe8'
,
'\xe9'
,
'\xea'
,
'\xeb'
,
'\xec'
,
'\xed'
,
'\xee'
,
'\xef'
,
'\xf0'
,
'\xf1'
,
'\xf2'
,
'\xf3'
,
'\xf4'
,
'\xf5'
,
'\xf6'
,
'\xf7'
,
'\xf8'
,
'\xf9'
,
'\xfa'
,
'\xfb'
,
'\xfc'
,
'\xfd'
,
'\xfe'
,
'\xff'
,
't'
,
'e'
,
'/'
,
'o'
,
'a'
,
's'
,
'r'
,
'i'
,
'p'
,
'c'
,
'n'
,
'w'
,
'.'
,
'h'
,
'l'
,
'm'
,
'-'
,
'd'
,
'u'
,
'0'
,
'1'
,
'2'
,
'g'
,
'='
,
':'
,
'b'
,
'f'
,
'3'
,
'y'
,
'5'
,
'&'
,
'_'
,
'4'
,
'v'
,
'9'
,
'6'
,
'7'
,
'8'
,
'k'
,
'%'
,
'?'
,
'x'
,
'C'
,
'D'
,
'A'
,
'S'
,
'F'
,
'I'
,
'B'
,
'E'
,
'j'
,
'P'
,
'T'
,
'z'
,
'R'
,
'N'
,
'M'
,
'+'
,
'L'
,
'O'
,
'q'
,
'H'
,
'G'
,
'W'
,
'U'
,
'V'
,
','
,
'Y'
,
'K'
,
'J'
,
'Z'
,
'X'
,
'Q'
,
';'
,
')'
,
'('
,
'~'
,
'['
,
']'
,
'$'
,
'!'
,
'\''
,
'*'
,
'@'
,
'\x00'
,
'\x01'
,
'\x02'
,
'\x03'
,
'\x04'
,
'\x05'
,
'\x06'
,
'\x07'
,
'\x08'
,
'\t'
,
'\n'
,
'\x0b'
,
'\x0c'
,
'\r'
,
'\x0e'
,
'\x0f'
,
'\x10'
,
'\x11'
,
'\x12'
,
'\x13'
,
'\x14'
,
'\x15'
,
'\x16'
,
'\x17'
,
'\x18'
,
'\x19'
,
'\x1a'
,
'\x1b'
,
'\x1c'
,
'\x1d'
,
'\x1e'
,
'\x1f'
,
' '
,
'"'
,
'#'
,
'<'
,
'>'
,
'\\'
,
'^'
,
'`'
,
'{'
,
'|'
,
'}'
,
'\x7f'
,
'\x80'
,
'\x81'
,
'\x82'
,
'\x83'
,
'\x84'
,
'\x85'
,
'\x86'
,
'\x87'
,
'\x88'
,
'\x89'
,
'\x8a'
,
'\x8b'
,
'\x8c'
,
'\x8d'
,
'\x8e'
,
'\x8f'
,
'\x90'
,
'\x91'
,
'\x92'
,
'\x93'
,
'\x94'
,
'\x95'
,
'\x96'
,
'\x97'
,
'\x98'
,
'\x99'
,
'\x9a'
,
'\x9b'
,
'\x9c'
,
'\x9d'
,
'\x9e'
,
'\x9f'
,
'\xa0'
,
'\xa1'
,
'\xa2'
,
'\xa3'
,
'\xa4'
,
'\xa5'
,
'\xa6'
,
'\xa7'
,
'\xa8'
,
'\xa9'
,
'\xaa'
,
'\xab'
,
'\xac'
,
'\xad'
,
'\xae'
,
'\xaf'
,
'\xb0'
,
'\xb1'
,
'\xb2'
,
'\xb3'
,
'\xb4'
,
'\xb5'
,
'\xb6'
,
'\xb7'
,
'\xb8'
,
'\xb9'
,
'\xba'
,
'\xbb'
,
'\xbc'
,
'\xbd'
,
'\xbe'
,
'\xbf'
,
'\xc0'
,
'\xc1'
,
'\xc2'
,
'\xc3'
,
'\xc4'
,
'\xc5'
,
'\xc6'
,
'\xc7'
,
'\xc8'
,
'\xc9'
,
'\xca'
,
'\xcb'
,
'\xcc'
,
'\xcd'
,
'\xce'
,
'\xcf'
,
'\xd0'
,
'\xd1'
,
'\xd2'
,
'\xd3'
,
'\xd4'
,
'\xd5'
,
'\xd6'
,
'\xd7'
,
'\xd8'
,
'\xd9'
,
'\xda'
,
'\xdb'
,
'\xdc'
,
'\xdd'
,
'\xde'
,
'\xdf'
,
'\xe0'
,
'\xe1'
,
'\xe2'
,
'\xe3'
,
'\xe4'
,
'\xe5'
,
'\xe6'
,
'\xe7'
,
'\xe8'
,
'\xe9'
,
'\xea'
,
'\xeb'
,
'\xec'
,
'\xed'
,
'\xee'
,
'\xef'
,
'\xf0'
,
'\xf1'
,
'\xf2'
,
'\xf3'
,
'\xf4'
,
'\xf5'
,
'\xf6'
,
'\xf7'
,
'\xf8'
,
'\xf9'
,
'\xfa'
,
'\xfb'
,
'\xfc'
,
'\xfd'
,
'\xfe'
,
'\xff'
,
};
source/libs/index/src/index
_fst_counting_w
riter.c
→
source/libs/index/src/index
FstCountingW
riter.c
浏览文件 @
5b2d664d
...
...
@@ -13,10 +13,10 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "
os
.h"
#include "index
_fst_counting_writer
.h"
#include "
indexFstCountingWriter
.h"
#include "index
FstUtil
.h"
#include "indexInt.h"
#include "
index_fst_util
.h"
#include "
os
.h"
#include "tutil.h"
static
int
writeCtxDoWrite
(
WriterCtx
*
ctx
,
uint8_t
*
buf
,
int
len
)
{
...
...
@@ -82,7 +82,9 @@ static int writeCtxDoFlush(WriterCtx* ctx) {
WriterCtx
*
writerCtxCreate
(
WriterType
type
,
const
char
*
path
,
bool
readOnly
,
int32_t
capacity
)
{
WriterCtx
*
ctx
=
taosMemoryCalloc
(
1
,
sizeof
(
WriterCtx
));
if
(
ctx
==
NULL
)
{
return
NULL
;
}
if
(
ctx
==
NULL
)
{
return
NULL
;
}
ctx
->
type
=
type
;
if
(
ctx
->
type
==
TFile
)
{
...
...
@@ -126,7 +128,9 @@ WriterCtx* writerCtxCreate(WriterType type, const char* path, bool readOnly, int
return
ctx
;
END:
if
(
ctx
->
type
==
TMemory
)
{
taosMemoryFree
(
ctx
->
mem
.
buf
);
}
if
(
ctx
->
type
==
TMemory
)
{
taosMemoryFree
(
ctx
->
mem
.
buf
);
}
taosMemoryFree
(
ctx
);
return
NULL
;
}
...
...
@@ -148,14 +152,18 @@ void writerCtxDestroy(WriterCtx* ctx, bool remove) {
// stat(ctx->file.buf, &fstat);
// indexError("write file size: %d", (int)(fstat.st_size));
}
if
(
remove
)
{
unlink
(
ctx
->
file
.
buf
);
}
if
(
remove
)
{
unlink
(
ctx
->
file
.
buf
);
}
}
taosMemoryFree
(
ctx
);
}
FstCountingWriter
*
fstCountingWriterCreate
(
void
*
wrt
)
{
FstCountingWriter
*
cw
=
taosMemoryCalloc
(
1
,
sizeof
(
FstCountingWriter
));
if
(
cw
==
NULL
)
{
return
NULL
;
}
if
(
cw
==
NULL
)
{
return
NULL
;
}
cw
->
wrt
=
wrt
;
//(void *)(writerCtxCreate(TFile, readOnly));
...
...
@@ -169,7 +177,9 @@ void fstCountingWriterDestroy(FstCountingWriter* cw) {
}
int
fstCountingWriterWrite
(
FstCountingWriter
*
write
,
uint8_t
*
buf
,
uint32_t
len
)
{
if
(
write
==
NULL
)
{
return
0
;
}
if
(
write
==
NULL
)
{
return
0
;
}
// update checksum
// write data to file/socket or mem
WriterCtx
*
ctx
=
write
->
wrt
;
...
...
@@ -182,7 +192,9 @@ int fstCountingWriterWrite(FstCountingWriter* write, uint8_t* buf, uint32_t len)
return
len
;
}
int
fstCountingWriterRead
(
FstCountingWriter
*
write
,
uint8_t
*
buf
,
uint32_t
len
)
{
if
(
write
==
NULL
)
{
return
0
;
}
if
(
write
==
NULL
)
{
return
0
;
}
WriterCtx
*
ctx
=
write
->
wrt
;
int
nRead
=
ctx
->
read
(
ctx
,
buf
,
len
);
// assert(nRead == len);
...
...
source/libs/index/src/index
_fst_n
ode.c
→
source/libs/index/src/index
FstN
ode.c
浏览文件 @
5b2d664d
...
...
@@ -12,7 +12,7 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "index
_fst_n
ode.h"
#include "index
FstN
ode.h"
FstBuilderNode
*
fstBuilderNodeDefault
()
{
FstBuilderNode
*
bn
=
taosMemoryMalloc
(
sizeof
(
FstBuilderNode
));
...
...
@@ -22,31 +22,45 @@ FstBuilderNode* fstBuilderNodeDefault() {
return
bn
;
}
void
fstBuilderNodeDestroy
(
FstBuilderNode
*
node
)
{
if
(
node
==
NULL
)
{
return
;
}
if
(
node
==
NULL
)
{
return
;
}
taosArrayDestroy
(
node
->
trans
);
taosMemoryFree
(
node
);
}
bool
fstBuilderNodeEqual
(
FstBuilderNode
*
n1
,
FstBuilderNode
*
n2
)
{
if
(
n1
==
n2
)
{
return
true
;
}
if
(
n1
==
NULL
||
n2
==
NULL
)
{
return
false
;
}
if
(
n1
==
n2
)
{
return
true
;
}
if
(
n1
==
NULL
||
n2
==
NULL
)
{
return
false
;
}
if
(
n1
->
isFinal
!=
n2
->
isFinal
||
n1
->
finalOutput
!=
n2
->
finalOutput
)
{
return
false
;
}
if
(
n1
->
isFinal
!=
n2
->
isFinal
||
n1
->
finalOutput
!=
n2
->
finalOutput
)
{
return
false
;
}
size_t
s1
=
n1
->
trans
?
taosArrayGetSize
(
n1
->
trans
)
:
0
;
size_t
s2
=
n2
->
trans
?
taosArrayGetSize
(
n2
->
trans
)
:
0
;
if
(
s1
!=
s2
)
{
return
false
;
}
if
(
s1
!=
s2
)
{
return
false
;
}
for
(
size_t
i
=
0
;
i
<
s1
;
i
++
)
{
FstTransition
*
t1
=
taosArrayGet
(
n1
->
trans
,
i
);
FstTransition
*
t2
=
taosArrayGet
(
n2
->
trans
,
i
);
if
(
t1
->
inp
!=
t2
->
inp
||
t1
->
out
!=
t2
->
out
||
t1
->
addr
!=
t2
->
addr
)
{
return
false
;
}
if
(
t1
->
inp
!=
t2
->
inp
||
t1
->
out
!=
t2
->
out
||
t1
->
addr
!=
t2
->
addr
)
{
return
false
;
}
}
return
true
;
}
FstBuilderNode
*
fstBuilderNodeClone
(
FstBuilderNode
*
src
)
{
FstBuilderNode
*
node
=
taosMemoryMalloc
(
sizeof
(
FstBuilderNode
));
if
(
node
==
NULL
)
{
return
NULL
;
}
if
(
node
==
NULL
)
{
return
NULL
;
}
//
size_t
sz
=
taosArrayGetSize
(
src
->
trans
);
...
...
@@ -64,7 +78,9 @@ FstBuilderNode* fstBuilderNodeClone(FstBuilderNode* src) {
}
// not destroy src, User's bussiness
void
fstBuilderNodeCloneFrom
(
FstBuilderNode
*
dst
,
FstBuilderNode
*
src
)
{
if
(
dst
==
NULL
||
src
==
NULL
)
{
return
;
}
if
(
dst
==
NULL
||
src
==
NULL
)
{
return
;
}
dst
->
isFinal
=
src
->
isFinal
;
dst
->
finalOutput
=
src
->
finalOutput
;
...
...
source/libs/index/src/index
_fst_registry
.c
→
source/libs/index/src/index
FstRegister
.c
浏览文件 @
5b2d664d
...
...
@@ -13,8 +13,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "indexFstRegistry.h"
#include "os.h"
#include "index_fst_registry.h"
uint64_t
fstRegistryHash
(
FstRegistry
*
registry
,
FstBuilderNode
*
bNode
)
{
// TODO(yihaoDeng): refactor later
...
...
@@ -35,7 +35,9 @@ uint64_t fstRegistryHash(FstRegistry* registry, FstBuilderNode* bNode) {
}
static
void
fstRegistryCellSwap
(
SArray
*
arr
,
uint32_t
a
,
uint32_t
b
)
{
size_t
sz
=
taosArrayGetSize
(
arr
);
if
(
a
>=
sz
||
b
>=
sz
)
{
return
;
}
if
(
a
>=
sz
||
b
>=
sz
)
{
return
;
}
FstRegistryCell
*
cell1
=
(
FstRegistryCell
*
)
taosArrayGet
(
arr
,
a
);
FstRegistryCell
*
cell2
=
(
FstRegistryCell
*
)
taosArrayGet
(
arr
,
b
);
...
...
@@ -52,7 +54,9 @@ static void fstRegistryCellSwap(SArray* arr, uint32_t a, uint32_t b) {
static
void
fstRegistryCellPromote
(
SArray
*
arr
,
uint32_t
start
,
uint32_t
end
)
{
size_t
sz
=
taosArrayGetSize
(
arr
);
if
(
start
>=
sz
&&
end
>=
sz
)
{
return
;
}
if
(
start
>=
sz
&&
end
>=
sz
)
{
return
;
}
assert
(
start
>=
end
);
...
...
@@ -66,7 +70,9 @@ static void fstRegistryCellPromote(SArray* arr, uint32_t start, uint32_t end) {
FstRegistry
*
fstRegistryCreate
(
uint64_t
tableSize
,
uint64_t
mruSize
)
{
FstRegistry
*
registry
=
taosMemoryMalloc
(
sizeof
(
FstRegistry
));
if
(
registry
==
NULL
)
{
return
NULL
;
}
if
(
registry
==
NULL
)
{
return
NULL
;
}
uint64_t
nCells
=
tableSize
*
mruSize
;
SArray
*
tb
=
(
SArray
*
)
taosArrayInit
(
nCells
,
sizeof
(
FstRegistryCell
));
...
...
@@ -87,7 +93,9 @@ FstRegistry* fstRegistryCreate(uint64_t tableSize, uint64_t mruSize) {
}
void
fstRegistryDestroy
(
FstRegistry
*
registry
)
{
if
(
registry
==
NULL
)
{
return
;
}
if
(
registry
==
NULL
)
{
return
;
}
SArray
*
tb
=
registry
->
table
;
size_t
sz
=
taosArrayGetSize
(
tb
);
...
...
@@ -100,7 +108,9 @@ void fstRegistryDestroy(FstRegistry* registry) {
}
FstRegistryEntry
*
fstRegistryGetEntry
(
FstRegistry
*
registry
,
FstBuilderNode
*
bNode
)
{
if
(
taosArrayGetSize
(
registry
->
table
)
<=
0
)
{
return
NULL
;
}
if
(
taosArrayGetSize
(
registry
->
table
)
<=
0
)
{
return
NULL
;
}
uint64_t
bucket
=
fstRegistryHash
(
registry
,
bNode
);
uint64_t
start
=
registry
->
mruSize
*
bucket
;
uint64_t
end
=
start
+
registry
->
mruSize
;
...
...
@@ -165,6 +175,4 @@ FstRegistryEntry* fstRegistryGetEntry(FstRegistry* registry, FstBuilderNode* bNo
}
return
entry
;
}
void
fstRegistryEntryDestroy
(
FstRegistryEntry
*
entry
)
{
taosMemoryFree
(
entry
);
}
void
fstRegistryEntryDestroy
(
FstRegistryEntry
*
entry
)
{
taosMemoryFree
(
entry
);
}
source/libs/index/src/index
_fst_u
til.c
→
source/libs/index/src/index
FstU
til.c
浏览文件 @
5b2d664d
...
...
@@ -12,8 +12,8 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "index
_fst_u
til.h"
#include "index
_fst_c
ommon.h"
#include "index
FstU
til.h"
#include "index
FstC
ommon.h"
// A sentinel value used to indicate an empty final state
const
CompiledAddr
EMPTY_ADDRESS
=
0
;
...
...
source/libs/index/src/index
_j
son.c
→
source/libs/index/src/index
J
son.c
浏览文件 @
5b2d664d
文件已移动
source/
dnode/mgmt/main/src/dndUtil
.c
→
source/
libs/index/src/indexSparse
.c
浏览文件 @
5b2d664d
...
...
@@ -13,43 +13,59 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#define _DEFAULT_SOURCE
#include "dndMain.h"
#include "indexSparse.h"
void
dndGenerateGrant
(
)
{
#if 0
grantParseParameter();
#endif
}
FstSparseSet
*
sparSetCreate
(
int32_t
sz
)
{
FstSparseSet
*
ss
=
taosMemoryCalloc
(
1
,
sizeof
(
FstSparseSet
));
if
(
ss
=
NULL
)
{
return
NULL
;
}
void
dndPrintVersion
()
{
#ifdef TD_ENTERPRISE
char
*
releaseName
=
"enterprise"
;
#else
char
*
releaseName
=
"community"
;
#endif
printf
(
"%s version: %s compatible_version: %s
\n
"
,
releaseName
,
version
,
compatible_version
);
printf
(
"gitinfo: %s
\n
"
,
gitinfo
);
printf
(
"builuInfo: %s
\n
"
,
buildinfo
);
ss
->
dense
=
taosArrayInit
(
sz
,
sizeof
(
uint32_t
));
ss
->
sparse
=
taosArrayInit
(
sz
,
sizeof
(
uint32_t
));
ss
->
size
=
sz
;
return
ss
;
}
void
dndDumpCfg
()
{
SConfig
*
pCfg
=
taosGetCfg
();
cfgDumpCfg
(
pCfg
,
0
,
1
);
void
sparSetDestroy
(
FstSparseSet
*
ss
)
{
if
(
ss
==
NULL
)
{
return
;
}
taosArrayDestroy
(
ss
->
dense
);
taosArrayDestroy
(
ss
->
sparse
);
taosMemoryFree
(
ss
);
}
SDnodeOpt
dndGetOpt
()
{
SConfig
*
pCfg
=
taosGetCfg
();
SDnodeOpt
option
=
{
0
};
option
.
numOfSupportVnodes
=
cfgGetItem
(
pCfg
,
"supportVnodes"
)
->
i32
;
tstrncpy
(
option
.
dataDir
,
tsDataDir
,
sizeof
(
option
.
dataDir
));
tstrncpy
(
option
.
firstEp
,
tsFirst
,
sizeof
(
option
.
firstEp
));
tstrncpy
(
option
.
secondEp
,
tsSecond
,
sizeof
(
option
.
firstEp
));
option
.
serverPort
=
tsServerPort
;
tstrncpy
(
option
.
localFqdn
,
tsLocalFqdn
,
sizeof
(
option
.
localFqdn
));
snprintf
(
option
.
localEp
,
sizeof
(
option
.
localEp
),
"%s:%u"
,
option
.
localFqdn
,
option
.
serverPort
);
option
.
pDisks
=
tsDiskCfg
;
option
.
numOfDisks
=
tsDiskCfgNum
;
return
option
;
uint32_t
sparSetLen
(
FstSparseSet
*
ss
)
{
return
ss
==
NULL
?
0
:
ss
->
size
;
}
uint32_t
sparSetAdd
(
FstSparseSet
*
ss
,
uint32_t
ip
)
{
if
(
ss
==
NULL
)
{
return
0
;
}
uint32_t
i
=
ss
->
size
;
taosArraySet
(
ss
->
dense
,
i
,
&
ip
);
taosArraySet
(
ss
->
sparse
,
ip
,
&
i
);
ss
->
size
+=
1
;
return
i
;
}
uint32_t
sparSetGet
(
FstSparseSet
*
ss
,
uint32_t
i
)
{
if
(
i
>=
taosArrayGetSize
(
ss
->
dense
))
{
return
0
;
}
uint32_t
*
v
=
taosArrayGet
(
ss
->
dense
,
i
);
return
*
v
;
}
bool
sparSetContains
(
FstSparseSet
*
ss
,
uint32_t
ip
)
{
if
(
ip
>=
taosArrayGetSize
(
ss
->
sparse
))
{
return
false
;
}
uint32_t
i
=
*
(
uint32_t
*
)
taosArrayGet
(
ss
->
sparse
,
ip
);
if
(
i
>=
taosArrayGetSize
(
ss
->
dense
))
{
return
false
;
}
uint32_t
v
=
*
(
uint32_t
*
)
taosArrayGet
(
ss
->
dense
,
i
);
return
v
==
ip
;
}
void
sparSetClear
(
FstSparseSet
*
ss
)
{
if
(
ss
==
NULL
)
{
return
;
}
ss
->
size
=
0
;
}
source/libs/index/src/index
_t
file.c
→
source/libs/index/src/index
T
file.c
浏览文件 @
5b2d664d
...
...
@@ -13,12 +13,12 @@ p *
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "index
_t
file.h"
#include "index
T
file.h"
#include "index.h"
#include "index
_c
omm.h"
#include "index
_f
st.h"
#include "index
_fst_counting_w
riter.h"
#include "index
_u
til.h"
#include "index
C
omm.h"
#include "index
F
st.h"
#include "index
FstCountingW
riter.h"
#include "index
U
til.h"
#include "taosdef.h"
#include "tcoding.h"
#include "tcompare.h"
...
...
source/libs/index/src/index
_u
til.c
→
source/libs/index/src/index
U
til.c
浏览文件 @
5b2d664d
...
...
@@ -12,7 +12,7 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "index
_u
til.h"
#include "index
U
til.h"
#include "index.h"
#include "tcompare.h"
...
...
source/libs/index/test/fstTest.cc
浏览文件 @
5b2d664d
...
...
@@ -5,12 +5,12 @@
#include <thread>
#include <vector>
#include "index.h"
#include "indexCache.h"
#include "indexFst.h"
#include "indexFstCountingWriter.h"
#include "indexFstUtil.h"
#include "indexInt.h"
#include "index_cache.h"
#include "index_fst.h"
#include "index_fst_counting_writer.h"
#include "index_fst_util.h"
#include "index_tfile.h"
#include "indexTfile.h"
#include "tskiplist.h"
#include "tutil.h"
void
*
callback
(
void
*
s
)
{
return
s
;
}
...
...
source/libs/index/test/fstUT.cc
浏览文件 @
5b2d664d
...
...
@@ -6,12 +6,12 @@
#include <thread>
#include <vector>
#include "index.h"
#include "indexCache.h"
#include "indexFst.h"
#include "indexFstCountingWriter.h"
#include "indexFstUtil.h"
#include "indexInt.h"
#include "index_cache.h"
#include "index_fst.h"
#include "index_fst_counting_writer.h"
#include "index_fst_util.h"
#include "index_tfile.h"
#include "indexTfile.h"
#include "tglobal.h"
#include "tlog.h"
#include "tskiplist.h"
...
...
source/libs/index/test/indexTests.cc
浏览文件 @
5b2d664d
...
...
@@ -18,13 +18,13 @@
#include <string>
#include <thread>
#include "index.h"
#include "indexCache.h"
#include "indexFst.h"
#include "indexFstCountingWriter.h"
#include "indexFstUtil.h"
#include "indexInt.h"
#include "index_cache.h"
#include "index_fst.h"
#include "index_fst_counting_writer.h"
#include "index_fst_util.h"
#include "index_tfile.h"
#include "index_util.h"
#include "indexTfile.h"
#include "indexUtil.h"
#include "tskiplist.h"
#include "tutil.h"
using
namespace
std
;
...
...
source/libs/index/test/jsonUT.cc
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
source/libs/index/test/utilUT.cc
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
source/libs/parser/inc/sql.y
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
source/libs/parser/src/parAstCreater.c
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
source/libs/parser/src/sql.c
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
source/libs/parser/test/parserAstTest.cpp
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
source/libs/qworker/inc/qworkerMsg.h
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
source/libs/qworker/src/qworker.c
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
source/libs/qworker/src/qworkerMsg.c
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
source/libs/scalar/src/sclfunc.c
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
source/libs/scalar/test/scalar/scalarTests.cpp
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
source/libs/stream/src/tstream.c
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
source/util/src/tprocess.c
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
tests/script/jenkins/basic.txt
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
tests/script/sh/deploy.sh
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
tests/script/sh/exec.sh
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
tests/script/tsim/parser/groupby-basic.sim
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
tests/script/tsim/testCaseSuite.sim
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
tests/script/tsim/tmq/basic1.sim
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
tests/test/c/tmqSim.c
浏览文件 @
5b2d664d
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录