Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
7bae3e3f
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1193
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
7bae3e3f
编写于
4月 29, 2022
作者:
X
Xiaoyu Wang
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/3.0' into feature/3.0_wxy
上级
022f5bfc
d65a6745
变更
96
展开全部
隐藏空白更改
内联
并排
Showing
96 changed file
with
2642 addition
and
1455 deletion
+2642
-1455
example/src/tmq.c
example/src/tmq.c
+5
-2
include/common/taosdef.h
include/common/taosdef.h
+7
-1
include/common/tmsg.h
include/common/tmsg.h
+31
-15
include/common/tmsgdef.h
include/common/tmsgdef.h
+2
-2
include/dnode/mnode/sdb/sdb.h
include/dnode/mnode/sdb/sdb.h
+2
-3
include/libs/nodes/querynodes.h
include/libs/nodes/querynodes.h
+2
-0
include/util/taoserror.h
include/util/taoserror.h
+3
-0
include/util/tencode.h
include/util/tencode.h
+3
-13
include/util/tskiplist.h
include/util/tskiplist.h
+12
-63
source/client/inc/clientStmt.h
source/client/inc/clientStmt.h
+14
-13
source/client/src/clientStmt.c
source/client/src/clientStmt.c
+44
-9
source/client/src/tmq.c
source/client/src/tmq.c
+17
-9
source/common/src/tmsg.c
source/common/src/tmsg.c
+116
-15
source/dnode/mgmt/implement/src/dmTransport.c
source/dnode/mgmt/implement/src/dmTransport.c
+43
-30
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
+3
-1
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
+13
-13
source/dnode/mnode/impl/inc/mndInt.h
source/dnode/mnode/impl/inc/mndInt.h
+1
-1
source/dnode/mnode/impl/src/mndMnode.c
source/dnode/mnode/impl/src/mndMnode.c
+1
-1
source/dnode/mnode/impl/src/mndStb.c
source/dnode/mnode/impl/src/mndStb.c
+19
-10
source/dnode/mnode/impl/test/sdb/sdbTest.cpp
source/dnode/mnode/impl/test/sdb/sdbTest.cpp
+652
-70
source/dnode/mnode/sdb/inc/sdbInt.h
source/dnode/mnode/sdb/inc/sdbInt.h
+0
-2
source/dnode/mnode/sdb/src/sdb.c
source/dnode/mnode/sdb/src/sdb.c
+6
-6
source/dnode/mnode/sdb/src/sdbFile.c
source/dnode/mnode/sdb/src/sdbFile.c
+18
-8
source/dnode/mnode/sdb/src/sdbHash.c
source/dnode/mnode/sdb/src/sdbHash.c
+16
-31
source/dnode/mnode/sdb/src/sdbRaw.c
source/dnode/mnode/sdb/src/sdbRaw.c
+5
-0
source/dnode/qnode/inc/qndInt.h
source/dnode/qnode/inc/qndInt.h
+1
-1
source/dnode/vnode/CMakeLists.txt
source/dnode/vnode/CMakeLists.txt
+0
-2
source/dnode/vnode/inc/vnode.h
source/dnode/vnode/inc/vnode.h
+13
-6
source/dnode/vnode/src/inc/meta.h
source/dnode/vnode/src/inc/meta.h
+0
-1
source/dnode/vnode/src/inc/tsdb.h
source/dnode/vnode/src/inc/tsdb.h
+1
-19
source/dnode/vnode/src/inc/vnodeInt.h
source/dnode/vnode/src/inc/vnodeInt.h
+24
-9
source/dnode/vnode/src/meta/metaOpen.c
source/dnode/vnode/src/meta/metaOpen.c
+10
-10
source/dnode/vnode/src/meta/metaQuery.c
source/dnode/vnode/src/meta/metaQuery.c
+32
-17
source/dnode/vnode/src/meta/metaTDBImpl.c
source/dnode/vnode/src/meta/metaTDBImpl.c
+15
-15
source/dnode/vnode/src/meta/metaTable.c
source/dnode/vnode/src/meta/metaTable.c
+48
-9
source/dnode/vnode/src/tsdb/tsdbCommit.c
source/dnode/vnode/src/tsdb/tsdbCommit.c
+1
-1
source/dnode/vnode/src/tsdb/tsdbOpen.c
source/dnode/vnode/src/tsdb/tsdbOpen.c
+28
-7
source/dnode/vnode/src/tsdb/tsdbRead.c
source/dnode/vnode/src/tsdb/tsdbRead.c
+28
-23
source/dnode/vnode/src/tsdb/tsdbReadImpl.c
source/dnode/vnode/src/tsdb/tsdbReadImpl.c
+3
-2
source/dnode/vnode/src/tsdb/tsdbScan.c
source/dnode/vnode/src/tsdb/tsdbScan.c
+0
-37
source/dnode/vnode/src/tsdb/tsdbSma.c
source/dnode/vnode/src/tsdb/tsdbSma.c
+7
-8
source/dnode/vnode/src/tsdb/tsdbTDBImpl.c
source/dnode/vnode/src/tsdb/tsdbTDBImpl.c
+4
-4
source/dnode/vnode/src/tsdb/tsdbWrite.c
source/dnode/vnode/src/tsdb/tsdbWrite.c
+4
-3
source/dnode/vnode/src/vnd/vnodeCfg.c
source/dnode/vnode/src/vnd/vnodeCfg.c
+36
-0
source/dnode/vnode/src/vnd/vnodeCommit.c
source/dnode/vnode/src/vnd/vnodeCommit.c
+5
-5
source/dnode/vnode/src/vnd/vnodeInt.c
source/dnode/vnode/src/vnd/vnodeInt.c
+0
-24
source/dnode/vnode/src/vnd/vnodeOpen.c
source/dnode/vnode/src/vnd/vnodeOpen.c
+37
-16
source/dnode/vnode/src/vnd/vnodeQuery.c
source/dnode/vnode/src/vnd/vnodeQuery.c
+0
-5
source/dnode/vnode/src/vnd/vnodeSvr.c
source/dnode/vnode/src/vnd/vnodeSvr.c
+43
-14
source/libs/command/inc/commandInt.h
source/libs/command/inc/commandInt.h
+1
-2
source/libs/command/src/explain.c
source/libs/command/src/explain.c
+1
-0
source/libs/executor/inc/executorimpl.h
source/libs/executor/inc/executorimpl.h
+2
-1
source/libs/executor/src/executorimpl.c
source/libs/executor/src/executorimpl.c
+2
-2
source/libs/executor/src/scanoperator.c
source/libs/executor/src/scanoperator.c
+7
-3
source/libs/nodes/src/nodesCodeFuncs.c
source/libs/nodes/src/nodesCodeFuncs.c
+28
-0
source/libs/nodes/src/nodesUtilFuncs.c
source/libs/nodes/src/nodesUtilFuncs.c
+63
-4
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+202
-23
source/libs/parser/src/parUtil.c
source/libs/parser/src/parUtil.c
+2
-0
source/libs/planner/src/planLogicCreater.c
source/libs/planner/src/planLogicCreater.c
+10
-3
source/libs/planner/src/planOptimizer.c
source/libs/planner/src/planOptimizer.c
+2
-0
source/libs/planner/src/planner.c
source/libs/planner/src/planner.c
+27
-5
source/libs/qworker/inc/qworkerInt.h
source/libs/qworker/inc/qworkerInt.h
+30
-6
source/libs/qworker/inc/qworkerMsg.h
source/libs/qworker/inc/qworkerMsg.h
+3
-3
source/libs/qworker/src/qworker.c
source/libs/qworker/src/qworker.c
+145
-42
source/libs/qworker/src/qworkerMsg.c
source/libs/qworker/src/qworkerMsg.c
+9
-9
source/libs/scalar/src/filter.c
source/libs/scalar/src/filter.c
+1
-0
source/libs/scalar/src/scalar.c
source/libs/scalar/src/scalar.c
+12
-4
source/libs/scheduler/inc/schedulerInt.h
source/libs/scheduler/inc/schedulerInt.h
+3
-0
source/libs/scheduler/src/scheduler.c
source/libs/scheduler/src/scheduler.c
+77
-19
source/libs/tdb/inc/tdb.h
source/libs/tdb/inc/tdb.h
+59
-0
source/libs/tdb/src/db/tdbBtree.c
source/libs/tdb/src/db/tdbBtree.c
+111
-69
source/libs/tdb/src/db/tdbDb.c
source/libs/tdb/src/db/tdbDb.c
+38
-19
source/libs/tdb/src/db/tdbEnv.c
source/libs/tdb/src/db/tdbEnv.c
+3
-8
source/libs/tdb/src/db/tdbOs.c
source/libs/tdb/src/db/tdbOs.c
+1
-1
source/libs/tdb/src/db/tdbPCache.c
source/libs/tdb/src/db/tdbPCache.c
+1
-1
source/libs/tdb/src/db/tdbUtil.c
source/libs/tdb/src/db/tdbUtil.c
+20
-0
source/libs/tdb/src/inc/tdbBtree.h
source/libs/tdb/src/inc/tdbBtree.h
+0
-60
source/libs/tdb/src/inc/tdbDb.h
source/libs/tdb/src/inc/tdbDb.h
+0
-44
source/libs/tdb/src/inc/tdbEnv.h
source/libs/tdb/src/inc/tdbEnv.h
+0
-48
source/libs/tdb/src/inc/tdbInt.h
source/libs/tdb/src/inc/tdbInt.h
+242
-54
source/libs/tdb/src/inc/tdbPCache.h
source/libs/tdb/src/inc/tdbPCache.h
+0
-59
source/libs/tdb/src/inc/tdbPage.h
source/libs/tdb/src/inc/tdbPage.h
+0
-149
source/libs/tdb/src/inc/tdbPager.h
source/libs/tdb/src/inc/tdbPager.h
+0
-54
source/libs/tdb/src/inc/tdbTxn.h
source/libs/tdb/src/inc/tdbTxn.h
+0
-31
source/libs/tdb/src/inc/tdbUtil.h
source/libs/tdb/src/inc/tdbUtil.h
+1
-21
source/libs/tdb/test/tdbTest.cpp
source/libs/tdb/test/tdbTest.cpp
+31
-31
source/libs/tdb/test/tdbUtilTest.cpp
source/libs/tdb/test/tdbUtilTest.cpp
+10
-10
source/libs/transport/src/trans.c
source/libs/transport/src/trans.c
+2
-12
source/libs/transport/src/transCli.c
source/libs/transport/src/transCli.c
+6
-3
source/libs/transport/src/transSrv.c
source/libs/transport/src/transSrv.c
+5
-3
source/util/src/terror.c
source/util/src/terror.c
+2
-0
source/util/src/thash.c
source/util/src/thash.c
+3
-0
source/util/src/tprocess.c
source/util/src/tprocess.c
+11
-9
tests/script/api/batchprepare.c
tests/script/api/batchprepare.c
+91
-81
tests/script/jenkins/basic.txt
tests/script/jenkins/basic.txt
+3
-3
tests/script/tsim/show/basic.sim
tests/script/tsim/show/basic.sim
+0
-3
未找到文件。
example/src/tmq.c
浏览文件 @
7bae3e3f
...
...
@@ -14,7 +14,9 @@
*/
#include <assert.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "taos.h"
...
...
@@ -24,7 +26,7 @@ static void msg_process(TAOS_RES* msg) {
char
buf
[
1024
];
memset
(
buf
,
0
,
1024
);
printf
(
"topic: %s
\n
"
,
tmq_get_topic_name
(
msg
));
printf
(
"vg:%d
\n
"
,
tmq_get_vgroup_id
(
msg
));
printf
(
"vg:
%d
\n
"
,
tmq_get_vgroup_id
(
msg
));
while
(
1
)
{
TAOS_ROW
row
=
taos_fetch_row
(
msg
);
if
(
row
==
NULL
)
break
;
...
...
@@ -141,7 +143,7 @@ int32_t create_topic() {
}
void
tmq_commit_cb_print
(
tmq_t
*
tmq
,
tmq_resp_err_t
resp
,
tmq_topic_vgroup_list_t
*
offsets
,
void
*
param
)
{
printf
(
"commit %d
\n
"
,
resp
);
printf
(
"commit %d
tmq %p offsets %p param %p
\n
"
,
resp
,
tmq
,
offsets
,
param
);
}
tmq_t
*
build_consumer
()
{
...
...
@@ -232,6 +234,7 @@ void sync_consume_loop(tmq_t* tmq, tmq_list_t* topics) {
msg_process
(
tmqmessage
);
taos_free_result
(
tmqmessage
);
tmq_commit
(
tmq
,
NULL
,
1
);
/*if ((++msg_count % MIN_COMMIT_COUNT) == 0) tmq_commit(tmq, NULL, 0);*/
}
}
...
...
include/common/taosdef.h
浏览文件 @
7bae3e3f
...
...
@@ -71,13 +71,19 @@ typedef enum {
TSDB_SMA_STAT_DROPPED
=
2
,
// sma dropped
}
ETsdbSmaStat
;
// bit operation
typedef
enum
{
TSDB_SMA_TYPE_BLOCK
=
0
,
// Block-wise SMA
TSDB_SMA_TYPE_TIME_RANGE
=
1
,
// Time-range-wise SMA
TSDB_SMA_TYPE_ROLLUP
=
2
,
// Rollup SMA
}
ETsdbSmaType
;
typedef
enum
{
TSDB_RSMA_RETENTION_0
=
0
,
TSDB_RSMA_RETENTION_1
=
1
,
TSDB_RSMA_RETENTION_2
=
2
,
TSDB_RSMA_RETENTION_MAX
=
3
}
ERSmaRetention
;
extern
char
*
qtypeStr
[];
#define TSDB_PORT_HTTP 11
...
...
include/common/tmsg.h
浏览文件 @
7bae3e3f
...
...
@@ -1524,6 +1524,7 @@ typedef struct {
int32_t
tEncodeSRSmaParam
(
SCoder
*
pCoder
,
const
SRSmaParam
*
pRSmaParam
);
int32_t
tDecodeSRSmaParam
(
SCoder
*
pCoder
,
SRSmaParam
*
pRSmaParam
);
// TDMT_VND_CREATE_STB ==============
typedef
struct
SVCreateStbReq
{
const
char
*
name
;
tb_uid_t
suid
;
...
...
@@ -1536,17 +1537,14 @@ typedef struct SVCreateStbReq {
int
tEncodeSVCreateStbReq
(
SCoder
*
pCoder
,
const
SVCreateStbReq
*
pReq
);
int
tDecodeSVCreateStbReq
(
SCoder
*
pCoder
,
SVCreateStbReq
*
pReq
);
// TDMT_VND_DROP_STB ==============
typedef
struct
SVDropStbReq
{
// data
#ifdef WINDOWS
size_t
avoidCompilationErrors
;
#endif
const
char
*
name
;
tb_uid_t
suid
;
}
SVDropStbReq
;
typedef
struct
SVCreateStbRsp
{
int
code
;
}
SVCreateStbRsp
;
int32_t
tEncodeSVDropStbReq
(
SCoder
*
pCoder
,
const
SVDropStbReq
*
pReq
);
int32_t
tDecodeSVDropStbReq
(
SCoder
*
pCoder
,
SVDropStbReq
*
pReq
);
typedef
struct
SVCreateTbReq
{
tb_uid_t
uid
;
...
...
@@ -1603,19 +1601,37 @@ int tDecodeSVCreateTbBatchRsp(SCoder* pCoder, SVCreateTbBatchRsp* pRsp);
int32_t
tSerializeSVCreateTbBatchRsp
(
void
*
buf
,
int32_t
bufLen
,
SVCreateTbBatchRsp
*
pRsp
);
int32_t
tDeserializeSVCreateTbBatchRsp
(
void
*
buf
,
int32_t
bufLen
,
SVCreateTbBatchRsp
*
pRsp
);
// TDMT_VND_DROP_TABLE =================
typedef
struct
{
int64_t
ver
;
char
*
name
;
uint8_t
type
;
tb_uid_t
suid
;
const
char
*
name
;
int8_t
igNotExists
;
}
SVDropTbReq
;
typedef
struct
{
int
tmp
;
// TODO: to avoid compile error
int
32_t
code
;
}
SVDropTbRsp
;
int32_t
tSerializeSVDropTbReq
(
void
**
buf
,
SVDropTbReq
*
pReq
);
void
*
tDeserializeSVDropTbReq
(
void
*
buf
,
SVDropTbReq
*
pReq
);
typedef
struct
{
int32_t
nReqs
;
union
{
SVDropTbReq
*
pReqs
;
SArray
*
pArray
;
};
}
SVDropTbBatchReq
;
int32_t
tEncodeSVDropTbBatchReq
(
SCoder
*
pCoder
,
const
SVDropTbBatchReq
*
pReq
);
int32_t
tDecodeSVDropTbBatchReq
(
SCoder
*
pCoder
,
SVDropTbBatchReq
*
pReq
);
typedef
struct
{
int32_t
nRsps
;
union
{
SVDropTbRsp
*
pRsps
;
SArray
*
pArray
;
};
}
SVDropTbBatchRsp
;
int32_t
tEncodeSVDropTbBatchRsp
(
SCoder
*
pCoder
,
const
SVDropTbBatchRsp
*
pRsp
);
int32_t
tDecodeSVDropTbBatchRsp
(
SCoder
*
pCoder
,
SVDropTbBatchRsp
*
pRsp
);
typedef
struct
{
SMsgHead
head
;
...
...
include/common/tmsgdef.h
浏览文件 @
7bae3e3f
...
...
@@ -170,9 +170,9 @@ enum {
TD_DEF_MSG_TYPE
(
TDMT_VND_UPDATE_TAG_VAL
,
"vnode-update-tag-val"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_VND_TABLE_META
,
"vnode-table-meta"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_VND_TABLES_META
,
"vnode-tables-meta"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_VND_CREATE_STB
,
"vnode-create-stb"
,
SVCreate
TbReq
,
SVCreateTbRsp
)
TD_DEF_MSG_TYPE
(
TDMT_VND_CREATE_STB
,
"vnode-create-stb"
,
SVCreate
StbReq
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_VND_ALTER_STB
,
"vnode-alter-stb"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_VND_DROP_STB
,
"vnode-drop-stb"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_VND_DROP_STB
,
"vnode-drop-stb"
,
SVDropStbReq
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_VND_MQ_CONSUME
,
"vnode-mq-consume"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_VND_MQ_QUERY
,
"vnode-mq-query"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_VND_MQ_CONNECT
,
"vnode-mq-connect"
,
NULL
,
NULL
)
...
...
include/dnode/mnode/sdb/sdb.h
浏览文件 @
7bae3e3f
...
...
@@ -107,10 +107,9 @@ typedef enum {
typedef
enum
{
SDB_STATUS_INIT
=
0
,
SDB_STATUS_CREATING
=
1
,
SDB_STATUS_
UPDAT
ING
=
2
,
SDB_STATUS_DROPP
ING
=
3
,
SDB_STATUS_
DROPP
ING
=
2
,
SDB_STATUS_DROPP
ED
=
3
,
SDB_STATUS_READY
=
4
,
SDB_STATUS_DROPPED
=
5
}
ESdbStatus
;
typedef
enum
{
...
...
include/libs/nodes/querynodes.h
浏览文件 @
7bae3e3f
...
...
@@ -88,6 +88,7 @@ typedef struct SValueNode {
double
d
;
char
*
p
;
}
datum
;
int64_t
typeData
;
char
unit
;
}
SValueNode
;
...
...
@@ -314,6 +315,7 @@ bool nodesIsTimeorderQuery(const SNode* pQuery);
bool
nodesIsTimelineQuery
(
const
SNode
*
pQuery
);
void
*
nodesGetValueFromNode
(
SValueNode
*
pNode
);
int32_t
nodesSetValueNodeValue
(
SValueNode
*
pNode
,
void
*
value
);
char
*
nodesGetStrValueFromNode
(
SValueNode
*
pNode
);
char
*
getFillModeString
(
EFillMode
mode
);
void
valueNodeToVariant
(
const
SValueNode
*
pNode
,
SVariant
*
pVal
);
...
...
include/util/taoserror.h
浏览文件 @
7bae3e3f
...
...
@@ -87,6 +87,7 @@ int32_t* taosGetErrno();
#define TSDB_CODE_MSG_NOT_PROCESSED TAOS_DEF_ERROR_CODE(0, 0x0113)
#define TSDB_CODE_CFG_NOT_FOUND TAOS_DEF_ERROR_CODE(0, 0x0114)
#define TSDB_CODE_REPEAT_INIT TAOS_DEF_ERROR_CODE(0, 0x0115)
#define TSDB_CODE_DUP_KEY TAOS_DEF_ERROR_CODE(0, 0x0116)
#define TSDB_CODE_REF_NO_MEMORY TAOS_DEF_ERROR_CODE(0, 0x0140)
#define TSDB_CODE_REF_FULL TAOS_DEF_ERROR_CODE(0, 0x0141)
...
...
@@ -318,6 +319,7 @@ int32_t* taosGetErrno();
#define TSDB_CODE_VND_TB_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0515)
#define TSDB_CODE_VND_SMA_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0516)
#define TSDB_CODE_VND_HASH_MISMATCH TAOS_DEF_ERROR_CODE(0, 0x0517)
#define TSDB_CODE_VND_TABLE_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0518)
// tsdb
#define TSDB_CODE_TDB_INVALID_TABLE_ID TAOS_DEF_ERROR_CODE(0, 0x0600)
...
...
@@ -616,6 +618,7 @@ int32_t* taosGetErrno();
#define TSDB_CODE_PAR_OFFSET_LESS_ZERO TAOS_DEF_ERROR_CODE(0, 0x2637)
#define TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_BY TAOS_DEF_ERROR_CODE(0, 0x2638)
#define TSDB_CODE_PAR_INVALID_TOPIC_QUERY TAOS_DEF_ERROR_CODE(0, 0x2639)
#define TSDB_CODE_PAR_INVALID_DROP_STABLE TAOS_DEF_ERROR_CODE(0, 0x263A)
//planner
#define TSDB_CODE_PLAN_INTERNAL_ERROR TAOS_DEF_ERROR_CODE(0, 0x2700)
...
...
include/util/tencode.h
浏览文件 @
7bae3e3f
...
...
@@ -79,17 +79,6 @@ typedef struct {
#define TD_CODER_CURRENT(CODER) ((CODER)->data + (CODER)->pos)
#define TD_CODER_MOVE_POS(CODER, MOVE) ((CODER)->pos += (MOVE))
#define TD_CODER_CHECK_CAPACITY_FAILED(CODER, EXPSIZE) (((CODER)->size - (CODER)->pos) < (EXPSIZE))
// #define TCODER_MALLOC(PCODER, SIZE) \
// ({ \
// void* ptr = NULL; \
// SCoderMem* pMem = (SCoderMem*)taosMemoryMalloc(sizeof(*pMem) + (SIZE)); \
// if (pMem) { \
// pMem->next = (PCODER)->mList; \
// (PCODER)->mList = pMem; \
// ptr = (void*)&pMem[1]; \
// } \
// ptr; \
// })
static
FORCE_INLINE
void
*
tCoderMalloc
(
SCoder
*
pCoder
,
int32_t
size
)
{
void
*
ptr
=
NULL
;
SCoderMem
*
pMem
=
(
SCoderMem
*
)
taosMemoryMalloc
(
sizeof
(
SCoderMem
*
)
+
size
);
...
...
@@ -102,8 +91,9 @@ static FORCE_INLINE void* tCoderMalloc(SCoder* pCoder, int32_t size) {
}
#define tEncodeSize(E, S, SIZE, RET) \
do
{
\
do
{
\
SCoder coder = {0}; \
RET = 0; \
tCoderInit(&coder, TD_LITTLE_ENDIAN, NULL, 0, TD_ENCODER); \
if ((E)(&coder, S) == 0) { \
SIZE = coder.pos; \
...
...
@@ -111,7 +101,7 @@ static FORCE_INLINE void* tCoderMalloc(SCoder* pCoder, int32_t size) {
RET = -1; \
} \
tCoderClear(&coder); \
}
while
(0)
}
while
(0)
// #define tEncodeSize(E, S, SIZE) \
// ({ \
// SCoder coder = {0}; \
...
...
include/util/tskiplist.h
浏览文件 @
7bae3e3f
...
...
@@ -52,72 +52,21 @@ typedef struct SSkipListNode {
#define SL_NODE_GET_FORWARD_POINTER(n, l) (n)->forwards[(l)]
#define SL_NODE_GET_BACKWARD_POINTER(n, l) (n)->forwards[(n)->level + (l)]
/*
* @version 0.3
* @date 2017/11/12
* the simple version of skip list.
*
* for multi-thread safe purpose, we employ TdThreadRwlock to guarantee to generate
* deterministic result. Later, we will remove the lock in SkipList to further enhance the performance.
* In this case, one should use the concurrent skip list (by using michael-scott algorithm) instead of
* this simple version in a multi-thread environment, to achieve higher performance of read/write operations.
*
* Note: Duplicated primary key situation.
* In case of duplicated primary key, two ways can be employed to handle this situation:
* 1. add as normal insertion without special process.
* 2. add an overflow pointer at each list node, all nodes with the same key will be added in the overflow pointer.
* In this case, the total steps of each search will be reduced significantly.
* Currently, we implement the skip list in a line with the first means, maybe refactor it soon.
*
* Memory consumption: the memory alignment causes many memory wasted. So, employ a memory
* pool will significantly reduce the total memory consumption, as well as the calloc/malloc operation costs.
*
*/
// state struct, record following information:
// number of links in each level.
// avg search steps, for latest 1000 queries
// avg search rsp time, for latest 1000 queries
// total memory size
typedef
struct
tSkipListState
{
// in bytes, sizeof(SSkipList)+sizeof(SSkipListNode)*SSkipList->nSize
uint64_t
nTotalMemSize
;
uint64_t
nLevelNodeCnt
[
MAX_SKIP_LIST_LEVEL
];
uint64_t
queryCount
;
// total query count
/*
* only record latest 1000 queries
* when the value==1000, = 0,
* nTotalStepsForQueries = 0,
* nTotalElapsedTimeForQueries = 0
*/
uint64_t
nRecQueries
;
uint16_t
nTotalStepsForQueries
;
uint64_t
nTotalElapsedTimeForQueries
;
uint16_t
nInsertObjs
;
uint16_t
nTotalStepsForInsert
;
uint64_t
nTotalElapsedTimeForInsert
;
}
tSkipListState
;
typedef
enum
{
SSkipListPutSuccess
=
0
,
SSkipListPutEarlyStop
=
1
,
SSkipListPutSkipOne
=
2
}
SSkipListPutStatus
;
typedef
struct
SSkipList
{
uint32_t
seed
;
__compar_fn_t
comparFn
;
__sl_key_fn_t
keyFn
;
TdThreadRwlock
*
lock
;
uint16_t
len
;
uint8_t
maxLevel
;
uint8_t
flags
;
uint8_t
type
;
// static info above
uint8_t
level
;
uint32_t
size
;
SSkipListNode
*
pHead
;
// point to the first element
SSkipListNode
*
pTail
;
// point to the last element
#if SKIP_LIST_RECORD_PERFORMANCE
tSkipListState
state
;
// skiplist state
#endif
uint32_t
seed
;
__compar_fn_t
comparFn
;
__sl_key_fn_t
keyFn
;
TdThreadRwlock
*
lock
;
uint16_t
len
;
uint8_t
maxLevel
;
uint8_t
flags
;
uint8_t
type
;
// static info above
uint8_t
level
;
uint32_t
size
;
SSkipListNode
*
pHead
;
// point to the first element
SSkipListNode
*
pTail
;
// point to the last element
tGenericSavedFunc
*
insertHandleFn
;
}
SSkipList
;
...
...
source/client/inc/clientStmt.h
浏览文件 @
7bae3e3f
...
...
@@ -46,11 +46,12 @@ typedef struct SStmtTableCache {
void
*
boundTags
;
}
SStmtTableCache
;
typedef
struct
S
QueryFields
{
typedef
struct
S
StmtQueryResInfo
{
TAOS_FIELD
*
fields
;
TAOS_FIELD
*
userFields
;
uint32_t
numOfCols
;
}
SQueryFields
;
int32_t
precision
;
}
SStmtQueryResInfo
;
typedef
struct
SStmtBindInfo
{
bool
needParse
;
...
...
@@ -72,17 +73,17 @@ typedef struct SStmtExecInfo {
}
SStmtExecInfo
;
typedef
struct
SStmtSQLInfo
{
STMT_TYPE
type
;
STMT_STATUS
status
;
bool
autoCreate
;
uint64_t
runTimes
;
SHashObj
*
pTableCache
;
//SHash<SStmtTableCache>
SQuery
*
pQuery
;
char
*
sqlStr
;
int32_t
sqlLen
;
SArray
*
nodeList
;
SQueryPlan
*
pQueryPlan
;
S
QueryFields
field
s
;
STMT_TYPE
type
;
STMT_STATUS
status
;
bool
autoCreate
;
uint64_t
runTimes
;
SHashObj
*
pTableCache
;
//SHash<SStmtTableCache>
SQuery
*
pQuery
;
char
*
sqlStr
;
int32_t
sqlLen
;
SArray
*
nodeList
;
SQueryPlan
*
pQueryPlan
;
S
StmtQueryResInfo
queryRe
s
;
}
SStmtSQLInfo
;
typedef
struct
STscStmt
{
...
...
source/client/src/clientStmt.c
浏览文件 @
7bae3e3f
...
...
@@ -74,17 +74,44 @@ int32_t stmtGetTbName(TAOS_STMT *stmt, char **tbName) {
}
int32_t
stmtBackupQueryFields
(
STscStmt
*
pStmt
)
{
SQueryFields
*
pFields
=
&
pStmt
->
sql
.
fields
;
int32_t
size
=
pFields
->
numOfCols
*
sizeof
(
TAOS_FIELD
);
SStmtQueryResInfo
*
pRes
=
&
pStmt
->
sql
.
queryRes
;
pRes
->
numOfCols
=
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
numOfCols
;
pRes
->
precision
=
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
precision
;
pFields
->
numOfCols
=
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
numOfCols
;
p
Field
s
->
fields
=
taosMemoryMalloc
(
size
);
p
Field
s
->
userFields
=
taosMemoryMalloc
(
size
);
if
(
NULL
==
p
Fields
->
fields
||
NULL
==
pField
s
->
userFields
)
{
int32_t
size
=
pRes
->
numOfCols
*
sizeof
(
TAOS_FIELD
)
;
p
Re
s
->
fields
=
taosMemoryMalloc
(
size
);
p
Re
s
->
userFields
=
taosMemoryMalloc
(
size
);
if
(
NULL
==
p
Res
->
fields
||
NULL
==
pRe
s
->
userFields
)
{
STMT_ERR_RET
(
TSDB_CODE_TSC_OUT_OF_MEMORY
);
}
memcpy
(
pFields
->
fields
,
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
fields
,
size
);
memcpy
(
pFields
->
userFields
,
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
userFields
,
size
);
memcpy
(
pRes
->
fields
,
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
fields
,
size
);
memcpy
(
pRes
->
userFields
,
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
userFields
,
size
);
return
TSDB_CODE_SUCCESS
;
}
int32_t
stmtRestoreQueryFields
(
STscStmt
*
pStmt
)
{
SStmtQueryResInfo
*
pRes
=
&
pStmt
->
sql
.
queryRes
;
int32_t
size
=
pRes
->
numOfCols
*
sizeof
(
TAOS_FIELD
);
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
numOfCols
=
pRes
->
numOfCols
;
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
precision
=
pRes
->
precision
;
if
(
NULL
==
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
fields
)
{
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
fields
=
taosMemoryMalloc
(
size
);
if
(
NULL
==
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
fields
)
{
STMT_ERR_RET
(
TSDB_CODE_TSC_OUT_OF_MEMORY
);
}
memcpy
(
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
fields
,
pRes
->
fields
,
size
);
}
if
(
NULL
==
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
userFields
)
{
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
userFields
=
taosMemoryMalloc
(
size
);
if
(
NULL
==
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
userFields
)
{
STMT_ERR_RET
(
TSDB_CODE_TSC_OUT_OF_MEMORY
);
}
memcpy
(
pStmt
->
exec
.
pRequest
->
body
.
resInfo
.
userFields
,
pRes
->
userFields
,
size
);
}
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -235,6 +262,8 @@ int32_t stmtCleanExecInfo(STscStmt* pStmt, bool keepTable, bool freeRequest) {
}
int32_t
stmtCleanSQLInfo
(
STscStmt
*
pStmt
)
{
taosMemoryFree
(
pStmt
->
sql
.
queryRes
.
fields
);
taosMemoryFree
(
pStmt
->
sql
.
queryRes
.
userFields
);
taosMemoryFree
(
pStmt
->
sql
.
sqlStr
);
qDestroyQuery
(
pStmt
->
sql
.
pQuery
);
qDestroyQueryPlan
(
pStmt
->
sql
.
pQueryPlan
);
...
...
@@ -497,6 +526,8 @@ int stmtBindBatch(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind, int32_t colIdx) {
pStmt
->
sql
.
pQueryPlan
=
pStmt
->
exec
.
pRequest
->
body
.
pDag
;
pStmt
->
exec
.
pRequest
->
body
.
pDag
=
NULL
;
STMT_ERR_RET
(
stmtBackupQueryFields
(
pStmt
));
}
else
{
STMT_ERR_RET
(
stmtRestoreQueryFields
(
pStmt
));
}
STMT_RET
(
qStmtBindParam
(
pStmt
->
sql
.
pQueryPlan
,
bind
,
colIdx
,
pStmt
->
exec
.
pRequest
->
requestId
));
...
...
@@ -509,7 +540,11 @@ int stmtBindBatch(TAOS_STMT *stmt, TAOS_MULTI_BIND *bind, int32_t colIdx) {
}
if
(
colIdx
<
0
)
{
qBindStmtColsValue
(
*
pDataBlock
,
bind
,
pStmt
->
exec
.
pRequest
->
msgBuf
,
pStmt
->
exec
.
pRequest
->
msgBufLen
);
int32_t
code
=
qBindStmtColsValue
(
*
pDataBlock
,
bind
,
pStmt
->
exec
.
pRequest
->
msgBuf
,
pStmt
->
exec
.
pRequest
->
msgBufLen
);
if
(
code
)
{
tscError
(
"qBindStmtColsValue failed, error:%s"
,
tstrerror
(
code
));
STMT_ERR_RET
(
code
);
}
}
else
{
if
(
colIdx
!=
(
pStmt
->
bInfo
.
sBindLastIdx
+
1
)
&&
colIdx
!=
0
)
{
tscError
(
"bind column index not in sequence"
);
...
...
source/client/src/tmq.c
浏览文件 @
7bae3e3f
...
...
@@ -377,7 +377,15 @@ int32_t tmqCommitCb(void* param, const SDataBuf* pMsg, int32_t code) {
if
(
pParam
->
tmq
->
commitCb
)
{
pParam
->
tmq
->
commitCb
(
pParam
->
tmq
,
pParam
->
rspErr
,
NULL
,
pParam
->
tmq
->
commitCbUserParam
);
}
if
(
!
pParam
->
async
)
tsem_post
(
&
pParam
->
rspSem
);
if
(
!
pParam
->
async
)
tsem_post
(
&
pParam
->
rspSem
);
else
{
tsem_destroy
(
&
pParam
->
rspSem
);
/*if (pParam->pArray) {*/
/*taosArrayDestroy(pParam->pArray);*/
/*}*/
taosMemoryFree
(
pParam
);
}
return
0
;
}
...
...
@@ -560,7 +568,7 @@ tmq_resp_err_t tmq_commit(tmq_t* tmq, const tmq_topic_vgroup_list_t* offsets, in
tscError
(
"failed to malloc request"
);
}
SMqCommitCbParam
*
pParam
=
taosMemory
Malloc
(
sizeof
(
SMqCommitCbParam
));
SMqCommitCbParam
*
pParam
=
taosMemory
Calloc
(
1
,
sizeof
(
SMqCommitCbParam
));
if
(
pParam
==
NULL
)
{
return
-
1
;
}
...
...
@@ -575,6 +583,7 @@ tmq_resp_err_t tmq_commit(tmq_t* tmq, const tmq_topic_vgroup_list_t* offsets, in
};
SMsgSendInfo
*
sendInfo
=
buildMsgInfoImpl
(
pRequest
);
sendInfo
->
requestObjRefId
=
0
;
sendInfo
->
param
=
pParam
;
sendInfo
->
fp
=
tmqCommitCb
;
SEpSet
epSet
=
getEpSet_s
(
&
tmq
->
pTscObj
->
pAppInfo
->
mgmtEp
);
...
...
@@ -585,13 +594,12 @@ tmq_resp_err_t tmq_commit(tmq_t* tmq, const tmq_topic_vgroup_list_t* offsets, in
if
(
!
async
)
{
tsem_wait
(
&
pParam
->
rspSem
);
resp
=
pParam
->
rspErr
;
}
tsem_destroy
(
&
pParam
->
rspSem
);
taosMemoryFree
(
pParam
);
tsem_destroy
(
&
pParam
->
rspSem
);
taosMemoryFree
(
pParam
);
if
(
pArray
)
{
taosArrayDestroy
(
pArray
);
if
(
pArray
)
{
taosArrayDestroy
(
pArray
);
}
}
return
resp
;
...
...
@@ -1313,7 +1321,7 @@ const char* tmq_err2str(tmq_resp_err_t err) {
const
char
*
tmq_get_topic_name
(
TAOS_RES
*
res
)
{
if
(
TD_RES_TMQ
(
res
))
{
SMqRspObj
*
pRspObj
=
(
SMqRspObj
*
)
res
;
return
pRspObj
->
topic
;
return
strchr
(
pRspObj
->
topic
,
'.'
)
+
1
;
}
else
{
return
NULL
;
}
...
...
source/common/src/tmsg.c
浏览文件 @
7bae3e3f
...
...
@@ -490,21 +490,6 @@ int32_t tDeserializeSClientHbBatchRsp(void *buf, int32_t bufLen, SClientHbBatchR
return
0
;
}
int32_t
tSerializeSVDropTbReq
(
void
**
buf
,
SVDropTbReq
*
pReq
)
{
int32_t
tlen
=
0
;
tlen
+=
taosEncodeFixedI64
(
buf
,
pReq
->
ver
);
tlen
+=
taosEncodeString
(
buf
,
pReq
->
name
);
tlen
+=
taosEncodeFixedU8
(
buf
,
pReq
->
type
);
return
tlen
;
}
void
*
tDeserializeSVDropTbReq
(
void
*
buf
,
SVDropTbReq
*
pReq
)
{
buf
=
taosDecodeFixedI64
(
buf
,
&
pReq
->
ver
);
buf
=
taosDecodeString
(
buf
,
&
pReq
->
name
);
buf
=
taosDecodeFixedU8
(
buf
,
&
pReq
->
type
);
return
buf
;
}
int32_t
tSerializeSMCreateStbReq
(
void
*
buf
,
int32_t
bufLen
,
SMCreateStbReq
*
pReq
)
{
SCoder
encoder
=
{
0
};
tCoderInit
(
&
encoder
,
TD_LITTLE_ENDIAN
,
buf
,
bufLen
,
TD_ENCODER
);
...
...
@@ -3811,3 +3796,119 @@ int tDecodeSVCreateTbRsp(SCoder *pCoder, SVCreateTbRsp *pRsp) {
tEndDecode
(
pCoder
);
return
0
;
}
// TDMT_VND_DROP_TABLE =================
static
int32_t
tEncodeSVDropTbReq
(
SCoder
*
pCoder
,
const
SVDropTbReq
*
pReq
)
{
if
(
tStartEncode
(
pCoder
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
pCoder
,
pReq
->
name
)
<
0
)
return
-
1
;
if
(
tEncodeI8
(
pCoder
,
pReq
->
igNotExists
)
<
0
)
return
-
1
;
tEndEncode
(
pCoder
);
return
0
;
}
static
int32_t
tDecodeSVDropTbReq
(
SCoder
*
pCoder
,
SVDropTbReq
*
pReq
)
{
if
(
tStartDecode
(
pCoder
)
<
0
)
return
-
1
;
if
(
tDecodeCStr
(
pCoder
,
&
pReq
->
name
)
<
0
)
return
-
1
;
if
(
tDecodeI8
(
pCoder
,
&
pReq
->
igNotExists
)
<
0
)
return
-
1
;
tEndDecode
(
pCoder
);
return
0
;
}
static
int32_t
tEncodeSVDropTbRsp
(
SCoder
*
pCoder
,
const
SVDropTbRsp
*
pReq
)
{
if
(
tStartEncode
(
pCoder
)
<
0
)
return
-
1
;
if
(
tEncodeI32
(
pCoder
,
pReq
->
code
)
<
0
)
return
-
1
;
tEndEncode
(
pCoder
);
return
0
;
}
static
int32_t
tDecodeSVDropTbRsp
(
SCoder
*
pCoder
,
SVDropTbRsp
*
pReq
)
{
if
(
tStartDecode
(
pCoder
)
<
0
)
return
-
1
;
if
(
tDecodeI32
(
pCoder
,
&
pReq
->
code
)
<
0
)
return
-
1
;
tEndDecode
(
pCoder
);
return
0
;
}
int32_t
tEncodeSVDropTbBatchReq
(
SCoder
*
pCoder
,
const
SVDropTbBatchReq
*
pReq
)
{
int32_t
nReqs
=
taosArrayGetSize
(
pReq
->
pArray
);
SVDropTbReq
*
pDropTbReq
;
if
(
tStartEncode
(
pCoder
)
<
0
)
return
-
1
;
if
(
tEncodeI32v
(
pCoder
,
nReqs
)
<
0
)
return
-
1
;
for
(
int
iReq
=
0
;
iReq
<
nReqs
;
iReq
++
)
{
pDropTbReq
=
(
SVDropTbReq
*
)
taosArrayGet
(
pReq
->
pArray
,
iReq
);
if
(
tEncodeSVDropTbReq
(
pCoder
,
pDropTbReq
)
<
0
)
return
-
1
;
}
tEndEncode
(
pCoder
);
return
0
;
}
int32_t
tDecodeSVDropTbBatchReq
(
SCoder
*
pCoder
,
SVDropTbBatchReq
*
pReq
)
{
if
(
tStartDecode
(
pCoder
)
<
0
)
return
-
1
;
if
(
tDecodeI32v
(
pCoder
,
&
pReq
->
nReqs
)
<
0
)
return
-
1
;
pReq
->
pReqs
=
(
SVDropTbReq
*
)
tCoderMalloc
(
pCoder
,
sizeof
(
SVDropTbReq
)
*
pReq
->
nReqs
);
if
(
pReq
->
pReqs
==
NULL
)
return
-
1
;
for
(
int
iReq
=
0
;
iReq
<
pReq
->
nReqs
;
iReq
++
)
{
if
(
tDecodeSVDropTbReq
(
pCoder
,
pReq
->
pReqs
+
iReq
)
<
0
)
return
-
1
;
}
tEndDecode
(
pCoder
);
return
0
;
}
int32_t
tEncodeSVDropTbBatchRsp
(
SCoder
*
pCoder
,
const
SVDropTbBatchRsp
*
pRsp
)
{
int32_t
nRsps
=
taosArrayGetSize
(
pRsp
->
pArray
);
if
(
tStartEncode
(
pCoder
)
<
0
)
return
-
1
;
if
(
tEncodeI32v
(
pCoder
,
nRsps
)
<
0
)
return
-
1
;
for
(
int
iRsp
=
0
;
iRsp
<
nRsps
;
iRsp
++
)
{
if
(
tEncodeSVDropTbRsp
(
pCoder
,
(
SVDropTbRsp
*
)
taosArrayGet
(
pRsp
->
pArray
,
iRsp
))
<
0
)
return
-
1
;
}
tEndEncode
(
pCoder
);
return
0
;
}
int32_t
tDecodeSVDropTbBatchRsp
(
SCoder
*
pCoder
,
SVDropTbBatchRsp
*
pRsp
)
{
if
(
tStartDecode
(
pCoder
)
<
0
)
return
-
1
;
if
(
tDecodeI32v
(
pCoder
,
&
pRsp
->
nRsps
)
<
0
)
return
-
1
;
pRsp
->
pRsps
=
(
SVDropTbRsp
*
)
tCoderMalloc
(
pCoder
,
sizeof
(
SVDropTbRsp
)
*
pRsp
->
nRsps
);
if
(
pRsp
->
pRsps
==
NULL
)
return
-
1
;
for
(
int
iRsp
=
0
;
iRsp
<
pRsp
->
nRsps
;
iRsp
++
)
{
if
(
tDecodeSVDropTbRsp
(
pCoder
,
pRsp
->
pRsps
+
iRsp
)
<
0
)
return
-
1
;
}
tEndDecode
(
pCoder
);
return
0
;
}
int32_t
tEncodeSVDropStbReq
(
SCoder
*
pCoder
,
const
SVDropStbReq
*
pReq
)
{
if
(
tStartEncode
(
pCoder
)
<
0
)
return
-
1
;
if
(
tEncodeCStr
(
pCoder
,
pReq
->
name
)
<
0
)
return
-
1
;
if
(
tEncodeI64
(
pCoder
,
pReq
->
suid
)
<
0
)
return
-
1
;
tEndEncode
(
pCoder
);
return
0
;
}
int32_t
tDecodeSVDropStbReq
(
SCoder
*
pCoder
,
SVDropStbReq
*
pReq
)
{
if
(
tStartDecode
(
pCoder
)
<
0
)
return
-
1
;
if
(
tDecodeCStr
(
pCoder
,
&
pReq
->
name
)
<
0
)
return
-
1
;
if
(
tDecodeI64
(
pCoder
,
&
pReq
->
suid
)
<
0
)
return
-
1
;
tEndDecode
(
pCoder
);
return
0
;
}
source/dnode/mgmt/implement/src/dmTransport.c
浏览文件 @
7bae3e3f
...
...
@@ -72,6 +72,7 @@ static void dmProcessRpcMsg(SMgmtWrapper *pWrapper, SRpcMsg *pRpc, SEpSet *pEpSe
NodeMsgFp
msgFp
=
NULL
;
uint16_t
msgType
=
pRpc
->
msgType
;
bool
needRelease
=
false
;
bool
isReq
=
msgType
&
1U
;
if
(
pEpSet
&&
pEpSet
->
numOfEps
>
0
&&
msgType
==
TDMT_MND_STATUS_RSP
)
{
dmSetMnodeEpSet
(
pWrapper
->
pDnode
,
pEpSet
);
...
...
@@ -85,13 +86,13 @@ static void dmProcessRpcMsg(SMgmtWrapper *pWrapper, SRpcMsg *pRpc, SEpSet *pEpSe
if
(
dmBuildMsg
(
pMsg
,
pRpc
)
!=
0
)
goto
_OVER
;
if
(
pWrapper
->
procType
==
DND_PROC_SINGLE
)
{
dTrace
(
"msg:%p,
is
created, type:%s handle:%p user:%s"
,
pMsg
,
TMSG_INFO
(
msgType
),
pRpc
->
handle
,
pMsg
->
user
);
dTrace
(
"msg:%p, created, type:%s handle:%p user:%s"
,
pMsg
,
TMSG_INFO
(
msgType
),
pRpc
->
handle
,
pMsg
->
user
);
code
=
(
*
msgFp
)(
pWrapper
,
pMsg
);
}
else
if
(
pWrapper
->
procType
==
DND_PROC_PARENT
)
{
dTrace
(
"msg:%p,
is created and put into child queue, type:%s handle:%p user:%s"
,
pMsg
,
TMSG_INFO
(
msgType
)
,
pRpc
->
handle
,
pMsg
->
user
);
code
=
taosProcPutToChildQ
(
pWrapper
->
procObj
,
pMsg
,
sizeof
(
SNodeMsg
),
pRpc
->
pCont
,
pRpc
->
contLen
,
pRpc
->
handle
,
pRpc
->
refId
,
PROC_FUNC_REQ
);
dTrace
(
"msg:%p,
created and put into child queue, type:%s handle:%p code:0x%04x user:%s contLen:%d"
,
pMsg
,
TMSG_INFO
(
msgType
),
pRpc
->
handle
,
pMsg
->
rpcMsg
.
code
&
0XFFFF
,
pMsg
->
user
,
pRpc
->
contLen
);
code
=
taosProcPutToChildQ
(
pWrapper
->
procObj
,
pMsg
,
sizeof
(
SNodeMsg
),
pRpc
->
pCont
,
pRpc
->
contLen
,
(
isReq
&&
(
pMsg
->
rpcMsg
.
code
==
0
))
?
pRpc
->
handle
:
NULL
,
pRpc
->
refId
,
PROC_FUNC_REQ
);
}
else
{
dTrace
(
"msg:%p, should not processed in child process, handle:%p user:%s"
,
pMsg
,
pRpc
->
handle
,
pMsg
->
user
);
ASSERT
(
1
);
...
...
@@ -100,12 +101,13 @@ static void dmProcessRpcMsg(SMgmtWrapper *pWrapper, SRpcMsg *pRpc, SEpSet *pEpSe
_OVER:
if
(
code
==
0
)
{
if
(
pWrapper
->
procType
==
DND_PROC_PARENT
)
{
dTrace
(
"msg:%p,
is
freed in parent process"
,
pMsg
);
dTrace
(
"msg:%p, freed in parent process"
,
pMsg
);
taosFreeQitem
(
pMsg
);
rpcFreeCont
(
pRpc
->
pCont
);
}
}
else
{
dError
(
"msg:%p, type:%s failed to process since 0x%04x:%s"
,
pMsg
,
TMSG_INFO
(
msgType
),
code
&
0XFFFF
,
terrstr
());
dError
(
"msg:%p, type:%s handle:%p failed to process since 0x%04x:%s"
,
pMsg
,
TMSG_INFO
(
msgType
),
pRpc
->
handle
,
code
&
0XFFFF
,
terrstr
());
if
(
msgType
&
1U
)
{
if
(
terrno
!=
0
)
code
=
terrno
;
if
(
code
==
TSDB_CODE_NODE_NOT_DEPLOYED
||
code
==
TSDB_CODE_NODE_OFFLINE
)
{
...
...
@@ -254,8 +256,17 @@ static void dmSendRpcRedirectRsp(SDnode *pDnode, const SRpcMsg *pReq) {
epSet
.
eps
[
i
].
port
=
htons
(
epSet
.
eps
[
i
].
port
);
}
rpcSendRedirectRsp
(
pReq
->
handle
,
&
epSet
);
SRpcMsg
resp
;
SMEpSet
msg
=
{.
epSet
=
epSet
};
int32_t
len
=
tSerializeSMEpSet
(
NULL
,
0
,
&
msg
);
resp
.
pCont
=
rpcMallocCont
(
len
);
resp
.
contLen
=
len
;
tSerializeSMEpSet
(
resp
.
pCont
,
len
,
&
msg
);
resp
.
code
=
TSDB_CODE_RPC_REDIRECT
;
resp
.
handle
=
pReq
->
handle
;
resp
.
refId
=
pReq
->
refId
;
rpcSendResponse
(
&
resp
);
}
static
inline
void
dmSendRpcRsp
(
SDnode
*
pDnode
,
const
SRpcMsg
*
pRsp
)
{
...
...
@@ -350,29 +361,31 @@ static void dmConsumeChildQueue(SMgmtWrapper *pWrapper, SNodeMsg *pMsg, int16_t
static
void
dmConsumeParentQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pMsg
,
int16_t
msgLen
,
void
*
pCont
,
int32_t
contLen
,
EProcFuncType
ftype
)
{
int32_t
code
=
pMsg
->
code
&
0xFFFF
;
pMsg
->
pCont
=
pCont
;
dTrace
(
"msg:%p, get from parent queue, ftype:%d handle:%p code:0x%04x mtype:%d, app:%p"
,
pMsg
,
ftype
,
pMsg
->
handle
,
pMsg
->
code
&
0xFFFF
,
pMsg
->
msgType
,
pMsg
->
ahandle
);
switch
(
ftype
)
{
case
PROC_FUNC_REGIST
:
rpcRegisterBrokenLinkArg
(
pMsg
);
break
;
case
PROC_FUNC_RELEASE
:
taosProcRemoveHandle
(
pWrapper
->
procObj
,
pMsg
->
handle
);
rpcReleaseHandle
(
pMsg
->
handle
,
(
int8_t
)
pMsg
->
code
);
rpcFreeCont
(
pCont
);
break
;
case
PROC_FUNC_REQ
:
dmSendRpcReq
(
pWrapper
->
pDnode
,
(
SEpSet
*
)((
char
*
)
pMsg
+
sizeof
(
SRpcMsg
)),
pMsg
);
break
;
case
PROC_FUNC_RSP
:
pMsg
->
refId
=
taosProcRemoveHandle
(
pWrapper
->
procObj
,
pMsg
->
handle
);
dmSendRpcRsp
(
pWrapper
->
pDnode
,
pMsg
);
break
;
default:
break
;
if
(
ftype
==
PROC_FUNC_REQ
)
{
dTrace
(
"msg:%p, get from parent queue, send req:%s handle:%p code:0x%04x, app:%p"
,
pMsg
,
TMSG_INFO
(
pMsg
->
msgType
),
pMsg
->
handle
,
code
,
pMsg
->
ahandle
);
dmSendRpcReq
(
pWrapper
->
pDnode
,
(
SEpSet
*
)((
char
*
)
pMsg
+
sizeof
(
SRpcMsg
)),
pMsg
);
}
else
if
(
ftype
==
PROC_FUNC_RSP
)
{
dTrace
(
"msg:%p, get from parent queue, rsp handle:%p code:0x%04x, app:%p"
,
pMsg
,
pMsg
->
handle
,
code
,
pMsg
->
ahandle
)
;
pMsg
->
refId
=
taosProcRemoveHandle
(
pWrapper
->
procObj
,
pMsg
->
handle
);
dmSendRpcRsp
(
pWrapper
->
pDnode
,
pMsg
);
}
else
if
(
ftype
==
PROC_FUNC_REGIST
)
{
dTrace
(
"msg:%p, get from parent queue, regist handle:%p code:0x%04x, app:%p"
,
pMsg
,
pMsg
->
handle
,
code
,
pMsg
->
ahandle
)
;
rpcRegisterBrokenLinkArg
(
pMsg
);
}
else
if
(
ftype
==
PROC_FUNC_RELEASE
)
{
dTrace
(
"msg:%p, get from parent queue, release handle:%p code:0x%04x, app:%p"
,
pMsg
,
pMsg
->
handle
,
code
,
pMsg
->
ahandle
);
taosProcRemoveHandle
(
pWrapper
->
procObj
,
pMsg
->
handle
);
rpcReleaseHandle
(
pMsg
->
handle
,
(
int8_t
)
pMsg
->
code
);
rpcFreeCont
(
pCont
)
;
}
else
{
dError
(
"msg:%p, invalid ftype:%d while get from parent queue, handle:%p"
,
pMsg
,
ftype
,
pMsg
->
handle
)
;
}
taosMemoryFree
(
pMsg
);
}
...
...
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
浏览文件 @
7bae3e3f
...
...
@@ -112,7 +112,9 @@ static void vmGenerateVnodeCfg(SCreateVnodeReq *pCreate, SVnodeCfg *pCfg) {
pCfg
->
tsdbCfg
.
keep2
=
3650
;
pCfg
->
tsdbCfg
.
keep0
=
3650
;
pCfg
->
tsdbCfg
.
keep1
=
3650
;
pCfg
->
tsdbCfg
.
retentions
=
pCreate
->
pRetensions
;
for
(
size_t
i
=
0
;
i
<
taosArrayGetSize
(
pCreate
->
pRetensions
);
++
i
)
{
memcpy
(
&
pCfg
->
tsdbCfg
.
retentions
[
i
],
taosArrayGet
(
pCreate
->
pRetensions
,
i
),
sizeof
(
SRetention
));
}
pCfg
->
walCfg
.
vgId
=
pCreate
->
vgId
;
pCfg
->
hashBegin
=
pCreate
->
hashBegin
;
pCfg
->
hashEnd
=
pCreate
->
hashEnd
;
...
...
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
浏览文件 @
7bae3e3f
...
...
@@ -136,7 +136,7 @@ static void vmProcessWriteQueue(SQueueInfo *pInfo, STaosQall *qall, int32_t numO
// sync integration response
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
pArray
);
i
++
)
{
SNodeMsg
*
pMsg
;
SRpcMsg
*
pRpc
;
SRpcMsg
*
pRpc
;
pMsg
=
*
(
SNodeMsg
**
)
taosArrayGet
(
pArray
,
i
);
pRpc
=
&
pMsg
->
rpcMsg
;
...
...
@@ -175,7 +175,7 @@ static void vmProcessWriteQueue(SQueueInfo *pInfo, STaosQall *qall, int32_t numO
static
void
vmProcessApplyQueue
(
SQueueInfo
*
pInfo
,
STaosQall
*
qall
,
int32_t
numOfMsgs
)
{
SVnodeObj
*
pVnode
=
pInfo
->
ahandle
;
SNodeMsg
*
pMsg
=
NULL
;
SNodeMsg
*
pMsg
=
NULL
;
SRpcMsg
rsp
;
for
(
int32_t
i
=
0
;
i
<
numOfMsgs
;
++
i
)
{
...
...
@@ -218,7 +218,7 @@ static void vmProcessApplyQueue(SQueueInfo *pInfo, STaosQall *qall, int32_t numO
static
void
vmProcessSyncQueue
(
SQueueInfo
*
pInfo
,
STaosQall
*
qall
,
int32_t
numOfMsgs
)
{
SVnodeObj
*
pVnode
=
pInfo
->
ahandle
;
SNodeMsg
*
pMsg
=
NULL
;
SNodeMsg
*
pMsg
=
NULL
;
for
(
int32_t
i
=
0
;
i
<
numOfMsgs
;
++
i
)
{
taosGetQitem
(
qall
,
(
void
**
)
&
pMsg
);
...
...
@@ -231,7 +231,7 @@ static void vmProcessSyncQueue(SQueueInfo *pInfo, STaosQall *qall, int32_t numOf
static
void
vmProcessMergeQueue
(
SQueueInfo
*
pInfo
,
STaosQall
*
qall
,
int32_t
numOfMsgs
)
{
SVnodeObj
*
pVnode
=
pInfo
->
ahandle
;
SNodeMsg
*
pMsg
=
NULL
;
SNodeMsg
*
pMsg
=
NULL
;
for
(
int32_t
i
=
0
;
i
<
numOfMsgs
;
++
i
)
{
taosGetQitem
(
qall
,
(
void
**
)
&
pMsg
);
...
...
@@ -248,7 +248,7 @@ static void vmProcessMergeQueue(SQueueInfo *pInfo, STaosQall *qall, int32_t numO
}
static
int32_t
vmPutNodeMsgToQueue
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
,
EQueueType
qtype
)
{
SRpcMsg
*
pRpc
=
&
pMsg
->
rpcMsg
;
SRpcMsg
*
pRpc
=
&
pMsg
->
rpcMsg
;
SMsgHead
*
pHead
=
pRpc
->
pCont
;
pHead
->
contLen
=
ntohl
(
pHead
->
contLen
);
pHead
->
vgId
=
ntohl
(
pHead
->
vgId
);
...
...
@@ -262,23 +262,23 @@ static int32_t vmPutNodeMsgToQueue(SVnodesMgmt *pMgmt, SNodeMsg *pMsg, EQueueTyp
int32_t
code
=
0
;
switch
(
qtype
)
{
case
QUERY_QUEUE
:
dTrace
(
"msg:%p,
will be written into vnode-query queue"
,
pMsg
);
dTrace
(
"msg:%p,
type:%s will be written into vnode-query queue"
,
pMsg
,
TMSG_INFO
(
pRpc
->
msgType
)
);
taosWriteQitem
(
pVnode
->
pQueryQ
,
pMsg
);
break
;
case
FETCH_QUEUE
:
dTrace
(
"msg:%p,
will be written into vnode-fetch queue"
,
pMsg
);
dTrace
(
"msg:%p,
type:%s will be written into vnode-fetch queue"
,
pMsg
,
TMSG_INFO
(
pRpc
->
msgType
)
);
taosWriteQitem
(
pVnode
->
pFetchQ
,
pMsg
);
break
;
case
WRITE_QUEUE
:
dTrace
(
"msg:%p,
will be written into vnode-write queue"
,
pMsg
);
dTrace
(
"msg:%p,
type:%s will be written into vnode-write queue"
,
pMsg
,
TMSG_INFO
(
pRpc
->
msgType
)
);
taosWriteQitem
(
pVnode
->
pWriteQ
,
pMsg
);
break
;
case
SYNC_QUEUE
:
dTrace
(
"msg:%p,
will be written into vnode-sync queue"
,
pMsg
);
dTrace
(
"msg:%p,
type:%s will be written into vnode-sync queue"
,
pMsg
,
TMSG_INFO
(
pRpc
->
msgType
)
);
taosWriteQitem
(
pVnode
->
pSyncQ
,
pMsg
);
break
;
case
MERGE_QUEUE
:
dTrace
(
"msg:%p,
will be written into vnode-merge queue"
,
pMsg
);
dTrace
(
"msg:%p,
type:%s will be written into vnode-merge queue"
,
pMsg
,
TMSG_INFO
(
pRpc
->
msgType
)
);
taosWriteQitem
(
pVnode
->
pMergeQ
,
pMsg
);
break
;
default:
...
...
@@ -317,7 +317,7 @@ int32_t vmProcessMergeMsg(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
}
int32_t
vmProcessMgmtMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
SSingleWorker
*
pWorker
=
&
pMgmt
->
mgmtWorker
;
dTrace
(
"msg:%p, will be written to vnode-mgmt queue, worker:%s"
,
pMsg
,
pWorker
->
name
);
taosWriteQitem
(
pWorker
->
queue
,
pMsg
);
...
...
@@ -325,7 +325,7 @@ int32_t vmProcessMgmtMsg(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
}
int32_t
vmProcessMonitorMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
SSingleWorker
*
pWorker
=
&
pMgmt
->
monitorWorker
;
dTrace
(
"msg:%p, put into worker:%s"
,
pMsg
,
pWorker
->
name
);
...
...
@@ -335,7 +335,7 @@ int32_t vmProcessMonitorMsg(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
static
int32_t
vmPutRpcMsgToQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
,
EQueueType
qtype
)
{
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
SMsgHead
*
pHead
=
pRpc
->
pCont
;
SMsgHead
*
pHead
=
pRpc
->
pCont
;
SVnodeObj
*
pVnode
=
vmAcquireVnode
(
pMgmt
,
pHead
->
vgId
);
if
(
pVnode
==
NULL
)
return
-
1
;
...
...
source/dnode/mnode/impl/inc/mndInt.h
浏览文件 @
7bae3e3f
...
...
@@ -47,7 +47,7 @@ typedef int32_t (*MndInitFp)(SMnode *pMnode);
typedef
void
(
*
MndCleanupFp
)(
SMnode
*
pMnode
);
typedef
int32_t
(
*
ShowRetrieveFp
)(
SNodeMsg
*
pMsg
,
SShowObj
*
pShow
,
SSDataBlock
*
pBlock
,
int32_t
rows
);
typedef
void
(
*
ShowFreeIterFp
)(
SMnode
*
pMnode
,
void
*
pIter
);
typedef
struct
SQWorker
Mgmt
SQHandle
;
typedef
struct
SQWorker
SQHandle
;
typedef
struct
{
const
char
*
name
;
...
...
source/dnode/mnode/impl/src/mndMnode.c
浏览文件 @
7bae3e3f
...
...
@@ -625,7 +625,7 @@ static int32_t mndRetrieveMnodes(SNodeMsg *pReq, SShowObj *pShow, SSDataBlock *p
colDataAppend
(
pColInfo
,
numOfRows
,
b1
,
false
);
const
char
*
roles
=
syncStr
(
pObj
->
role
);
char
*
b2
=
taosMemoryCalloc
(
1
,
strlen
(
roles
)
+
VARSTR_HEADER_SIZE
);
char
*
b2
=
taosMemoryCalloc
(
1
,
12
+
VARSTR_HEADER_SIZE
);
STR_WITH_MAXSIZE_TO_VARSTR
(
b2
,
roles
,
pShow
->
pMeta
->
pSchemas
[
cols
].
bytes
);
pColInfo
=
taosArrayGet
(
pBlock
->
pDataBlock
,
cols
++
);
...
...
source/dnode/mnode/impl/src/mndStb.c
浏览文件 @
7bae3e3f
...
...
@@ -428,17 +428,23 @@ static void *mndBuildVCreateStbReq(SMnode *pMnode, SVgObj *pVgroup, SStbObj *pSt
}
static
void
*
mndBuildVDropStbReq
(
SMnode
*
pMnode
,
SVgObj
*
pVgroup
,
SStbObj
*
pStb
,
int32_t
*
pContLen
)
{
SName
name
=
{
0
};
SName
name
=
{
0
};
SVDropStbReq
req
=
{
0
};
int32_t
contLen
=
0
;
int32_t
ret
=
0
;
SMsgHead
*
pHead
=
NULL
;
SCoder
coder
=
{
0
};
tNameFromString
(
&
name
,
pStb
->
name
,
T_NAME_ACCT
|
T_NAME_DB
|
T_NAME_TABLE
);
SVDropTbReq
req
=
{
0
};
req
.
ver
=
0
;
req
.
name
=
(
char
*
)
tNameGetTableName
(
&
name
);
req
.
type
=
TD_SUPER_TABLE
;
req
.
suid
=
pStb
->
uid
;
int32_t
contLen
=
tSerializeSVDropTbReq
(
NULL
,
&
req
)
+
sizeof
(
SMsgHead
);
SMsgHead
*
pHead
=
taosMemoryMalloc
(
contLen
);
tEncodeSize
(
tEncodeSVDropStbReq
,
&
req
,
contLen
,
ret
);
if
(
ret
<
0
)
return
NULL
;
contLen
+=
sizeof
(
SMsgHead
);
pHead
=
taosMemoryMalloc
(
contLen
);
if
(
pHead
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
return
NULL
;
...
...
@@ -448,7 +454,10 @@ static void *mndBuildVDropStbReq(SMnode *pMnode, SVgObj *pVgroup, SStbObj *pStb,
pHead
->
vgId
=
htonl
(
pVgroup
->
vgId
);
void
*
pBuf
=
POINTER_SHIFT
(
pHead
,
sizeof
(
SMsgHead
));
tSerializeSVDropTbReq
(
&
pBuf
,
&
req
);
tCoderInit
(
&
coder
,
TD_LITTLE_ENDIAN
,
pBuf
,
contLen
-
sizeof
(
SMsgHead
),
TD_ENCODER
);
tEncodeSVDropStbReq
(
&
coder
,
&
req
);
tCoderClear
(
&
coder
);
*
pContLen
=
contLen
;
return
pHead
;
...
...
@@ -670,8 +679,8 @@ static int32_t mndCreateStb(SMnode *pMnode, SNodeMsg *pReq, SMCreateStbReq *pCre
memcpy
(
stbObj
.
pAst2
,
pCreate
->
pAst2
,
stbObj
.
ast2Len
);
}
stbObj
.
pColumns
=
taosMemory
Malloc
(
stbObj
.
numOfColumns
*
sizeof
(
SSchema
));
stbObj
.
pTags
=
taosMemory
Malloc
(
stbObj
.
numOfTags
*
sizeof
(
SSchema
));
stbObj
.
pColumns
=
taosMemory
Calloc
(
1
,
stbObj
.
numOfColumns
*
sizeof
(
SSchema
));
stbObj
.
pTags
=
taosMemory
Calloc
(
1
,
stbObj
.
numOfTags
*
sizeof
(
SSchema
));
if
(
stbObj
.
pColumns
==
NULL
||
stbObj
.
pTags
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
return
-
1
;
...
...
@@ -1102,7 +1111,7 @@ static int32_t mndSetAlterStbRedoLogs(SMnode *pMnode, STrans *pTrans, SDbObj *pD
SSdbRaw
*
pRedoRaw
=
mndStbActionEncode
(
pStb
);
if
(
pRedoRaw
==
NULL
)
return
-
1
;
if
(
mndTransAppendRedolog
(
pTrans
,
pRedoRaw
)
!=
0
)
return
-
1
;
if
(
sdbSetRawStatus
(
pRedoRaw
,
SDB_STATUS_
UPDATING
)
!=
0
)
return
-
1
;
if
(
sdbSetRawStatus
(
pRedoRaw
,
SDB_STATUS_
READY
)
!=
0
)
return
-
1
;
return
0
;
}
...
...
source/dnode/mnode/impl/test/sdb/sdbTest.cpp
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
source/dnode/mnode/sdb/inc/sdbInt.h
浏览文件 @
7bae3e3f
...
...
@@ -31,8 +31,6 @@ extern "C" {
#define mDebug(...) { if (mDebugFlag & DEBUG_DEBUG) { taosPrintLog("MND ", DEBUG_DEBUG, mDebugFlag, __VA_ARGS__); }}
#define mTrace(...) { if (mDebugFlag & DEBUG_TRACE) { taosPrintLog("MND ", DEBUG_TRACE, mDebugFlag, __VA_ARGS__); }}
#define SDB_MAX_SIZE (32 * 1024)
typedef
struct
SSdbRaw
{
int8_t
type
;
int8_t
status
;
...
...
source/dnode/mnode/sdb/src/sdb.c
浏览文件 @
7bae3e3f
...
...
@@ -28,12 +28,12 @@ SSdb *sdbInit(SSdbOpt *pOption) {
return
NULL
;
}
char
path
[
PATH_MAX
+
100
];
snprintf
(
path
,
PATH_MAX
+
100
,
"%s%sdata"
,
pOption
->
path
,
TD_DIRSEP
);
char
path
[
PATH_MAX
+
100
]
=
{
0
}
;
snprintf
(
path
,
sizeof
(
path
)
,
"%s%sdata"
,
pOption
->
path
,
TD_DIRSEP
);
pSdb
->
currDir
=
strdup
(
path
);
snprintf
(
path
,
PATH_MAX
+
100
,
"%s%ssync"
,
pOption
->
path
,
TD_DIRSEP
);
snprintf
(
path
,
sizeof
(
path
)
,
"%s%ssync"
,
pOption
->
path
,
TD_DIRSEP
);
pSdb
->
syncDir
=
strdup
(
path
);
snprintf
(
path
,
PATH_MAX
+
100
,
"%s%stmp"
,
pOption
->
path
,
TD_DIRSEP
);
snprintf
(
path
,
sizeof
(
path
)
,
"%s%stmp"
,
pOption
->
path
,
TD_DIRSEP
);
pSdb
->
tmpDir
=
strdup
(
path
);
if
(
pSdb
->
currDir
==
NULL
||
pSdb
->
currDir
==
NULL
||
pSdb
->
currDir
==
NULL
)
{
sdbCleanup
(
pSdb
);
...
...
@@ -50,7 +50,7 @@ SSdb *sdbInit(SSdbOpt *pOption) {
for
(
ESdbType
i
=
0
;
i
<
SDB_MAX
;
++
i
)
{
taosInitRWLatch
(
&
pSdb
->
locks
[
i
]);
pSdb
->
maxId
[
i
]
=
0
;
pSdb
->
tableVer
[
i
]
=
-
1
;
pSdb
->
tableVer
[
i
]
=
0
;
pSdb
->
keyTypes
[
i
]
=
SDB_KEY_INT32
;
}
...
...
@@ -99,7 +99,7 @@ void sdbCleanup(SSdb *pSdb) {
taosHashClear
(
hash
);
taosHashCleanup
(
hash
);
pSdb
->
hashObjs
[
i
]
=
NULL
;
mDebug
(
"sdb table:%
d is cleaned up"
,
i
);
mDebug
(
"sdb table:%
s is cleaned up"
,
sdbTableName
(
i
)
);
}
taosMemoryFree
(
pSdb
);
...
...
source/dnode/mnode/sdb/src/sdbFile.c
浏览文件 @
7bae3e3f
...
...
@@ -18,7 +18,7 @@
#include "tchecksum.h"
#include "wal.h"
#define SDB_TABLE_SIZE 24
#define SDB_TABLE_SIZE
24
#define SDB_RESERVE_SIZE 512
static
int32_t
sdbRunDeployFp
(
SSdb
*
pSdb
)
{
...
...
@@ -50,7 +50,7 @@ static int32_t sdbReadFileHead(SSdb *pSdb, TdFilePtr pFile) {
}
for
(
int32_t
i
=
0
;
i
<
SDB_TABLE_SIZE
;
++
i
)
{
int64_t
maxId
=
-
1
;
int64_t
maxId
=
0
;
ret
=
taosReadFile
(
pFile
,
&
maxId
,
sizeof
(
int64_t
));
if
(
ret
<
0
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
...
...
@@ -66,7 +66,7 @@ static int32_t sdbReadFileHead(SSdb *pSdb, TdFilePtr pFile) {
}
for
(
int32_t
i
=
0
;
i
<
SDB_TABLE_SIZE
;
++
i
)
{
int64_t
ver
=
-
1
;
int64_t
ver
=
0
;
ret
=
taosReadFile
(
pFile
,
&
ver
,
sizeof
(
int64_t
));
if
(
ret
<
0
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
...
...
@@ -102,7 +102,7 @@ static int32_t sdbWriteFileHead(SSdb *pSdb, TdFilePtr pFile) {
}
for
(
int32_t
i
=
0
;
i
<
SDB_TABLE_SIZE
;
++
i
)
{
int64_t
maxId
=
-
1
;
int64_t
maxId
=
0
;
if
(
i
<
SDB_MAX
)
{
maxId
=
pSdb
->
maxId
[
i
];
}
...
...
@@ -113,7 +113,7 @@ static int32_t sdbWriteFileHead(SSdb *pSdb, TdFilePtr pFile) {
}
for
(
int32_t
i
=
0
;
i
<
SDB_TABLE_SIZE
;
++
i
)
{
int64_t
ver
=
-
1
;
int64_t
ver
=
0
;
if
(
i
<
SDB_MAX
)
{
ver
=
pSdb
->
tableVer
[
i
];
}
...
...
@@ -165,6 +165,9 @@ int32_t sdbReadFile(SSdb *pSdb) {
return
-
1
;
}
int64_t
tableVer
[
SDB_MAX
]
=
{
0
};
memcpy
(
tableVer
,
pSdb
->
tableVer
,
sizeof
(
tableVer
));
while
(
1
)
{
readLen
=
sizeof
(
SSdbRaw
);
ret
=
taosReadFile
(
pFile
,
pRaw
,
readLen
);
...
...
@@ -206,15 +209,16 @@ int32_t sdbReadFile(SSdb *pSdb) {
code
=
sdbWriteWithoutFree
(
pSdb
,
pRaw
);
if
(
code
!=
0
)
{
mError
(
"failed to read file:%s since %s"
,
file
,
terrstr
());
goto
PARSE_SDB_DATA_ERRO
R
;
goto
_OVE
R
;
}
}
code
=
0
;
pSdb
->
lastCommitVer
=
pSdb
->
curVer
;
memcpy
(
pSdb
->
tableVer
,
tableVer
,
sizeof
(
tableVer
));
mDebug
(
"read file:%s successfully, ver:%"
PRId64
,
file
,
pSdb
->
lastCommitVer
);
PARSE_SDB_DATA_ERRO
R:
_OVE
R:
taosCloseFile
(
&
pFile
);
sdbFreeRaw
(
pRaw
);
...
...
@@ -259,7 +263,13 @@ static int32_t sdbWriteFileImp(SSdb *pSdb) {
SSdbRow
**
ppRow
=
taosHashIterate
(
hash
,
NULL
);
while
(
ppRow
!=
NULL
)
{
SSdbRow
*
pRow
=
*
ppRow
;
if
(
pRow
==
NULL
||
pRow
->
status
!=
SDB_STATUS_READY
)
{
if
(
pRow
==
NULL
)
{
ppRow
=
taosHashIterate
(
hash
,
ppRow
);
continue
;
}
if
(
pRow
->
status
!=
SDB_STATUS_READY
&&
pRow
->
status
!=
SDB_STATUS_DROPPING
)
{
sdbPrintOper
(
pSdb
,
pRow
,
"not-write"
);
ppRow
=
taosHashIterate
(
hash
,
ppRow
);
continue
;
}
...
...
source/dnode/mnode/sdb/src/sdbHash.c
浏览文件 @
7bae3e3f
...
...
@@ -16,7 +16,7 @@
#define _DEFAULT_SOURCE
#include "sdbInt.h"
static
void
sdbCheck
(
SSdb
*
pSdb
,
SSdbRow
*
pRow
);
static
void
sdbCheck
Row
(
SSdb
*
pSdb
,
SSdbRow
*
pRow
);
const
char
*
sdbTableName
(
ESdbType
type
)
{
switch
(
type
)
{
...
...
@@ -65,12 +65,10 @@ const char *sdbTableName(ESdbType type) {
}
}
static
const
char
*
sdbStatus
Str
(
ESdbStatus
status
)
{
static
const
char
*
sdbStatus
Name
(
ESdbStatus
status
)
{
switch
(
status
)
{
case
SDB_STATUS_CREATING
:
return
"creating"
;
case
SDB_STATUS_UPDATING
:
return
"updating"
;
case
SDB_STATUS_DROPPING
:
return
"dropping"
;
case
SDB_STATUS_READY
:
...
...
@@ -89,13 +87,13 @@ void sdbPrintOper(SSdb *pSdb, SSdbRow *pRow, const char *oper) {
if
(
keyType
==
SDB_KEY_BINARY
)
{
mTrace
(
"%s:%s, ref:%d oper:%s row:%p status:%s"
,
sdbTableName
(
pRow
->
type
),
(
char
*
)
pRow
->
pObj
,
pRow
->
refCount
,
oper
,
pRow
->
pObj
,
sdbStatus
Str
(
pRow
->
status
));
pRow
->
pObj
,
sdbStatus
Name
(
pRow
->
status
));
}
else
if
(
keyType
==
SDB_KEY_INT32
)
{
mTrace
(
"%s:%d, ref:%d oper:%s row:%p status:%s"
,
sdbTableName
(
pRow
->
type
),
*
(
int32_t
*
)
pRow
->
pObj
,
pRow
->
refCount
,
oper
,
pRow
->
pObj
,
sdbStatus
Str
(
pRow
->
status
));
oper
,
pRow
->
pObj
,
sdbStatus
Name
(
pRow
->
status
));
}
else
if
(
keyType
==
SDB_KEY_INT64
)
{
mTrace
(
"%s:%"
PRId64
", ref:%d oper:%s row:%p status:%s"
,
sdbTableName
(
pRow
->
type
),
*
(
int64_t
*
)
pRow
->
pObj
,
pRow
->
refCount
,
oper
,
pRow
->
pObj
,
sdbStatus
Str
(
pRow
->
status
));
pRow
->
refCount
,
oper
,
pRow
->
pObj
,
sdbStatus
Name
(
pRow
->
status
));
}
else
{
}
}
...
...
@@ -116,7 +114,7 @@ static SHashObj *sdbGetHash(SSdb *pSdb, int32_t type) {
}
static
int32_t
sdbGetkeySize
(
SSdb
*
pSdb
,
ESdbType
type
,
const
void
*
pKey
)
{
int32_t
keySize
;
int32_t
keySize
=
0
;
EKeyType
keyType
=
pSdb
->
keyTypes
[
type
];
if
(
keyType
==
SDB_KEY_INT32
)
{
...
...
@@ -149,7 +147,7 @@ static int32_t sdbInsertRow(SSdb *pSdb, SHashObj *hash, SSdbRaw *pRaw, SSdbRow *
if
(
taosHashPut
(
hash
,
pRow
->
pObj
,
keySize
,
&
pRow
,
sizeof
(
void
*
))
!=
0
)
{
taosWUnLockLatch
(
pLock
);
sdbFreeRow
(
pSdb
,
pRow
,
false
);
terrno
=
TSDB_CODE_
SDB_OBJ_ALREADY_THERE
;
terrno
=
TSDB_CODE_
OUT_OF_MEMORY
;
return
terrno
;
}
...
...
@@ -183,18 +181,18 @@ static int32_t sdbInsertRow(SSdb *pSdb, SHashObj *hash, SSdbRaw *pRaw, SSdbRow *
static
int32_t
sdbUpdateRow
(
SSdb
*
pSdb
,
SHashObj
*
hash
,
SSdbRaw
*
pRaw
,
SSdbRow
*
pNewRow
,
int32_t
keySize
)
{
SRWLatch
*
pLock
=
&
pSdb
->
locks
[
pNewRow
->
type
];
taos
R
LockLatch
(
pLock
);
taos
W
LockLatch
(
pLock
);
SSdbRow
**
ppOldRow
=
taosHashGet
(
hash
,
pNewRow
->
pObj
,
keySize
);
if
(
ppOldRow
==
NULL
||
*
ppOldRow
==
NULL
)
{
taos
R
UnLockLatch
(
pLock
);
taos
W
UnLockLatch
(
pLock
);
return
sdbInsertRow
(
pSdb
,
hash
,
pRaw
,
pNewRow
,
keySize
);
}
SSdbRow
*
pOldRow
=
*
ppOldRow
;
pOldRow
->
status
=
pRaw
->
status
;
sdbPrintOper
(
pSdb
,
pOldRow
,
"update"
);
taos
R
UnLockLatch
(
pLock
);
taos
W
UnLockLatch
(
pLock
);
int32_t
code
=
0
;
SdbUpdateFp
updateFp
=
pSdb
->
updateFps
[
pNewRow
->
type
];
...
...
@@ -230,8 +228,7 @@ static int32_t sdbDeleteRow(SSdb *pSdb, SHashObj *hash, SSdbRaw *pRaw, SSdbRow *
pSdb
->
tableVer
[
pOldRow
->
type
]
++
;
sdbFreeRow
(
pSdb
,
pRow
,
false
);
sdbCheck
(
pSdb
,
pOldRow
);
// sdbRelease(pSdb, pOldRow->pObj);
sdbCheckRow
(
pSdb
,
pOldRow
);
return
0
;
}
...
...
@@ -254,7 +251,6 @@ int32_t sdbWriteWithoutFree(SSdb *pSdb, SSdbRaw *pRaw) {
case
SDB_STATUS_CREATING
:
code
=
sdbInsertRow
(
pSdb
,
hash
,
pRaw
,
pRow
,
keySize
);
break
;
case
SDB_STATUS_UPDATING
:
case
SDB_STATUS_READY
:
case
SDB_STATUS_DROPPING
:
code
=
sdbUpdateRow
(
pSdb
,
hash
,
pRaw
,
pRow
,
keySize
);
...
...
@@ -295,7 +291,6 @@ void *sdbAcquire(SSdb *pSdb, ESdbType type, const void *pKey) {
SSdbRow
*
pRow
=
*
ppRow
;
switch
(
pRow
->
status
)
{
case
SDB_STATUS_READY
:
case
SDB_STATUS_UPDATING
:
atomic_add_fetch_32
(
&
pRow
->
refCount
,
1
);
pRet
=
pRow
->
pObj
;
sdbPrintOper
(
pSdb
,
pRow
,
"acquire"
);
...
...
@@ -315,9 +310,9 @@ void *sdbAcquire(SSdb *pSdb, ESdbType type, const void *pKey) {
return
pRet
;
}
static
void
sdbCheck
(
SSdb
*
pSdb
,
SSdbRow
*
pRow
)
{
static
void
sdbCheck
Row
(
SSdb
*
pSdb
,
SSdbRow
*
pRow
)
{
SRWLatch
*
pLock
=
&
pSdb
->
locks
[
pRow
->
type
];
taos
R
LockLatch
(
pLock
);
taos
W
LockLatch
(
pLock
);
int32_t
ref
=
atomic_load_32
(
&
pRow
->
refCount
);
sdbPrintOper
(
pSdb
,
pRow
,
"check"
);
...
...
@@ -325,7 +320,7 @@ static void sdbCheck(SSdb *pSdb, SSdbRow *pRow) {
sdbFreeRow
(
pSdb
,
pRow
,
true
);
}
taos
R
UnLockLatch
(
pLock
);
taos
W
UnLockLatch
(
pLock
);
}
void
sdbRelease
(
SSdb
*
pSdb
,
void
*
pObj
)
{
...
...
@@ -335,7 +330,7 @@ void sdbRelease(SSdb *pSdb, void *pObj) {
if
(
pRow
->
type
>=
SDB_MAX
)
return
;
SRWLatch
*
pLock
=
&
pSdb
->
locks
[
pRow
->
type
];
taos
R
LockLatch
(
pLock
);
taos
W
LockLatch
(
pLock
);
int32_t
ref
=
atomic_sub_fetch_32
(
&
pRow
->
refCount
,
1
);
sdbPrintOper
(
pSdb
,
pRow
,
"release"
);
...
...
@@ -343,7 +338,7 @@ void sdbRelease(SSdb *pSdb, void *pObj) {
sdbFreeRow
(
pSdb
,
pRow
,
true
);
}
taos
R
UnLockLatch
(
pLock
);
taos
W
UnLockLatch
(
pLock
);
}
void
*
sdbFetch
(
SSdb
*
pSdb
,
ESdbType
type
,
void
*
pIter
,
void
**
ppObj
)
{
...
...
@@ -355,16 +350,6 @@ void *sdbFetch(SSdb *pSdb, ESdbType type, void *pIter, void **ppObj) {
SRWLatch
*
pLock
=
&
pSdb
->
locks
[
type
];
taosRLockLatch
(
pLock
);
#if 0
if (pIter != NULL) {
SSdbRow *pLastRow = *(SSdbRow **)pIter;
int32_t ref = atomic_load_32(&pLastRow->refCount);
if (ref <= 0 && pLastRow->status == SDB_STATUS_DROPPED) {
sdbFreeRow(pSdb, pLastRow);
}
}
#endif
SSdbRow
**
ppRow
=
taosHashIterate
(
hash
,
pIter
);
while
(
ppRow
!=
NULL
)
{
SSdbRow
*
pRow
=
*
ppRow
;
...
...
source/dnode/mnode/sdb/src/sdbRaw.c
浏览文件 @
7bae3e3f
...
...
@@ -134,6 +134,11 @@ int32_t sdbSetRawStatus(SSdbRaw *pRaw, ESdbStatus status) {
return
-
1
;
}
if
(
status
==
SDB_STATUS_INIT
)
{
terrno
=
TSDB_CODE_INVALID_PARA
;
return
-
1
;
}
pRaw
->
status
=
status
;
return
0
;
}
...
...
source/dnode/qnode/inc/qndInt.h
浏览文件 @
7bae3e3f
...
...
@@ -29,7 +29,7 @@
extern
"C"
{
#endif
typedef
struct
SQWorker
Mgmt
SQHandle
;
typedef
struct
SQWorker
SQHandle
;
typedef
struct
SQnode
{
int32_t
qndId
;
...
...
source/dnode/vnode/CMakeLists.txt
浏览文件 @
7bae3e3f
...
...
@@ -8,7 +8,6 @@ target_sources(
"src/vnd/vnodeBufPool.c"
"src/vnd/vnodeCfg.c"
"src/vnd/vnodeCommit.c"
"src/vnd/vnodeInt.c"
"src/vnd/vnodeQuery.c"
"src/vnd/vnodeStateMgr.c"
"src/vnd/vnodeModule.c"
...
...
@@ -33,7 +32,6 @@ target_sources(
"src/tsdb/tsdbMemTable.c"
"src/tsdb/tsdbRead.c"
"src/tsdb/tsdbReadImpl.c"
"src/tsdb/tsdbScan.c"
"src/tsdb/tsdbSma.c"
"src/tsdb/tsdbWrite.c"
...
...
source/dnode/vnode/inc/vnode.h
浏览文件 @
7bae3e3f
...
...
@@ -32,12 +32,12 @@
#include "tmsg.h"
#include "trow.h"
#include "tdb
Int
.h"
#include "tdb.h"
#ifdef __cplusplus
extern
"C"
{
#endif
#define TSDB_VNODE_SMA_DEBUG // TODO: evaluate to remove the macro and the relative codes
// vnode
typedef
struct
SVnode
SVnode
;
typedef
struct
STsdbCfg
STsdbCfg
;
// todo: remove
...
...
@@ -57,9 +57,6 @@ int vnodeProcessCMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp);
int
vnodeProcessSyncReq
(
SVnode
*
pVnode
,
SRpcMsg
*
pMsg
,
SRpcMsg
**
pRsp
);
int
vnodeProcessQueryMsg
(
SVnode
*
pVnode
,
SRpcMsg
*
pMsg
);
int
vnodeProcessFetchMsg
(
SVnode
*
pVnode
,
SRpcMsg
*
pMsg
,
SQueueInfo
*
pInfo
);
int32_t
vnodeAlter
(
SVnode
*
pVnode
,
const
SVnodeCfg
*
pCfg
);
int32_t
vnodeCompact
(
SVnode
*
pVnode
);
int32_t
vnodeSync
(
SVnode
*
pVnode
);
int32_t
vnodeGetLoad
(
SVnode
*
pVnode
,
SVnodeLoad
*
pLoad
);
int
vnodeValidateTableHash
(
SVnode
*
pVnode
,
char
*
tableFName
);
...
...
@@ -146,9 +143,19 @@ struct STsdbCfg {
int32_t
keep0
;
int32_t
keep1
;
int32_t
keep2
;
SArray
*
retentions
;
// TODO: save to tsdb cfg file
int8_t
type
;
// ETsdbType
SRetention
retentions
[
TSDB_RSMA_RETENTION_MAX
];
};
typedef
enum
{
TSDB_TYPE_TSDB
=
0
,
// TSDB
TSDB_TYPE_TSMA
=
1
,
// TSMA
TSDB_TYPE_RSMA_L0
=
2
,
// RSMA Level 0
TSDB_TYPE_RSMA_L1
=
3
,
// RSMA Level 1
TSDB_TYPE_RSMA_L2
=
4
,
// RSMA Level 2
}
ETsdbType
;
struct
SVnodeCfg
{
int32_t
vgId
;
char
dbname
[
TSDB_DB_NAME_LEN
];
...
...
source/dnode/vnode/src/inc/meta.h
浏览文件 @
7bae3e3f
...
...
@@ -43,7 +43,6 @@ int metaEncodeEntry(SCoder* pCoder, const SMetaEntry* pME);
int
metaDecodeEntry
(
SCoder
*
pCoder
,
SMetaEntry
*
pME
);
// metaTable ==================
int
metaDropSTable
(
SMeta
*
pMeta
,
int64_t
verison
,
SVDropStbReq
*
pReq
);
// metaQuery ==================
int
metaGetTableEntryByVersion
(
SMetaReader
*
pReader
,
int64_t
version
,
tb_uid_t
uid
);
...
...
source/dnode/vnode/src/inc/tsdb.h
浏览文件 @
7bae3e3f
...
...
@@ -73,7 +73,6 @@ struct STsdb {
SVnode
*
pVnode
;
bool
repoLocked
;
TdThreadMutex
mutex
;
STsdbCfg
config
;
STsdbMemTable
*
mem
;
STsdbMemTable
*
imem
;
SRtn
rtn
;
...
...
@@ -185,7 +184,7 @@ struct STsdbFS {
};
#define REPO_ID(r) TD_VID((r)->pVnode)
#define REPO_CFG(r) (&(r)->
confi
g)
#define REPO_CFG(r) (&(r)->
pVnode->config.tsdbCf
g)
#define REPO_FS(r) ((r)->fs)
#define REPO_META(r) ((r)->pVnode->pMeta)
#define REPO_TFS(r) ((r)->pVnode->pTfs)
...
...
@@ -534,23 +533,6 @@ static FORCE_INLINE int tsdbGetFidLevel(int fid, SRtn *pRtn) {
}
}
// tsdbDBDef
// typedef struct SDBFile SDBFile;
// typedef DB_ENV* TDBEnv;
// struct SDBFile {
// int32_t fid;
// DB* pDB;
// char* path;
// };
// int32_t tsdbOpenDBF(TDBEnv pEnv, SDBFile* pDBF);
// void tsdbCloseDBF(SDBFile* pDBF);
// int32_t tsdbOpenBDBEnv(DB_ENV** ppEnv, const char* path);
// void tsdbCloseBDBEnv(DB_ENV* pEnv);
// int32_t tsdbSaveSmaToDB(SDBFile* pDBF, void* key, uint32_t keySize, void* data, uint32_t dataSize);
// void* tsdbGetSmaDataByKey(SDBFile* pDBF, void* key, uint32_t keySize, uint32_t* valueSize);
// tsdbFile
#define TSDB_FILE_HEAD_SIZE 512
#define TSDB_FILE_DELIMITER 0xF00AFA0F
...
...
source/dnode/vnode/src/inc/vnodeInt.h
浏览文件 @
7bae3e3f
...
...
@@ -25,7 +25,7 @@
#include "tcompare.h"
#include "tcompression.h"
#include "tdatablock.h"
#include "tdb
Int
.h"
#include "tdb.h"
#include "tencode.h"
#include "tfs.h"
#include "tglobal.h"
...
...
@@ -52,12 +52,15 @@ typedef struct STsdb STsdb;
typedef
struct
STQ
STQ
;
typedef
struct
SVState
SVState
;
typedef
struct
SVBufPool
SVBufPool
;
typedef
struct
SQWorker
Mgmt
SQHandle
;
typedef
struct
SQWorker
SQHandle
;
#define VNODE_META_DIR "meta"
#define VNODE_TSDB_DIR "tsdb"
#define VNODE_TQ_DIR "tq"
#define VNODE_WAL_DIR "wal"
#define VNODE_META_DIR "meta"
#define VNODE_TSDB_DIR "tsdb"
#define VNODE_TQ_DIR "tq"
#define VNODE_WAL_DIR "wal"
#define VNODE_TSMA_DIR "tsma"
#define VNODE_RSMA1_DIR "rsma1"
#define VNODE_RSMA2_DIR "rsma2"
// vnd.h
void
*
vnodeBufPoolMalloc
(
SVBufPool
*
pPool
,
int
size
);
...
...
@@ -72,6 +75,7 @@ int metaClose(SMeta* pMeta);
int
metaBegin
(
SMeta
*
pMeta
);
int
metaCommit
(
SMeta
*
pMeta
);
int
metaCreateSTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateStbReq
*
pReq
);
int
metaDropSTable
(
SMeta
*
pMeta
,
int64_t
verison
,
SVDropStbReq
*
pReq
);
int
metaCreateTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateTbReq
*
pReq
);
SSchemaWrapper
*
metaGetTableSchema
(
SMeta
*
pMeta
,
tb_uid_t
uid
,
int32_t
sver
,
bool
isinline
);
STSchema
*
metaGetTbTSchema
(
SMeta
*
pMeta
,
tb_uid_t
uid
,
int32_t
sver
);
...
...
@@ -87,7 +91,7 @@ int32_t metaCreateTSma(SMeta* pMeta, SSmaCfg* pCfg);
int32_t
metaDropTSma
(
SMeta
*
pMeta
,
int64_t
indexUid
);
// tsdb
int
tsdbOpen
(
SVnode
*
pVnode
,
STsdb
**
ppTsdb
);
int
tsdbOpen
(
SVnode
*
pVnode
,
int8_t
type
);
int
tsdbClose
(
STsdb
*
pTsdb
);
int
tsdbBegin
(
STsdb
*
pTsdb
);
int
tsdbCommit
(
STsdb
*
pTsdb
);
...
...
@@ -95,7 +99,7 @@ int32_t tsdbUpdateSmaWindow(STsdb* pTsdb, SSubmitReq* pMsg, int64_t version
int32_t
tsdbCreateTSma
(
STsdb
*
pTsdb
,
char
*
pMsg
);
int32_t
tsdbInsertTSmaData
(
STsdb
*
pTsdb
,
int64_t
indexUid
,
const
char
*
msg
);
int
tsdbInsertData
(
STsdb
*
pTsdb
,
int64_t
version
,
SSubmitReq
*
pMsg
,
SSubmitRsp
*
pRsp
);
tsdbReaderT
*
tsdbQueryTables
T
(
STsdb
*
tsdb
,
SQueryTableDataCond
*
pCond
,
STableGroupInfo
*
groupList
,
uint64_t
qId
,
tsdbReaderT
*
tsdbQueryTables
(
SVnode
*
pVnode
,
SQueryTableDataCond
*
pCond
,
STableGroupInfo
*
groupList
,
uint64_t
qId
,
uint64_t
taskId
);
tsdbReaderT
tsdbQueryCacheLastT
(
STsdb
*
tsdb
,
SQueryTableDataCond
*
pCond
,
STableGroupInfo
*
groupList
,
uint64_t
qId
,
void
*
pMemRef
);
...
...
@@ -160,6 +164,8 @@ struct SVnode {
SVBufPool
*
onRecycle
;
SMeta
*
pMeta
;
STsdb
*
pTsdb
;
STsdb
*
pRSma1
;
STsdb
*
pRSma2
;
SWal
*
pWal
;
STQ
*
pTq
;
SSink
*
pSink
;
...
...
@@ -168,6 +174,11 @@ struct SVnode {
SQHandle
*
pQuery
;
};
#define VND_TSDB(vnd) ((vnd)->pTsdb)
#define VND_RSMA0(vnd) ((vnd)->pTsdb)
#define VND_RSMA1(vnd) ((vnd)->pRSma1)
#define VND_RSMA2(vnd) ((vnd)->pRSma2)
struct
STbUidStore
{
tb_uid_t
suid
;
SArray
*
tbUids
;
...
...
@@ -176,7 +187,11 @@ struct STbUidStore {
#define TD_VID(PVNODE) (PVNODE)->config.vgId
// typedef struct STbDdlH STbDdlH;
static
FORCE_INLINE
bool
tsdbIsRollup
(
SVnode
*
pVnode
)
{
SRetention
*
pRetention
=
&
(
pVnode
->
config
.
tsdbCfg
.
retentions
[
0
]);
return
(
pRetention
->
freq
>
0
&&
pRetention
->
keep
>
0
);
}
// sma
void
smaHandleRes
(
void
*
pVnode
,
int64_t
smaId
,
const
SArray
*
data
);
...
...
source/dnode/vnode/src/meta/metaOpen.c
浏览文件 @
7bae3e3f
...
...
@@ -47,66 +47,66 @@ int metaOpen(SVnode *pVnode, SMeta **ppMeta) {
// open env
ret
=
tdbEnvOpen
(
pMeta
->
path
,
pVnode
->
config
.
szPage
,
pVnode
->
config
.
szCache
,
&
pMeta
->
pEnv
);
if
(
ret
<
0
)
{
metaError
(
"vgId:
%d failed to open meta env since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d failed to open meta env since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open pTbDb
ret
=
tdbDbOpen
(
"table.db"
,
sizeof
(
STbDbKey
),
-
1
,
tbDbKeyCmpr
,
pMeta
->
pEnv
,
&
pMeta
->
pTbDb
);
if
(
ret
<
0
)
{
metaError
(
"vgId:
%d failed to open meta table db since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d failed to open meta table db since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open pSkmDb
ret
=
tdbDbOpen
(
"schema.db"
,
sizeof
(
SSkmDbKey
),
-
1
,
skmDbKeyCmpr
,
pMeta
->
pEnv
,
&
pMeta
->
pSkmDb
);
if
(
ret
<
0
)
{
metaError
(
"vgId:
%d failed to open meta schema db since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d failed to open meta schema db since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open pUidIdx
ret
=
tdbDbOpen
(
"uid.idx"
,
sizeof
(
tb_uid_t
),
sizeof
(
int64_t
),
uidIdxKeyCmpr
,
pMeta
->
pEnv
,
&
pMeta
->
pUidIdx
);
if
(
ret
<
0
)
{
metaError
(
"vgId:
%d failed to open meta uid idx since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d failed to open meta uid idx since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open pNameIdx
ret
=
tdbDbOpen
(
"name.idx"
,
-
1
,
sizeof
(
tb_uid_t
),
NULL
,
pMeta
->
pEnv
,
&
pMeta
->
pNameIdx
);
if
(
ret
<
0
)
{
metaError
(
"vgId:
%d failed to open meta name index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d failed to open meta name index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open pCtbIdx
ret
=
tdbDbOpen
(
"ctb.idx"
,
sizeof
(
SCtbIdxKey
),
0
,
ctbIdxKeyCmpr
,
pMeta
->
pEnv
,
&
pMeta
->
pCtbIdx
);
if
(
ret
<
0
)
{
metaError
(
"vgId:
%d failed to open meta child table index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d failed to open meta child table index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open pTagIdx
ret
=
tdbDbOpen
(
"tag.idx"
,
-
1
,
0
,
tagIdxKeyCmpr
,
pMeta
->
pEnv
,
&
pMeta
->
pTagIdx
);
if
(
ret
<
0
)
{
metaError
(
"vgId:
%d failed to open meta tag index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d failed to open meta tag index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open pTtlIdx
ret
=
tdbDbOpen
(
"ttl.idx"
,
sizeof
(
STtlIdxKey
),
0
,
ttlIdxKeyCmpr
,
pMeta
->
pEnv
,
&
pMeta
->
pTtlIdx
);
if
(
ret
<
0
)
{
metaError
(
"vgId:
%d failed to open meta ttl index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d failed to open meta ttl index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open index
if
(
metaOpenIdx
(
pMeta
)
<
0
)
{
metaError
(
"vgId:
%d failed to open meta index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
metaError
(
"vgId:%d failed to open meta index since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
metaDebug
(
"vgId:
%d meta is opened"
,
TD_VID
(
pVnode
));
metaDebug
(
"vgId:%d meta is opened"
,
TD_VID
(
pVnode
));
*
ppMeta
=
pMeta
;
return
0
;
...
...
source/dnode/vnode/src/meta/metaQuery.c
浏览文件 @
7bae3e3f
...
...
@@ -23,7 +23,7 @@ void metaReaderInit(SMetaReader *pReader, SMeta *pMeta, int32_t flags) {
void
metaReaderClear
(
SMetaReader
*
pReader
)
{
tCoderClear
(
&
pReader
->
coder
);
TDB_FREE
(
pReader
->
pBuf
);
tdbFree
(
pReader
->
pBuf
);
}
int
metaGetTableEntryByVersion
(
SMetaReader
*
pReader
,
int64_t
version
,
tb_uid_t
uid
)
{
...
...
@@ -96,15 +96,17 @@ SMTbCursor *metaOpenTbCursor(SMeta *pMeta) {
metaReaderInit
(
&
pTbCur
->
mr
,
pMeta
,
0
);
tdbDbcOpen
(
pMeta
->
pUidIdx
,
&
pTbCur
->
pDbc
);
tdbDbcOpen
(
pMeta
->
pUidIdx
,
&
pTbCur
->
pDbc
,
NULL
);
tdbDbcMoveToFirst
(
pTbCur
->
pDbc
);
return
pTbCur
;
}
void
metaCloseTbCursor
(
SMTbCursor
*
pTbCur
)
{
if
(
pTbCur
)
{
TDB_FREE
(
pTbCur
->
pKey
);
TDB_FREE
(
pTbCur
->
pVal
);
tdbFree
(
pTbCur
->
pKey
);
tdbFree
(
pTbCur
->
pVal
);
metaReaderClear
(
&
pTbCur
->
mr
);
if
(
pTbCur
->
pDbc
)
{
tdbDbcClose
(
pTbCur
->
pDbc
);
...
...
@@ -119,7 +121,7 @@ int metaTbCursorNext(SMTbCursor *pTbCur) {
STbCfg
tbCfg
;
for
(;;)
{
ret
=
tdbDbNext
(
pTbCur
->
pDbc
,
&
pTbCur
->
pKey
,
&
pTbCur
->
kLen
,
&
pTbCur
->
pVal
,
&
pTbCur
->
vLen
);
ret
=
tdbDb
c
Next
(
pTbCur
->
pDbc
,
&
pTbCur
->
pKey
,
&
pTbCur
->
kLen
,
&
pTbCur
->
pVal
,
&
pTbCur
->
vLen
);
if
(
ret
<
0
)
{
return
-
1
;
}
...
...
@@ -169,7 +171,7 @@ SSchemaWrapper *metaGetTableSchema(SMeta *pMeta, tb_uid_t uid, int32_t sver, boo
pSW
->
pSchema
=
pSchema
;
TDB_FREE
(
pVal
);
tdbFree
(
pVal
);
return
pSW
;
}
...
...
@@ -185,7 +187,9 @@ struct SMCtbCursor {
SMCtbCursor
*
metaOpenCtbCursor
(
SMeta
*
pMeta
,
tb_uid_t
uid
)
{
SMCtbCursor
*
pCtbCur
=
NULL
;
SCtbIdxKey
ctbIdxKey
;
int
ret
;
int
c
;
pCtbCur
=
(
SMCtbCursor
*
)
taosMemoryCalloc
(
1
,
sizeof
(
*
pCtbCur
));
if
(
pCtbCur
==
NULL
)
{
...
...
@@ -193,12 +197,20 @@ SMCtbCursor *metaOpenCtbCursor(SMeta *pMeta, tb_uid_t uid) {
}
pCtbCur
->
suid
=
uid
;
ret
=
tdbDbcOpen
(
pMeta
->
pCtbIdx
,
&
pCtbCur
->
pCur
);
ret
=
tdbDbcOpen
(
pMeta
->
pCtbIdx
,
&
pCtbCur
->
pCur
,
NULL
);
if
(
ret
<
0
)
{
taosMemoryFree
(
pCtbCur
);
return
NULL
;
}
// move to the suid
ctbIdxKey
.
suid
=
uid
;
ctbIdxKey
.
uid
=
INT64_MIN
;
tdbDbcMoveTo
(
pCtbCur
->
pCur
,
&
ctbIdxKey
,
sizeof
(
ctbIdxKey
),
&
c
);
if
(
c
>
0
)
{
tdbDbcMoveToNext
(
pCtbCur
->
pCur
);
}
return
pCtbCur
;
}
...
...
@@ -207,8 +219,8 @@ void metaCloseCtbCurosr(SMCtbCursor *pCtbCur) {
if
(
pCtbCur
->
pCur
)
{
tdbDbcClose
(
pCtbCur
->
pCur
);
TDB_FREE
(
pCtbCur
->
pKey
);
TDB_FREE
(
pCtbCur
->
pVal
);
tdbFree
(
pCtbCur
->
pKey
);
tdbFree
(
pCtbCur
->
pVal
);
}
taosMemoryFree
(
pCtbCur
);
...
...
@@ -219,12 +231,15 @@ tb_uid_t metaCtbCursorNext(SMCtbCursor *pCtbCur) {
int
ret
;
SCtbIdxKey
*
pCtbIdxKey
;
ret
=
tdbDbNext
(
pCtbCur
->
pCur
,
&
pCtbCur
->
pKey
,
&
pCtbCur
->
kLen
,
&
pCtbCur
->
pVal
,
&
pCtbCur
->
vLen
);
ret
=
tdbDb
c
Next
(
pCtbCur
->
pCur
,
&
pCtbCur
->
pKey
,
&
pCtbCur
->
kLen
,
&
pCtbCur
->
pVal
,
&
pCtbCur
->
vLen
);
if
(
ret
<
0
)
{
return
0
;
}
pCtbIdxKey
=
pCtbCur
->
pKey
;
if
(
pCtbIdxKey
->
suid
>
pCtbCur
->
suid
)
{
return
0
;
}
return
pCtbIdxKey
->
uid
;
}
...
...
@@ -283,7 +298,7 @@ STSmaWrapper *metaGetSmaInfoByTable(SMeta *pMeta, tb_uid_t uid) {
while (true) {
// TODO: lock during iterate?
if (tdbDbNext(pCur->pCur, &pCur->pKey, &pCur->kLen, NULL, &pCur->vLen) == 0) {
if (tdbDb
c
Next(pCur->pCur, &pCur->pKey, &pCur->kLen, NULL, &pCur->vLen) == 0) {
pSmaIdxKey = pCur->pKey;
ASSERT(pSmaIdxKey != NULL);
...
...
@@ -297,7 +312,7 @@ STSmaWrapper *metaGetSmaInfoByTable(SMeta *pMeta, tb_uid_t uid) {
++pSW->number;
STSma *tptr = (STSma *)taosMemoryRealloc(pSW->tSma, pSW->number * sizeof(STSma));
if (tptr == NULL) {
TDB_FREE
(pSmaVal);
tdbFree
(pSmaVal);
metaCloseSmaCursor(pCur);
tdDestroyTSmaWrapper(pSW);
taosMemoryFreeClear(pSW);
...
...
@@ -306,13 +321,13 @@ STSmaWrapper *metaGetSmaInfoByTable(SMeta *pMeta, tb_uid_t uid) {
pSW->tSma = tptr;
pBuf = pSmaVal;
if (tDecodeTSma(pBuf, pSW->tSma + pSW->number - 1) == NULL) {
TDB_FREE
(pSmaVal);
tdbFree
(pSmaVal);
metaCloseSmaCursor(pCur);
tdDestroyTSmaWrapper(pSW);
taosMemoryFreeClear(pSW);
return NULL;
}
TDB_FREE
(pSmaVal);
tdbFree
(pSmaVal);
continue;
}
break;
...
...
@@ -354,7 +369,7 @@ SArray *metaGetSmaTbUids(SMeta *pMeta, bool isDup) {
tb_uid_t uid = 0;
while (true) {
// TODO: lock during iterate?
if (tdbDbNext(pCur->pCur, &pCur->pKey, &pCur->kLen, NULL, &pCur->vLen) == 0) {
if (tdbDb
c
Next(pCur->pCur, &pCur->pKey, &pCur->kLen, NULL, &pCur->vLen) == 0) {
ASSERT(pSmaIdxKey != NULL);
pSmaIdxKey = pCur->pKey;
...
...
@@ -425,11 +440,11 @@ void *metaGetSmaInfoByIndex(SMeta *pMeta, int64_t indexUid, bool isDecode) {
if (tDecodeTSma(pBuf, pCfg) == NULL) {
tdDestroyTSma(pCfg);
taosMemoryFree(pCfg);
TDB_FREE
(pVal);
tdbFree
(pVal);
return NULL;
}
TDB_FREE
(pVal);
tdbFree
(pVal);
return pCfg;
#endif
#endif
...
...
source/dnode/vnode/src/meta/metaTDBImpl.c
浏览文件 @
7bae3e3f
...
...
@@ -289,7 +289,7 @@ int metaSaveTableToDB(SMeta *pMeta, STbCfg *pTbCfg, STbDdlH *pHandle) {
pVal
=
pBuf
=
buf
;
metaEncodeTbInfo
(
&
pBuf
,
pTbCfg
);
vLen
=
POINTER_DISTANCE
(
pBuf
,
buf
);
ret
=
tdbDb
Inser
t
(
pMetaDb
->
pTbDB
,
pKey
,
kLen
,
pVal
,
vLen
,
&
pMetaDb
->
txn
);
ret
=
tdbDb
Pu
t
(
pMetaDb
->
pTbDB
,
pKey
,
kLen
,
pVal
,
vLen
,
&
pMetaDb
->
txn
);
if
(
ret
<
0
)
{
return
-
1
;
}
...
...
@@ -311,7 +311,7 @@ int metaSaveTableToDB(SMeta *pMeta, STbCfg *pTbCfg, STbDdlH *pHandle) {
pVal
=
pBuf
=
buf
;
metaEncodeSchemaEx
(
&
pBuf
,
&
schemaWrapper
);
vLen
=
POINTER_DISTANCE
(
pBuf
,
buf
);
ret
=
tdbDb
Inser
t
(
pMetaDb
->
pSchemaDB
,
pKey
,
kLen
,
pVal
,
vLen
,
&
pMeta
->
pDB
->
txn
);
ret
=
tdbDb
Pu
t
(
pMetaDb
->
pSchemaDB
,
pKey
,
kLen
,
pVal
,
vLen
,
&
pMeta
->
pDB
->
txn
);
if
(
ret
<
0
)
{
return
-
1
;
}
...
...
@@ -325,7 +325,7 @@ int metaSaveTableToDB(SMeta *pMeta, STbCfg *pTbCfg, STbDdlH *pHandle) {
kLen
=
nameLen
+
1
+
sizeof
(
uid
);
pVal
=
NULL
;
vLen
=
0
;
ret
=
tdbDb
Inser
t
(
pMetaDb
->
pNameIdx
,
pKey
,
kLen
,
pVal
,
vLen
,
&
pMetaDb
->
txn
);
ret
=
tdbDb
Pu
t
(
pMetaDb
->
pNameIdx
,
pKey
,
kLen
,
pVal
,
vLen
,
&
pMetaDb
->
txn
);
if
(
ret
<
0
)
{
return
-
1
;
}
...
...
@@ -336,7 +336,7 @@ int metaSaveTableToDB(SMeta *pMeta, STbCfg *pTbCfg, STbDdlH *pHandle) {
kLen
=
sizeof
(
uid
);
pVal
=
NULL
;
vLen
=
0
;
ret
=
tdbDb
Inser
t
(
pMetaDb
->
pStbIdx
,
pKey
,
kLen
,
pVal
,
vLen
,
&
pMetaDb
->
txn
);
ret
=
tdbDb
Pu
t
(
pMetaDb
->
pStbIdx
,
pKey
,
kLen
,
pVal
,
vLen
,
&
pMetaDb
->
txn
);
if
(
ret
<
0
)
{
return
-
1
;
}
...
...
@@ -347,7 +347,7 @@ int metaSaveTableToDB(SMeta *pMeta, STbCfg *pTbCfg, STbDdlH *pHandle) {
kLen
=
sizeof
(
ctbIdxKey
);
pVal
=
NULL
;
vLen
=
0
;
ret
=
tdbDb
Inser
t
(
pMetaDb
->
pCtbIdx
,
pKey
,
kLen
,
pVal
,
vLen
,
&
pMetaDb
->
txn
);
ret
=
tdbDb
Pu
t
(
pMetaDb
->
pCtbIdx
,
pKey
,
kLen
,
pVal
,
vLen
,
&
pMetaDb
->
txn
);
if
(
ret
<
0
)
{
return
-
1
;
}
...
...
@@ -362,7 +362,7 @@ int metaSaveTableToDB(SMeta *pMeta, STbCfg *pTbCfg, STbDdlH *pHandle) {
kLen
=
sizeof
(
uid
);
pVal
=
NULL
;
vLen
=
0
;
ret
=
tdbDb
Inser
t
(
pMetaDb
->
pNtbIdx
,
pKey
,
kLen
,
pVal
,
vLen
,
&
pMetaDb
->
txn
);
ret
=
tdbDb
Pu
t
(
pMetaDb
->
pNtbIdx
,
pKey
,
kLen
,
pVal
,
vLen
,
&
pMetaDb
->
txn
);
if
(
ret
<
0
)
{
return
-
1
;
}
...
...
@@ -407,7 +407,7 @@ static SSchemaWrapper *metaGetTableSchemaImpl(SMeta *pMeta, tb_uid_t uid, int32_
pSchemaWrapper
=
taosMemoryMalloc
(
sizeof
(
*
pSchemaWrapper
));
metaDecodeSchemaEx
(
pBuf
,
pSchemaWrapper
,
isGetEx
);
TDB_FREE
(
pVal
);
tdbFree
(
pVal
);
return
pSchemaWrapper
;
}
...
...
@@ -438,7 +438,7 @@ STSmaWrapper *metaGetSmaInfoByTable(SMeta *pMeta, tb_uid_t uid) {
while
(
true
)
{
// TODO: lock during iterate?
if
(
tdbDbNext
(
pCur
->
pCur
,
&
pCur
->
pKey
,
&
pCur
->
kLen
,
NULL
,
&
pCur
->
vLen
)
==
0
)
{
if
(
tdbDb
c
Next
(
pCur
->
pCur
,
&
pCur
->
pKey
,
&
pCur
->
kLen
,
NULL
,
&
pCur
->
vLen
)
==
0
)
{
pSmaIdxKey
=
pCur
->
pKey
;
ASSERT
(
pSmaIdxKey
!=
NULL
);
...
...
@@ -450,7 +450,7 @@ STSmaWrapper *metaGetSmaInfoByTable(SMeta *pMeta, tb_uid_t uid) {
}
if
((
pSW
==
NULL
)
&&
((
pSW
=
taosMemoryCalloc
(
1
,
sizeof
(
*
pSW
)))
==
NULL
))
{
TDB_FREE
(
pSmaVal
);
tdbFree
(
pSmaVal
);
metaCloseSmaCursor
(
pCur
);
return
NULL
;
}
...
...
@@ -458,7 +458,7 @@ STSmaWrapper *metaGetSmaInfoByTable(SMeta *pMeta, tb_uid_t uid) {
++
pSW
->
number
;
STSma
*
tptr
=
(
STSma
*
)
taosMemoryRealloc
(
pSW
->
tSma
,
pSW
->
number
*
sizeof
(
STSma
));
if
(
tptr
==
NULL
)
{
TDB_FREE
(
pSmaVal
);
tdbFree
(
pSmaVal
);
metaCloseSmaCursor
(
pCur
);
tdDestroyTSmaWrapper
(
pSW
);
taosMemoryFreeClear
(
pSW
);
...
...
@@ -467,13 +467,13 @@ STSmaWrapper *metaGetSmaInfoByTable(SMeta *pMeta, tb_uid_t uid) {
pSW
->
tSma
=
tptr
;
pBuf
=
pSmaVal
;
if
(
tDecodeTSma
(
pBuf
,
pSW
->
tSma
+
pSW
->
number
-
1
)
==
NULL
)
{
TDB_FREE
(
pSmaVal
);
tdbFree
(
pSmaVal
);
metaCloseSmaCursor
(
pCur
);
tdDestroyTSmaWrapper
(
pSW
);
taosMemoryFreeClear
(
pSW
);
return
NULL
;
}
TDB_FREE
(
pSmaVal
);
tdbFree
(
pSmaVal
);
continue
;
}
break
;
...
...
@@ -530,7 +530,7 @@ int metaSaveSmaToDB(SMeta *pMeta, STSma *pSmaCfg) {
int32_t
kLen
=
sizeof
(
pSmaCfg
->
indexUid
);
int32_t
vLen
=
POINTER_DISTANCE
(
qBuf
,
pBuf
);
ret
=
tdbDb
Inser
t
(
pMeta
->
pDB
->
pSmaDB
,
key
,
kLen
,
val
,
vLen
,
&
pMetaDb
->
txn
);
ret
=
tdbDb
Pu
t
(
pMeta
->
pDB
->
pSmaDB
,
key
,
kLen
,
val
,
vLen
,
&
pMetaDb
->
txn
);
if
(
ret
<
0
)
{
taosMemoryFreeClear
(
pBuf
);
return
-
1
;
...
...
@@ -545,7 +545,7 @@ int metaSaveSmaToDB(SMeta *pMeta, STSma *pSmaCfg) {
val
=
NULL
;
vLen
=
0
;
ret
=
tdbDb
Inser
t
(
pMeta
->
pDB
->
pSmaIdx
,
key
,
kLen
,
val
,
vLen
,
&
pMetaDb
->
txn
);
ret
=
tdbDb
Pu
t
(
pMeta
->
pDB
->
pSmaIdx
,
key
,
kLen
,
val
,
vLen
,
&
pMetaDb
->
txn
);
if
(
ret
<
0
)
{
taosMemoryFreeClear
(
pBuf
);
return
-
1
;
...
...
@@ -613,7 +613,7 @@ int64_t metaSmaCursorNext(SMSmaCursor *pCur) {
void
*
pBuf
;
SSmaIdxKey
*
smaIdxKey
;
ret
=
tdbDbNext
(
pCur
->
pCur
,
&
pCur
->
pKey
,
&
pCur
->
kLen
,
&
pCur
->
pVal
,
&
pCur
->
vLen
);
ret
=
tdbDb
c
Next
(
pCur
->
pCur
,
&
pCur
->
pKey
,
&
pCur
->
kLen
,
&
pCur
->
pVal
,
&
pCur
->
vLen
);
if
(
ret
<
0
)
{
return
0
;
}
...
...
source/dnode/vnode/src/meta/metaTable.c
浏览文件 @
7bae3e3f
...
...
@@ -61,19 +61,58 @@ int metaCreateSTable(SMeta *pMeta, int64_t version, SVCreateStbReq *pReq) {
if
(
metaHandleEntry
(
pMeta
,
&
me
)
<
0
)
goto
_err
;
metaDebug
(
"vgId:
%d super table is created, name:%s uid: %"
PRId64
,
TD_VID
(
pMeta
->
pVnode
),
pReq
->
name
,
pReq
->
suid
);
metaDebug
(
"vgId:%d super table is created, name:%s uid: %"
PRId64
,
TD_VID
(
pMeta
->
pVnode
),
pReq
->
name
,
pReq
->
suid
);
return
0
;
_err:
metaError
(
"vgId:
%d failed to create super table: %s uid: %"
PRId64
" since %s"
,
TD_VID
(
pMeta
->
pVnode
),
pReq
->
name
,
metaError
(
"vgId:%d failed to create super table: %s uid: %"
PRId64
" since %s"
,
TD_VID
(
pMeta
->
pVnode
),
pReq
->
name
,
pReq
->
suid
,
tstrerror
(
terrno
));
return
-
1
;
}
int
metaDropSTable
(
SMeta
*
pMeta
,
int64_t
verison
,
SVDropStbReq
*
pReq
)
{
// TODO
SMetaReader
mr
=
{
0
};
// validate req
metaReaderInit
(
&
mr
,
pMeta
,
0
);
if
(
metaGetTableEntryByUid
(
&
mr
,
pReq
->
suid
)
<
0
)
{
terrno
=
TSDB_CODE_VND_TABLE_NOT_EXIST
;
goto
_err
;
}
// do drop
// drop from pTbDb
// drop from pSkmDb
// drop from pUidIdx
// drop from pNameIdx
// {
// TDBC *pDbc1 = NULL;
// void *pKey = NULL;
// void *pVal = NULL;
// int kLen = 0;
// int vLen = 0;
// int ret = 0;
// // drop from pCtbIdx
// ret = tdbDbcOpen(pMeta->pCtbIdx, &pDbc1);
// tdbDbcMoveTo(pDbc1, &pReq->suid, sizeof(pReq->suid), NULL /*cmpr*/, 0 /*TDB_FORWARD_SEARCH*/);
// tdbDbcGet(pDbc1, &pKey, &kLen, &pVal, vLen);
// tdbDbcDrop(pDbc1);
// // drop from pTagIdx
// // drop from pTtlIdx
// }
// clear and return
metaReaderClear
(
&
mr
);
metaError
(
"vgId:%d super table %s uid:%"
PRId64
" is dropped"
,
TD_VID
(
pMeta
->
pVnode
),
pReq
->
name
,
pReq
->
suid
);
return
0
;
_err:
metaReaderClear
(
&
mr
);
metaError
(
"vgId:%d failed to drop super table %s uid:%"
PRId64
" since %s"
,
TD_VID
(
pMeta
->
pVnode
),
pReq
->
name
,
pReq
->
suid
,
tstrerror
(
terrno
));
return
-
1
;
}
int
metaCreateTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVCreateTbReq
*
pReq
)
{
...
...
@@ -179,7 +218,7 @@ static int metaSaveToTbDb(SMeta *pMeta, const SMetaEntry *pME) {
tCoderClear
(
&
coder
);
// write to table.db
if
(
tdbDb
Inser
t
(
pMeta
->
pTbDb
,
pKey
,
kLen
,
pVal
,
vLen
,
&
pMeta
->
txn
)
<
0
)
{
if
(
tdbDb
Pu
t
(
pMeta
->
pTbDb
,
pKey
,
kLen
,
pVal
,
vLen
,
&
pMeta
->
txn
)
<
0
)
{
goto
_err
;
}
...
...
@@ -192,11 +231,11 @@ _err:
}
static
int
metaUpdateUidIdx
(
SMeta
*
pMeta
,
const
SMetaEntry
*
pME
)
{
return
tdbDb
Inser
t
(
pMeta
->
pUidIdx
,
&
pME
->
uid
,
sizeof
(
tb_uid_t
),
&
pME
->
version
,
sizeof
(
int64_t
),
&
pMeta
->
txn
);
return
tdbDb
Pu
t
(
pMeta
->
pUidIdx
,
&
pME
->
uid
,
sizeof
(
tb_uid_t
),
&
pME
->
version
,
sizeof
(
int64_t
),
&
pMeta
->
txn
);
}
static
int
metaUpdateNameIdx
(
SMeta
*
pMeta
,
const
SMetaEntry
*
pME
)
{
return
tdbDb
Inser
t
(
pMeta
->
pNameIdx
,
pME
->
name
,
strlen
(
pME
->
name
)
+
1
,
&
pME
->
uid
,
sizeof
(
tb_uid_t
),
&
pMeta
->
txn
);
return
tdbDb
Pu
t
(
pMeta
->
pNameIdx
,
pME
->
name
,
strlen
(
pME
->
name
)
+
1
,
&
pME
->
uid
,
sizeof
(
tb_uid_t
),
&
pMeta
->
txn
);
}
static
int
metaUpdateTtlIdx
(
SMeta
*
pMeta
,
const
SMetaEntry
*
pME
)
{
...
...
@@ -219,12 +258,12 @@ static int metaUpdateTtlIdx(SMeta *pMeta, const SMetaEntry *pME) {
ttlKey
.
dtime
=
ctime
+
ttlDays
*
24
*
60
*
60
;
ttlKey
.
uid
=
pME
->
uid
;
return
tdbDb
Inser
t
(
pMeta
->
pTtlIdx
,
&
ttlKey
,
sizeof
(
ttlKey
),
NULL
,
0
,
&
pMeta
->
txn
);
return
tdbDb
Pu
t
(
pMeta
->
pTtlIdx
,
&
ttlKey
,
sizeof
(
ttlKey
),
NULL
,
0
,
&
pMeta
->
txn
);
}
static
int
metaUpdateCtbIdx
(
SMeta
*
pMeta
,
const
SMetaEntry
*
pME
)
{
SCtbIdxKey
ctbIdxKey
=
{.
suid
=
pME
->
ctbEntry
.
suid
,
.
uid
=
pME
->
uid
};
return
tdbDb
Inser
t
(
pMeta
->
pCtbIdx
,
&
ctbIdxKey
,
sizeof
(
ctbIdxKey
),
NULL
,
0
,
&
pMeta
->
txn
);
return
tdbDb
Pu
t
(
pMeta
->
pCtbIdx
,
&
ctbIdxKey
,
sizeof
(
ctbIdxKey
),
NULL
,
0
,
&
pMeta
->
txn
);
}
static
int
metaUpdateTagIdx
(
SMeta
*
pMeta
,
const
SMetaEntry
*
pME
)
{
...
...
@@ -265,7 +304,7 @@ static int metaSaveToSkmDb(SMeta *pMeta, const SMetaEntry *pME) {
tCoderInit
(
&
coder
,
TD_LITTLE_ENDIAN
,
pVal
,
vLen
,
TD_ENCODER
);
tEncodeSSchemaWrapper
(
&
coder
,
pSW
);
if
(
tdbDb
Inser
t
(
pMeta
->
pSkmDb
,
&
skmDbKey
,
sizeof
(
skmDbKey
),
pVal
,
vLen
,
&
pMeta
->
txn
)
<
0
)
{
if
(
tdbDb
Pu
t
(
pMeta
->
pSkmDb
,
&
skmDbKey
,
sizeof
(
skmDbKey
),
pVal
,
vLen
,
&
pMeta
->
txn
)
<
0
)
{
rcode
=
-
1
;
goto
_exit
;
}
...
...
source/dnode/vnode/src/tsdb/tsdbCommit.c
浏览文件 @
7bae3e3f
...
...
@@ -55,7 +55,7 @@ typedef struct {
#define TSDB_COMMIT_BUF(ch) TSDB_READ_BUF(&((ch)->readh))
#define TSDB_COMMIT_COMP_BUF(ch) TSDB_READ_COMP_BUF(&((ch)->readh))
#define TSDB_COMMIT_EXBUF(ch) TSDB_READ_EXBUF(&((ch)->readh))
#define TSDB_COMMIT_DEFAULT_ROWS(ch) TSDB_DEFAULT_BLOCK_ROWS(TSDB_COMMIT_REPO(ch)->
confi
g.maxRows)
#define TSDB_COMMIT_DEFAULT_ROWS(ch) TSDB_DEFAULT_BLOCK_ROWS(TSDB_COMMIT_REPO(ch)->
pVnode->config.tsdbCf
g.maxRows)
#define TSDB_COMMIT_TXN_VERSION(ch) FS_TXN_VERSION(REPO_FS(TSDB_COMMIT_REPO(ch)))
static
void
tsdbStartCommit
(
STsdb
*
pRepo
);
...
...
source/dnode/vnode/src/tsdb/tsdbOpen.c
浏览文件 @
7bae3e3f
...
...
@@ -15,12 +15,34 @@
#include "tsdb.h"
int
tsdbOpen
(
SVnode
*
pVnode
,
STsdb
**
ppTsdb
)
{
static
int
tsdbOpenImpl
(
SVnode
*
pVnode
,
int8_t
type
,
STsdb
**
ppTsdb
,
const
char
*
dir
);
int
tsdbOpen
(
SVnode
*
pVnode
,
int8_t
type
)
{
switch
(
type
)
{
case
TSDB_TYPE_TSDB
:
return
tsdbOpenImpl
(
pVnode
,
type
,
&
VND_TSDB
(
pVnode
),
VNODE_TSDB_DIR
);
case
TSDB_TYPE_TSMA
:
ASSERT
(
0
);
break
;
case
TSDB_TYPE_RSMA_L0
:
return
tsdbOpenImpl
(
pVnode
,
type
,
&
VND_RSMA0
(
pVnode
),
VNODE_TSDB_DIR
);
case
TSDB_TYPE_RSMA_L1
:
return
tsdbOpenImpl
(
pVnode
,
type
,
&
VND_RSMA1
(
pVnode
),
VNODE_RSMA1_DIR
);
case
TSDB_TYPE_RSMA_L2
:
return
tsdbOpenImpl
(
pVnode
,
type
,
&
VND_RSMA2
(
pVnode
),
VNODE_RSMA2_DIR
);
default:
ASSERT
(
0
);
break
;
}
return
0
;
}
int
tsdbOpenImpl
(
SVnode
*
pVnode
,
int8_t
type
,
STsdb
**
ppTsdb
,
const
char
*
dir
)
{
STsdb
*
pTsdb
=
NULL
;
int
slen
=
0
;
*
ppTsdb
=
NULL
;
slen
=
strlen
(
tfsGetPrimaryPath
(
pVnode
->
pTfs
))
+
strlen
(
pVnode
->
path
)
+
strlen
(
VNODE_TSDB_DIR
)
+
3
;
slen
=
strlen
(
tfsGetPrimaryPath
(
pVnode
->
pTfs
))
+
strlen
(
pVnode
->
path
)
+
strlen
(
dir
)
+
3
;
// create handle
pTsdb
=
(
STsdb
*
)
taosMemoryCalloc
(
1
,
sizeof
(
*
pTsdb
)
+
slen
);
...
...
@@ -31,12 +53,11 @@ int tsdbOpen(SVnode *pVnode, STsdb **ppTsdb) {
pTsdb
->
path
=
(
char
*
)
&
pTsdb
[
1
];
sprintf
(
pTsdb
->
path
,
"%s%s%s%s%s"
,
tfsGetPrimaryPath
(
pVnode
->
pTfs
),
TD_DIRSEP
,
pVnode
->
path
,
TD_DIRSEP
,
VNODE_TSDB_DIR
);
dir
);
pTsdb
->
pVnode
=
pVnode
;
pTsdb
->
repoLocked
=
false
;
tdbMutexInit
(
&
pTsdb
->
mutex
,
NULL
);
pTsdb
->
config
=
pVnode
->
config
.
tsdbCfg
;
pTsdb
->
fs
=
tsdbNewFS
(
&
pTsdb
->
config
);
taosThreadMutexInit
(
&
pTsdb
->
mutex
,
NULL
);
pTsdb
->
fs
=
tsdbNewFS
(
REPO_CFG
(
pTsdb
));
// create dir (TODO: use tfsMkdir)
taosMkDir
(
pTsdb
->
path
);
...
...
@@ -46,7 +67,7 @@ int tsdbOpen(SVnode *pVnode, STsdb **ppTsdb) {
goto
_err
;
}
tsdbDebug
(
"vgId: %d tsdb is opened
"
,
TD_VID
(
pVnode
)
);
tsdbDebug
(
"vgId: %d tsdb is opened
for %s"
,
TD_VID
(
pVnode
),
pTsdb
->
path
);
*
ppTsdb
=
pTsdb
;
return
0
;
...
...
source/dnode/vnode/src/tsdb/tsdbRead.c
浏览文件 @
7bae3e3f
...
...
@@ -130,6 +130,7 @@ typedef struct STsdbReadHandle {
SArray
*
prev
;
// previous row which is before than time window
SArray
*
next
;
// next row which is after the query time window
SIOCostSummary
cost
;
STSchema
*
pSchema
;
}
STsdbReadHandle
;
typedef
struct
STableGroupSupporter
{
...
...
@@ -311,7 +312,7 @@ static bool emptyQueryTimewindow(STsdbReadHandle* pTsdbReadHandle) {
// Update the query time window according to the data time to live(TTL) information, in order to avoid to return
// the expired data to client, even it is queried already.
static
int64_t
getEarliestValidTimestamp
(
STsdb
*
pTsdb
)
{
STsdbCfg
*
pCfg
=
&
pTsdb
->
config
;
STsdbCfg
*
pCfg
=
REPO_CFG
(
pTsdb
)
;
int64_t
now
=
taosGetTimestamp
(
pCfg
->
precision
);
return
now
-
(
tsTickPerDay
[
pCfg
->
precision
]
*
pCfg
->
keep2
)
+
1
;
// needs to add one tick
...
...
@@ -343,14 +344,14 @@ static void setQueryTimewindow(STsdbReadHandle* pTsdbReadHandle, SQueryTableData
}
}
static
STsdbReadHandle
*
tsdbQueryTablesImpl
(
S
Tsdb
*
tsdb
,
SQueryTableDataCond
*
pCond
,
uint64_t
qId
,
uint64_t
taskId
)
{
static
STsdbReadHandle
*
tsdbQueryTablesImpl
(
S
Vnode
*
pVnode
,
SQueryTableDataCond
*
pCond
,
uint64_t
qId
,
uint64_t
taskId
)
{
STsdbReadHandle
*
pReadHandle
=
taosMemoryCalloc
(
1
,
sizeof
(
STsdbReadHandle
));
if
(
pReadHandle
==
NULL
)
{
goto
_end
;
}
pReadHandle
->
order
=
pCond
->
order
;
pReadHandle
->
pTsdb
=
t
sdb
;
pReadHandle
->
pTsdb
=
pVnode
->
pT
sdb
;
pReadHandle
->
type
=
TSDB_QUERY_TYPE_ALL
;
pReadHandle
->
cur
.
fid
=
INT32_MIN
;
pReadHandle
->
cur
.
win
=
TSWINDOW_INITIALIZER
;
...
...
@@ -368,7 +369,7 @@ static STsdbReadHandle* tsdbQueryTablesImpl(STsdb* tsdb, SQueryTableDataCond* pC
snprintf
(
buf
,
tListLen
(
buf
),
"TID:0x%"
PRIx64
" QID:0x%"
PRIx64
,
taskId
,
qId
);
pReadHandle
->
idStr
=
strdup
(
buf
);
if
(
tsdbInitReadH
(
&
pReadHandle
->
rhelper
,
(
STsdb
*
)
t
sdb
)
!=
0
)
{
if
(
tsdbInitReadH
(
&
pReadHandle
->
rhelper
,
(
STsdb
*
)
pVnode
->
pT
sdb
)
!=
0
)
{
goto
_end
;
}
...
...
@@ -404,7 +405,7 @@ static STsdbReadHandle* tsdbQueryTablesImpl(STsdb* tsdb, SQueryTableDataCond* pC
pReadHandle
->
defaultLoadColumn
=
getDefaultLoadColumns
(
pReadHandle
,
true
);
}
pReadHandle
->
pDataCols
=
tdNewDataCols
(
1000
,
pReadHandle
->
pTsdb
->
confi
g
.
maxRows
);
pReadHandle
->
pDataCols
=
tdNewDataCols
(
1000
,
pReadHandle
->
pTsdb
->
pVnode
->
config
.
tsdbCf
g
.
maxRows
);
if
(
pReadHandle
->
pDataCols
==
NULL
)
{
tsdbError
(
"%p failed to malloc buf for pDataCols, %s"
,
pReadHandle
,
pReadHandle
->
idStr
);
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
...
...
@@ -422,9 +423,10 @@ _end:
return
NULL
;
}
tsdbReaderT
*
tsdbQueryTables
T
(
STsdb
*
tsdb
,
SQueryTableDataCond
*
pCond
,
STableGroupInfo
*
groupList
,
uint64_t
qId
,
tsdbReaderT
*
tsdbQueryTables
(
SVnode
*
pVnode
,
SQueryTableDataCond
*
pCond
,
STableGroupInfo
*
groupList
,
uint64_t
qId
,
uint64_t
taskId
)
{
STsdbReadHandle
*
pTsdbReadHandle
=
tsdbQueryTablesImpl
(
tsdb
,
pCond
,
qId
,
taskId
);
STsdbReadHandle
*
pTsdbReadHandle
=
tsdbQueryTablesImpl
(
pVnode
,
pCond
,
qId
,
taskId
);
if
(
pTsdbReadHandle
==
NULL
)
{
return
NULL
;
}
...
...
@@ -441,6 +443,9 @@ tsdbReaderT* tsdbQueryTablesT(STsdb* tsdb, SQueryTableDataCond* pCond, STableGro
return
NULL
;
}
STableCheckInfo
*
pCheckInfo
=
taosArrayGet
(
pTsdbReadHandle
->
pTableCheckInfo
,
0
);
pTsdbReadHandle
->
pSchema
=
metaGetTbTSchema
(
pVnode
->
pMeta
,
pCheckInfo
->
tableId
,
0
);
tsdbDebug
(
"%p total numOfTable:%"
PRIzu
" in this query, group %"
PRIzu
" %s"
,
pTsdbReadHandle
,
taosArrayGetSize
(
pTsdbReadHandle
->
pTableCheckInfo
),
taosArrayGetSize
(
groupList
->
pGroupList
),
pTsdbReadHandle
->
idStr
);
...
...
@@ -526,7 +531,7 @@ void tsdbResetQueryHandleForNewTable(tsdbReaderT queryHandle, SQueryTableDataCon
// pTsdbReadHandle->next = doFreeColumnInfoData(pTsdbReadHandle->next);
}
tsdbReaderT
tsdbQueryLastRow
(
S
Tsdb
*
tsdb
,
SQueryTableDataCond
*
pCond
,
STableGroupInfo
*
groupList
,
uint64_t
qId
,
tsdbReaderT
tsdbQueryLastRow
(
S
Vnode
*
pVnode
,
SQueryTableDataCond
*
pCond
,
STableGroupInfo
*
groupList
,
uint64_t
qId
,
uint64_t
taskId
)
{
pCond
->
twindow
=
updateLastrowForEachGroup
(
groupList
);
...
...
@@ -535,7 +540,7 @@ tsdbReaderT tsdbQueryLastRow(STsdb* tsdb, SQueryTableDataCond* pCond, STableGrou
return
NULL
;
}
STsdbReadHandle
*
pTsdbReadHandle
=
(
STsdbReadHandle
*
)
tsdbQueryTables
T
(
tsdb
,
pCond
,
groupList
,
qId
,
taskId
);
STsdbReadHandle
*
pTsdbReadHandle
=
(
STsdbReadHandle
*
)
tsdbQueryTables
(
pVnode
,
pCond
,
groupList
,
qId
,
taskId
);
if
(
pTsdbReadHandle
==
NULL
)
{
return
NULL
;
}
...
...
@@ -618,7 +623,7 @@ static STableGroupInfo* trimTableGroup(STimeWindow* window, STableGroupInfo* pGr
return
pNew
;
}
tsdbReaderT
tsdbQueryRowsInExternalWindow
(
S
Tsdb
*
tsdb
,
SQueryTableDataCond
*
pCond
,
STableGroupInfo
*
groupList
,
tsdbReaderT
tsdbQueryRowsInExternalWindow
(
S
Vnode
*
pVnode
,
SQueryTableDataCond
*
pCond
,
STableGroupInfo
*
groupList
,
uint64_t
qId
,
uint64_t
taskId
)
{
STableGroupInfo
*
pNew
=
trimTableGroup
(
&
pCond
->
twindow
,
groupList
);
...
...
@@ -634,7 +639,7 @@ tsdbReaderT tsdbQueryRowsInExternalWindow(STsdb* tsdb, SQueryTableDataCond* pCon
}
}
STsdbReadHandle
*
pTsdbReadHandle
=
(
STsdbReadHandle
*
)
tsdbQueryTables
T
(
tsdb
,
pCond
,
pNew
,
qId
,
taskId
);
STsdbReadHandle
*
pTsdbReadHandle
=
(
STsdbReadHandle
*
)
tsdbQueryTables
(
pVnode
,
pCond
,
pNew
,
qId
,
taskId
);
pTsdbReadHandle
->
loadExternalRow
=
true
;
pTsdbReadHandle
->
currentLoadExternalRows
=
true
;
...
...
@@ -889,7 +894,7 @@ static bool moveToNextRowInMem(STableCheckInfo* pCheckInfo) {
}
static
bool
hasMoreDataInCache
(
STsdbReadHandle
*
pHandle
)
{
STsdbCfg
*
pCfg
=
&
pHandle
->
pTsdb
->
config
;
STsdbCfg
*
pCfg
=
REPO_CFG
(
pHandle
->
pTsdb
)
;
size_t
size
=
taosArrayGetSize
(
pHandle
->
pTableCheckInfo
);
assert
(
pHandle
->
activeIndex
<
size
&&
pHandle
->
activeIndex
>=
0
&&
size
>=
1
);
pHandle
->
cur
.
fid
=
INT32_MIN
;
...
...
@@ -986,7 +991,7 @@ static int32_t loadBlockInfo(STsdbReadHandle* pTsdbReadHandle, int32_t index, in
pCheckInfo
->
numOfBlocks
=
0
;
STable
table
=
{.
uid
=
pCheckInfo
->
tableId
,
.
tid
=
pCheckInfo
->
tableId
};
table
.
pSchema
=
metaGetTbTSchema
(
REPO_META
(
pTsdbReadHandle
->
pTsdb
),
pCheckInfo
->
tableId
,
0
)
;
table
.
pSchema
=
pTsdbReadHandle
->
pSchema
;
if
(
tsdbSetReadTable
(
&
pTsdbReadHandle
->
rhelper
,
&
table
)
!=
TSDB_CODE_SUCCESS
)
{
code
=
terrno
;
...
...
@@ -1091,22 +1096,21 @@ static int32_t doLoadFileDataBlock(STsdbReadHandle* pTsdbReadHandle, SBlock* pBl
int32_t
slotIndex
)
{
int64_t
st
=
taosGetTimestampUs
();
STSchema
*
pSchema
=
metaGetTbTSchema
(
REPO_META
(
pTsdbReadHandle
->
pTsdb
),
pCheckInfo
->
tableId
,
0
);
int32_t
code
=
tdInitDataCols
(
pTsdbReadHandle
->
pDataCols
,
pSchema
);
int32_t
code
=
tdInitDataCols
(
pTsdbReadHandle
->
pDataCols
,
pTsdbReadHandle
->
pSchema
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
tsdbError
(
"%p failed to malloc buf for pDataCols, %s"
,
pTsdbReadHandle
,
pTsdbReadHandle
->
idStr
);
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
goto
_error
;
}
code
=
tdInitDataCols
(
pTsdbReadHandle
->
rhelper
.
pDCols
[
0
],
pSchema
);
code
=
tdInitDataCols
(
pTsdbReadHandle
->
rhelper
.
pDCols
[
0
],
p
TsdbReadHandle
->
p
Schema
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
tsdbError
(
"%p failed to malloc buf for rhelper.pDataCols[0], %s"
,
pTsdbReadHandle
,
pTsdbReadHandle
->
idStr
);
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
goto
_error
;
}
code
=
tdInitDataCols
(
pTsdbReadHandle
->
rhelper
.
pDCols
[
1
],
pSchema
);
code
=
tdInitDataCols
(
pTsdbReadHandle
->
rhelper
.
pDCols
[
1
],
p
TsdbReadHandle
->
p
Schema
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
tsdbError
(
"%p failed to malloc buf for rhelper.pDataCols[1], %s"
,
pTsdbReadHandle
,
pTsdbReadHandle
->
idStr
);
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
...
...
@@ -1169,7 +1173,7 @@ static void copyAllRemainRowsFromFileBlock(STsdbReadHandle* pTsdbReadHandle,
static
int32_t
handleDataMergeIfNeeded
(
STsdbReadHandle
*
pTsdbReadHandle
,
SBlock
*
pBlock
,
STableCheckInfo
*
pCheckInfo
)
{
SQueryFilePos
*
cur
=
&
pTsdbReadHandle
->
cur
;
STsdbCfg
*
pCfg
=
&
pTsdbReadHandle
->
pTsdb
->
config
;
STsdbCfg
*
pCfg
=
REPO_CFG
(
pTsdbReadHandle
->
pTsdb
)
;
SDataBlockInfo
binfo
=
GET_FILE_DATA_BLOCK_INFO
(
pCheckInfo
,
pBlock
);
TSKEY
key
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
...
...
@@ -1756,7 +1760,7 @@ int32_t getEndPosInDataBlock(STsdbReadHandle* pTsdbReadHandle, SDataBlockInfo* p
static
void
doMergeTwoLevelData
(
STsdbReadHandle
*
pTsdbReadHandle
,
STableCheckInfo
*
pCheckInfo
,
SBlock
*
pBlock
)
{
SQueryFilePos
*
cur
=
&
pTsdbReadHandle
->
cur
;
SDataBlockInfo
blockInfo
=
GET_FILE_DATA_BLOCK_INFO
(
pCheckInfo
,
pBlock
);
STsdbCfg
*
pCfg
=
&
pTsdbReadHandle
->
pTsdb
->
config
;
STsdbCfg
*
pCfg
=
REPO_CFG
(
pTsdbReadHandle
->
pTsdb
)
;
initTableMemIterator
(
pTsdbReadHandle
,
pCheckInfo
);
...
...
@@ -2200,7 +2204,7 @@ static int32_t getFirstFileDataBlock(STsdbReadHandle* pTsdbReadHandle, bool* exi
int32_t
numOfBlocks
=
0
;
int32_t
numOfTables
=
(
int32_t
)
taosArrayGetSize
(
pTsdbReadHandle
->
pTableCheckInfo
);
STsdbCfg
*
pCfg
=
&
pTsdbReadHandle
->
pTsdb
->
config
;
STsdbCfg
*
pCfg
=
REPO_CFG
(
pTsdbReadHandle
->
pTsdb
)
;
STimeWindow
win
=
TSWINDOW_INITIALIZER
;
while
(
true
)
{
...
...
@@ -2306,7 +2310,7 @@ int32_t tsdbGetFileBlocksDistInfo(tsdbReaderT* queryHandle, STableBlockDistInfo*
// find the start data block in file
pTsdbReadHandle
->
locateStart
=
true
;
STsdbCfg
*
pCfg
=
&
pTsdbReadHandle
->
pTsdb
->
config
;
STsdbCfg
*
pCfg
=
REPO_CFG
(
pTsdbReadHandle
->
pTsdb
)
;
int32_t
fid
=
getFileIdFromKey
(
pTsdbReadHandle
->
window
.
skey
,
pCfg
->
days
,
pCfg
->
precision
);
tsdbRLockFS
(
pFileHandle
);
...
...
@@ -2407,7 +2411,7 @@ static int32_t getDataBlocksInFiles(STsdbReadHandle* pTsdbReadHandle, bool* exis
// find the start data block in file
if
(
!
pTsdbReadHandle
->
locateStart
)
{
pTsdbReadHandle
->
locateStart
=
true
;
STsdbCfg
*
pCfg
=
&
pTsdbReadHandle
->
pTsdb
->
config
;
STsdbCfg
*
pCfg
=
REPO_CFG
(
pTsdbReadHandle
->
pTsdb
)
;
int32_t
fid
=
getFileIdFromKey
(
pTsdbReadHandle
->
window
.
skey
,
pCfg
->
days
,
pCfg
->
precision
);
tsdbRLockFS
(
pFileHandle
);
...
...
@@ -2498,7 +2502,7 @@ static int tsdbReadRowsFromCache(STableCheckInfo* pCheckInfo, TSKEY maxKey, int
STsdbReadHandle
*
pTsdbReadHandle
)
{
int
numOfRows
=
0
;
int32_t
numOfCols
=
(
int32_t
)
taosArrayGetSize
(
pTsdbReadHandle
->
pColumns
);
STsdbCfg
*
pCfg
=
&
pTsdbReadHandle
->
pTsdb
->
config
;
STsdbCfg
*
pCfg
=
REPO_CFG
(
pTsdbReadHandle
->
pTsdb
)
;
win
->
skey
=
TSKEY_INITIAL_VAL
;
int64_t
st
=
taosGetTimestampUs
();
...
...
@@ -3292,6 +3296,7 @@ int32_t tsdbRetrieveDataBlockStatisInfo(tsdbReaderT* pTsdbReadHandle, SColumnDat
if
(
pHandle
->
statis
[
i
].
numOfNull
==
-
1
)
{
// set the column data are all NULL
pHandle
->
statis
[
i
].
numOfNull
=
pBlockInfo
->
compBlock
->
numOfRows
;
}
}
int64_t
elapsed
=
taosGetTimestampUs
()
-
stime
;
...
...
source/dnode/vnode/src/tsdb/tsdbReadImpl.c
浏览文件 @
7bae3e3f
...
...
@@ -248,7 +248,8 @@ int tsdbLoadBlockInfo(SReadH *pReadh, void *pTarget) {
int
tsdbLoadBlockData
(
SReadH
*
pReadh
,
SBlock
*
pBlock
,
SBlockInfo
*
pBlkInfo
)
{
ASSERT
(
pBlock
->
numOfSubBlocks
>
0
);
int8_t
update
=
pReadh
->
pRepo
->
config
.
update
;
STsdbCfg
*
pCfg
=
REPO_CFG
(
pReadh
->
pRepo
);
int8_t
update
=
pCfg
->
update
;
SBlock
*
iBlock
=
pBlock
;
if
(
pBlock
->
numOfSubBlocks
>
1
)
{
...
...
@@ -279,7 +280,7 @@ int tsdbLoadBlockData(SReadH *pReadh, SBlock *pBlock, SBlockInfo *pBlkInfo) {
int
tsdbLoadBlockDataCols
(
SReadH
*
pReadh
,
SBlock
*
pBlock
,
SBlockInfo
*
pBlkInfo
,
const
int16_t
*
colIds
,
int
numOfColsIds
,
bool
mergeBitmap
)
{
ASSERT
(
pBlock
->
numOfSubBlocks
>
0
);
int8_t
update
=
pReadh
->
pRepo
->
confi
g
.
update
;
int8_t
update
=
pReadh
->
pRepo
->
pVnode
->
config
.
tsdbCf
g
.
update
;
SBlock
*
iBlock
=
pBlock
;
if
(
pBlock
->
numOfSubBlocks
>
1
)
{
...
...
source/dnode/vnode/src/tsdb/tsdbScan.c
已删除
100644 → 0
浏览文件 @
022f5bfc
/*
* 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/>.
*/
#if 0
#include "tsdb.h"
#ifndef _TSDB_PLUGINS
int tsdbScanFGroup(STsdbScanHandle* pScanHandle, char* rootDir, int fid) { return 0; }
STsdbScanHandle* tsdbNewScanHandle() { return NULL; }
void tsdbSetScanLogStream(STsdbScanHandle* pScanHandle, FILE* fLogStream) {}
int tsdbSetAndOpenScanFile(STsdbScanHandle* pScanHandle, char* rootDir, int fid) { return 0; }
int tsdbScanSBlockIdx(STsdbScanHandle* pScanHandle) { return 0; }
int tsdbScanSBlock(STsdbScanHandle* pScanHandle, int idx) { return 0; }
int tsdbCloseScanFile(STsdbScanHandle* pScanHandle) { return 0; }
void tsdbFreeScanHandle(STsdbScanHandle* pScanHandle) {}
#endif
#endif
\ No newline at end of file
source/dnode/vnode/src/tsdb/tsdbSma.c
浏览文件 @
7bae3e3f
...
...
@@ -103,10 +103,9 @@ typedef struct {
STSma
*
pSma
;
// cache schema
}
SSmaStatItem
;
#define RSMA_MAX_LEVEL 2
#define RSMA_TASK_INFO_HASH_SLOT 8
struct
SRSmaInfo
{
void
*
taskInfo
[
RSMA_MAX_LEVEL
];
// qTaskInfo_t
void
*
taskInfo
[
TSDB_RSMA_RETENTION_2
];
// qTaskInfo_t
};
struct
SSmaStat
{
...
...
@@ -128,7 +127,7 @@ static FORCE_INLINE void tsdbFreeTaskHandle(qTaskInfo_t *taskHandle) {
}
static
FORCE_INLINE
void
*
tsdbFreeRSmaInfo
(
SRSmaInfo
*
pInfo
)
{
for
(
int32_t
i
=
0
;
i
<
RSMA_MAX_LEVEL
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
TSDB_RSMA_RETENTION_MAX
;
++
i
)
{
if
(
pInfo
->
taskInfo
[
i
])
{
tsdbFreeTaskHandle
(
pInfo
->
taskInfo
[
i
]);
}
...
...
@@ -224,7 +223,7 @@ static FORCE_INLINE int32_t tsdbUnLockSma(SSmaEnv *pEnv) {
}
static
SPoolMem
*
openPool
()
{
SPoolMem
*
pPool
=
(
SPoolMem
*
)
t
dbOs
Malloc
(
sizeof
(
*
pPool
));
SPoolMem
*
pPool
=
(
SPoolMem
*
)
t
aosMemory
Malloc
(
sizeof
(
*
pPool
));
pPool
->
prev
=
pPool
->
next
=
pPool
;
pPool
->
size
=
0
;
...
...
@@ -246,7 +245,7 @@ static void clearPool(SPoolMem *pPool) {
pMem
->
prev
->
next
=
pMem
->
next
;
pPool
->
size
-=
pMem
->
size
;
t
dbOs
Free
(
pMem
);
t
aosMemory
Free
(
pMem
);
}
while
(
1
);
assert
(
pPool
->
size
==
0
);
...
...
@@ -255,7 +254,7 @@ static void clearPool(SPoolMem *pPool) {
static
void
closePool
(
SPoolMem
*
pPool
)
{
if
(
pPool
)
{
clearPool
(
pPool
);
t
dbOs
Free
(
pPool
);
t
aosMemory
Free
(
pPool
);
}
}
...
...
@@ -264,7 +263,7 @@ static void *poolMalloc(void *arg, size_t size) {
SPoolMem
*
pPool
=
(
SPoolMem
*
)
arg
;
SPoolMem
*
pMem
;
pMem
=
(
SPoolMem
*
)
t
dbOs
Malloc
(
sizeof
(
*
pMem
)
+
size
);
pMem
=
(
SPoolMem
*
)
t
aosMemory
Malloc
(
sizeof
(
*
pMem
)
+
size
);
if
(
!
pMem
)
{
assert
(
0
);
}
...
...
@@ -291,7 +290,7 @@ static void poolFree(void *arg, void *ptr) {
pMem
->
prev
->
next
=
pMem
->
next
;
pPool
->
size
-=
pMem
->
size
;
t
dbOs
Free
(
pMem
);
t
aosMemory
Free
(
pMem
);
}
int32_t
tsdbInitSma
(
STsdb
*
pTsdb
)
{
...
...
source/dnode/vnode/src/tsdb/tsdbTDBImpl.c
浏览文件 @
7bae3e3f
...
...
@@ -55,12 +55,12 @@ static inline int tsdbSmaKeyCmpr(const void *arg1, int len1, const void *arg2, i
}
static
int32_t
tsdbOpenDBDb
(
TDB
**
ppDB
,
TENV
*
pEnv
,
const
char
*
pFName
)
{
int
ret
;
FKeyComparator
compFunc
;
int
ret
;
tdb_cmpr_fn_t
compFunc
;
// Create a database
compFunc
=
tsdbSmaKeyCmpr
;
ret
=
tdbDbOpen
(
pFName
,
TDB_VARIANT_LEN
,
TDB_VARIANT_LEN
,
compFunc
,
pEnv
,
ppDB
);
ret
=
tdbDbOpen
(
pFName
,
-
1
,
-
1
,
compFunc
,
pEnv
,
ppDB
);
return
0
;
}
...
...
@@ -97,7 +97,7 @@ int32_t tsdbCloseDBF(SDBFile *pDBF) {
int32_t
tsdbSaveSmaToDB
(
SDBFile
*
pDBF
,
void
*
pKey
,
int32_t
keyLen
,
void
*
pVal
,
int32_t
valLen
,
TXN
*
txn
)
{
int32_t
ret
;
ret
=
tdbDb
Inser
t
(
pDBF
->
pDB
,
pKey
,
keyLen
,
pVal
,
valLen
,
txn
);
ret
=
tdbDb
Pu
t
(
pDBF
->
pDB
,
pKey
,
keyLen
,
pVal
,
valLen
,
txn
);
if
(
ret
<
0
)
{
tsdbError
(
"Failed to create insert sma data into db, ret = %d"
,
ret
);
return
-
1
;
...
...
source/dnode/vnode/src/tsdb/tsdbWrite.c
浏览文件 @
7bae3e3f
...
...
@@ -60,9 +60,10 @@ static int tsdbScanAndConvertSubmitMsg(STsdb *pTsdb, SSubmitReq *pMsg) {
SSubmitBlk
*
pBlock
=
NULL
;
SSubmitBlkIter
blkIter
=
{
0
};
STSRow
*
row
=
NULL
;
TSKEY
now
=
taosGetTimestamp
(
pTsdb
->
config
.
precision
);
TSKEY
minKey
=
now
-
tsTickPerDay
[
pTsdb
->
config
.
precision
]
*
pTsdb
->
config
.
keep2
;
TSKEY
maxKey
=
now
+
tsTickPerDay
[
pTsdb
->
config
.
precision
]
*
pTsdb
->
config
.
days
;
STsdbCfg
*
pCfg
=
REPO_CFG
(
pTsdb
);
TSKEY
now
=
taosGetTimestamp
(
pCfg
->
precision
);
TSKEY
minKey
=
now
-
tsTickPerDay
[
pCfg
->
precision
]
*
pCfg
->
keep2
;
TSKEY
maxKey
=
now
+
tsTickPerDay
[
pCfg
->
precision
]
*
pCfg
->
days
;
terrno
=
TSDB_CODE_SUCCESS
;
pMsg
->
length
=
htonl
(
pMsg
->
length
);
...
...
source/dnode/vnode/src/vnd/vnodeCfg.c
浏览文件 @
7bae3e3f
...
...
@@ -66,6 +66,28 @@ int vnodeEncodeConfig(const void *pObj, SJson *pJson) {
if
(
tjsonAddIntegerToObject
(
pJson
,
"keep0"
,
pCfg
->
tsdbCfg
.
keep0
)
<
0
)
return
-
1
;
if
(
tjsonAddIntegerToObject
(
pJson
,
"keep1"
,
pCfg
->
tsdbCfg
.
keep1
)
<
0
)
return
-
1
;
if
(
tjsonAddIntegerToObject
(
pJson
,
"keep2"
,
pCfg
->
tsdbCfg
.
keep2
)
<
0
)
return
-
1
;
#ifdef TSDB_VNODE_SMA_DEBUG
if
(
pCfg
->
tsdbCfg
.
retentions
[
0
].
freq
>
0
)
{
int32_t
nRetention
=
1
;
if
(
pCfg
->
tsdbCfg
.
retentions
[
1
].
freq
>
0
)
{
++
nRetention
;
if
(
pCfg
->
tsdbCfg
.
retentions
[
2
].
freq
>
0
)
{
++
nRetention
;
}
}
SJson
*
pNodeRetentions
=
tjsonCreateArray
();
tjsonAddItemToObject
(
pJson
,
"retentions"
,
pNodeRetentions
);
for
(
int32_t
i
=
0
;
i
<
nRetention
;
++
i
)
{
SJson
*
pNodeRetention
=
tjsonCreateObject
();
const
SRetention
*
pRetention
=
pCfg
->
tsdbCfg
.
retentions
+
i
;
tjsonAddIntegerToObject
(
pNodeRetention
,
"freq"
,
pRetention
->
freq
);
tjsonAddIntegerToObject
(
pNodeRetention
,
"freqUnit"
,
pRetention
->
freqUnit
);
tjsonAddIntegerToObject
(
pNodeRetention
,
"keep"
,
pRetention
->
keep
);
tjsonAddIntegerToObject
(
pNodeRetention
,
"keepUnit"
,
pRetention
->
keepUnit
);
tjsonAddItemToArray
(
pNodeRetentions
,
pNodeRetention
);
}
}
#endif
if
(
tjsonAddIntegerToObject
(
pJson
,
"wal.vgId"
,
pCfg
->
walCfg
.
vgId
)
<
0
)
return
-
1
;
if
(
tjsonAddIntegerToObject
(
pJson
,
"wal.fsyncPeriod"
,
pCfg
->
walCfg
.
fsyncPeriod
)
<
0
)
return
-
1
;
if
(
tjsonAddIntegerToObject
(
pJson
,
"wal.retentionPeriod"
,
pCfg
->
walCfg
.
retentionPeriod
)
<
0
)
return
-
1
;
...
...
@@ -113,6 +135,20 @@ int vnodeDecodeConfig(const SJson *pJson, void *pObj) {
if
(
tjsonGetNumberValue
(
pJson
,
"keep0"
,
pCfg
->
tsdbCfg
.
keep0
)
<
0
)
return
-
1
;
if
(
tjsonGetNumberValue
(
pJson
,
"keep1"
,
pCfg
->
tsdbCfg
.
keep1
)
<
0
)
return
-
1
;
if
(
tjsonGetNumberValue
(
pJson
,
"keep2"
,
pCfg
->
tsdbCfg
.
keep2
)
<
0
)
return
-
1
;
#ifdef TSDB_VNODE_SMA_DEBUG
SJson
*
pNodeRetentions
=
tjsonGetObjectItem
(
pJson
,
"retentions"
);
int
nRetention
=
tjsonGetArraySize
(
pNodeRetentions
);
ASSERT
(
nRetention
<=
TSDB_RSMA_RETENTION_MAX
);
for
(
int32_t
i
=
0
;
i
<
nRetention
;
++
i
)
{
SJson
*
pNodeRetention
=
tjsonGetArrayItem
(
pNodeRetentions
,
i
);
ASSERT
(
pNodeRetention
!=
NULL
);
tjsonGetNumberValue
(
pNodeRetention
,
"freq"
,
(
pCfg
->
tsdbCfg
.
retentions
)[
i
].
freq
);
tjsonGetNumberValue
(
pNodeRetention
,
"freqUnit"
,
(
pCfg
->
tsdbCfg
.
retentions
)[
i
].
freqUnit
);
tjsonGetNumberValue
(
pNodeRetention
,
"keep"
,
(
pCfg
->
tsdbCfg
.
retentions
)[
i
].
keep
);
tjsonGetNumberValue
(
pNodeRetention
,
"keepUnit"
,
(
pCfg
->
tsdbCfg
.
retentions
)[
i
].
keepUnit
);
}
#endif
if
(
tjsonGetNumberValue
(
pJson
,
"wal.vgId"
,
pCfg
->
walCfg
.
vgId
)
<
0
)
return
-
1
;
if
(
tjsonGetNumberValue
(
pJson
,
"wal.fsyncPeriod"
,
pCfg
->
walCfg
.
fsyncPeriod
)
<
0
)
return
-
1
;
if
(
tjsonGetNumberValue
(
pJson
,
"wal.retentionPeriod"
,
pCfg
->
walCfg
.
retentionPeriod
)
<
0
)
return
-
1
;
...
...
source/dnode/vnode/src/vnd/vnodeCommit.c
浏览文件 @
7bae3e3f
...
...
@@ -42,13 +42,13 @@ int vnodeBegin(SVnode *pVnode) {
// begin meta
if
(
metaBegin
(
pVnode
->
pMeta
)
<
0
)
{
vError
(
"vgId:
%d failed to begin meta since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d failed to begin meta since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
return
-
1
;
}
// begin tsdb
if
(
tsdbBegin
(
pVnode
->
pTsdb
)
<
0
)
{
vError
(
"vgId:
%d failed to begin tsdb since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d failed to begin tsdb since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
return
-
1
;
}
...
...
@@ -93,7 +93,7 @@ int vnodeSaveInfo(const char *dir, const SVnodeInfo *pInfo) {
// free info binary
taosMemoryFree
(
data
);
vInfo
(
"vgId:
%d vnode info is saved, fname: %s"
,
pInfo
->
config
.
vgId
,
fname
);
vInfo
(
"vgId:%d vnode info is saved, fname: %s"
,
pInfo
->
config
.
vgId
,
fname
);
return
0
;
...
...
@@ -115,7 +115,7 @@ int vnodeCommitInfo(const char *dir, const SVnodeInfo *pInfo) {
return
-
1
;
}
vInfo
(
"vgId:
%d vnode info is committed"
,
pInfo
->
config
.
vgId
);
vInfo
(
"vgId:%d vnode info is committed"
,
pInfo
->
config
.
vgId
);
return
0
;
}
...
...
@@ -190,7 +190,7 @@ int vnodeSyncCommit(SVnode *pVnode) {
}
int
vnodeCommit
(
SVnode
*
pVnode
)
{
SVnodeInfo
info
;
SVnodeInfo
info
=
{
0
}
;
char
dir
[
TSDB_FILENAME_LEN
];
vInfo
(
"vgId:%d start to commit, version: %"
PRId64
,
TD_VID
(
pVnode
),
pVnode
->
state
.
applied
);
...
...
source/dnode/vnode/src/vnd/vnodeInt.c
已删除
100644 → 0
浏览文件 @
022f5bfc
/*
* 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 "vnd.h"
// #include "vnodeInt.h"
int32_t
vnodeAlter
(
SVnode
*
pVnode
,
const
SVnodeCfg
*
pCfg
)
{
return
0
;
}
int32_t
vnodeCompact
(
SVnode
*
pVnode
)
{
return
0
;
}
int32_t
vnodeSync
(
SVnode
*
pVnode
)
{
return
0
;
}
\ No newline at end of file
source/dnode/vnode/src/vnd/vnodeOpen.c
浏览文件 @
7bae3e3f
...
...
@@ -23,13 +23,13 @@ int vnodeCreate(const char *path, SVnodeCfg *pCfg, STfs *pTfs) {
// check config
if
(
vnodeCheckCfg
(
pCfg
)
<
0
)
{
vError
(
"vgId:
%d failed to create vnode since: %s"
,
pCfg
->
vgId
,
tstrerror
(
terrno
));
vError
(
"vgId:%d failed to create vnode since: %s"
,
pCfg
->
vgId
,
tstrerror
(
terrno
));
return
-
1
;
}
// create vnode env
if
(
tfsMkdir
(
pTfs
,
path
)
<
0
)
{
vError
(
"vgId:
%d failed to create vnode since: %s"
,
pCfg
->
vgId
,
tstrerror
(
terrno
));
vError
(
"vgId:%d failed to create vnode since: %s"
,
pCfg
->
vgId
,
tstrerror
(
terrno
));
return
-
1
;
}
...
...
@@ -39,11 +39,11 @@ int vnodeCreate(const char *path, SVnodeCfg *pCfg, STfs *pTfs) {
info
.
state
.
applied
=
-
1
;
if
(
vnodeSaveInfo
(
dir
,
&
info
)
<
0
||
vnodeCommitInfo
(
dir
,
&
info
)
<
0
)
{
vError
(
"vgId:
%d failed to save vnode config since %s"
,
pCfg
->
vgId
,
tstrerror
(
terrno
));
vError
(
"vgId:%d failed to save vnode config since %s"
,
pCfg
->
vgId
,
tstrerror
(
terrno
));
return
-
1
;
}
vInfo
(
"vgId:
%d vnode is created"
,
pCfg
->
vgId
);
vInfo
(
"vgId:%d vnode is created"
,
pCfg
->
vgId
);
return
0
;
}
...
...
@@ -70,7 +70,7 @@ SVnode *vnodeOpen(const char *path, STfs *pTfs, SMsgCb msgCb) {
pVnode
=
(
SVnode
*
)
taosMemoryCalloc
(
1
,
sizeof
(
*
pVnode
)
+
strlen
(
path
)
+
1
);
if
(
pVnode
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
vError
(
"vgId:
%d failed to open vnode since %s"
,
info
.
config
.
vgId
,
tstrerror
(
terrno
));
vError
(
"vgId:%d failed to open vnode since %s"
,
info
.
config
.
vgId
,
tstrerror
(
terrno
));
return
NULL
;
}
...
...
@@ -85,27 +85,44 @@ SVnode *vnodeOpen(const char *path, STfs *pTfs, SMsgCb msgCb) {
// open buffer pool
if
(
vnodeOpenBufPool
(
pVnode
,
pVnode
->
config
.
isHeap
?
0
:
pVnode
->
config
.
szBuf
/
3
)
<
0
)
{
vError
(
"vgId:
%d failed to open vnode buffer pool since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d failed to open vnode buffer pool since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open meta
if
(
metaOpen
(
pVnode
,
&
pVnode
->
pMeta
)
<
0
)
{
vError
(
"vgId:
%d failed to open vnode meta since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d failed to open vnode meta since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open tsdb
if
(
tsdbOpen
(
pVnode
,
&
pVnode
->
pTsdb
)
<
0
)
{
vError
(
"vgId: %d failed to open vnode tsdb since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
if
(
tsdbIsRollup
(
pVnode
))
{
if
(
tsdbOpen
(
pVnode
,
TSDB_TYPE_RSMA_L0
)
<
0
)
{
vError
(
"vgId: %d failed to open vnode rsma0 since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
if
(
tsdbOpen
(
pVnode
,
TSDB_TYPE_RSMA_L1
)
<
0
)
{
vError
(
"vgId: %d failed to open vnode rsma1 since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
if
(
tsdbOpen
(
pVnode
,
TSDB_TYPE_RSMA_L2
)
<
0
)
{
vError
(
"vgId: %d failed to open vnode rsma2 since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
}
else
{
if
(
tsdbOpen
(
pVnode
,
TSDB_TYPE_TSDB
)
<
0
)
{
vError
(
"vgId: %d failed to open vnode tsdb since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
}
// open wal
sprintf
(
tdir
,
"%s%s%s"
,
dir
,
TD_DIRSEP
,
VNODE_WAL_DIR
);
pVnode
->
pWal
=
walOpen
(
tdir
,
&
(
pVnode
->
config
.
walCfg
));
if
(
pVnode
->
pWal
==
NULL
)
{
vError
(
"vgId:
%d failed to open vnode wal since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d failed to open vnode wal since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
...
...
@@ -113,25 +130,25 @@ SVnode *vnodeOpen(const char *path, STfs *pTfs, SMsgCb msgCb) {
sprintf
(
tdir
,
"%s%s%s"
,
dir
,
TD_DIRSEP
,
VNODE_TQ_DIR
);
pVnode
->
pTq
=
tqOpen
(
tdir
,
pVnode
,
pVnode
->
pWal
);
if
(
pVnode
->
pTq
==
NULL
)
{
vError
(
"vgId:
%d failed to open vnode tq since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d failed to open vnode tq since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open query
if
(
vnodeQueryOpen
(
pVnode
))
{
vError
(
"vgId:
%d failed to open vnode query since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d failed to open vnode query since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// vnode begin
if
(
vnodeBegin
(
pVnode
)
<
0
)
{
vError
(
"vgId:
%d failed to begin since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d failed to begin since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
// open sync
if
(
vnodeSyncOpen
(
pVnode
,
dir
))
{
vError
(
"vgId:
%d failed to open sync since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d failed to open sync since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
goto
_err
;
}
...
...
@@ -143,6 +160,8 @@ _err:
if
(
pVnode
->
pWal
)
walClose
(
pVnode
->
pWal
);
if
(
pVnode
->
pTsdb
)
tsdbClose
(
pVnode
->
pTsdb
);
if
(
pVnode
->
pMeta
)
metaClose
(
pVnode
->
pMeta
);
tsdbClose
(
VND_RSMA1
(
pVnode
));
tsdbClose
(
VND_RSMA2
(
pVnode
));
tsem_destroy
(
&
(
pVnode
->
canCommit
));
taosMemoryFree
(
pVnode
);
return
NULL
;
...
...
@@ -155,7 +174,9 @@ void vnodeClose(SVnode *pVnode) {
vnodeQueryClose
(
pVnode
);
walClose
(
pVnode
->
pWal
);
tqClose
(
pVnode
->
pTq
);
tsdbClose
(
pVnode
->
pTsdb
);
tsdbClose
(
VND_TSDB
(
pVnode
));
tsdbClose
(
VND_RSMA1
(
pVnode
));
tsdbClose
(
VND_RSMA2
(
pVnode
));
metaClose
(
pVnode
->
pMeta
);
vnodeCloseBufPool
(
pVnode
);
// destroy handle
...
...
source/dnode/vnode/src/vnd/vnodeQuery.c
浏览文件 @
7bae3e3f
...
...
@@ -150,11 +150,6 @@ void vnodeGetInfo(SVnode *pVnode, const char **dbname, int32_t *vgId) {
}
// wrapper of tsdb read interface
// TODO: use FORCE_INLINE if possible later
tsdbReaderT
*
tsdbQueryTables
(
SVnode
*
pVnode
,
SQueryTableDataCond
*
pCond
,
STableGroupInfo
*
tableInfoGroup
,
uint64_t
qId
,
uint64_t
taskId
)
{
return
tsdbQueryTablesT
(
pVnode
->
pTsdb
,
pCond
,
tableInfoGroup
,
qId
,
taskId
);
}
tsdbReaderT
tsdbQueryCacheLast
(
SVnode
*
pVnode
,
SQueryTableDataCond
*
pCond
,
STableGroupInfo
*
groupList
,
uint64_t
qId
,
void
*
pMemRef
)
{
#if 0
...
...
source/dnode/vnode/src/vnd/vnodeSvr.c
浏览文件 @
7bae3e3f
...
...
@@ -17,10 +17,10 @@
static
int
vnodeProcessCreateStbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessAlterStbReq
(
SVnode
*
pVnode
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessDropStbReq
(
SVnode
*
pVnode
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessDropStbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessCreateTbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessAlterTbReq
(
SVnode
*
pVnode
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessDropTbReq
(
SVnode
*
pVnode
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessDropTbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
static
int
vnodeProcessSubmitReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
);
int
vnodePreprocessWriteReqs
(
SVnode
*
pVnode
,
SArray
*
pMsgs
,
int64_t
*
version
)
{
...
...
@@ -93,7 +93,7 @@ int vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRpcMsg
int
len
;
int
ret
;
vTrace
(
"vgId:
%d start to process write request %s, version %"
PRId64
,
TD_VID
(
pVnode
),
TMSG_INFO
(
pMsg
->
msgType
),
vTrace
(
"vgId:%d start to process write request %s, version %"
PRId64
,
TD_VID
(
pVnode
),
TMSG_INFO
(
pMsg
->
msgType
),
version
);
pVnode
->
state
.
applied
=
version
;
...
...
@@ -103,7 +103,7 @@ int vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRpcMsg
len
=
pMsg
->
contLen
-
sizeof
(
SMsgHead
);
if
(
tqPushMsg
(
pVnode
->
pTq
,
pMsg
->
pCont
,
pMsg
->
contLen
,
pMsg
->
msgType
,
version
)
<
0
)
{
vError
(
"vgId:
%d failed to push msg to TQ since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
vError
(
"vgId:%d failed to push msg to TQ since %s"
,
TD_VID
(
pVnode
),
tstrerror
(
terrno
));
return
-
1
;
}
...
...
@@ -116,7 +116,7 @@ int vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRpcMsg
if
(
vnodeProcessAlterStbReq
(
pVnode
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
break
;
case
TDMT_VND_DROP_STB
:
if
(
vnodeProcessDropStbReq
(
pVnode
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
if
(
vnodeProcessDropStbReq
(
pVnode
,
version
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
break
;
case
TDMT_VND_CREATE_TABLE
:
if
(
vnodeProcessCreateTbReq
(
pVnode
,
version
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
...
...
@@ -125,7 +125,7 @@ int vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRpcMsg
if
(
vnodeProcessAlterTbReq
(
pVnode
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
break
;
case
TDMT_VND_DROP_TABLE
:
if
(
vnodeProcessDropTbReq
(
pVnode
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
if
(
vnodeProcessDropTbReq
(
pVnode
,
version
,
pReq
,
len
,
pRsp
)
<
0
)
goto
_err
;
break
;
case
TDMT_VND_CREATE_SMA
:
{
// timeRangeSMA
if
(
tsdbCreateTSma
(
pVnode
->
pTsdb
,
POINTER_SHIFT
(
pMsg
->
pCont
,
sizeof
(
SMsgHead
)))
<
0
)
{
...
...
@@ -160,7 +160,7 @@ int vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRpcMsg
break
;
}
vDebug
(
"vgId:
%d process %s request success, version: %"
PRId64
,
TD_VID
(
pVnode
),
TMSG_INFO
(
pMsg
->
msgType
),
version
);
vDebug
(
"vgId:%d process %s request success, version: %"
PRId64
,
TD_VID
(
pVnode
),
TMSG_INFO
(
pMsg
->
msgType
),
version
);
// commit if need
if
(
vnodeShouldCommit
(
pVnode
))
{
...
...
@@ -175,7 +175,7 @@ int vnodeProcessWriteReq(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRpcMsg
return
0
;
_err:
vDebug
(
"vgId:
%d process %s request failed since %s, version: %"
PRId64
,
TD_VID
(
pVnode
),
TMSG_INFO
(
pMsg
->
msgType
),
vDebug
(
"vgId:%d process %s request failed since %s, version: %"
PRId64
,
TD_VID
(
pVnode
),
TMSG_INFO
(
pMsg
->
msgType
),
tstrerror
(
terrno
),
version
);
return
-
1
;
}
...
...
@@ -450,9 +450,32 @@ static int vnodeProcessAlterStbReq(SVnode *pVnode, void *pReq, int32_t len, SRpc
return
0
;
}
static
int
vnodeProcessDropStbReq
(
SVnode
*
pVnode
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
)
{
// TODO
// ASSERT(0);
static
int
vnodeProcessDropStbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
)
{
SVDropStbReq
req
=
{
0
};
int
rcode
=
TSDB_CODE_SUCCESS
;
SCoder
coder
=
{
0
};
pRsp
->
msgType
=
TDMT_VND_CREATE_STB_RSP
;
pRsp
->
pCont
=
NULL
;
pRsp
->
contLen
=
0
;
// decode request
tCoderInit
(
&
coder
,
TD_LITTLE_ENDIAN
,
pReq
,
len
,
TD_DECODER
);
if
(
tDecodeSVDropStbReq
(
&
coder
,
&
req
)
<
0
)
{
rcode
=
TSDB_CODE_INVALID_MSG
;
goto
_exit
;
}
// process request
// if (metaDropSTable(pVnode->pMeta, version, &req) < 0) {
// rcode = terrno;
// goto _exit;
// }
// return rsp
_exit:
pRsp
->
code
=
rcode
;
tCoderClear
(
&
coder
);
return
0
;
}
...
...
@@ -462,9 +485,15 @@ static int vnodeProcessAlterTbReq(SVnode *pVnode, void *pReq, int32_t len, SRpcM
return
0
;
}
static
int
vnodeProcessDropTbReq
(
SVnode
*
pVnode
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
)
{
// TODO
ASSERT
(
0
);
static
int
vnodeProcessDropTbReq
(
SVnode
*
pVnode
,
int64_t
version
,
void
*
pReq
,
int32_t
len
,
SRpcMsg
*
pRsp
)
{
SVDropTbReq
req
=
{
0
};
SVDropTbReq
rsp
=
{
0
};
// decode req
// process req
// return rsp
return
0
;
}
...
...
source/libs/command/inc/commandInt.h
浏览文件 @
7bae3e3f
...
...
@@ -56,10 +56,9 @@ extern "C" {
#define EXPLAIN_ROWS_FORMAT "rows=%" PRIu64
#define EXPLAIN_COLUMNS_FORMAT "columns=%d"
#define EXPLAIN_WIDTH_FORMAT "width=%d"
#define EXPLAIN_TABLE_SCAN_FORMAT "order=[asc|%d desc|%d]"
#define EXPLAIN_GROUPS_FORMAT "groups=%d"
#define EXPLAIN_WIDTH_FORMAT "width=%d"
#define EXPLAIN_LOOPS_FORMAT "loops=%d"
#define EXPLAIN_REVERSE_FORMAT "reverse=%d"
#define EXPLAIN_FUNCTIONS_FORMAT "functions=%d"
#define EXPLAIN_EXECINFO_FORMAT "cost=%" PRIu64 "..%" PRIu64 " rows=%" PRIu64
...
...
source/libs/command/src/explain.c
浏览文件 @
7bae3e3f
...
...
@@ -379,6 +379,7 @@ int32_t qExplainResNodeToRowsImpl(SExplainResNode *pResNode, SExplainCtx *ctx, i
EXPLAIN_ROW_APPEND
(
EXPLAIN_BLANK_FORMAT
);
EXPLAIN_ROW_APPEND
(
EXPLAIN_WIDTH_FORMAT
,
pTblScanNode
->
scan
.
node
.
pOutputDataBlockDesc
->
totalRowSize
);
EXPLAIN_ROW_APPEND
(
EXPLAIN_BLANK_FORMAT
);
EXPLAIN_ROW_APPEND
(
EXPLAIN_TABLE_SCAN_FORMAT
,
pTblScanNode
->
scanSeq
[
0
],
pTblScanNode
->
scanSeq
[
1
]);
EXPLAIN_ROW_APPEND
(
EXPLAIN_RIGHT_PARENTHESIS_FORMAT
);
EXPLAIN_ROW_END
();
QRY_ERR_RET
(
qExplainResAppendRow
(
ctx
,
tbuf
,
tlen
,
level
));
...
...
source/libs/executor/inc/executorimpl.h
浏览文件 @
7bae3e3f
...
...
@@ -375,6 +375,7 @@ typedef struct SStreamBlockScanInfo {
uint64_t
numOfExec
;
// execution times
void
*
readerHandle
;
// stream block reader handle
SArray
*
pColMatchInfo
;
//
SNode
*
pCondition
;
}
SStreamBlockScanInfo
;
typedef
struct
SSysTableScanInfo
{
...
...
@@ -672,7 +673,7 @@ SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SExprInfo* pEx
const
STableGroupInfo
*
pTableGroupInfo
);
SOperatorInfo
*
createDataBlockInfoScanOperator
(
void
*
dataReader
,
SExecTaskInfo
*
pTaskInfo
);
SOperatorInfo
*
createStreamScanOperatorInfo
(
void
*
streamReadHandle
,
SSDataBlock
*
pResBlock
,
SArray
*
pColList
,
SArray
*
pTableIdList
,
SExecTaskInfo
*
pTaskInfo
);
SArray
*
pTableIdList
,
SExecTaskInfo
*
pTaskInfo
,
SNode
*
pConditions
);
SOperatorInfo
*
createFillOperatorInfo
(
SOperatorInfo
*
downstream
,
SExprInfo
*
pExpr
,
int32_t
numOfCols
,
SInterval
*
pInterval
,
SSDataBlock
*
pResBlock
,
int32_t
fillType
,
char
*
fillVal
,
...
...
source/libs/executor/src/executorimpl.c
浏览文件 @
7bae3e3f
...
...
@@ -6538,7 +6538,7 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo
int32_t
numOfCols
=
0
;
SArray
*
pCols
=
extractColMatchInfo
(
pScanPhyNode
->
pScanCols
,
pScanPhyNode
->
node
.
pOutputDataBlockDesc
,
&
numOfCols
);
SOperatorInfo
*
pOperator
=
createStreamScanOperatorInfo
(
pHandle
->
reader
,
pResBlock
,
pCols
,
tableIdList
,
pTaskInfo
);
createStreamScanOperatorInfo
(
pHandle
->
reader
,
pResBlock
,
pCols
,
tableIdList
,
pTaskInfo
,
pScanPhyNode
->
node
.
pConditions
);
taosArrayDestroy
(
tableIdList
);
return
pOperator
;
}
else
if
(
QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN
==
type
)
{
...
...
@@ -6924,7 +6924,7 @@ tsdbReaderT doCreateDataReader(STableScanPhysiNode* pTableScanNode, SReadHandle*
code
=
initQueryTableDataCond
(
&
cond
,
pTableScanNode
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
}
}
#if 0
return tsdbQueryTables(pHandle->reader, &cond, pTableGroupInfo, queryId, taskId);
#endif
...
...
source/libs/executor/src/scanoperator.c
浏览文件 @
7bae3e3f
...
...
@@ -514,6 +514,7 @@ static SSDataBlock* doStreamBlockScan(SOperatorInfo* pOperator, bool* newgroup)
// NOTE: this operator does never check if current status is done or not
SExecTaskInfo
*
pTaskInfo
=
pOperator
->
pTaskInfo
;
SStreamBlockScanInfo
*
pInfo
=
pOperator
->
info
;
int32_t
rows
=
0
;
pTaskInfo
->
code
=
pOperator
->
fpSet
.
_openFn
(
pOperator
);
if
(
pTaskInfo
->
code
!=
TSDB_CODE_SUCCESS
||
pOperator
->
status
==
OP_EXEC_DONE
)
{
...
...
@@ -580,6 +581,8 @@ static SSDataBlock* doStreamBlockScan(SOperatorInfo* pOperator, bool* newgroup)
pTaskInfo
->
code
=
terrno
;
return
NULL
;
}
rows
=
pBlockInfo
->
rows
;
doFilter
(
pInfo
->
pCondition
,
pInfo
->
pRes
);
break
;
}
...
...
@@ -588,16 +591,16 @@ static SSDataBlock* doStreamBlockScan(SOperatorInfo* pOperator, bool* newgroup)
pInfo
->
numOfExec
++
;
pInfo
->
numOfRows
+=
pBlockInfo
->
rows
;
if
(
pBlockInfo
->
rows
==
0
)
{
if
(
rows
==
0
)
{
pOperator
->
status
=
OP_EXEC_DONE
;
}
return
(
pBlockInfo
->
rows
==
0
)
?
NULL
:
pInfo
->
pRes
;
return
(
rows
==
0
)
?
NULL
:
pInfo
->
pRes
;
}
}
SOperatorInfo
*
createStreamScanOperatorInfo
(
void
*
streamReadHandle
,
SSDataBlock
*
pResBlock
,
SArray
*
pColList
,
SArray
*
pTableIdList
,
SExecTaskInfo
*
pTaskInfo
)
{
SArray
*
pTableIdList
,
SExecTaskInfo
*
pTaskInfo
,
SNode
*
pCondition
)
{
SStreamBlockScanInfo
*
pInfo
=
taosMemoryCalloc
(
1
,
sizeof
(
SStreamBlockScanInfo
));
SOperatorInfo
*
pOperator
=
taosMemoryCalloc
(
1
,
sizeof
(
SOperatorInfo
));
if
(
pInfo
==
NULL
||
pOperator
==
NULL
)
{
...
...
@@ -635,6 +638,7 @@ SOperatorInfo* createStreamScanOperatorInfo(void* streamReadHandle, SSDataBlock*
pInfo
->
readerHandle
=
streamReadHandle
;
pInfo
->
pRes
=
pResBlock
;
pInfo
->
pCondition
=
pCondition
;
pOperator
->
name
=
"StreamBlockScanOperator"
;
pOperator
->
operatorType
=
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
;
...
...
source/libs/nodes/src/nodesCodeFuncs.c
浏览文件 @
7bae3e3f
...
...
@@ -1911,23 +1911,51 @@ static int32_t jsonToDatum(const SJson* pJson, void* pObj) {
break
;
case
TSDB_DATA_TYPE_BOOL
:
code
=
tjsonGetBoolValue
(
pJson
,
jkValueDatum
,
&
pNode
->
datum
.
b
);
*
(
bool
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
b
;
break
;
case
TSDB_DATA_TYPE_TINYINT
:
code
=
tjsonGetBigIntValue
(
pJson
,
jkValueDatum
,
&
pNode
->
datum
.
i
);
*
(
int8_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
i
;
break
;
case
TSDB_DATA_TYPE_SMALLINT
:
code
=
tjsonGetBigIntValue
(
pJson
,
jkValueDatum
,
&
pNode
->
datum
.
i
);
*
(
int16_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
i
;
break
;
case
TSDB_DATA_TYPE_INT
:
code
=
tjsonGetBigIntValue
(
pJson
,
jkValueDatum
,
&
pNode
->
datum
.
i
);
*
(
int32_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
i
;
break
;
case
TSDB_DATA_TYPE_BIGINT
:
code
=
tjsonGetBigIntValue
(
pJson
,
jkValueDatum
,
&
pNode
->
datum
.
i
);
*
(
int64_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
i
;
break
;
case
TSDB_DATA_TYPE_TIMESTAMP
:
code
=
tjsonGetBigIntValue
(
pJson
,
jkValueDatum
,
&
pNode
->
datum
.
i
);
*
(
int64_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
i
;
break
;
case
TSDB_DATA_TYPE_UTINYINT
:
code
=
tjsonGetUBigIntValue
(
pJson
,
jkValueDatum
,
&
pNode
->
datum
.
u
);
*
(
uint8_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
u
;
break
;
case
TSDB_DATA_TYPE_USMALLINT
:
code
=
tjsonGetUBigIntValue
(
pJson
,
jkValueDatum
,
&
pNode
->
datum
.
u
);
*
(
uint16_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
u
;
break
;
case
TSDB_DATA_TYPE_UINT
:
code
=
tjsonGetUBigIntValue
(
pJson
,
jkValueDatum
,
&
pNode
->
datum
.
u
);
*
(
uint32_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
u
;
break
;
case
TSDB_DATA_TYPE_UBIGINT
:
code
=
tjsonGetUBigIntValue
(
pJson
,
jkValueDatum
,
&
pNode
->
datum
.
u
);
*
(
uint64_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
u
;
break
;
case
TSDB_DATA_TYPE_FLOAT
:
code
=
tjsonGetDoubleValue
(
pJson
,
jkValueDatum
,
&
pNode
->
datum
.
d
);
*
(
float
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
d
;
break
;
case
TSDB_DATA_TYPE_DOUBLE
:
code
=
tjsonGetDoubleValue
(
pJson
,
jkValueDatum
,
&
pNode
->
datum
.
d
);
*
(
double
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
d
;
break
;
case
TSDB_DATA_TYPE_NCHAR
:
case
TSDB_DATA_TYPE_VARCHAR
:
...
...
source/libs/nodes/src/nodesUtilFuncs.c
浏览文件 @
7bae3e3f
...
...
@@ -871,21 +871,18 @@ void nodesClearList(SNodeList* pList) {
void
*
nodesGetValueFromNode
(
SValueNode
*
pNode
)
{
switch
(
pNode
->
node
.
resType
.
type
)
{
case
TSDB_DATA_TYPE_BOOL
:
return
(
void
*
)
&
pNode
->
datum
.
b
;
case
TSDB_DATA_TYPE_TINYINT
:
case
TSDB_DATA_TYPE_SMALLINT
:
case
TSDB_DATA_TYPE_INT
:
case
TSDB_DATA_TYPE_BIGINT
:
case
TSDB_DATA_TYPE_TIMESTAMP
:
return
(
void
*
)
&
pNode
->
datum
.
i
;
case
TSDB_DATA_TYPE_UTINYINT
:
case
TSDB_DATA_TYPE_USMALLINT
:
case
TSDB_DATA_TYPE_UINT
:
case
TSDB_DATA_TYPE_UBIGINT
:
return
(
void
*
)
&
pNode
->
datum
.
u
;
case
TSDB_DATA_TYPE_FLOAT
:
case
TSDB_DATA_TYPE_DOUBLE
:
return
(
void
*
)
&
pNode
->
datum
.
d
;
return
(
void
*
)
&
pNode
->
typeData
;
case
TSDB_DATA_TYPE_NCHAR
:
case
TSDB_DATA_TYPE_VARCHAR
:
case
TSDB_DATA_TYPE_VARBINARY
:
...
...
@@ -897,6 +894,68 @@ void* nodesGetValueFromNode(SValueNode* pNode) {
return
NULL
;
}
int32_t
nodesSetValueNodeValue
(
SValueNode
*
pNode
,
void
*
value
)
{
switch
(
pNode
->
node
.
resType
.
type
)
{
case
TSDB_DATA_TYPE_BOOL
:
pNode
->
datum
.
b
=
*
(
bool
*
)
value
;
*
(
bool
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
b
;
break
;
case
TSDB_DATA_TYPE_TINYINT
:
pNode
->
datum
.
i
=
*
(
int8_t
*
)
value
;
*
(
int8_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
i
;
break
;
case
TSDB_DATA_TYPE_SMALLINT
:
pNode
->
datum
.
i
=
*
(
int16_t
*
)
value
;
*
(
int16_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
i
;
break
;
case
TSDB_DATA_TYPE_INT
:
pNode
->
datum
.
i
=
*
(
int32_t
*
)
value
;
*
(
int32_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
i
;
break
;
case
TSDB_DATA_TYPE_BIGINT
:
pNode
->
datum
.
i
=
*
(
int64_t
*
)
value
;
*
(
int64_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
i
;
break
;
case
TSDB_DATA_TYPE_TIMESTAMP
:
pNode
->
datum
.
i
=
*
(
int64_t
*
)
value
;
*
(
int64_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
i
;
break
;
case
TSDB_DATA_TYPE_UTINYINT
:
pNode
->
datum
.
u
=
*
(
int8_t
*
)
value
;
*
(
int8_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
u
;
break
;
case
TSDB_DATA_TYPE_USMALLINT
:
pNode
->
datum
.
u
=
*
(
int16_t
*
)
value
;
*
(
int16_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
u
;
break
;
case
TSDB_DATA_TYPE_UINT
:
pNode
->
datum
.
u
=
*
(
int32_t
*
)
value
;
*
(
int32_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
u
;
break
;
case
TSDB_DATA_TYPE_UBIGINT
:
pNode
->
datum
.
u
=
*
(
uint64_t
*
)
value
;
*
(
uint64_t
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
u
;
break
;
case
TSDB_DATA_TYPE_FLOAT
:
pNode
->
datum
.
d
=
*
(
float
*
)
value
;
*
(
float
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
d
;
break
;
case
TSDB_DATA_TYPE_DOUBLE
:
pNode
->
datum
.
d
=
*
(
double
*
)
value
;
*
(
double
*
)
&
pNode
->
typeData
=
pNode
->
datum
.
d
;
break
;
case
TSDB_DATA_TYPE_NCHAR
:
case
TSDB_DATA_TYPE_VARCHAR
:
case
TSDB_DATA_TYPE_VARBINARY
:
pNode
->
datum
.
p
=
(
char
*
)
value
;
break
;
default:
return
TSDB_CODE_QRY_APP_ERROR
;
}
return
TSDB_CODE_SUCCESS
;
}
char
*
nodesGetStrValueFromNode
(
SValueNode
*
pNode
)
{
switch
(
pNode
->
node
.
resType
.
type
)
{
case
TSDB_DATA_TYPE_BOOL
:
{
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
7bae3e3f
...
...
@@ -466,27 +466,66 @@ static EDealRes translateValue(STranslateContext* pCxt, SValueNode* pVal) {
break
;
case
TSDB_DATA_TYPE_BOOL
:
pVal
->
datum
.
b
=
(
0
==
strcasecmp
(
pVal
->
literal
,
"true"
));
*
(
bool
*
)
&
pVal
->
typeData
=
pVal
->
datum
.
b
;
break
;
case
TSDB_DATA_TYPE_TINYINT
:
case
TSDB_DATA_TYPE_SMALLINT
:
case
TSDB_DATA_TYPE_INT
:
case
TSDB_DATA_TYPE_TINYINT
:{
char
*
endPtr
=
NULL
;
pVal
->
datum
.
i
=
strtoll
(
pVal
->
literal
,
&
endPtr
,
10
);
*
(
int8_t
*
)
&
pVal
->
typeData
=
pVal
->
datum
.
i
;
break
;
}
case
TSDB_DATA_TYPE_SMALLINT
:{
char
*
endPtr
=
NULL
;
pVal
->
datum
.
i
=
strtoll
(
pVal
->
literal
,
&
endPtr
,
10
);
*
(
int16_t
*
)
&
pVal
->
typeData
=
pVal
->
datum
.
i
;
break
;
}
case
TSDB_DATA_TYPE_INT
:{
char
*
endPtr
=
NULL
;
pVal
->
datum
.
i
=
strtoll
(
pVal
->
literal
,
&
endPtr
,
10
);
*
(
int32_t
*
)
&
pVal
->
typeData
=
pVal
->
datum
.
i
;
break
;
}
case
TSDB_DATA_TYPE_BIGINT
:
{
char
*
endPtr
=
NULL
;
pVal
->
datum
.
i
=
strtoll
(
pVal
->
literal
,
&
endPtr
,
10
);
*
(
int64_t
*
)
&
pVal
->
typeData
=
pVal
->
datum
.
i
;
break
;
}
case
TSDB_DATA_TYPE_UTINYINT
:{
char
*
endPtr
=
NULL
;
pVal
->
datum
.
u
=
strtoull
(
pVal
->
literal
,
&
endPtr
,
10
);
*
(
uint8_t
*
)
&
pVal
->
typeData
=
pVal
->
datum
.
u
;
break
;
}
case
TSDB_DATA_TYPE_USMALLINT
:{
char
*
endPtr
=
NULL
;
pVal
->
datum
.
u
=
strtoull
(
pVal
->
literal
,
&
endPtr
,
10
);
*
(
uint16_t
*
)
&
pVal
->
typeData
=
pVal
->
datum
.
u
;
break
;
}
case
TSDB_DATA_TYPE_UINT
:{
char
*
endPtr
=
NULL
;
pVal
->
datum
.
u
=
strtoull
(
pVal
->
literal
,
&
endPtr
,
10
);
*
(
uint32_t
*
)
&
pVal
->
typeData
=
pVal
->
datum
.
u
;
break
;
}
case
TSDB_DATA_TYPE_UTINYINT
:
case
TSDB_DATA_TYPE_USMALLINT
:
case
TSDB_DATA_TYPE_UINT
:
case
TSDB_DATA_TYPE_UBIGINT
:
{
char
*
endPtr
=
NULL
;
pVal
->
datum
.
u
=
strtoull
(
pVal
->
literal
,
&
endPtr
,
10
);
*
(
uint64_t
*
)
&
pVal
->
typeData
=
pVal
->
datum
.
u
;
break
;
}
case
TSDB_DATA_TYPE_FLOAT
:{
char
*
endPtr
=
NULL
;
pVal
->
datum
.
d
=
strtold
(
pVal
->
literal
,
&
endPtr
);
*
(
float
*
)
&
pVal
->
typeData
=
pVal
->
datum
.
d
;
break
;
}
case
TSDB_DATA_TYPE_FLOAT
:
case
TSDB_DATA_TYPE_DOUBLE
:
{
char
*
endPtr
=
NULL
;
pVal
->
datum
.
d
=
strtold
(
pVal
->
literal
,
&
endPtr
);
*
(
double
*
)
&
pVal
->
typeData
=
pVal
->
datum
.
d
;
break
;
}
case
TSDB_DATA_TYPE_VARCHAR
:
...
...
@@ -504,6 +543,7 @@ static EDealRes translateValue(STranslateContext* pCxt, SValueNode* pVal) {
TSDB_CODE_SUCCESS
)
{
return
generateDealNodeErrMsg
(
pCxt
,
TSDB_CODE_PAR_WRONG_VALUE_TYPE
,
pVal
->
literal
);
}
*
(
int64_t
*
)
&
pVal
->
typeData
=
pVal
->
datum
.
i
;
break
;
}
case
TSDB_DATA_TYPE_NCHAR
:
...
...
@@ -3199,11 +3239,11 @@ static int32_t rewriteShow(STranslateContext* pCxt, SQuery* pQuery) {
return
code
;
}
typedef
struct
SVgroup
Tables
Batch
{
typedef
struct
SVgroup
CreateTable
Batch
{
SVCreateTbBatchReq
req
;
SVgroupInfo
info
;
char
dbName
[
TSDB_DB_NAME_LEN
];
}
SVgroup
Tables
Batch
;
}
SVgroup
CreateTable
Batch
;
static
void
destroyCreateTbReq
(
SVCreateTbReq
*
pReq
)
{
taosMemoryFreeClear
(
pReq
->
name
);
...
...
@@ -3211,7 +3251,7 @@ static void destroyCreateTbReq(SVCreateTbReq* pReq) {
}
static
int32_t
buildNormalTableBatchReq
(
int32_t
acctId
,
const
SCreateTableStmt
*
pStmt
,
const
SVgroupInfo
*
pVgroupInfo
,
SVgroup
Tables
Batch
*
pBatch
)
{
SVgroup
CreateTable
Batch
*
pBatch
)
{
char
dbFName
[
TSDB_DB_FNAME_LEN
]
=
{
0
};
SName
name
=
{.
type
=
TSDB_DB_NAME_T
,
.
acctId
=
acctId
};
strcpy
(
name
.
dbname
,
pStmt
->
dbName
);
...
...
@@ -3245,13 +3285,13 @@ static int32_t buildNormalTableBatchReq(int32_t acctId, const SCreateTableStmt*
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
serializeVgroup
TablesBatch
(
SVgroupTables
Batch
*
pTbBatch
,
SArray
*
pBufArray
)
{
static
int32_t
serializeVgroup
CreateTableBatch
(
SVgroupCreateTable
Batch
*
pTbBatch
,
SArray
*
pBufArray
)
{
int
tlen
;
SCoder
coder
=
{
0
};
int32_t
ret
=
0
;
tEncodeSize
(
tEncodeSVCreateTbBatchReq
,
&
pTbBatch
->
req
,
tlen
,
ret
);
tlen
+=
sizeof
(
SMsgHead
);
//+ tSerializeSVCreateTbBatchReq(NULL, &(pTbBatch->req));
tlen
+=
sizeof
(
SMsgHead
);
void
*
buf
=
taosMemoryMalloc
(
tlen
);
if
(
NULL
==
buf
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
...
...
@@ -3277,7 +3317,7 @@ static int32_t serializeVgroupTablesBatch(SVgroupTablesBatch* pTbBatch, SArray*
return
TSDB_CODE_SUCCESS
;
}
static
void
destroyCreateTbReqBatch
(
SVgroup
Tables
Batch
*
pTbBatch
)
{
static
void
destroyCreateTbReqBatch
(
SVgroup
CreateTable
Batch
*
pTbBatch
)
{
size_t
size
=
taosArrayGetSize
(
pTbBatch
->
req
.
pArray
);
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
SVCreateTbReq
*
pTableReq
=
taosArrayGet
(
pTbBatch
->
req
.
pArray
,
i
);
...
...
@@ -3322,10 +3362,10 @@ static int32_t buildCreateTableDataBlock(int32_t acctId, const SCreateTableStmt*
return
TSDB_CODE_OUT_OF_MEMORY
;
}
SVgroup
Tables
Batch
tbatch
=
{
0
};
int32_t
code
=
buildNormalTableBatchReq
(
acctId
,
pStmt
,
pInfo
,
&
tbatch
);
SVgroup
CreateTable
Batch
tbatch
=
{
0
};
int32_t
code
=
buildNormalTableBatchReq
(
acctId
,
pStmt
,
pInfo
,
&
tbatch
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
serializeVgroup
Tables
Batch
(
&
tbatch
,
*
pBufArray
);
code
=
serializeVgroup
CreateTable
Batch
(
&
tbatch
,
*
pBufArray
);
}
destroyCreateTbReqBatch
(
&
tbatch
);
...
...
@@ -3370,9 +3410,9 @@ static void addCreateTbReqIntoVgroup(int32_t acctId, SHashObj* pVgroupHashmap, c
req
.
ctb
.
suid
=
suid
;
req
.
ctb
.
pTag
=
row
;
SVgroup
Tables
Batch
*
pTableBatch
=
taosHashGet
(
pVgroupHashmap
,
&
pVgInfo
->
vgId
,
sizeof
(
pVgInfo
->
vgId
));
SVgroup
CreateTable
Batch
*
pTableBatch
=
taosHashGet
(
pVgroupHashmap
,
&
pVgInfo
->
vgId
,
sizeof
(
pVgInfo
->
vgId
));
if
(
pTableBatch
==
NULL
)
{
SVgroup
Tables
Batch
tBatch
=
{
0
};
SVgroup
CreateTable
Batch
tBatch
=
{
0
};
tBatch
.
info
=
*
pVgInfo
;
strcpy
(
tBatch
.
dbName
,
pDbName
);
...
...
@@ -3545,21 +3585,21 @@ static int32_t rewriteCreateSubTable(STranslateContext* pCxt, SCreateSubTableCla
return
code
;
}
static
SArray
*
serializeVgroups
Tables
Batch
(
int32_t
acctId
,
SHashObj
*
pVgroupHashmap
)
{
static
SArray
*
serializeVgroups
CreateTable
Batch
(
int32_t
acctId
,
SHashObj
*
pVgroupHashmap
)
{
SArray
*
pBufArray
=
taosArrayInit
(
taosHashGetSize
(
pVgroupHashmap
),
sizeof
(
void
*
));
if
(
NULL
==
pBufArray
)
{
return
NULL
;
}
int32_t
code
=
TSDB_CODE_SUCCESS
;
SVgroup
Tables
Batch
*
pTbBatch
=
NULL
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
SVgroup
CreateTable
Batch
*
pTbBatch
=
NULL
;
do
{
pTbBatch
=
taosHashIterate
(
pVgroupHashmap
,
pTbBatch
);
if
(
pTbBatch
==
NULL
)
{
break
;
}
serializeVgroup
Tables
Batch
(
pTbBatch
,
pBufArray
);
serializeVgroup
CreateTable
Batch
(
pTbBatch
,
pBufArray
);
destroyCreateTbReqBatch
(
pTbBatch
);
}
while
(
true
);
...
...
@@ -3584,7 +3624,143 @@ static int32_t rewriteCreateMultiTable(STranslateContext* pCxt, SQuery* pQuery)
}
}
SArray
*
pBufArray
=
serializeVgroupsTablesBatch
(
pCxt
->
pParseCxt
->
acctId
,
pVgroupHashmap
);
SArray
*
pBufArray
=
serializeVgroupsCreateTableBatch
(
pCxt
->
pParseCxt
->
acctId
,
pVgroupHashmap
);
taosHashCleanup
(
pVgroupHashmap
);
if
(
NULL
==
pBufArray
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
return
rewriteToVnodeModifOpStmt
(
pQuery
,
pBufArray
);
}
typedef
struct
SVgroupDropTableBatch
{
SVDropTbBatchReq
req
;
SVgroupInfo
info
;
char
dbName
[
TSDB_DB_NAME_LEN
];
}
SVgroupDropTableBatch
;
static
void
addDropTbReqIntoVgroup
(
SHashObj
*
pVgroupHashmap
,
SDropTableClause
*
pClause
,
SVgroupInfo
*
pVgInfo
)
{
SVDropTbReq
req
=
{.
name
=
pClause
->
tableName
,
.
igNotExists
=
pClause
->
ignoreNotExists
};
SVgroupDropTableBatch
*
pTableBatch
=
taosHashGet
(
pVgroupHashmap
,
&
pVgInfo
->
vgId
,
sizeof
(
pVgInfo
->
vgId
));
if
(
NULL
==
pTableBatch
)
{
SVgroupDropTableBatch
tBatch
=
{
0
};
tBatch
.
info
=
*
pVgInfo
;
tBatch
.
req
.
pArray
=
taosArrayInit
(
TARRAY_MIN_SIZE
,
sizeof
(
SVDropTbReq
));
taosArrayPush
(
tBatch
.
req
.
pArray
,
&
req
);
taosHashPut
(
pVgroupHashmap
,
&
pVgInfo
->
vgId
,
sizeof
(
pVgInfo
->
vgId
),
&
tBatch
,
sizeof
(
tBatch
));
}
else
{
// add to the correct vgroup
taosArrayPush
(
pTableBatch
->
req
.
pArray
,
&
req
);
}
}
static
int32_t
buildDropTableVgroupHashmap
(
STranslateContext
*
pCxt
,
SDropTableClause
*
pClause
,
bool
*
pIsSuperTable
,
SHashObj
*
pVgroupHashmap
)
{
STableMeta
*
pTableMeta
=
NULL
;
int32_t
code
=
getTableMeta
(
pCxt
,
pClause
->
dbName
,
pClause
->
tableName
,
&
pTableMeta
);
if
(
TSDB_CODE_SUCCESS
==
code
&&
TSDB_SUPER_TABLE
==
pTableMeta
->
tableType
)
{
*
pIsSuperTable
=
true
;
goto
over
;
}
*
pIsSuperTable
=
false
;
SVgroupInfo
info
=
{
0
};
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
getTableHashVgroup
(
pCxt
,
pClause
->
dbName
,
pClause
->
tableName
,
&
info
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
addDropTbReqIntoVgroup
(
pVgroupHashmap
,
pClause
,
&
info
);
}
over:
taosMemoryFreeClear
(
pTableMeta
);
return
code
;
}
static
void
destroyDropTbReqBatch
(
SVgroupDropTableBatch
*
pTbBatch
)
{
taosArrayDestroy
(
pTbBatch
->
req
.
pArray
);
}
static
int32_t
serializeVgroupDropTableBatch
(
SVgroupDropTableBatch
*
pTbBatch
,
SArray
*
pBufArray
)
{
int
tlen
;
SCoder
coder
=
{
0
};
int32_t
ret
=
0
;
tEncodeSize
(
tEncodeSVDropTbBatchReq
,
&
pTbBatch
->
req
,
tlen
,
ret
);
tlen
+=
sizeof
(
SMsgHead
);
void
*
buf
=
taosMemoryMalloc
(
tlen
);
if
(
NULL
==
buf
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
((
SMsgHead
*
)
buf
)
->
vgId
=
htonl
(
pTbBatch
->
info
.
vgId
);
((
SMsgHead
*
)
buf
)
->
contLen
=
htonl
(
tlen
);
void
*
pBuf
=
POINTER_SHIFT
(
buf
,
sizeof
(
SMsgHead
));
tCoderInit
(
&
coder
,
TD_LITTLE_ENDIAN
,
pBuf
,
tlen
-
sizeof
(
SMsgHead
),
TD_ENCODER
);
tEncodeSVDropTbBatchReq
(
&
coder
,
&
pTbBatch
->
req
);
tCoderClear
(
&
coder
);
SVgDataBlocks
*
pVgData
=
taosMemoryCalloc
(
1
,
sizeof
(
SVgDataBlocks
));
if
(
NULL
==
pVgData
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
pVgData
->
vg
=
pTbBatch
->
info
;
pVgData
->
pData
=
buf
;
pVgData
->
size
=
tlen
;
pVgData
->
numOfTables
=
(
int32_t
)
taosArrayGetSize
(
pTbBatch
->
req
.
pArray
);
taosArrayPush
(
pBufArray
,
&
pVgData
);
return
TSDB_CODE_SUCCESS
;
}
static
SArray
*
serializeVgroupsDropTableBatch
(
int32_t
acctId
,
SHashObj
*
pVgroupHashmap
)
{
SArray
*
pBufArray
=
taosArrayInit
(
taosHashGetSize
(
pVgroupHashmap
),
sizeof
(
void
*
));
if
(
NULL
==
pBufArray
)
{
return
NULL
;
}
int32_t
code
=
TSDB_CODE_SUCCESS
;
SVgroupDropTableBatch
*
pTbBatch
=
NULL
;
do
{
pTbBatch
=
taosHashIterate
(
pVgroupHashmap
,
pTbBatch
);
if
(
pTbBatch
==
NULL
)
{
break
;
}
serializeVgroupDropTableBatch
(
pTbBatch
,
pBufArray
);
destroyDropTbReqBatch
(
pTbBatch
);
}
while
(
true
);
return
pBufArray
;
}
static
int32_t
rewriteDropTable
(
STranslateContext
*
pCxt
,
SQuery
*
pQuery
)
{
SDropTableStmt
*
pStmt
=
(
SDropTableStmt
*
)
pQuery
->
pRoot
;
SHashObj
*
pVgroupHashmap
=
taosHashInit
(
4
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_INT
),
false
,
HASH_NO_LOCK
);
if
(
NULL
==
pVgroupHashmap
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
bool
isSuperTable
=
false
;
SNode
*
pNode
;
FOREACH
(
pNode
,
pStmt
->
pTables
)
{
int32_t
code
=
buildDropTableVgroupHashmap
(
pCxt
,
(
SDropTableClause
*
)
pNode
,
&
isSuperTable
,
pVgroupHashmap
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
taosHashCleanup
(
pVgroupHashmap
);
return
code
;
}
if
(
isSuperTable
&&
LIST_LENGTH
(
pStmt
->
pTables
)
>
1
)
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_DROP_STABLE
);
}
}
if
(
isSuperTable
)
{
taosHashCleanup
(
pVgroupHashmap
);
return
TSDB_CODE_SUCCESS
;
}
SArray
*
pBufArray
=
serializeVgroupsDropTableBatch
(
pCxt
->
pParseCxt
->
acctId
,
pVgroupHashmap
);
taosHashCleanup
(
pVgroupHashmap
);
if
(
NULL
==
pBufArray
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
...
...
@@ -3630,6 +3806,9 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) {
case
QUERY_NODE_CREATE_MULTI_TABLE_STMT
:
code
=
rewriteCreateMultiTable
(
pCxt
,
pQuery
);
break
;
case
QUERY_NODE_DROP_TABLE_STMT
:
code
=
rewriteDropTable
(
pCxt
,
pQuery
);
break
;
case
QUERY_NODE_ALTER_TABLE_STMT
:
if
(
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
==
((
SAlterTableStmt
*
)
pQuery
->
pRoot
)
->
alterType
)
{
code
=
rewriteAlterTable
(
pCxt
,
pQuery
);
...
...
source/libs/parser/src/parUtil.c
浏览文件 @
7bae3e3f
...
...
@@ -126,6 +126,8 @@ static char* getSyntaxErrFormat(int32_t errCode) {
return
"slimit/soffset only available for PARTITION BY query"
;
case
TSDB_CODE_PAR_INVALID_TOPIC_QUERY
:
return
"Invalid topic query"
;
case
TSDB_CODE_PAR_INVALID_DROP_STABLE
:
return
"Cannot drop super table in batch"
;
case
TSDB_CODE_OUT_OF_MEMORY
:
return
"Out of memory"
;
default:
...
...
source/libs/planner/src/planLogicCreater.c
浏览文件 @
7bae3e3f
...
...
@@ -944,9 +944,16 @@ static int32_t createSetOperatorLogicNode(SLogicPlanContext* pCxt, SSetOperator*
}
static
int32_t
getMsgType
(
ENodeType
sqlType
)
{
return
(
QUERY_NODE_CREATE_TABLE_STMT
==
sqlType
||
QUERY_NODE_CREATE_MULTI_TABLE_STMT
==
sqlType
)
?
TDMT_VND_CREATE_TABLE
:
TDMT_VND_SUBMIT
;
switch
(
sqlType
)
{
case
QUERY_NODE_CREATE_TABLE_STMT
:
case
QUERY_NODE_CREATE_MULTI_TABLE_STMT
:
return
TDMT_VND_CREATE_TABLE
;
case
QUERY_NODE_DROP_TABLE_STMT
:
return
TDMT_VND_DROP_TABLE
;
default:
break
;
}
return
TDMT_VND_SUBMIT
;
}
static
int32_t
createVnodeModifLogicNode
(
SLogicPlanContext
*
pCxt
,
SVnodeModifOpStmt
*
pStmt
,
SLogicNode
**
pLogicNode
)
{
...
...
source/libs/planner/src/planOptimizer.c
浏览文件 @
7bae3e3f
...
...
@@ -206,6 +206,8 @@ static int32_t cpdMergeCond(SNode** pDst, SNode** pSrc) {
if
(
NULL
==
pLogicCond
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
pLogicCond
->
node
.
resType
.
type
=
TSDB_DATA_TYPE_BOOL
;
pLogicCond
->
node
.
resType
.
bytes
=
tDataTypes
[
TSDB_DATA_TYPE_BOOL
].
bytes
;
pLogicCond
->
condType
=
LOGIC_COND_TYPE_AND
;
int32_t
code
=
nodesListMakeAppend
(
&
pLogicCond
->
pParameterList
,
*
pSrc
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
...
...
source/libs/planner/src/planner.c
浏览文件 @
7bae3e3f
...
...
@@ -104,8 +104,9 @@ static int32_t setValueByBindParam(SValueNode* pVal, TAOS_MULTI_BIND* pParam) {
pVal
->
node
.
resType
.
bytes
=
tDataTypes
[
TSDB_DATA_TYPE_NULL
].
bytes
;
return
TSDB_CODE_SUCCESS
;
}
int32_t
inputSize
=
(
NULL
!=
pParam
->
length
?
*
(
pParam
->
length
)
:
tDataTypes
[
pParam
->
buffer_type
].
bytes
);
pVal
->
node
.
resType
.
type
=
pParam
->
buffer_type
;
pVal
->
node
.
resType
.
bytes
=
NULL
!=
pParam
->
length
?
*
(
pParam
->
length
)
:
tDataTypes
[
pParam
->
buffer_type
].
bytes
;
pVal
->
node
.
resType
.
bytes
=
inputSize
;
switch
(
pParam
->
buffer_type
)
{
case
TSDB_DATA_TYPE_BOOL
:
pVal
->
datum
.
b
=
*
((
bool
*
)
pParam
->
buffer
);
...
...
@@ -130,7 +131,6 @@ static int32_t setValueByBindParam(SValueNode* pVal, TAOS_MULTI_BIND* pParam) {
break
;
case
TSDB_DATA_TYPE_VARCHAR
:
case
TSDB_DATA_TYPE_VARBINARY
:
case
TSDB_DATA_TYPE_NCHAR
:
pVal
->
datum
.
p
=
taosMemoryCalloc
(
1
,
pVal
->
node
.
resType
.
bytes
+
VARSTR_HEADER_SIZE
+
1
);
if
(
NULL
==
pVal
->
datum
.
p
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
...
...
@@ -138,6 +138,21 @@ static int32_t setValueByBindParam(SValueNode* pVal, TAOS_MULTI_BIND* pParam) {
varDataSetLen
(
pVal
->
datum
.
p
,
pVal
->
node
.
resType
.
bytes
);
strncpy
(
varDataVal
(
pVal
->
datum
.
p
),
(
const
char
*
)
pParam
->
buffer
,
pVal
->
node
.
resType
.
bytes
);
break
;
case
TSDB_DATA_TYPE_NCHAR
:
{
pVal
->
node
.
resType
.
bytes
*=
TSDB_NCHAR_SIZE
;
pVal
->
datum
.
p
=
taosMemoryCalloc
(
1
,
pVal
->
node
.
resType
.
bytes
+
VARSTR_HEADER_SIZE
+
1
);
if
(
NULL
==
pVal
->
datum
.
p
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
int32_t
output
=
0
;
if
(
!
taosMbsToUcs4
(
pParam
->
buffer
,
inputSize
,
(
TdUcs4
*
)
varDataVal
(
pVal
->
datum
.
p
),
pVal
->
node
.
resType
.
bytes
,
&
output
))
{
return
errno
;
}
varDataSetLen
(
pVal
->
datum
.
p
,
output
);
pVal
->
node
.
resType
.
bytes
=
output
;
break
;
}
case
TSDB_DATA_TYPE_TIMESTAMP
:
pVal
->
datum
.
i
=
*
((
int64_t
*
)
pParam
->
buffer
);
break
;
...
...
@@ -181,13 +196,20 @@ static EDealRes updatePlanQueryId(SNode* pNode, void* pContext) {
int32_t
qStmtBindParam
(
SQueryPlan
*
pPlan
,
TAOS_MULTI_BIND
*
pParams
,
int32_t
colIdx
,
uint64_t
queryId
)
{
int32_t
size
=
taosArrayGetSize
(
pPlan
->
pPlaceholderValues
);
int32_t
code
=
0
;
if
(
colIdx
<
0
)
{
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
setValueByBindParam
((
SValueNode
*
)
taosArrayGetP
(
pPlan
->
pPlaceholderValues
,
i
),
pParams
+
i
);
code
=
setValueByBindParam
((
SValueNode
*
)
taosArrayGetP
(
pPlan
->
pPlaceholderValues
,
i
),
pParams
+
i
);
if
(
code
)
{
return
code
;
}
}
}
else
{
setValueByBindParam
((
SValueNode
*
)
taosArrayGetP
(
pPlan
->
pPlaceholderValues
,
colIdx
),
pParams
);
code
=
setValueByBindParam
((
SValueNode
*
)
taosArrayGetP
(
pPlan
->
pPlaceholderValues
,
colIdx
),
pParams
);
if
(
code
)
{
return
code
;
}
}
if
(
colIdx
<
0
||
((
colIdx
+
1
)
==
size
))
{
...
...
source/libs/qworker/inc/qworkerInt.h
浏览文件 @
7bae3e3f
...
...
@@ -23,6 +23,7 @@ extern "C" {
#include "qworker.h"
#include "tlockfree.h"
#include "ttimer.h"
#include "tref.h"
#define QW_DEFAULT_SCHEDULER_NUMBER 10000
#define QW_DEFAULT_TASK_NUMBER 10000
...
...
@@ -85,6 +86,12 @@ typedef struct SQWMsg {
SQWConnInfo
connInfo
;
}
SQWMsg
;
typedef
struct
SQWHbParam
{
bool
inUse
;
int32_t
qwrId
;
int64_t
refId
;
}
SQWHbParam
;
typedef
struct
SQWHbInfo
{
SSchedulerHbRsp
rsp
;
SQWConnInfo
connInfo
;
...
...
@@ -137,7 +144,8 @@ typedef struct SQWSchStatus {
}
SQWSchStatus
;
// Qnode/Vnode level task management
typedef
struct
SQWorkerMgmt
{
typedef
struct
SQWorker
{
int64_t
refId
;
SQWorkerCfg
cfg
;
int8_t
nodeType
;
int32_t
nodeId
;
...
...
@@ -148,9 +156,17 @@ typedef struct SQWorkerMgmt {
SHashObj
*
schHash
;
// key: schedulerId, value: SQWSchStatus
SHashObj
*
ctxHash
;
// key: queryId+taskId, value: SQWTaskCtx
SMsgCb
msgCb
;
}
SQWorker
;
typedef
struct
SQWorkerMgmt
{
SRWLatch
lock
;
int32_t
qwRef
;
int32_t
qwNum
;
SQWHbParam
param
[
1024
];
int32_t
paramIdx
;
}
SQWorkerMgmt
;
#define QW_FPARAMS_DEF SQWorker
Mgmt
*mgmt, uint64_t sId, uint64_t qId, uint64_t tId, int64_t rId
#define QW_FPARAMS_DEF SQWorker *mgmt, uint64_t sId, uint64_t qId, uint64_t tId, int64_t rId
#define QW_IDS() sId, qId, tId, rId
#define QW_FPARAMS() mgmt, QW_IDS()
...
...
@@ -209,13 +225,13 @@ typedef struct SQWorkerMgmt {
} \
} while (0)
#define QW_ELOG(
param, ...) qError("QW:%p "
param, mgmt, __VA_ARGS__)
#define QW_DLOG(
param, ...) qDebug("QW:%p "
param, mgmt, __VA_ARGS__)
#define QW_ELOG(
_param, ...) qError("QW:%p " _
param, mgmt, __VA_ARGS__)
#define QW_DLOG(
_param, ...) qDebug("QW:%p " _
param, mgmt, __VA_ARGS__)
#define QW_DUMP(param, ...) \
#define QW_DUMP(
_
param, ...) \
do { \
if (gQWDebug.dumpEnable) { \
qDebug("QW:%p " param, mgmt, __VA_ARGS__); \
qDebug("QW:%p "
_
param, mgmt, __VA_ARGS__); \
} \
} while (0)
...
...
@@ -282,6 +298,14 @@ typedef struct SQWorkerMgmt {
} \
} while (0)
extern
SQWorkerMgmt
gQwMgmt
;
FORCE_INLINE
SQWorker
*
qwAcquire
(
int64_t
refId
)
{
return
(
SQWorker
*
)
taosAcquireRef
(
atomic_load_32
(
&
gQwMgmt
.
qwRef
),
refId
);
}
FORCE_INLINE
int32_t
qwRelease
(
int64_t
refId
)
{
return
taosReleaseRef
(
gQwMgmt
.
qwRef
,
refId
);
}
#ifdef __cplusplus
}
#endif
...
...
source/libs/qworker/inc/qworkerMsg.h
浏览文件 @
7bae3e3f
...
...
@@ -28,7 +28,7 @@ int32_t qwProcessCQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg);
int32_t
qwProcessReady
(
QW_FPARAMS_DEF
,
SQWMsg
*
qwMsg
);
int32_t
qwProcessFetch
(
QW_FPARAMS_DEF
,
SQWMsg
*
qwMsg
);
int32_t
qwProcessDrop
(
QW_FPARAMS_DEF
,
SQWMsg
*
qwMsg
);
int32_t
qwProcessHb
(
SQWorker
Mgmt
*
mgmt
,
SQWMsg
*
qwMsg
,
SSchedulerHbReq
*
req
);
int32_t
qwProcessHb
(
SQWorker
*
mgmt
,
SQWMsg
*
qwMsg
,
SSchedulerHbReq
*
req
);
int32_t
qwBuildAndSendDropRsp
(
SQWConnInfo
*
pConn
,
int32_t
code
);
int32_t
qwBuildAndSendCancelRsp
(
SQWConnInfo
*
pConn
,
int32_t
code
);
...
...
@@ -41,10 +41,10 @@ int32_t qwBuildAndSendQueryRsp(SQWConnInfo *pConn, int32_t code);
int32_t
qwBuildAndSendExplainRsp
(
SQWConnInfo
*
pConn
,
SExplainExecInfo
*
execInfo
,
int32_t
num
);
void
qwFreeFetchRsp
(
void
*
msg
);
int32_t
qwMallocFetchRsp
(
int32_t
length
,
SRetrieveTableRsp
**
rsp
);
int32_t
qwGetSchTasksStatus
(
SQWorker
Mgmt
*
mgmt
,
uint64_t
sId
,
SSchedulerStatusRsp
**
rsp
);
int32_t
qwGetSchTasksStatus
(
SQWorker
*
mgmt
,
uint64_t
sId
,
SSchedulerStatusRsp
**
rsp
);
int32_t
qwBuildAndSendHbRsp
(
SQWConnInfo
*
pConn
,
SSchedulerHbRsp
*
rsp
,
int32_t
code
);
int32_t
qwRegisterQueryBrokenLinkArg
(
QW_FPARAMS_DEF
,
SQWConnInfo
*
pConn
);
int32_t
qwRegisterHbBrokenLinkArg
(
SQWorker
Mgmt
*
mgmt
,
uint64_t
sId
,
SQWConnInfo
*
pConn
);
int32_t
qwRegisterHbBrokenLinkArg
(
SQWorker
*
mgmt
,
uint64_t
sId
,
SQWConnInfo
*
pConn
);
#ifdef __cplusplus
}
...
...
source/libs/qworker/src/qworker.c
浏览文件 @
7bae3e3f
...
...
@@ -10,6 +10,11 @@
#include "tname.h"
SQWDebug
gQWDebug
=
{.
statusEnable
=
true
,
.
dumpEnable
=
true
};
SQWorkerMgmt
gQwMgmt
=
{
.
lock
=
0
,
.
qwRef
=
-
1
,
.
qwNum
=
0
,
};
int32_t
qwDbgValidateStatus
(
QW_FPARAMS_DEF
,
int8_t
oriStatus
,
int8_t
newStatus
,
bool
*
ignore
)
{
if
(
!
gQWDebug
.
statusEnable
)
{
...
...
@@ -98,7 +103,7 @@ _return:
void
qwDbgDumpSchInfo
(
SQWSchStatus
*
sch
,
int32_t
i
)
{}
void
qwDbgDumpMgmtInfo
(
SQWorker
Mgmt
*
mgmt
)
{
void
qwDbgDumpMgmtInfo
(
SQWorker
*
mgmt
)
{
if
(
!
gQWDebug
.
dumpEnable
)
{
return
;
}
...
...
@@ -186,7 +191,7 @@ int32_t qwSetTaskStatus(QW_FPARAMS_DEF, SQWTaskStatus *task, int8_t status) {
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwAddSchedulerImpl
(
SQWorker
Mgmt
*
mgmt
,
uint64_t
sId
,
int32_t
rwType
)
{
int32_t
qwAddSchedulerImpl
(
SQWorker
*
mgmt
,
uint64_t
sId
,
int32_t
rwType
)
{
SQWSchStatus
newSch
=
{
0
};
newSch
.
tasksHash
=
taosHashInit
(
mgmt
->
cfg
.
maxSchTaskNum
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
false
,
HASH_NO_LOCK
);
...
...
@@ -213,7 +218,7 @@ int32_t qwAddSchedulerImpl(SQWorkerMgmt *mgmt, uint64_t sId, int32_t rwType) {
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwAcquireSchedulerImpl
(
SQWorker
Mgmt
*
mgmt
,
uint64_t
sId
,
int32_t
rwType
,
SQWSchStatus
**
sch
,
int32_t
nOpt
)
{
int32_t
qwAcquireSchedulerImpl
(
SQWorker
*
mgmt
,
uint64_t
sId
,
int32_t
rwType
,
SQWSchStatus
**
sch
,
int32_t
nOpt
)
{
while
(
true
)
{
QW_LOCK
(
rwType
,
&
mgmt
->
schLock
);
*
sch
=
taosHashGet
(
mgmt
->
schHash
,
&
sId
,
sizeof
(
sId
));
...
...
@@ -240,15 +245,15 @@ int32_t qwAcquireSchedulerImpl(SQWorkerMgmt *mgmt, uint64_t sId, int32_t rwType,
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwAcquireAddScheduler
(
SQWorker
Mgmt
*
mgmt
,
uint64_t
sId
,
int32_t
rwType
,
SQWSchStatus
**
sch
)
{
int32_t
qwAcquireAddScheduler
(
SQWorker
*
mgmt
,
uint64_t
sId
,
int32_t
rwType
,
SQWSchStatus
**
sch
)
{
return
qwAcquireSchedulerImpl
(
mgmt
,
sId
,
rwType
,
sch
,
QW_NOT_EXIST_ADD
);
}
int32_t
qwAcquireScheduler
(
SQWorker
Mgmt
*
mgmt
,
uint64_t
sId
,
int32_t
rwType
,
SQWSchStatus
**
sch
)
{
int32_t
qwAcquireScheduler
(
SQWorker
*
mgmt
,
uint64_t
sId
,
int32_t
rwType
,
SQWSchStatus
**
sch
)
{
return
qwAcquireSchedulerImpl
(
mgmt
,
sId
,
rwType
,
sch
,
QW_NOT_EXIST_RET_ERR
);
}
void
qwReleaseScheduler
(
int32_t
rwType
,
SQWorker
Mgmt
*
mgmt
)
{
QW_UNLOCK
(
rwType
,
&
mgmt
->
schLock
);
}
void
qwReleaseScheduler
(
int32_t
rwType
,
SQWorker
*
mgmt
)
{
QW_UNLOCK
(
rwType
,
&
mgmt
->
schLock
);
}
int32_t
qwAcquireTaskStatus
(
QW_FPARAMS_DEF
,
int32_t
rwType
,
SQWSchStatus
*
sch
,
SQWTaskStatus
**
task
)
{
char
id
[
sizeof
(
qId
)
+
sizeof
(
tId
)]
=
{
0
};
...
...
@@ -384,7 +389,7 @@ int32_t qwAddTaskCtx(QW_FPARAMS_DEF) { QW_RET(qwAddTaskCtxImpl(QW_FPARAMS(), fal
int32_t
qwAddAcquireTaskCtx
(
QW_FPARAMS_DEF
,
SQWTaskCtx
**
ctx
)
{
return
qwAddTaskCtxImpl
(
QW_FPARAMS
(),
true
,
ctx
);
}
void
qwReleaseTaskCtx
(
SQWorker
Mgmt
*
mgmt
,
void
*
ctx
)
{
taosHashRelease
(
mgmt
->
ctxHash
,
ctx
);
}
void
qwReleaseTaskCtx
(
SQWorker
*
mgmt
,
void
*
ctx
)
{
taosHashRelease
(
mgmt
->
ctxHash
,
ctx
);
}
void
qwFreeTaskHandle
(
QW_FPARAMS_DEF
,
qTaskInfo_t
*
taskHandle
)
{
// Note: free/kill may in RC
...
...
@@ -606,7 +611,7 @@ int32_t qwExecTask(QW_FPARAMS_DEF, SQWTaskCtx *ctx, bool *queryEnd) {
QW_RET
(
code
);
}
int32_t
qwGenerateSchHbRsp
(
SQWorker
Mgmt
*
mgmt
,
SQWSchStatus
*
sch
,
SQWHbInfo
*
hbInfo
)
{
int32_t
qwGenerateSchHbRsp
(
SQWorker
*
mgmt
,
SQWSchStatus
*
sch
,
SQWHbInfo
*
hbInfo
)
{
int32_t
taskNum
=
0
;
hbInfo
->
connInfo
=
sch
->
hbConnInfo
;
...
...
@@ -1262,7 +1267,7 @@ _return:
QW_RET
(
TSDB_CODE_SUCCESS
);
}
int32_t
qwProcessHbLinkBroken
(
SQWorker
Mgmt
*
mgmt
,
SQWMsg
*
qwMsg
,
SSchedulerHbReq
*
req
)
{
int32_t
qwProcessHbLinkBroken
(
SQWorker
*
mgmt
,
SQWMsg
*
qwMsg
,
SSchedulerHbReq
*
req
)
{
int32_t
code
=
0
;
SSchedulerHbRsp
rsp
=
{
0
};
SQWSchStatus
*
sch
=
NULL
;
...
...
@@ -1288,7 +1293,7 @@ int32_t qwProcessHbLinkBroken(SQWorkerMgmt *mgmt, SQWMsg *qwMsg, SSchedulerHbReq
QW_RET
(
TSDB_CODE_SUCCESS
);
}
int32_t
qwProcessHb
(
SQWorker
Mgmt
*
mgmt
,
SQWMsg
*
qwMsg
,
SSchedulerHbReq
*
req
)
{
int32_t
qwProcessHb
(
SQWorker
*
mgmt
,
SQWMsg
*
qwMsg
,
SSchedulerHbReq
*
req
)
{
int32_t
code
=
0
;
SSchedulerHbRsp
rsp
=
{
0
};
SQWSchStatus
*
sch
=
NULL
;
...
...
@@ -1333,7 +1338,19 @@ _return:
}
void
qwProcessHbTimerEvent
(
void
*
param
,
void
*
tmrId
)
{
SQWorkerMgmt
*
mgmt
=
(
SQWorkerMgmt
*
)
param
;
SQWHbParam
*
hbParam
=
(
SQWHbParam
*
)
param
;
if
(
hbParam
->
qwrId
!=
atomic_load_32
(
&
gQwMgmt
.
qwRef
))
{
return
;
}
int64_t
refId
=
hbParam
->
refId
;
SQWorker
*
mgmt
=
qwAcquire
(
refId
);
if
(
NULL
==
mgmt
)
{
QW_DLOG
(
"qwAcquire %"
PRIx64
"failed"
,
refId
);
taosMemoryFree
(
param
);
return
;
}
SQWSchStatus
*
sch
=
NULL
;
int32_t
taskNum
=
0
;
SQWHbInfo
*
rspList
=
NULL
;
...
...
@@ -1347,6 +1364,7 @@ void qwProcessHbTimerEvent(void *param, void *tmrId) {
if
(
schNum
<=
0
)
{
QW_UNLOCK
(
QW_READ
,
&
mgmt
->
schLock
);
taosTmrReset
(
qwProcessHbTimerEvent
,
QW_DEFAULT_HEARTBEAT_MSEC
,
param
,
mgmt
->
timer
,
&
mgmt
->
hbTimer
);
qwRelease
(
refId
);
return
;
}
...
...
@@ -1355,6 +1373,7 @@ void qwProcessHbTimerEvent(void *param, void *tmrId) {
QW_UNLOCK
(
QW_READ
,
&
mgmt
->
schLock
);
QW_ELOG
(
"calloc %d SQWHbInfo failed"
,
schNum
);
taosTmrReset
(
qwProcessHbTimerEvent
,
QW_DEFAULT_HEARTBEAT_MSEC
,
param
,
mgmt
->
timer
,
&
mgmt
->
hbTimer
);
qwRelease
(
refId
);
return
;
}
...
...
@@ -1396,6 +1415,74 @@ _return:
taosMemoryFreeClear
(
rspList
);
taosTmrReset
(
qwProcessHbTimerEvent
,
QW_DEFAULT_HEARTBEAT_MSEC
,
param
,
mgmt
->
timer
,
&
mgmt
->
hbTimer
);
qwRelease
(
refId
);
}
void
qwCloseRef
(
void
)
{
taosWLockLatch
(
&
gQwMgmt
.
lock
);
if
(
atomic_load_32
(
&
gQwMgmt
.
qwNum
)
<=
0
&&
gQwMgmt
.
qwRef
>=
0
)
{
taosCloseRef
(
gQwMgmt
.
qwRef
);
gQwMgmt
.
qwRef
=
-
1
;
}
taosWUnLockLatch
(
&
gQwMgmt
.
lock
);
}
void
qwDestroyImpl
(
void
*
pMgmt
)
{
SQWorker
*
mgmt
=
(
SQWorker
*
)
pMgmt
;
taosTmrStopA
(
&
mgmt
->
hbTimer
);
taosTmrCleanUp
(
mgmt
->
timer
);
// TODO STOP ALL QUERY
// TODO FREE ALL
taosHashCleanup
(
mgmt
->
ctxHash
);
taosHashCleanup
(
mgmt
->
schHash
);
taosMemoryFree
(
mgmt
);
atomic_sub_fetch_32
(
&
gQwMgmt
.
qwNum
,
1
);
qwCloseRef
();
}
int32_t
qwOpenRef
(
void
)
{
taosWLockLatch
(
&
gQwMgmt
.
lock
);
if
(
gQwMgmt
.
qwRef
<
0
)
{
gQwMgmt
.
qwRef
=
taosOpenRef
(
100
,
qwDestroyImpl
);
if
(
gQwMgmt
.
qwRef
<
0
)
{
taosWUnLockLatch
(
&
gQwMgmt
.
lock
);
qError
(
"init qworker ref failed"
);
QW_RET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
}
taosWUnLockLatch
(
&
gQwMgmt
.
lock
);
return
TSDB_CODE_SUCCESS
;
}
void
qwSetHbParam
(
int64_t
refId
,
SQWHbParam
**
pParam
)
{
int32_t
paramIdx
=
0
;
int32_t
newParamIdx
=
0
;
while
(
true
)
{
paramIdx
=
atomic_load_32
(
&
gQwMgmt
.
paramIdx
);
if
(
paramIdx
==
tListLen
(
gQwMgmt
.
param
))
{
newParamIdx
=
0
;
}
else
{
newParamIdx
=
paramIdx
+
1
;
}
if
(
paramIdx
==
atomic_val_compare_exchange_32
(
&
gQwMgmt
.
paramIdx
,
paramIdx
,
newParamIdx
))
{
break
;
}
}
gQwMgmt
.
param
[
paramIdx
].
qwrId
=
gQwMgmt
.
qwRef
;
gQwMgmt
.
param
[
paramIdx
].
refId
=
refId
;
*
pParam
=
&
gQwMgmt
.
param
[
paramIdx
];
}
int32_t
qWorkerInit
(
int8_t
nodeType
,
int32_t
nodeId
,
SQWorkerCfg
*
cfg
,
void
**
qWorkerMgmt
,
const
SMsgCb
*
pMsgCb
)
{
...
...
@@ -1404,10 +1491,21 @@ int32_t qWorkerInit(int8_t nodeType, int32_t nodeId, SQWorkerCfg *cfg, void **qW
QW_RET
(
TSDB_CODE_QRY_INVALID_INPUT
);
}
int32_t
code
=
0
;
SQWorkerMgmt
*
mgmt
=
taosMemoryCalloc
(
1
,
sizeof
(
SQWorkerMgmt
));
int32_t
qwNum
=
atomic_add_fetch_32
(
&
gQwMgmt
.
qwNum
,
1
);
if
(
1
==
qwNum
)
{
memset
(
gQwMgmt
.
param
,
0
,
sizeof
(
gQwMgmt
.
param
));
}
int32_t
code
=
qwOpenRef
();
if
(
code
)
{
atomic_sub_fetch_32
(
&
gQwMgmt
.
qwNum
,
1
);
QW_RET
(
code
);
}
SQWorker
*
mgmt
=
taosMemoryCalloc
(
1
,
sizeof
(
SQWorker
));
if
(
NULL
==
mgmt
)
{
qError
(
"calloc %d failed"
,
(
int32_t
)
sizeof
(
SQWorkerMgmt
));
qError
(
"calloc %d failed"
,
(
int32_t
)
sizeof
(
SQWorker
));
atomic_sub_fetch_32
(
&
gQwMgmt
.
qwNum
,
1
);
QW_RET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
...
...
@@ -1449,16 +1547,25 @@ int32_t qWorkerInit(int8_t nodeType, int32_t nodeId, SQWorkerCfg *cfg, void **qW
QW_ERR_JRET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
mgmt
->
hbTimer
=
taosTmrStart
(
qwProcessHbTimerEvent
,
QW_DEFAULT_HEARTBEAT_MSEC
,
mgmt
,
mgmt
->
timer
);
if
(
NULL
==
mgmt
->
hbTimer
)
{
qError
(
"start hb timer failed"
);
QW_ERR_JRET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
mgmt
->
nodeType
=
nodeType
;
mgmt
->
nodeId
=
nodeId
;
mgmt
->
msgCb
=
*
pMsgCb
;
mgmt
->
refId
=
taosAddRef
(
gQwMgmt
.
qwRef
,
mgmt
);
if
(
mgmt
->
refId
<
0
)
{
qError
(
"taosAddRef qw failed, error:%s"
,
tstrerror
(
terrno
));
QW_ERR_JRET
(
terrno
);
}
SQWHbParam
*
param
=
NULL
;
qwSetHbParam
(
mgmt
->
refId
,
&
param
);
mgmt
->
hbTimer
=
taosTmrStart
(
qwProcessHbTimerEvent
,
QW_DEFAULT_HEARTBEAT_MSEC
,
(
void
*
)
param
,
mgmt
->
timer
);
if
(
NULL
==
mgmt
->
hbTimer
)
{
qError
(
"start hb timer failed"
);
QW_ERR_JRET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
*
qWorkerMgmt
=
mgmt
;
qDebug
(
"qworker initialized for node, type:%d, id:%d, handle:%p"
,
mgmt
->
nodeType
,
mgmt
->
nodeId
,
mgmt
);
...
...
@@ -1467,13 +1574,17 @@ int32_t qWorkerInit(int8_t nodeType, int32_t nodeId, SQWorkerCfg *cfg, void **qW
_return:
taosHashCleanup
(
mgmt
->
schHash
);
taosHashCleanup
(
mgmt
->
ctxHash
);
taosTmrCleanUp
(
mgmt
->
timer
);
taosMemoryFreeClear
(
mgmt
);
if
(
mgmt
->
refId
>=
0
)
{
qwRelease
(
mgmt
->
refId
);
}
else
{
taosHashCleanup
(
mgmt
->
schHash
);
taosHashCleanup
(
mgmt
->
ctxHash
);
taosTmrCleanUp
(
mgmt
->
timer
);
taosMemoryFreeClear
(
mgmt
);
atomic_sub_fetch_32
(
&
gQwMgmt
.
qwNum
,
1
);
}
QW_RET
(
code
);
}
...
...
@@ -1482,22 +1593,14 @@ void qWorkerDestroy(void **qWorkerMgmt) {
return
;
}
SQWorker
Mgmt
*
mgmt
=
*
qWorkerMgmt
;
SQWorker
*
mgmt
=
*
qWorkerMgmt
;
taosTmrStopA
(
&
mgmt
->
hbTimer
);
taosTmrCleanUp
(
mgmt
->
timer
);
// TODO STOP ALL QUERY
// TODO FREE ALL
taosHashCleanup
(
mgmt
->
ctxHash
);
taosHashCleanup
(
mgmt
->
schHash
);
taosMemoryFreeClear
(
*
qWorkerMgmt
);
if
(
taosRemoveRef
(
gQwMgmt
.
qwRef
,
mgmt
->
refId
))
{
qError
(
"remove qw from ref list failed, refId:%"
PRIx64
,
mgmt
->
refId
);
}
}
int32_t
qwGetSchTasksStatus
(
SQWorker
Mgmt
*
mgmt
,
uint64_t
sId
,
SSchedulerStatusRsp
**
rsp
)
{
int32_t
qwGetSchTasksStatus
(
SQWorker
*
mgmt
,
uint64_t
sId
,
SSchedulerStatusRsp
**
rsp
)
{
/*
SQWSchStatus *sch = NULL;
int32_t taskNum = 0;
...
...
@@ -1544,7 +1647,7 @@ int32_t qwGetSchTasksStatus(SQWorkerMgmt *mgmt, uint64_t sId, SSchedulerStatusRs
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwUpdateSchLastAccess
(
SQWorker
Mgmt
*
mgmt
,
uint64_t
sId
,
uint64_t
qId
,
uint64_t
tId
)
{
int32_t
qwUpdateSchLastAccess
(
SQWorker
*
mgmt
,
uint64_t
sId
,
uint64_t
qId
,
uint64_t
tId
)
{
SQWSchStatus
*
sch
=
NULL
;
/*
...
...
@@ -1557,7 +1660,7 @@ int32_t qwUpdateSchLastAccess(SQWorkerMgmt *mgmt, uint64_t sId, uint64_t qId, ui
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwGetTaskStatus
(
SQWorker
Mgmt
*
mgmt
,
uint64_t
sId
,
uint64_t
qId
,
uint64_t
tId
,
int8_t
*
taskStatus
)
{
int32_t
qwGetTaskStatus
(
SQWorker
*
mgmt
,
uint64_t
sId
,
uint64_t
qId
,
uint64_t
tId
,
int8_t
*
taskStatus
)
{
SQWSchStatus
*
sch
=
NULL
;
SQWTaskStatus
*
task
=
NULL
;
int32_t
code
=
0
;
...
...
@@ -1584,7 +1687,7 @@ int32_t qwGetTaskStatus(SQWorkerMgmt *mgmt, uint64_t sId, uint64_t qId, uint64_t
QW_RET
(
code
);
}
int32_t
qwCancelTask
(
SQWorker
Mgmt
*
mgmt
,
uint64_t
sId
,
uint64_t
qId
,
uint64_t
tId
)
{
int32_t
qwCancelTask
(
SQWorker
*
mgmt
,
uint64_t
sId
,
uint64_t
qId
,
uint64_t
tId
)
{
SQWSchStatus
*
sch
=
NULL
;
SQWTaskStatus
*
task
=
NULL
;
int32_t
code
=
0
;
...
...
source/libs/qworker/src/qworkerMsg.c
浏览文件 @
7bae3e3f
...
...
@@ -320,7 +320,7 @@ int32_t qwRegisterQueryBrokenLinkArg(QW_FPARAMS_DEF, SQWConnInfo *pConn) {
return
TSDB_CODE_SUCCESS
;
}
int32_t
qwRegisterHbBrokenLinkArg
(
SQWorker
Mgmt
*
mgmt
,
uint64_t
sId
,
SQWConnInfo
*
pConn
)
{
int32_t
qwRegisterHbBrokenLinkArg
(
SQWorker
*
mgmt
,
uint64_t
sId
,
SQWConnInfo
*
pConn
)
{
SSchedulerHbReq
req
=
{
0
};
req
.
header
.
vgId
=
mgmt
->
nodeId
;
req
.
sId
=
sId
;
...
...
@@ -363,7 +363,7 @@ int32_t qWorkerProcessQueryMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg) {
int32_t
code
=
0
;
SSubQueryMsg
*
msg
=
pMsg
->
pCont
;
SQWorker
Mgmt
*
mgmt
=
(
SQWorkerMgmt
*
)
qWorkerMgmt
;
SQWorker
*
mgmt
=
(
SQWorker
*
)
qWorkerMgmt
;
if
(
NULL
==
msg
||
pMsg
->
contLen
<=
sizeof
(
*
msg
))
{
QW_ELOG
(
"invalid query msg, msg:%p, msgLen:%d"
,
msg
,
pMsg
->
contLen
);
...
...
@@ -405,7 +405,7 @@ int32_t qWorkerProcessCQueryMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg) {
SQueryContinueReq
*
msg
=
(
SQueryContinueReq
*
)
pMsg
->
pCont
;
bool
needStop
=
false
;
SQWTaskCtx
*
handles
=
NULL
;
SQWorker
Mgmt
*
mgmt
=
(
SQWorkerMgmt
*
)
qWorkerMgmt
;
SQWorker
*
mgmt
=
(
SQWorker
*
)
qWorkerMgmt
;
if
(
NULL
==
msg
||
pMsg
->
contLen
<
sizeof
(
*
msg
))
{
QW_ELOG
(
"invalid cquery msg, msg:%p, msgLen:%d"
,
msg
,
pMsg
->
contLen
);
...
...
@@ -436,7 +436,7 @@ int32_t qWorkerProcessReadyMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg) {
return
TSDB_CODE_QRY_INVALID_INPUT
;
}
SQWorker
Mgmt
*
mgmt
=
(
SQWorkerMgmt
*
)
qWorkerMgmt
;
SQWorker
*
mgmt
=
(
SQWorker
*
)
qWorkerMgmt
;
SResReadyReq
*
msg
=
pMsg
->
pCont
;
if
(
NULL
==
msg
||
pMsg
->
contLen
<
sizeof
(
*
msg
))
{
QW_ELOG
(
"invalid task ready msg, msg:%p, msgLen:%d"
,
msg
,
pMsg
->
contLen
);
...
...
@@ -478,7 +478,7 @@ int32_t qWorkerProcessStatusMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg) {
QW_ERR_RET
(
TSDB_CODE_QRY_INVALID_INPUT
);
}
SQWorker
Mgmt
*
mgmt
=
(
SQWorkerMgmt
*
)
qWorkerMgmt
;
SQWorker
*
mgmt
=
(
SQWorker
*
)
qWorkerMgmt
;
msg
->
sId
=
htobe64
(
msg
->
sId
);
uint64_t
sId
=
msg
->
sId
;
...
...
@@ -499,7 +499,7 @@ int32_t qWorkerProcessFetchMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg) {
}
SResFetchReq
*
msg
=
pMsg
->
pCont
;
SQWorker
Mgmt
*
mgmt
=
(
SQWorkerMgmt
*
)
qWorkerMgmt
;
SQWorker
*
mgmt
=
(
SQWorker
*
)
qWorkerMgmt
;
if
(
NULL
==
msg
||
pMsg
->
contLen
<
sizeof
(
*
msg
))
{
QW_ELOG
(
"invalid fetch msg, msg:%p, msgLen:%d"
,
msg
,
pMsg
->
contLen
);
...
...
@@ -539,7 +539,7 @@ int32_t qWorkerProcessCancelMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg) {
return
TSDB_CODE_QRY_INVALID_INPUT
;
}
SQWorker
Mgmt
*
mgmt
=
(
SQWorkerMgmt
*
)
qWorkerMgmt
;
SQWorker
*
mgmt
=
(
SQWorker
*
)
qWorkerMgmt
;
int32_t
code
=
0
;
STaskCancelReq
*
msg
=
pMsg
->
pCont
;
if
(
NULL
==
msg
||
pMsg
->
contLen
<
sizeof
(
*
msg
))
{
...
...
@@ -579,7 +579,7 @@ int32_t qWorkerProcessDropMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg) {
int32_t
code
=
0
;
STaskDropReq
*
msg
=
pMsg
->
pCont
;
SQWorker
Mgmt
*
mgmt
=
(
SQWorkerMgmt
*
)
qWorkerMgmt
;
SQWorker
*
mgmt
=
(
SQWorker
*
)
qWorkerMgmt
;
if
(
NULL
==
msg
||
pMsg
->
contLen
<
sizeof
(
*
msg
))
{
QW_ELOG
(
"invalid task drop msg, msg:%p, msgLen:%d"
,
msg
,
pMsg
->
contLen
);
...
...
@@ -621,7 +621,7 @@ int32_t qWorkerProcessHbMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg) {
int32_t
code
=
0
;
SSchedulerHbReq
req
=
{
0
};
SQWorker
Mgmt
*
mgmt
=
(
SQWorkerMgmt
*
)
qWorkerMgmt
;
SQWorker
*
mgmt
=
(
SQWorker
*
)
qWorkerMgmt
;
if
(
NULL
==
pMsg
->
pCont
)
{
QW_ELOG
(
"invalid hb msg, msg:%p, msgLen:%d"
,
pMsg
->
pCont
,
pMsg
->
contLen
);
...
...
source/libs/scalar/src/filter.c
浏览文件 @
7bae3e3f
...
...
@@ -3765,6 +3765,7 @@ int32_t filterInitFromNode(SNode* pNode, SFilterInfo **pInfo, uint32_t options)
FLT_ERR_JRET
(
fltReviseNodes
(
info
,
&
pNode
,
&
stat
));
info
->
scalarMode
=
stat
.
scalarMode
;
fltDebug
(
"scalar mode: %d"
,
info
->
scalarMode
);
if
(
!
info
->
scalarMode
)
{
FLT_ERR_JRET
(
fltInitFromNode
(
pNode
,
info
,
options
));
...
...
source/libs/scalar/src/scalar.c
浏览文件 @
7bae3e3f
...
...
@@ -75,7 +75,15 @@ int32_t scalarGenerateSetFromList(void **data, void *pNode, uint32_t type) {
if
(
valueNode
->
node
.
resType
.
type
!=
type
)
{
out
.
columnData
->
info
.
type
=
type
;
out
.
columnData
->
info
.
bytes
=
tDataTypes
[
type
].
bytes
;
if
(
IS_VAR_DATA_TYPE
(
type
))
{
if
(
IS_VAR_DATA_TYPE
(
valueNode
->
node
.
resType
.
type
))
{
out
.
columnData
->
info
.
bytes
=
valueNode
->
node
.
resType
.
bytes
*
TSDB_NCHAR_SIZE
;
}
else
{
out
.
columnData
->
info
.
bytes
=
64
*
TSDB_NCHAR_SIZE
;
}
}
else
{
out
.
columnData
->
info
.
bytes
=
tDataTypes
[
type
].
bytes
;
}
code
=
doConvertDataType
(
valueNode
,
&
out
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
...
...
@@ -598,7 +606,7 @@ EDealRes sclRewriteFunction(SNode** pNode, SScalarCtx *ctx) {
res
->
datum
.
p
=
taosMemoryCalloc
(
res
->
node
.
resType
.
bytes
+
VARSTR_HEADER_SIZE
+
1
,
1
);
memcpy
(
res
->
datum
.
p
,
output
.
columnData
->
pData
,
varDataTLen
(
output
.
columnData
->
pData
));
}
else
{
memcpy
(
nodesGetValueFromNode
(
res
),
output
.
columnData
->
pData
,
tDataTypes
[
type
].
bytes
);
nodesSetValueNodeValue
(
res
,
output
.
columnData
->
pData
);
}
}
...
...
@@ -638,7 +646,7 @@ EDealRes sclRewriteLogic(SNode** pNode, SScalarCtx *ctx) {
res
->
datum
.
p
=
output
.
columnData
->
pData
;
output
.
columnData
->
pData
=
NULL
;
}
else
{
memcpy
(
nodesGetValueFromNode
(
res
),
output
.
columnData
->
pData
,
tDataTypes
[
type
].
bytes
);
nodesSetValueNodeValue
(
res
,
output
.
columnData
->
pData
);
}
nodesDestroyNode
(
*
pNode
);
...
...
@@ -680,7 +688,7 @@ EDealRes sclRewriteOperator(SNode** pNode, SScalarCtx *ctx) {
res
->
datum
.
p
=
output
.
columnData
->
pData
;
output
.
columnData
->
pData
=
NULL
;
}
else
{
memcpy
(
nodesGetValueFromNode
(
res
),
output
.
columnData
->
pData
,
tDataTypes
[
type
].
bytes
);
nodesSetValueNodeValue
(
res
,
output
.
columnData
->
pData
);
}
}
...
...
source/libs/scheduler/inc/schedulerInt.h
浏览文件 @
7bae3e3f
...
...
@@ -85,7 +85,10 @@ typedef struct SSchedulerMgmt {
uint64_t
taskId
;
// sequential taksId
uint64_t
sId
;
// schedulerId
SSchedulerCfg
cfg
;
SRWLatch
lock
;
bool
exit
;
int32_t
jobRef
;
int32_t
jobNum
;
SSchedulerStat
stat
;
SHashObj
*
hbConnections
;
}
SSchedulerMgmt
;
...
...
source/libs/scheduler/src/scheduler.c
浏览文件 @
7bae3e3f
...
...
@@ -21,7 +21,9 @@
#include "tref.h"
#include "trpc.h"
SSchedulerMgmt
schMgmt
=
{
0
};
SSchedulerMgmt
schMgmt
=
{
.
jobRef
=
-
1
,
};
FORCE_INLINE
SSchJob
*
schAcquireJob
(
int64_t
refId
)
{
return
(
SSchJob
*
)
taosAcquireRef
(
schMgmt
.
jobRef
,
refId
);
}
...
...
@@ -70,6 +72,7 @@ int32_t schInitTask(SSchJob *pJob, SSchTask *pTask, SSubplan *pPlan, SSchLevel *
int32_t
schInitJob
(
SSchJob
**
pSchJob
,
SQueryPlan
*
pDag
,
void
*
transport
,
SArray
*
pNodeList
,
const
char
*
sql
,
int64_t
startTs
,
bool
syncSchedule
)
{
int32_t
code
=
0
;
int64_t
refId
=
-
1
;
SSchJob
*
pJob
=
taosMemoryCalloc
(
1
,
sizeof
(
SSchJob
));
if
(
NULL
==
pJob
)
{
qError
(
"QID:%"
PRIx64
" calloc %d failed"
,
pDag
->
queryId
,
(
int32_t
)
sizeof
(
SSchJob
));
...
...
@@ -114,15 +117,17 @@ int32_t schInitJob(SSchJob **pSchJob, SQueryPlan *pDag, void *transport, SArray
tsem_init
(
&
pJob
->
rspSem
,
0
,
0
);
int64_t
refId
=
taosAddRef
(
schMgmt
.
jobRef
,
pJob
);
refId
=
taosAddRef
(
schMgmt
.
jobRef
,
pJob
);
if
(
refId
<
0
)
{
SCH_JOB_ELOG
(
"taosAddRef job failed, error:%s"
,
tstrerror
(
terrno
));
SCH_ERR_JRET
(
terrno
);
}
atomic_add_fetch_32
(
&
schMgmt
.
jobNum
,
1
);
if
(
NULL
==
schAcquireJob
(
refId
))
{
SCH_JOB_ELOG
(
"schAcquireJob job failed, refId:%"
PRIx64
,
refId
);
SCH_RET
(
TSDB_CODE_SCH_STATUS_ERROR
);
SCH_
ERR_J
RET
(
TSDB_CODE_SCH_STATUS_ERROR
);
}
pJob
->
refId
=
refId
;
...
...
@@ -137,7 +142,11 @@ int32_t schInitJob(SSchJob **pSchJob, SQueryPlan *pDag, void *transport, SArray
_return:
schFreeJobImpl
(
pJob
);
if
(
refId
<
0
)
{
schFreeJobImpl
(
pJob
);
}
else
{
taosRemoveRef
(
schMgmt
.
jobRef
,
refId
);
}
SCH_RET
(
code
);
}
...
...
@@ -245,6 +254,7 @@ int32_t schValidateTaskReceivedMsgType(SSchJob *pJob, SSchTask *pTask, int32_t m
SCH_SET_TASK_LASTMSG_TYPE
(
pTask
,
-
1
);
return
TSDB_CODE_SUCCESS
;
case
TDMT_VND_CREATE_TABLE_RSP
:
case
TDMT_VND_DROP_TABLE_RSP
:
case
TDMT_VND_SUBMIT_RSP
:
break
;
default:
...
...
@@ -369,7 +379,7 @@ int32_t schBuildTaskRalation(SSchJob *pJob, SHashObj *planToTask) {
}
for
(
int32_t
n
=
0
;
n
<
childNum
;
++
n
)
{
SSubplan
*
child
=
(
SSubplan
*
)
nodesListGetNode
(
pPlan
->
pChildren
,
n
);
SSubplan
*
child
=
(
SSubplan
*
)
nodesListGetNode
(
pPlan
->
pChildren
,
n
);
SSchTask
**
childTask
=
taosHashGet
(
planToTask
,
&
child
,
POINTER_BYTES
);
if
(
NULL
==
childTask
||
NULL
==
*
childTask
)
{
SCH_TASK_ELOG
(
"subplan children relationship error, level:%d, taskIdx:%d, childIdx:%d"
,
i
,
m
,
n
);
...
...
@@ -401,7 +411,7 @@ int32_t schBuildTaskRalation(SSchJob *pJob, SHashObj *planToTask) {
}
for
(
int32_t
n
=
0
;
n
<
parentNum
;
++
n
)
{
SSubplan
*
parent
=
(
SSubplan
*
)
nodesListGetNode
(
pPlan
->
pParents
,
n
);
SSubplan
*
parent
=
(
SSubplan
*
)
nodesListGetNode
(
pPlan
->
pParents
,
n
);
SSchTask
**
parentTask
=
taosHashGet
(
planToTask
,
&
parent
,
POINTER_BYTES
);
if
(
NULL
==
parentTask
||
NULL
==
*
parentTask
)
{
SCH_TASK_ELOG
(
"subplan parent relationship error, level:%d, taskIdx:%d, childIdx:%d"
,
i
,
m
,
n
);
...
...
@@ -491,7 +501,7 @@ int32_t schValidateAndBuildJob(SQueryPlan *pDag, SSchJob *pJob) {
SSchLevel
level
=
{
0
};
SNodeListNode
*
plans
=
NULL
;
int32_t
taskNum
=
0
;
SSchLevel
*
pLevel
=
NULL
;
SSchLevel
*
pLevel
=
NULL
;
level
.
status
=
JOB_TASK_STATUS_NOT_START
;
...
...
@@ -1094,6 +1104,30 @@ int32_t schHandleResponseMsg(SSchJob *pJob, SSchTask *pTask, int32_t msgType, ch
SCH_ERR_RET
(
schProcessOnTaskSuccess
(
pJob
,
pTask
));
break
;
}
case
TDMT_VND_DROP_TABLE_RSP
:
{
SVDropTbBatchRsp
batchRsp
=
{
0
};
if
(
msg
)
{
SCoder
coder
=
{
0
};
tCoderInit
(
&
coder
,
TD_LITTLE_ENDIAN
,
msg
,
msgSize
,
TD_DECODER
);
code
=
tDecodeSVDropTbBatchRsp
(
&
coder
,
&
batchRsp
);
if
(
TSDB_CODE_SUCCESS
==
code
&&
batchRsp
.
pArray
)
{
int32_t
num
=
taosArrayGetSize
(
batchRsp
.
pArray
);
for
(
int32_t
i
=
0
;
i
<
num
;
++
i
)
{
SVDropTbRsp
*
rsp
=
taosArrayGet
(
batchRsp
.
pArray
,
i
);
if
(
NEED_CLIENT_HANDLE_ERROR
(
rsp
->
code
))
{
tCoderClear
(
&
coder
);
SCH_ERR_JRET
(
rsp
->
code
);
}
}
}
tCoderClear
(
&
coder
);
SCH_ERR_JRET
(
code
);
}
SCH_ERR_JRET
(
rspCode
);
SCH_ERR_RET
(
schProcessOnTaskSuccess
(
pJob
,
pTask
));
break
;
}
case
TDMT_VND_SUBMIT_RSP
:
{
if
(
msg
)
{
SSubmitRsp
*
rsp
=
(
SSubmitRsp
*
)
msg
;
...
...
@@ -1267,7 +1301,7 @@ int32_t schUpdateTaskExecNodeHandle(SSchTask *pTask, void *handle, int32_t rspCo
int32_t
schHandleCallback
(
void
*
param
,
const
SDataBuf
*
pMsg
,
int32_t
msgType
,
int32_t
rspCode
)
{
int32_t
code
=
0
;
SSchTaskCallbackParam
*
pParam
=
(
SSchTaskCallbackParam
*
)
param
;
SSchTask
*
pTask
=
NULL
;
SSchTask
*
pTask
=
NULL
;
SSchJob
*
pJob
=
schAcquireJob
(
pParam
->
refId
);
if
(
NULL
==
pJob
)
{
...
...
@@ -1316,6 +1350,10 @@ int32_t schHandleCreateTableCallback(void *param, const SDataBuf *pMsg, int32_t
return
schHandleCallback
(
param
,
pMsg
,
TDMT_VND_CREATE_TABLE_RSP
,
code
);
}
int32_t
schHandleDropTableCallback
(
void
*
param
,
const
SDataBuf
*
pMsg
,
int32_t
code
)
{
return
schHandleCallback
(
param
,
pMsg
,
TDMT_VND_DROP_TABLE_RSP
,
code
);
}
int32_t
schHandleQueryCallback
(
void
*
param
,
const
SDataBuf
*
pMsg
,
int32_t
code
)
{
return
schHandleCallback
(
param
,
pMsg
,
TDMT_VND_QUERY_RSP
,
code
);
}
...
...
@@ -1412,6 +1450,9 @@ int32_t schGetCallbackFp(int32_t msgType, __async_send_cb_fn_t *fp) {
case
TDMT_VND_CREATE_TABLE
:
*
fp
=
schHandleCreateTableCallback
;
break
;
case
TDMT_VND_DROP_TABLE
:
*
fp
=
schHandleDropTableCallback
;
break
;
case
TDMT_VND_SUBMIT
:
*
fp
=
schHandleSubmitCallback
;
break
;
...
...
@@ -1617,8 +1658,8 @@ _return:
int32_t
schMakeHbRpcCtx
(
SSchJob
*
pJob
,
SSchTask
*
pTask
,
SRpcCtx
*
pCtx
)
{
int32_t
code
=
0
;
SSchHbCallbackParam
*
param
=
NULL
;
SMsgSendInfo
*
pMsgSendInfo
=
NULL
;
SQueryNodeAddr
*
addr
=
taosArrayGet
(
pTask
->
candidateAddrs
,
pTask
->
candidateIdx
);
SMsgSendInfo
*
pMsgSendInfo
=
NULL
;
SQueryNodeAddr
*
addr
=
taosArrayGet
(
pTask
->
candidateAddrs
,
pTask
->
candidateIdx
);
SQueryNodeEpId
epId
=
{
0
};
epId
.
nodeId
=
addr
->
nodeId
;
...
...
@@ -1759,10 +1800,10 @@ int32_t schCloneHbRpcCtx(SRpcCtx *pSrc, SRpcCtx *pDst) {
}
SRpcCtxVal
dst
=
{
0
};
void
*
pIter
=
taosHashIterate
(
pSrc
->
args
,
NULL
);
void
*
pIter
=
taosHashIterate
(
pSrc
->
args
,
NULL
);
while
(
pIter
)
{
SRpcCtxVal
*
pVal
=
(
SRpcCtxVal
*
)
pIter
;
int32_t
*
msgType
=
taosHashGetKey
(
pIter
,
NULL
);
int32_t
*
msgType
=
taosHashGetKey
(
pIter
,
NULL
);
dst
=
*
pVal
;
dst
.
val
=
NULL
;
...
...
@@ -1916,7 +1957,7 @@ _return:
int32_t
schBuildAndSendMsg
(
SSchJob
*
pJob
,
SSchTask
*
pTask
,
SQueryNodeAddr
*
addr
,
int32_t
msgType
)
{
uint32_t
msgSize
=
0
;
void
*
msg
=
NULL
;
void
*
msg
=
NULL
;
int32_t
code
=
0
;
bool
isCandidateAddr
=
false
;
bool
persistHandle
=
false
;
...
...
@@ -1931,6 +1972,7 @@ int32_t schBuildAndSendMsg(SSchJob *pJob, SSchTask *pTask, SQueryNodeAddr *addr,
switch
(
msgType
)
{
case
TDMT_VND_CREATE_TABLE
:
case
TDMT_VND_DROP_TABLE
:
case
TDMT_VND_SUBMIT
:
{
msgSize
=
pTask
->
msgLen
;
msg
=
taosMemoryCalloc
(
1
,
msgSize
);
...
...
@@ -2239,6 +2281,19 @@ int32_t schCancelJob(SSchJob *pJob) {
// TODO MOVE ALL TASKS FROM EXEC LIST TO FAIL LIST
}
void
schCloseJobRef
(
void
)
{
if
(
!
atomic_load_8
((
int8_t
*
)
&
schMgmt
.
exit
))
{
return
;
}
SCH_LOCK
(
SCH_WRITE
,
&
schMgmt
.
lock
);
if
(
atomic_load_32
(
&
schMgmt
.
jobNum
)
<=
0
&&
schMgmt
.
jobRef
>=
0
)
{
taosCloseRef
(
schMgmt
.
jobRef
);
schMgmt
.
jobRef
=
-
1
;
}
SCH_UNLOCK
(
SCH_WRITE
,
&
schMgmt
.
lock
);
}
void
schFreeJobImpl
(
void
*
job
)
{
if
(
NULL
==
job
)
{
return
;
...
...
@@ -2284,6 +2339,10 @@ void schFreeJobImpl(void *job) {
taosMemoryFreeClear
(
pJob
);
qDebug
(
"QID:0x%"
PRIx64
" job freed, refId:%"
PRIx64
", pointer:%p"
,
queryId
,
refId
,
pJob
);
atomic_sub_fetch_32
(
&
schMgmt
.
jobNum
,
1
);
schCloseJobRef
();
}
static
int32_t
schExecJobImpl
(
void
*
transport
,
SArray
*
pNodeList
,
SQueryPlan
*
pDag
,
int64_t
*
job
,
const
char
*
sql
,
...
...
@@ -2368,7 +2427,7 @@ _return:
}
int32_t
schedulerInit
(
SSchedulerCfg
*
cfg
)
{
if
(
schMgmt
.
jobRef
)
{
if
(
schMgmt
.
jobRef
>=
0
)
{
qError
(
"scheduler already initialized"
);
return
TSDB_CODE_QRY_INVALID_INPUT
;
}
...
...
@@ -2673,7 +2732,7 @@ int32_t schedulerGetTasksStatus(int64_t job, SArray *pSub) {
SSchLevel
*
pLevel
=
taosArrayGet
(
pJob
->
levels
,
i
);
for
(
int32_t
m
=
0
;
m
<
pLevel
->
taskNum
;
++
m
)
{
SSchTask
*
pTask
=
taosArrayGet
(
pLevel
->
subTasks
,
m
);
SSchTask
*
pTask
=
taosArrayGet
(
pLevel
->
subTasks
,
m
);
SQuerySubDesc
subDesc
=
{.
tid
=
pTask
->
taskId
,
.
status
=
pTask
->
status
};
taosArrayPush
(
pSub
,
&
subDesc
);
...
...
@@ -2732,7 +2791,9 @@ void schedulerFreeTaskList(SArray *taskList) {
}
void
schedulerDestroy
(
void
)
{
if
(
schMgmt
.
jobRef
)
{
atomic_store_8
((
int8_t
*
)
&
schMgmt
.
exit
,
1
);
if
(
schMgmt
.
jobRef
>=
0
)
{
SSchJob
*
pJob
=
taosIterateRef
(
schMgmt
.
jobRef
,
0
);
int64_t
refId
=
0
;
...
...
@@ -2745,9 +2806,6 @@ void schedulerDestroy(void) {
pJob
=
taosIterateRef
(
schMgmt
.
jobRef
,
refId
);
}
taosCloseRef
(
schMgmt
.
jobRef
);
schMgmt
.
jobRef
=
0
;
}
if
(
schMgmt
.
hbConnections
)
{
...
...
source/libs/tdb/inc/tdb.h
浏览文件 @
7bae3e3f
...
...
@@ -22,6 +22,65 @@
extern
"C"
{
#endif
typedef
int
(
*
tdb_cmpr_fn_t
)(
const
void
*
pKey1
,
int
kLen1
,
const
void
*
pKey2
,
int
kLen2
);
// exposed types
typedef
struct
STEnv
TENV
;
typedef
struct
STDB
TDB
;
typedef
struct
STDBC
TDBC
;
typedef
struct
STxn
TXN
;
// TENV
int
tdbEnvOpen
(
const
char
*
rootDir
,
int
szPage
,
int
pages
,
TENV
**
ppEnv
);
int
tdbEnvClose
(
TENV
*
pEnv
);
int
tdbBegin
(
TENV
*
pEnv
,
TXN
*
pTxn
);
int
tdbCommit
(
TENV
*
pEnv
,
TXN
*
pTxn
);
// TDB
int
tdbDbOpen
(
const
char
*
fname
,
int
keyLen
,
int
valLen
,
tdb_cmpr_fn_t
keyCmprFn
,
TENV
*
pEnv
,
TDB
**
ppDb
);
int
tdbDbClose
(
TDB
*
pDb
);
int
tdbDbDrop
(
TDB
*
pDb
);
int
tdbDbPut
(
TDB
*
pDb
,
const
void
*
pKey
,
int
keyLen
,
const
void
*
pVal
,
int
valLen
,
TXN
*
pTxn
);
int
tdbDbGet
(
TDB
*
pDb
,
const
void
*
pKey
,
int
kLen
,
void
**
ppVal
,
int
*
vLen
);
int
tdbDbPGet
(
TDB
*
pDb
,
const
void
*
pKey
,
int
kLen
,
void
**
ppKey
,
int
*
pkLen
,
void
**
ppVal
,
int
*
vLen
);
// TDBC
int
tdbDbcOpen
(
TDB
*
pDb
,
TDBC
**
ppDbc
,
TXN
*
pTxn
);
int
tdbDbcClose
(
TDBC
*
pDbc
);
int
tdbDbcMoveTo
(
TDBC
*
pDbc
,
const
void
*
pKey
,
int
kLen
,
int
*
c
);
int
tdbDbcMoveToFirst
(
TDBC
*
pDbc
);
int
tdbDbcMoveToLast
(
TDBC
*
pDbc
);
int
tdbDbcMoveToNext
(
TDBC
*
pDbc
);
int
tdbDbcMoveToPrev
(
TDBC
*
pDbc
);
int
tdbDbcGet
(
TDBC
*
pDbc
,
const
void
**
ppKey
,
int
*
pkLen
,
const
void
**
ppVal
,
int
*
pvLen
);
int
tdbDbcPut
(
TDBC
*
pDbc
,
const
void
*
pKey
,
int
keyLen
,
const
void
*
pVal
,
int
valLen
);
int
tdbDbcUpdate
(
TDBC
*
pDbc
,
const
void
*
pKey
,
int
kLen
,
const
void
*
pVal
,
int
vLen
);
int
tdbDbcDrop
(
TDBC
*
pDbc
);
int
tdbDbcNext
(
TDBC
*
pDbc
,
void
**
ppKey
,
int
*
kLen
,
void
**
ppVal
,
int
*
vLen
);
// TXN
#define TDB_TXN_WRITE 0x1
#define TDB_TXN_READ_UNCOMMITTED 0x2
int
tdbTxnOpen
(
TXN
*
pTxn
,
int64_t
txnid
,
void
*
(
*
xMalloc
)(
void
*
,
size_t
),
void
(
*
xFree
)(
void
*
,
void
*
),
void
*
xArg
,
int
flags
);
int
tdbTxnClose
(
TXN
*
pTxn
);
// other
void
tdbFree
(
void
*
);
struct
STxn
{
int
flags
;
int64_t
txnId
;
void
*
(
*
xMalloc
)(
void
*
,
size_t
);
void
(
*
xFree
)(
void
*
,
void
*
);
void
*
xArg
;
};
// error code
enum
{
TDB_CODE_SUCCESS
=
0
,
TDB_CODE_MAX
};
#ifdef __cplusplus
}
#endif
...
...
source/libs/tdb/src/db/tdbBtree.c
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
source/libs/tdb/src/db/tdbDb.c
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
source/libs/tdb/src/db/tdbEnv.c
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
source/libs/tdb/src/db/tdbOs.c
浏览文件 @
7bae3e3f
...
...
@@ -13,7 +13,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "tdb
Int
.h"
#include "tdb
Os
.h"
#ifndef TDB_FOR_TDENGINE
...
...
source/libs/tdb/src/db/tdbPCache.c
浏览文件 @
7bae3e3f
...
...
@@ -135,7 +135,7 @@ static SPage *tdbPCacheFetchImpl(SPCache *pCache, const SPgid *pPgid, TXN *pTxn)
// 1. Search the hash table
pPage
=
pCache
->
pgHash
[
tdbPCachePageHash
(
pPgid
)
%
pCache
->
nHash
];
while
(
pPage
)
{
if
(
TDB_IS_SAME_PAGE
(
&
(
pPage
->
pgid
),
pPgid
)
)
break
;
if
(
memcmp
(
pPage
->
pgid
.
fileid
,
pPgid
->
fileid
,
TDB_FILE_ID_LEN
)
==
0
&&
pPage
->
pgid
.
pgno
==
pPgid
->
pgno
)
break
;
pPage
=
pPage
->
pHashNext
;
}
...
...
source/libs/tdb/src/db/tdbUtil.c
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbBtree.h
已删除
100644 → 0
浏览文件 @
022f5bfc
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbDb.h
已删除
100644 → 0
浏览文件 @
022f5bfc
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbEnv.h
已删除
100644 → 0
浏览文件 @
022f5bfc
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbInt.h
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbPCache.h
已删除
100644 → 0
浏览文件 @
022f5bfc
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbPage.h
已删除
100644 → 0
浏览文件 @
022f5bfc
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbPager.h
已删除
100644 → 0
浏览文件 @
022f5bfc
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbTxn.h
已删除
100644 → 0
浏览文件 @
022f5bfc
此差异已折叠。
点击以展开。
source/libs/tdb/src/inc/tdbUtil.h
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
source/libs/tdb/test/tdbTest.cpp
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
source/libs/tdb/test/tdbUtilTest.cpp
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
source/libs/transport/src/trans.c
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
source/libs/transport/src/transCli.c
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
source/libs/transport/src/transSrv.c
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
source/util/src/terror.c
浏览文件 @
7bae3e3f
...
...
@@ -93,6 +93,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_OPS_NOT_SUPPORT, "Operation not support
TAOS_DEFINE_ERROR
(
TSDB_CODE_MSG_NOT_PROCESSED
,
"Message not processed"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_CFG_NOT_FOUND
,
"Config not found"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_REPEAT_INIT
,
"Repeat initialization"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_DUP_KEY
,
"Cannot add duplicate keys to hash"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_REF_NO_MEMORY
,
"Ref out of memory"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_REF_FULL
,
"too many Ref Objs"
)
...
...
@@ -317,6 +318,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_VND_INVALID_TSDB_STATE, "Invalid tsdb state")
TAOS_DEFINE_ERROR
(
TSDB_CODE_VND_TB_NOT_EXIST
,
"Table not exists"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_VND_SMA_NOT_EXIST
,
"SMA not exists"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_VND_HASH_MISMATCH
,
"Hash value mismatch"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_VND_TABLE_NOT_EXIST
,
"Table does not exists"
)
// tsdb
TAOS_DEFINE_ERROR
(
TSDB_CODE_TDB_INVALID_TABLE_ID
,
"Invalid table ID"
)
...
...
source/util/src/thash.c
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
source/util/src/tprocess.c
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
tests/script/api/batchprepare.c
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
tests/script/jenkins/basic.txt
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
tests/script/tsim/show/basic.sim
浏览文件 @
7bae3e3f
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录