Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
04057a39
TDengine
项目概览
taosdata
/
TDengine
接近 2 年 前同步成功
通知
1192
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看板
提交
04057a39
编写于
12月 13, 2021
作者:
H
Haojun Liao
浏览文件
操作
浏览文件
下载
差异文件
[td-10564] connect to server success.
上级
55f100e2
1fbc186c
变更
98
展开全部
隐藏空白更改
内联
并排
Showing
98 changed file
with
4734 addition
and
716 deletion
+4734
-716
.gitignore
.gitignore
+1
-0
include/client/taos.h
include/client/taos.h
+0
-1
include/common/taosmsg.h
include/common/taosmsg.h
+27
-21
include/common/tdataformat.h
include/common/tdataformat.h
+1
-1
include/common/tep.h
include/common/tep.h
+11
-0
include/common/tglobal.h
include/common/tglobal.h
+0
-3
include/common/ttime.h
include/common/ttime.h
+2
-2
include/common/tvariant.h
include/common/tvariant.h
+1
-1
include/dnode/mgmt/dnode.h
include/dnode/mgmt/dnode.h
+0
-1
include/dnode/mnode/mnode.h
include/dnode/mnode/mnode.h
+0
-1
include/dnode/mnode/sdb/sdb.h
include/dnode/mnode/sdb/sdb.h
+2
-2
include/libs/parser/parser.h
include/libs/parser/parser.h
+34
-3
include/libs/transport/trpc.h
include/libs/transport/trpc.h
+0
-5
include/libs/wal/wal.h
include/libs/wal/wal.h
+25
-23
include/os/osString.h
include/os/osString.h
+2
-2
include/util/taoserror.h
include/util/taoserror.h
+24
-13
include/util/tarray.h
include/util/tarray.h
+22
-0
include/util/tchecksum.h
include/util/tchecksum.h
+1
-1
include/util/tconfig.h
include/util/tconfig.h
+1
-1
include/util/tdef.h
include/util/tdef.h
+3
-1
include/util/tutil.h
include/util/tutil.h
+2
-2
source/client/inc/clientInt.h
source/client/inc/clientInt.h
+39
-17
source/client/src/clientImpl.c
source/client/src/clientImpl.c
+163
-38
source/client/src/tscEnv.c
source/client/src/tscEnv.c
+34
-51
source/client/test/clientTests.cpp
source/client/test/clientTests.cpp
+0
-1
source/common/src/tep.c
source/common/src/tep.c
+20
-1
source/common/src/tglobal.c
source/common/src/tglobal.c
+2
-20
source/common/src/ttime.c
source/common/src/ttime.c
+6
-6
source/common/src/tvariant.c
source/common/src/tvariant.c
+1
-1
source/dnode/mgmt/daemon/src/daemon.c
source/dnode/mgmt/daemon/src/daemon.c
+1
-2
source/dnode/mgmt/impl/inc/dndDnode.h
source/dnode/mgmt/impl/inc/dndDnode.h
+1
-0
source/dnode/mgmt/impl/inc/dndInt.h
source/dnode/mgmt/impl/inc/dndInt.h
+3
-1
source/dnode/mgmt/impl/src/dndDnode.c
source/dnode/mgmt/impl/src/dndDnode.c
+32
-18
source/dnode/mgmt/impl/src/dndMnode.c
source/dnode/mgmt/impl/src/dndMnode.c
+25
-11
source/dnode/mgmt/impl/src/dndTransport.c
source/dnode/mgmt/impl/src/dndTransport.c
+14
-15
source/dnode/mgmt/impl/src/dnode.c
source/dnode/mgmt/impl/src/dnode.c
+16
-6
source/dnode/mgmt/impl/test/CMakeLists.txt
source/dnode/mgmt/impl/test/CMakeLists.txt
+1
-0
source/dnode/mgmt/impl/test/acct/acct.cpp
source/dnode/mgmt/impl/test/acct/acct.cpp
+1
-1
source/dnode/mgmt/impl/test/cluster/cluster.cpp
source/dnode/mgmt/impl/test/cluster/cluster.cpp
+2
-2
source/dnode/mgmt/impl/test/dnode/CMakeLists.txt
source/dnode/mgmt/impl/test/dnode/CMakeLists.txt
+29
-0
source/dnode/mgmt/impl/test/dnode/dnode.cpp
source/dnode/mgmt/impl/test/dnode/dnode.cpp
+418
-0
source/dnode/mgmt/impl/test/profile/profile.cpp
source/dnode/mgmt/impl/test/profile/profile.cpp
+4
-4
source/dnode/mgmt/impl/test/show/show.cpp
source/dnode/mgmt/impl/test/show/show.cpp
+2
-2
source/dnode/mgmt/impl/test/sut/deploy.cpp
source/dnode/mgmt/impl/test/sut/deploy.cpp
+27
-13
source/dnode/mgmt/impl/test/sut/deploy.h
source/dnode/mgmt/impl/test/sut/deploy.h
+4
-2
source/dnode/mgmt/impl/test/user/user.cpp
source/dnode/mgmt/impl/test/user/user.cpp
+4
-3
source/dnode/mnode/impl/inc/mndDef.h
source/dnode/mnode/impl/inc/mndDef.h
+4
-5
source/dnode/mnode/impl/inc/mndInt.h
source/dnode/mnode/impl/inc/mndInt.h
+2
-0
source/dnode/mnode/impl/inc/mndStb.h
source/dnode/mnode/impl/inc/mndStb.h
+5
-5
source/dnode/mnode/impl/src/mndCluster.c
source/dnode/mnode/impl/src/mndCluster.c
+1
-1
source/dnode/mnode/impl/src/mndDb.c
source/dnode/mnode/impl/src/mndDb.c
+1
-1
source/dnode/mnode/impl/src/mndDnode.c
source/dnode/mnode/impl/src/mndDnode.c
+58
-51
source/dnode/mnode/impl/src/mndFunc.c
source/dnode/mnode/impl/src/mndFunc.c
+1
-1
source/dnode/mnode/impl/src/mndMnode.c
source/dnode/mnode/impl/src/mndMnode.c
+1
-1
source/dnode/mnode/impl/src/mndShow.c
source/dnode/mnode/impl/src/mndShow.c
+5
-3
source/dnode/mnode/impl/src/mndStb.c
source/dnode/mnode/impl/src/mndStb.c
+675
-0
source/dnode/mnode/impl/src/mndUser.c
source/dnode/mnode/impl/src/mndUser.c
+2
-2
source/dnode/mnode/impl/src/mndVgroup.c
source/dnode/mnode/impl/src/mndVgroup.c
+3
-3
source/dnode/mnode/impl/src/mnode.c
source/dnode/mnode/impl/src/mnode.c
+15
-7
source/libs/index/inc/index_fst.h
source/libs/index/inc/index_fst.h
+27
-25
source/libs/index/inc/index_fst_automation.h
source/libs/index/inc/index_fst_automation.h
+28
-11
source/libs/index/src/index_fst.c
source/libs/index/src/index_fst.c
+27
-13
source/libs/index/src/index_fst_automation.c
source/libs/index/src/index_fst_automation.c
+91
-0
source/libs/index/test/indexTests.cpp
source/libs/index/test/indexTests.cpp
+27
-19
source/libs/parser/inc/astGenerator.h
source/libs/parser/inc/astGenerator.h
+1
-1
source/libs/parser/inc/dataBlockMgt.h
source/libs/parser/inc/dataBlockMgt.h
+193
-0
source/libs/parser/inc/insertParser.h
source/libs/parser/inc/insertParser.h
+12
-0
source/libs/parser/inc/parserInt.h
source/libs/parser/inc/parserInt.h
+0
-8
source/libs/parser/inc/parserUtil.h
source/libs/parser/inc/parserUtil.h
+3
-1
source/libs/parser/inc/sql.y
source/libs/parser/inc/sql.y
+2
-2
source/libs/parser/inc/ttoken.h
source/libs/parser/inc/ttoken.h
+2
-2
source/libs/parser/src/astGenerator.c
source/libs/parser/src/astGenerator.c
+2
-2
source/libs/parser/src/dataBlockMgt.c
source/libs/parser/src/dataBlockMgt.c
+665
-0
source/libs/parser/src/insertParser.c
source/libs/parser/src/insertParser.c
+885
-0
source/libs/parser/src/parser.c
source/libs/parser/src/parser.c
+4
-3
source/libs/parser/src/parserUtil.c
source/libs/parser/src/parserUtil.c
+22
-7
source/libs/parser/src/sql.c
source/libs/parser/src/sql.c
+2
-2
source/libs/parser/src/ttokenizer.c
source/libs/parser/src/ttokenizer.c
+7
-8
source/libs/parser/test/insertTest.cpp
source/libs/parser/test/insertTest.cpp
+88
-0
source/libs/parser/test/mockCatalog.cpp
source/libs/parser/test/mockCatalog.cpp
+52
-0
source/libs/parser/test/mockCatalog.h
source/libs/parser/test/mockCatalog.h
+27
-0
source/libs/parser/test/mockCatalogService.cpp
source/libs/parser/test/mockCatalogService.cpp
+188
-0
source/libs/parser/test/mockCatalogService.h
source/libs/parser/test/mockCatalogService.h
+63
-0
source/libs/parser/test/parserMain.cpp
source/libs/parser/test/parserMain.cpp
+41
-0
source/libs/parser/test/tokenizerTest.cpp
source/libs/parser/test/tokenizerTest.cpp
+0
-5
source/libs/transport/src/rpcMain.c
source/libs/transport/src/rpcMain.c
+13
-6
source/libs/wal/inc/walInt.h
source/libs/wal/inc/walInt.h
+30
-0
source/libs/wal/src/walMeta.c
source/libs/wal/src/walMeta.c
+25
-3
source/libs/wal/src/walMgmt.c
source/libs/wal/src/walMgmt.c
+24
-6
source/libs/wal/src/walRead.c
source/libs/wal/src/walRead.c
+2
-30
source/libs/wal/src/walSeek.c
source/libs/wal/src/walSeek.c
+34
-11
source/libs/wal/src/walWrite.c
source/libs/wal/src/walWrite.c
+198
-119
source/libs/wal/test/walMetaTest.cpp
source/libs/wal/test/walMetaTest.cpp
+126
-15
source/os/src/osString.c
source/os/src/osString.c
+2
-2
source/util/src/tarray.c
source/util/src/tarray.c
+25
-9
source/util/src/terror.c
source/util/src/terror.c
+12
-11
source/util/src/tutil.c
source/util/src/tutil.c
+2
-15
src/client/inc/tscParseLine.h
src/client/inc/tscParseLine.h
+1
-1
未找到文件。
.gitignore
浏览文件 @
04057a39
...
@@ -12,6 +12,7 @@ debug/
...
@@ -12,6 +12,7 @@ debug/
release/
release/
target/
target/
debs/
debs/
deps/
rpms/
rpms/
mac/
mac/
*.pyc
*.pyc
...
...
include/client/taos.h
浏览文件 @
04057a39
...
@@ -75,7 +75,6 @@ typedef struct taosField {
...
@@ -75,7 +75,6 @@ typedef struct taosField {
typedef
void
(
*
__taos_async_fn_t
)(
void
*
param
,
TAOS_RES
*
,
int
code
);
typedef
void
(
*
__taos_async_fn_t
)(
void
*
param
,
TAOS_RES
*
,
int
code
);
DLL_EXPORT
int
taos_init
();
DLL_EXPORT
void
taos_cleanup
(
void
);
DLL_EXPORT
void
taos_cleanup
(
void
);
DLL_EXPORT
int
taos_options
(
TSDB_OPTION
option
,
const
void
*
arg
,
...);
DLL_EXPORT
int
taos_options
(
TSDB_OPTION
option
,
const
void
*
arg
,
...);
DLL_EXPORT
TAOS
*
taos_connect
(
const
char
*
ip
,
const
char
*
user
,
const
char
*
pass
,
const
char
*
db
,
uint16_t
port
);
DLL_EXPORT
TAOS
*
taos_connect
(
const
char
*
ip
,
const
char
*
user
,
const
char
*
pass
,
const
char
*
db
,
uint16_t
port
);
...
...
include/common/taosmsg.h
浏览文件 @
04057a39
...
@@ -74,10 +74,10 @@ TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_COMPACT_DB, "compact-db" )
...
@@ -74,10 +74,10 @@ TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_COMPACT_DB, "compact-db" )
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_CREATE_FUNCTION
,
"create-function"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_CREATE_FUNCTION
,
"create-function"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_RETRIEVE_FUNCTION
,
"retrieve-function"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_RETRIEVE_FUNCTION
,
"retrieve-function"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_DROP_FUNCTION
,
"drop-function"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_DROP_FUNCTION
,
"drop-function"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_CREATE_ST
ABLE
,
"create-stable
"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_CREATE_ST
B
,
"create-stb
"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_ALTER_ST
ABLE
,
"alter-stable
"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_ALTER_ST
B
,
"alter-stb
"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_DROP_ST
ABLE
,
"drop-stable
"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_DROP_ST
B
,
"drop-stb
"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_ST
ABLE_VGROUP
,
"stable
-vgroup"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_ST
B_VGROUP
,
"stb
-vgroup"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_KILL_QUERY
,
"kill-query"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_KILL_QUERY
,
"kill-query"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_KILL_STREAM
,
"kill-stream"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_KILL_STREAM
,
"kill-stream"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_KILL_CONN
,
"kill-conn"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_KILL_CONN
,
"kill-conn"
)
...
@@ -94,9 +94,9 @@ TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_NETWORK_TEST, "nettest" )
...
@@ -94,9 +94,9 @@ TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_NETWORK_TEST, "nettest" )
// message from vnode to dnode
// message from vnode to dnode
// message from mnode to vnode
// message from mnode to vnode
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_CREATE_ST
ABLE_IN
,
"create-stable
"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_CREATE_ST
B_IN
,
"create-stb-in
"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_ALTER_ST
ABLE_IN
,
"alter-stable
"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_ALTER_ST
B_IN
,
"alter-stb-in
"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_DROP_ST
ABLE_IN
,
"drop-stable
"
)
TAOS_DEFINE_MESSAGE_TYPE
(
TSDB_MSG_TYPE_DROP_ST
B_IN
,
"drop-stb-in
"
)
// message from mnode to mnode
// message from mnode to mnode
// message from mnode to qnode
// message from mnode to qnode
// message from mnode to dnode
// message from mnode to dnode
...
@@ -159,7 +159,7 @@ typedef enum _mgmt_table {
...
@@ -159,7 +159,7 @@ typedef enum _mgmt_table {
TSDB_MGMT_TABLE_DNODE
,
TSDB_MGMT_TABLE_DNODE
,
TSDB_MGMT_TABLE_MNODE
,
TSDB_MGMT_TABLE_MNODE
,
TSDB_MGMT_TABLE_VGROUP
,
TSDB_MGMT_TABLE_VGROUP
,
TSDB_MGMT_TABLE_ST
ABLE
,
TSDB_MGMT_TABLE_ST
B
,
TSDB_MGMT_TABLE_MODULE
,
TSDB_MGMT_TABLE_MODULE
,
TSDB_MGMT_TABLE_QUERIES
,
TSDB_MGMT_TABLE_QUERIES
,
TSDB_MGMT_TABLE_STREAMS
,
TSDB_MGMT_TABLE_STREAMS
,
...
@@ -294,7 +294,7 @@ typedef struct {
...
@@ -294,7 +294,7 @@ typedef struct {
uint64_t
superTableUid
;
uint64_t
superTableUid
;
uint64_t
createdTime
;
uint64_t
createdTime
;
char
tableFname
[
TSDB_TABLE_FNAME_LEN
];
char
tableFname
[
TSDB_TABLE_FNAME_LEN
];
char
st
able
Fname
[
TSDB_TABLE_FNAME_LEN
];
char
st
b
Fname
[
TSDB_TABLE_FNAME_LEN
];
char
data
[];
char
data
[];
}
SMDCreateTableMsg
;
}
SMDCreateTableMsg
;
...
@@ -311,16 +311,23 @@ typedef struct {
...
@@ -311,16 +311,23 @@ typedef struct {
}
SCreateTableMsg
;
}
SCreateTableMsg
;
typedef
struct
{
typedef
struct
{
int32_t
numOfTables
;
char
name
[
TSDB_TABLE_FNAME_LEN
];
int32_t
contLen
;
int8_t
igExists
;
}
SCMCreateTableMsg
;
int32_t
numOfTags
;
int32_t
numOfColumns
;
SSchema
pSchema
[];
}
SCreateStbMsg
;
typedef
struct
{
typedef
struct
{
char
name
[
TSDB_TABLE_FNAME_LEN
];
char
name
[
TSDB_TABLE_FNAME_LEN
];
// if user specify DROP STABLE, this flag will be set. And an error will be returned if it is not a super table
int8_t
supertable
;
int8_t
igNotExists
;
int8_t
igNotExists
;
}
SCMDropTableMsg
;
}
SDropStbMsg
;
typedef
struct
{
char
name
[
TSDB_TABLE_FNAME_LEN
];
int8_t
alterType
;
SSchema
schema
;
}
SAlterStbMsg
;
typedef
struct
{
typedef
struct
{
char
tableFname
[
TSDB_TABLE_FNAME_LEN
];
char
tableFname
[
TSDB_TABLE_FNAME_LEN
];
...
@@ -663,7 +670,6 @@ typedef struct {
...
@@ -663,7 +670,6 @@ typedef struct {
typedef
struct
{
typedef
struct
{
int32_t
statusInterval
;
int32_t
statusInterval
;
int32_t
mnodeEqualVnodeNum
;
int64_t
checkTime
;
// 1970-01-01 00:00:00.000
int64_t
checkTime
;
// 1970-01-01 00:00:00.000
char
timezone
[
TSDB_TIMEZONE_LEN
];
// tsTimezone
char
timezone
[
TSDB_TIMEZONE_LEN
];
// tsTimezone
char
locale
[
TSDB_LOCALE_LEN
];
// tsLocale
char
locale
[
TSDB_LOCALE_LEN
];
// tsLocale
...
@@ -689,7 +695,7 @@ typedef struct SStatusMsg {
...
@@ -689,7 +695,7 @@ typedef struct SStatusMsg {
int32_t
sver
;
int32_t
sver
;
int32_t
dnodeId
;
int32_t
dnodeId
;
int32_t
clusterId
;
int32_t
clusterId
;
uint32_t
rebootTime
;
// time stamp for last reboot
int64_t
rebootTime
;
// time stamp for last reboot
int16_t
numOfCores
;
int16_t
numOfCores
;
int16_t
numOfSupportMnodes
;
int16_t
numOfSupportMnodes
;
int16_t
numOfSupportVnodes
;
int16_t
numOfSupportVnodes
;
...
@@ -765,7 +771,7 @@ typedef struct {
...
@@ -765,7 +771,7 @@ typedef struct {
typedef
struct
{
typedef
struct
{
char
name
[
TSDB_TABLE_FNAME_LEN
];
char
name
[
TSDB_TABLE_FNAME_LEN
];
}
SSt
able
InfoMsg
;
}
SSt
b
InfoMsg
;
typedef
struct
{
typedef
struct
{
char
tableFname
[
TSDB_TABLE_FNAME_LEN
];
char
tableFname
[
TSDB_TABLE_FNAME_LEN
];
...
@@ -797,8 +803,8 @@ typedef struct {
...
@@ -797,8 +803,8 @@ typedef struct {
}
SVgroupsMsg
,
SVgroupsInfo
;
}
SVgroupsMsg
,
SVgroupsInfo
;
typedef
struct
{
typedef
struct
{
char
t
able
Fname
[
TSDB_TABLE_FNAME_LEN
];
// table id
char
t
b
Fname
[
TSDB_TABLE_FNAME_LEN
];
// table id
char
st
able
Fname
[
TSDB_TABLE_FNAME_LEN
];
char
st
b
Fname
[
TSDB_TABLE_FNAME_LEN
];
int32_t
numOfTags
;
int32_t
numOfTags
;
int32_t
numOfColumns
;
int32_t
numOfColumns
;
int8_t
precision
;
int8_t
precision
;
...
@@ -862,7 +868,7 @@ typedef struct {
...
@@ -862,7 +868,7 @@ typedef struct {
typedef
struct
{
typedef
struct
{
int32_t
dnodeId
;
int32_t
dnodeId
;
char
config
[
128
];
char
config
[
TSDB_DNODE_CONFIG_LEN
];
}
SCfgDnodeMsg
;
}
SCfgDnodeMsg
;
typedef
struct
{
typedef
struct
{
...
...
include/common/tdataformat.h
浏览文件 @
04057a39
...
@@ -544,7 +544,7 @@ void tdDestroyKVRowBuilder(SKVRowBuilder *pBuilder);
...
@@ -544,7 +544,7 @@ void tdDestroyKVRowBuilder(SKVRowBuilder *pBuilder);
void
tdResetKVRowBuilder
(
SKVRowBuilder
*
pBuilder
);
void
tdResetKVRowBuilder
(
SKVRowBuilder
*
pBuilder
);
SKVRow
tdGetKVRowFromBuilder
(
SKVRowBuilder
*
pBuilder
);
SKVRow
tdGetKVRowFromBuilder
(
SKVRowBuilder
*
pBuilder
);
static
FORCE_INLINE
int
tdAddColToKVRow
(
SKVRowBuilder
*
pBuilder
,
int16_t
colId
,
int8_t
type
,
void
*
value
)
{
static
FORCE_INLINE
int
tdAddColToKVRow
(
SKVRowBuilder
*
pBuilder
,
int16_t
colId
,
int8_t
type
,
const
void
*
value
)
{
if
(
pBuilder
->
nCols
>=
pBuilder
->
tCols
)
{
if
(
pBuilder
->
nCols
>=
pBuilder
->
tCols
)
{
pBuilder
->
tCols
*=
2
;
pBuilder
->
tCols
*=
2
;
SColIdx
*
pColIdx
=
(
SColIdx
*
)
realloc
((
void
*
)(
pBuilder
->
pColIdx
),
sizeof
(
SColIdx
)
*
pBuilder
->
tCols
);
SColIdx
*
pColIdx
=
(
SColIdx
*
)
realloc
((
void
*
)(
pBuilder
->
pColIdx
),
sizeof
(
SColIdx
)
*
pBuilder
->
tCols
);
...
...
include/common/tep.h
浏览文件 @
04057a39
#ifndef TDENGINE_TEP_H
#ifndef TDENGINE_TEP_H
#define TDENGINE_TEP_H
#define TDENGINE_TEP_H
#include "os.h"
#include "taosmsg.h"
typedef
struct
SCorEpSet
{
int32_t
version
;
SEpSet
epSet
;
}
SCorEpSet
;
int
taosGetFqdnPortFromEp
(
const
char
*
ep
,
char
*
fqdn
,
uint16_t
*
port
);
int
taosGetFqdnPortFromEp
(
const
char
*
ep
,
char
*
fqdn
,
uint16_t
*
port
);
bool
isEpsetEqual
(
const
SEpSet
*
s1
,
const
SEpSet
*
s2
);
void
updateEpSet_s
(
SCorEpSet
*
pEpSet
,
SEpSet
*
pNewEpSet
);
#endif // TDENGINE_TEP_H
#endif // TDENGINE_TEP_H
include/common/tglobal.h
浏览文件 @
04057a39
...
@@ -81,8 +81,6 @@ extern int64_t tsMaxRetentWindow;
...
@@ -81,8 +81,6 @@ extern int64_t tsMaxRetentWindow;
// db parameters in client
// db parameters in client
extern
int32_t
tsCacheBlockSize
;
extern
int32_t
tsCacheBlockSize
;
extern
int32_t
tsBlocksPerVnode
;
extern
int32_t
tsBlocksPerVnode
;
extern
int32_t
tsMinTablePerVnode
;
extern
int32_t
tsMaxTablePerVnode
;
extern
int32_t
tsTableIncStepPerVnode
;
extern
int32_t
tsTableIncStepPerVnode
;
extern
int32_t
tsMaxVgroupsPerDb
;
extern
int32_t
tsMaxVgroupsPerDb
;
extern
int16_t
tsDaysPerFile
;
extern
int16_t
tsDaysPerFile
;
...
@@ -108,7 +106,6 @@ extern int8_t tsEnableBalance;
...
@@ -108,7 +106,6 @@ extern int8_t tsEnableBalance;
extern
int8_t
tsAlternativeRole
;
extern
int8_t
tsAlternativeRole
;
extern
int32_t
tsBalanceInterval
;
extern
int32_t
tsBalanceInterval
;
extern
int32_t
tsOfflineThreshold
;
extern
int32_t
tsOfflineThreshold
;
extern
int32_t
tsMnodeEqualVnodeNum
;
extern
int8_t
tsEnableFlowCtrl
;
extern
int8_t
tsEnableFlowCtrl
;
extern
int8_t
tsEnableSlaveQuery
;
extern
int8_t
tsEnableSlaveQuery
;
extern
int8_t
tsEnableAdjustMaster
;
extern
int8_t
tsEnableAdjustMaster
;
...
...
include/common/ttime.h
浏览文件 @
04057a39
...
@@ -44,10 +44,10 @@ int64_t taosTimeAdd(int64_t t, int64_t duration, char unit, int32_t precision);
...
@@ -44,10 +44,10 @@ int64_t taosTimeAdd(int64_t t, int64_t duration, char unit, int32_t precision);
int64_t
taosTimeTruncate
(
int64_t
t
,
const
SInterval
*
pInterval
,
int32_t
precision
);
int64_t
taosTimeTruncate
(
int64_t
t
,
const
SInterval
*
pInterval
,
int32_t
precision
);
int32_t
taosTimeCountInterval
(
int64_t
skey
,
int64_t
ekey
,
int64_t
interval
,
char
unit
,
int32_t
precision
);
int32_t
taosTimeCountInterval
(
int64_t
skey
,
int64_t
ekey
,
int64_t
interval
,
char
unit
,
int32_t
precision
);
int32_t
parseAbsoluteDuration
(
char
*
token
,
int32_t
tokenlen
,
int64_t
*
ts
,
char
*
unit
,
int32_t
timePrecision
);
int32_t
parseAbsoluteDuration
(
c
onst
c
har
*
token
,
int32_t
tokenlen
,
int64_t
*
ts
,
char
*
unit
,
int32_t
timePrecision
);
int32_t
parseNatualDuration
(
const
char
*
token
,
int32_t
tokenLen
,
int64_t
*
duration
,
char
*
unit
,
int32_t
timePrecision
);
int32_t
parseNatualDuration
(
const
char
*
token
,
int32_t
tokenLen
,
int64_t
*
duration
,
char
*
unit
,
int32_t
timePrecision
);
int32_t
taosParseTime
(
char
*
timestr
,
int64_t
*
time
,
int32_t
len
,
int32_t
timePrec
,
int8_t
dayligth
);
int32_t
taosParseTime
(
c
onst
c
har
*
timestr
,
int64_t
*
time
,
int32_t
len
,
int32_t
timePrec
,
int8_t
dayligth
);
void
deltaToUtcInitOnce
();
void
deltaToUtcInitOnce
();
int64_t
convertTimePrecision
(
int64_t
time
,
int32_t
fromPrecision
,
int32_t
toPrecision
);
int64_t
convertTimePrecision
(
int64_t
time
,
int32_t
fromPrecision
,
int32_t
toPrecision
);
...
...
include/common/tvariant.h
浏览文件 @
04057a39
...
@@ -40,7 +40,7 @@ int32_t toInteger(const char* z, int32_t n, int32_t base, int64_t* value, bool*
...
@@ -40,7 +40,7 @@ int32_t toInteger(const char* z, int32_t n, int32_t base, int64_t* value, bool*
bool
taosVariantIsValid
(
SVariant
*
pVar
);
bool
taosVariantIsValid
(
SVariant
*
pVar
);
void
taosVariantCreate
(
SVariant
*
pVar
,
char
*
z
,
int32_t
n
,
int32_t
type
);
void
taosVariantCreate
(
SVariant
*
pVar
,
c
onst
c
har
*
z
,
int32_t
n
,
int32_t
type
);
void
taosVariantCreateFromBinary
(
SVariant
*
pVar
,
const
char
*
pz
,
size_t
len
,
uint32_t
type
);
void
taosVariantCreateFromBinary
(
SVariant
*
pVar
,
const
char
*
pz
,
size_t
len
,
uint32_t
type
);
...
...
include/dnode/mgmt/dnode.h
浏览文件 @
04057a39
...
@@ -33,7 +33,6 @@ typedef struct {
...
@@ -33,7 +33,6 @@ typedef struct {
int16_t
numOfSupportQnodes
;
int16_t
numOfSupportQnodes
;
int8_t
enableTelem
;
int8_t
enableTelem
;
int32_t
statusInterval
;
int32_t
statusInterval
;
int32_t
mnodeEqualVnodeNum
;
float
numOfThreadsPerCore
;
float
numOfThreadsPerCore
;
float
ratioOfQueryCores
;
float
ratioOfQueryCores
;
int32_t
maxShellConns
;
int32_t
maxShellConns
;
...
...
include/dnode/mnode/mnode.h
浏览文件 @
04057a39
...
@@ -47,7 +47,6 @@ typedef struct SMnodeCfg {
...
@@ -47,7 +47,6 @@ typedef struct SMnodeCfg {
int32_t
sver
;
int32_t
sver
;
int8_t
enableTelem
;
int8_t
enableTelem
;
int32_t
statusInterval
;
int32_t
statusInterval
;
int32_t
mnodeEqualVnodeNum
;
int32_t
shellActivityTimer
;
int32_t
shellActivityTimer
;
char
*
timezone
;
char
*
timezone
;
char
*
locale
;
char
*
locale
;
...
...
include/dnode/mnode/sdb/sdb.h
浏览文件 @
04057a39
...
@@ -158,8 +158,8 @@ typedef enum {
...
@@ -158,8 +158,8 @@ typedef enum {
SDB_USER
=
5
,
SDB_USER
=
5
,
SDB_AUTH
=
6
,
SDB_AUTH
=
6
,
SDB_ACCT
=
7
,
SDB_ACCT
=
7
,
SDB_VGROUP
=
9
,
SDB_VGROUP
=
8
,
SDB_ST
ABLE
=
9
,
SDB_ST
B
=
9
,
SDB_DB
=
10
,
SDB_DB
=
10
,
SDB_FUNC
=
11
,
SDB_FUNC
=
11
,
SDB_MAX
=
12
SDB_MAX
=
12
...
...
include/libs/parser/parser.h
浏览文件 @
04057a39
...
@@ -131,6 +131,18 @@ struct SInsertStmtInfo;
...
@@ -131,6 +131,18 @@ struct SInsertStmtInfo;
*/
*/
bool
qIsInsertSql
(
const
char
*
pStr
,
size_t
length
);
bool
qIsInsertSql
(
const
char
*
pStr
,
size_t
length
);
typedef
struct
SParseContext
{
const
char
*
pSql
;
// sql string
size_t
sqlLen
;
// length of the sql string
int64_t
id
;
// operator id, generated by uuid generator
const
char
*
pDbname
;
const
SEpSet
*
pEpSet
;
int8_t
schemaAttached
;
// denote if submit block is built with table schema or not
char
*
pMsg
;
// extended error message if exists to help avoid the problem in sql statement.
int32_t
msgLen
;
// max length of the msg
}
SParseContext
;
/**
/**
* Parse the sql statement and then return the SQueryStmtInfo as the result of bounded AST.
* Parse the sql statement and then return the SQueryStmtInfo as the result of bounded AST.
* @param pSql sql string
* @param pSql sql string
...
@@ -141,16 +153,35 @@ bool qIsInsertSql(const char* pStr, size_t length);
...
@@ -141,16 +153,35 @@ bool qIsInsertSql(const char* pStr, size_t length);
*/
*/
int32_t
qParseQuerySql
(
const
char
*
pStr
,
size_t
length
,
struct
SQueryStmtInfo
**
pQueryInfo
,
int64_t
id
,
char
*
msg
,
int32_t
msgLen
);
int32_t
qParseQuerySql
(
const
char
*
pStr
,
size_t
length
,
struct
SQueryStmtInfo
**
pQueryInfo
,
int64_t
id
,
char
*
msg
,
int32_t
msgLen
);
typedef
enum
{
PAYLOAD_TYPE_KV
=
0
,
PAYLOAD_TYPE_RAW
=
1
,
}
EPayloadType
;
typedef
struct
SVgDataBlocks
{
int64_t
vgId
;
// virtual group id
int32_t
numOfTables
;
// number of tables in current submit block
uint32_t
size
;
char
*
pData
;
}
SVgDataBlocks
;
typedef
struct
SInsertStmtInfo
{
SArray
*
pDataBlocks
;
// data block for each vgroup, SArray<SVgDataBlocks*>.
int8_t
schemaAttache
;
// denote if submit block is built with table schema or not
uint8_t
payloadType
;
// EPayloadType. 0: K-V payload for non-prepare insert, 1: rawPayload for prepare insert
uint32_t
insertType
;
// insert data from [file|sql statement| bound statement]
const
char
*
sql
;
// current sql statement position
}
SInsertStmtInfo
;
/**
/**
* Parse the insert sql statement.
* Parse the insert sql statement.
* @param pStr sql string
* @param pStr sql string
* @param length length of the sql string
* @param length length of the sql string
* @param pInsertParam data in binary format to submit to vnode directly.
* @param id operator id, generated by uuid generator.
* @param id operator id, generated by uuid generator.
* @param msg extended error message if exists to help avoid the problem in sql statement.
* @param msg extended error message if exists to help avoid the problem in sql statement.
* @return
* @return
data in binary format to submit to vnode directly.
*/
*/
int32_t
qParseInsertSql
(
const
char
*
pStr
,
size_t
length
,
struct
SInsertStmtInfo
**
pInsertInfo
,
int64_t
id
,
char
*
msg
,
int32_t
msgLen
);
int32_t
qParseInsertSql
(
SParseContext
*
pContext
,
struct
SInsertStmtInfo
**
pInfo
);
/**
/**
* Convert a normal sql statement to only query tags information to enable that the subscribe client can be aware quickly of the true vgroup ids that
* Convert a normal sql statement to only query tags information to enable that the subscribe client can be aware quickly of the true vgroup ids that
...
...
include/libs/transport/trpc.h
浏览文件 @
04057a39
...
@@ -29,11 +29,6 @@ extern "C" {
...
@@ -29,11 +29,6 @@ extern "C" {
extern
int
tsRpcHeadSize
;
extern
int
tsRpcHeadSize
;
typedef
struct
SRpcCorEpSet
{
int32_t
version
;
SEpSet
epSet
;
}
SRpcCorEpSet
;
typedef
struct
SRpcConnInfo
{
typedef
struct
SRpcConnInfo
{
uint32_t
clientIp
;
uint32_t
clientIp
;
uint16_t
clientPort
;
uint16_t
clientPort
;
...
...
include/libs/wal/wal.h
浏览文件 @
04057a39
...
@@ -38,6 +38,25 @@ typedef enum {
...
@@ -38,6 +38,25 @@ typedef enum {
TAOS_WAL_FSYNC
=
2
TAOS_WAL_FSYNC
=
2
}
EWalType
;
}
EWalType
;
typedef
struct
SWalReadHead
{
int8_t
sver
;
uint8_t
msgType
;
int8_t
reserved
[
2
];
int32_t
len
;
int64_t
version
;
char
cont
[];
}
SWalReadHead
;
typedef
struct
{
int32_t
vgId
;
int32_t
fsyncPeriod
;
// millisecond
int32_t
retentionPeriod
;
// secs
int32_t
rollPeriod
;
// secs
int32_t
retentionSize
;
// secs
int64_t
segSize
;
EWalType
walLevel
;
// wal level
}
SWalCfg
;
typedef
struct
{
typedef
struct
{
//union {
//union {
//uint32_t info;
//uint32_t info;
...
@@ -47,25 +66,11 @@ typedef struct {
...
@@ -47,25 +66,11 @@ typedef struct {
//uint32_t reserved : 24;
//uint32_t reserved : 24;
//};
//};
//};
//};
int8_t
sver
;
uint8_t
msgType
;
int8_t
reserved
[
2
];
int32_t
len
;
int64_t
version
;
uint32_t
signature
;
uint32_t
cksumHead
;
uint32_t
cksumHead
;
uint32_t
cksumBody
;
uint32_t
cksumBody
;
char
cont
[]
;
SWalReadHead
head
;
}
SWalHead
;
}
SWalHead
;
typedef
struct
{
int32_t
vgId
;
int32_t
fsyncPeriod
;
// millisecond
int32_t
rollPeriod
;
int64_t
segSize
;
EWalType
walLevel
;
// wal level
}
SWalCfg
;
#define WAL_PREFIX "wal"
#define WAL_PREFIX "wal"
#define WAL_PREFIX_LEN 3
#define WAL_PREFIX_LEN 3
#define WAL_NOSUFFIX_LEN 20
#define WAL_NOSUFFIX_LEN 20
...
@@ -80,7 +85,7 @@ typedef struct {
...
@@ -80,7 +85,7 @@ typedef struct {
//#define WAL_FILE_NUM 1 // 3
//#define WAL_FILE_NUM 1 // 3
#define WAL_FILESET_MAX 128
#define WAL_FILESET_MAX 128
#define WAL_IDX_ENTRY_SIZE
(sizeof(int64_t)*2)
#define WAL_IDX_ENTRY_SIZE (sizeof(int64_t)*2)
#define WAL_CUR_POS_WRITABLE 1
#define WAL_CUR_POS_WRITABLE 1
#define WAL_CUR_FILE_WRITABLE 2
#define WAL_CUR_FILE_WRITABLE 2
#define WAL_CUR_FAILED 4
#define WAL_CUR_FAILED 4
...
@@ -103,21 +108,17 @@ typedef struct SWal {
...
@@ -103,21 +108,17 @@ typedef struct SWal {
//write tfd
//write tfd
int64_t
writeLogTfd
;
int64_t
writeLogTfd
;
int64_t
writeIdxTfd
;
int64_t
writeIdxTfd
;
//read tfd
int64_t
readLogTfd
;
int64_t
readIdxTfd
;
//current version
int64_t
curVersion
;
//wal lifecycle
//wal lifecycle
int64_t
firstVersion
;
int64_t
firstVersion
;
int64_t
snapshotVersion
;
int64_t
snapshotVersion
;
int64_t
commitVersion
;
int64_t
commitVersion
;
int64_t
lastVersion
;
int64_t
lastVersion
;
//snapshotting version
int64_t
snapshottingVer
;
//roll status
//roll status
int64_t
lastRollSeq
;
int64_t
lastRollSeq
;
//file set
//file set
int32_t
writeCur
;
int32_t
writeCur
;
int32_t
readCur
;
SArray
*
fileInfoSet
;
SArray
*
fileInfoSet
;
//ctl
//ctl
int32_t
curStatus
;
int32_t
curStatus
;
...
@@ -148,7 +149,8 @@ int32_t walCommit(SWal *, int64_t ver);
...
@@ -148,7 +149,8 @@ int32_t walCommit(SWal *, int64_t ver);
// truncate after
// truncate after
int32_t
walRollback
(
SWal
*
,
int64_t
ver
);
int32_t
walRollback
(
SWal
*
,
int64_t
ver
);
// notify that previous logs can be pruned safely
// notify that previous logs can be pruned safely
int32_t
walTakeSnapshot
(
SWal
*
,
int64_t
ver
);
int32_t
walBeginTakeSnapshot
(
SWal
*
,
int64_t
ver
);
int32_t
walEndTakeSnapshot
(
SWal
*
);
//int32_t walDataCorrupted(SWal*);
//int32_t walDataCorrupted(SWal*);
// read
// read
...
...
include/os/osString.h
浏览文件 @
04057a39
...
@@ -38,11 +38,11 @@ extern "C" {
...
@@ -38,11 +38,11 @@ extern "C" {
(dst)[(size)-1] = 0; \
(dst)[(size)-1] = 0; \
} while (0)
} while (0)
int64_t
taosStr2int64
(
char
*
str
);
int64_t
taosStr2int64
(
c
onst
c
har
*
str
);
// USE_LIBICONV
// USE_LIBICONV
int32_t
taosUcs4ToMbs
(
void
*
ucs4
,
int32_t
ucs4_max_len
,
char
*
mbs
);
int32_t
taosUcs4ToMbs
(
void
*
ucs4
,
int32_t
ucs4_max_len
,
char
*
mbs
);
bool
taosMbsToUcs4
(
char
*
mbs
,
size_t
mbs_len
,
char
*
ucs4
,
int32_t
ucs4_max_len
,
int32_t
*
len
);
bool
taosMbsToUcs4
(
c
onst
c
har
*
mbs
,
size_t
mbs_len
,
char
*
ucs4
,
int32_t
ucs4_max_len
,
int32_t
*
len
);
int32_t
tasoUcs4Compare
(
void
*
f1_ucs4
,
void
*
f2_ucs4
,
int32_t
bytes
,
int8_t
ncharSize
);
int32_t
tasoUcs4Compare
(
void
*
f1_ucs4
,
void
*
f2_ucs4
,
int32_t
bytes
,
int8_t
ncharSize
);
bool
taosValidateEncodec
(
const
char
*
encodec
);
bool
taosValidateEncodec
(
const
char
*
encodec
);
char
*
taosCharsetReplace
(
char
*
charsetstr
);
char
*
taosCharsetReplace
(
char
*
charsetstr
);
...
...
include/util/taoserror.h
浏览文件 @
04057a39
...
@@ -152,22 +152,23 @@ int32_t* taosGetErrno();
...
@@ -152,22 +152,23 @@ int32_t* taosGetErrno();
#define TSDB_CODE_SDB_INVALID_DATA_LEN TAOS_DEF_ERROR_CODE(0, 0x032A)
#define TSDB_CODE_SDB_INVALID_DATA_LEN TAOS_DEF_ERROR_CODE(0, 0x032A)
#define TSDB_CODE_SDB_INVALID_DATA_CONTENT TAOS_DEF_ERROR_CODE(0, 0x032B)
#define TSDB_CODE_SDB_INVALID_DATA_CONTENT TAOS_DEF_ERROR_CODE(0, 0x032B)
#define TSDB_CODE_MND_DNODE_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0330) //"DNode already exists")
// mnode-dnode
#define TSDB_CODE_MND_DNODE_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0331) //"DNode does not exist")
#define TSDB_CODE_MND_DNODE_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0330)
#define TSDB_CODE_MND_DNODE_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0331)
#define TSDB_CODE_MND_NO_ENOUGH_DNODES TAOS_DEF_ERROR_CODE(0, 0x0332)
#define TSDB_CODE_MND_INVALID_CLUSTER_CFG TAOS_DEF_ERROR_CODE(0, 0x0333)
#define TSDB_CODE_MND_INVALID_CLUSTER_ID TAOS_DEF_ERROR_CODE(0, 0x0334)
#define TSDB_CODE_MND_INVALID_DNODE_CFG TAOS_DEF_ERROR_CODE(0, 0x0335)
#define TSDB_CODE_MND_INVALID_DNODE_EP TAOS_DEF_ERROR_CODE(0, 0x0336)
#define TSDB_CODE_MND_INVALID_DNODE_ID TAOS_DEF_ERROR_CODE(0, 0x0337)
// mnode-vgroup
#define TSDB_CODE_MND_VGROUP_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0332) //"VGroup does not exist")
#define TSDB_CODE_MND_VGROUP_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0332) //"VGroup does not exist")
#define TSDB_CODE_MND_NO_REMOVE_MASTER TAOS_DEF_ERROR_CODE(0, 0x0333) //"Master DNode cannot be removed")
#define TSDB_CODE_MND_NO_ENOUGH_DNODES TAOS_DEF_ERROR_CODE(0, 0x0334) //"Out of DNodes")
#define TSDB_CODE_MND_CLUSTER_CFG_INCONSISTENT TAOS_DEF_ERROR_CODE(0, 0x0335) //"Cluster cfg inconsistent")
#define TSDB_CODE_MND_INVALID_DNODE_CFG_OPTION TAOS_DEF_ERROR_CODE(0, 0x0336) //"Invalid dnode cfg option")
#define TSDB_CODE_MND_BALANCE_ENABLED TAOS_DEF_ERROR_CODE(0, 0x0337) //"Balance already enabled")
#define TSDB_CODE_MND_VGROUP_NOT_IN_DNODE TAOS_DEF_ERROR_CODE(0, 0x0338) //"Vgroup not in dnode")
#define TSDB_CODE_MND_VGROUP_NOT_IN_DNODE TAOS_DEF_ERROR_CODE(0, 0x0338) //"Vgroup not in dnode")
#define TSDB_CODE_MND_VGROUP_ALREADY_IN_DNODE TAOS_DEF_ERROR_CODE(0, 0x0339) //"Vgroup already in dnode")
#define TSDB_CODE_MND_VGROUP_ALREADY_IN_DNODE TAOS_DEF_ERROR_CODE(0, 0x0339) //"Vgroup already in dnode")
#define TSDB_CODE_MND_DNODE_NOT_FREE TAOS_DEF_ERROR_CODE(0, 0x033A) //"Dnode not avaliable")
#define TSDB_CODE_MND_INVALID_CLUSTER_ID TAOS_DEF_ERROR_CODE(0, 0x033B) //"Cluster id not match")
#define TSDB_CODE_MND_NOT_READY TAOS_DEF_ERROR_CODE(0, 0x033C) //"Cluster not ready")
#define TSDB_CODE_MND_NOT_READY TAOS_DEF_ERROR_CODE(0, 0x033C) //"Cluster not ready")
#define TSDB_CODE_MND_DNODE_ID_NOT_CONFIGURED TAOS_DEF_ERROR_CODE(0, 0x033D) //"Dnode Id not configured")
#define TSDB_CODE_MND_DNODE_EP_NOT_CONFIGURED TAOS_DEF_ERROR_CODE(0, 0x033E) //"Dnode Ep not configured")
// mnode-acct
#define TSDB_CODE_MND_ACCT_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0340) //"Account already exists")
#define TSDB_CODE_MND_ACCT_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0340) //"Account already exists")
#define TSDB_CODE_MND_ACCT_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0341) //"Invalid account")
#define TSDB_CODE_MND_ACCT_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0341) //"Invalid account")
#define TSDB_CODE_MND_INVALID_ACCT_OPTION TAOS_DEF_ERROR_CODE(0, 0x0342) //"Invalid account options")
#define TSDB_CODE_MND_INVALID_ACCT_OPTION TAOS_DEF_ERROR_CODE(0, 0x0342) //"Invalid account options")
...
@@ -183,8 +184,18 @@ int32_t* taosGetErrno();
...
@@ -183,8 +184,18 @@ int32_t* taosGetErrno();
#define TSDB_CODE_MND_MNODE_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0348) //"Mnode already exists")
#define TSDB_CODE_MND_MNODE_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0348) //"Mnode already exists")
#define TSDB_CODE_MND_MNODE_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0349) //"Mnode not there")
#define TSDB_CODE_MND_MNODE_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0349) //"Mnode not there")
// mnode-table
// mnode-stable
#define TSDB_CODE_MND_TABLE_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0360) //"Table already exists")
#define TSDB_CODE_MND_STB_NOT_EXIST TAOS_DEF_ERROR_CODE(0, 0x0360)
#define TSDB_CODE_MND_STB_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0360)
#define TSDB_CODE_MND_STB_INVALID_IGEXIST TAOS_DEF_ERROR_CODE(0, 0x0360)
#define TSDB_CODE_MND_STB_INVALID_COLS_NUM TAOS_DEF_ERROR_CODE(0, 0x0360)
#define TSDB_CODE_MND_STB_INVALID_TAGS_NUM TAOS_DEF_ERROR_CODE(0, 0x0360)
#define TSDB_CODE_MND_STB_INVALID_COL_TYPE TAOS_DEF_ERROR_CODE(0, 0x0360)
#define TSDB_CODE_MND_STB_INVALID_COL_ID TAOS_DEF_ERROR_CODE(0, 0x0360)
#define TSDB_CODE_MND_STB_INVALID_COL_BYTES TAOS_DEF_ERROR_CODE(0, 0x0360)
#define TSDB_CODE_MND_STB_INVALID_COL_NAME TAOS_DEF_ERROR_CODE(0, 0x0360)
#define TSDB_CODE_MND_INVALID_TABLE_ID TAOS_DEF_ERROR_CODE(0, 0x0361) //"Table name too long")
#define TSDB_CODE_MND_INVALID_TABLE_ID TAOS_DEF_ERROR_CODE(0, 0x0361) //"Table name too long")
#define TSDB_CODE_MND_INVALID_TABLE_NAME TAOS_DEF_ERROR_CODE(0, 0x0362) //"Table does not exist")
#define TSDB_CODE_MND_INVALID_TABLE_NAME TAOS_DEF_ERROR_CODE(0, 0x0362) //"Table does not exist")
#define TSDB_CODE_MND_INVALID_TABLE_TYPE TAOS_DEF_ERROR_CODE(0, 0x0363) //"Invalid table type in tsdb")
#define TSDB_CODE_MND_INVALID_TABLE_TYPE TAOS_DEF_ERROR_CODE(0, 0x0363) //"Invalid table type in tsdb")
...
...
include/util/tarray.h
浏览文件 @
04057a39
...
@@ -43,6 +43,13 @@ typedef struct SArray {
...
@@ -43,6 +43,13 @@ typedef struct SArray {
*/
*/
void
*
taosArrayInit
(
size_t
size
,
size_t
elemSize
);
void
*
taosArrayInit
(
size_t
size
,
size_t
elemSize
);
/**
*
* @param tsize
* @return
*/
int32_t
taosArrayEnsureCap
(
SArray
*
pArray
,
size_t
tsize
);
/**
/**
*
*
* @param pArray
* @param pArray
...
@@ -153,6 +160,13 @@ void taosArraySet(SArray* pArray, size_t index, void* pData);
...
@@ -153,6 +160,13 @@ void taosArraySet(SArray* pArray, size_t index, void* pData);
*/
*/
void
taosArrayPopFrontBatch
(
SArray
*
pArray
,
size_t
cnt
);
void
taosArrayPopFrontBatch
(
SArray
*
pArray
,
size_t
cnt
);
/**
* remove some data entry from front
* @param pArray
* @param cnt
*/
void
taosArrayPopTailBatch
(
SArray
*
pArray
,
size_t
cnt
);
/**
/**
* remove data entry of the given index
* remove data entry of the given index
* @param pArray
* @param pArray
...
@@ -213,6 +227,14 @@ void taosArraySortString(SArray* pArray, __compar_fn_t comparFn);
...
@@ -213,6 +227,14 @@ void taosArraySortString(SArray* pArray, __compar_fn_t comparFn);
*/
*/
void
*
taosArraySearch
(
const
SArray
*
pArray
,
const
void
*
key
,
__compar_fn_t
comparFn
,
int
flags
);
void
*
taosArraySearch
(
const
SArray
*
pArray
,
const
void
*
key
,
__compar_fn_t
comparFn
,
int
flags
);
/**
* search the array, return index of the element
* @param pArray
* @param compar
* @param key
*/
int32_t
taosArraySearchIdx
(
const
SArray
*
pArray
,
const
void
*
key
,
__compar_fn_t
comparFn
,
int
flags
);
/**
/**
* search the array
* search the array
* @param pArray
* @param pArray
...
...
include/util/tchecksum.h
浏览文件 @
04057a39
...
@@ -39,7 +39,7 @@ static FORCE_INLINE int taosCalcChecksumAppend(TSCKSUM csi, uint8_t *stream, uin
...
@@ -39,7 +39,7 @@ static FORCE_INLINE int taosCalcChecksumAppend(TSCKSUM csi, uint8_t *stream, uin
}
}
static
FORCE_INLINE
int
taosCheckChecksum
(
const
uint8_t
*
stream
,
uint32_t
ssize
,
TSCKSUM
checksum
)
{
static
FORCE_INLINE
int
taosCheckChecksum
(
const
uint8_t
*
stream
,
uint32_t
ssize
,
TSCKSUM
checksum
)
{
return
(
checksum
=
=
(
*
crc32c
)(
0
,
stream
,
(
size_t
)
ssize
));
return
(
checksum
!
=
(
*
crc32c
)(
0
,
stream
,
(
size_t
)
ssize
));
}
}
static
FORCE_INLINE
int
taosCheckChecksumWhole
(
const
uint8_t
*
stream
,
uint32_t
ssize
)
{
static
FORCE_INLINE
int
taosCheckChecksumWhole
(
const
uint8_t
*
stream
,
uint32_t
ssize
)
{
...
...
include/util/tconfig.h
浏览文件 @
04057a39
...
@@ -20,7 +20,7 @@
...
@@ -20,7 +20,7 @@
extern
"C"
{
extern
"C"
{
#endif
#endif
#define TSDB_CFG_MAX_NUM 11
9
#define TSDB_CFG_MAX_NUM 11
5
#define TSDB_CFG_PRINT_LEN 23
#define TSDB_CFG_PRINT_LEN 23
#define TSDB_CFG_OPTION_LEN 24
#define TSDB_CFG_OPTION_LEN 24
#define TSDB_CFG_VALUE_LEN 41
#define TSDB_CFG_VALUE_LEN 41
...
...
include/util/tdef.h
浏览文件 @
04057a39
...
@@ -193,7 +193,7 @@ do { \
...
@@ -193,7 +193,7 @@ do { \
#define TSDB_MAX_TAG_CONDITIONS 1024
#define TSDB_MAX_TAG_CONDITIONS 1024
#define TSDB_AUTH_LEN 16
#define TSDB_AUTH_LEN 16
#define TSDB_PASSWORD_LEN
64
#define TSDB_PASSWORD_LEN
32
#define TSDB_VERSION_LEN 12
#define TSDB_VERSION_LEN 12
#define TSDB_LABEL_LEN 8
#define TSDB_LABEL_LEN 8
...
@@ -209,6 +209,8 @@ do { \
...
@@ -209,6 +209,8 @@ do { \
#define TSDB_STEP_NAME_LEN 32
#define TSDB_STEP_NAME_LEN 32
#define TSDB_STEP_DESC_LEN 128
#define TSDB_STEP_DESC_LEN 128
#define TSDB_DNODE_CONFIG_LEN 128
#define TSDB_MQTT_HOSTNAME_LEN 64
#define TSDB_MQTT_HOSTNAME_LEN 64
#define TSDB_MQTT_PORT_LEN 8
#define TSDB_MQTT_PORT_LEN 8
#define TSDB_MQTT_USER_LEN 24
#define TSDB_MQTT_USER_LEN 24
...
...
include/util/tutil.h
浏览文件 @
04057a39
...
@@ -29,7 +29,7 @@ int32_t strdequote(char *src);
...
@@ -29,7 +29,7 @@ int32_t strdequote(char *src);
int32_t
strndequote
(
char
*
dst
,
const
char
*
z
,
int32_t
len
);
int32_t
strndequote
(
char
*
dst
,
const
char
*
z
,
int32_t
len
);
int32_t
strRmquote
(
char
*
z
,
int32_t
len
);
int32_t
strRmquote
(
char
*
z
,
int32_t
len
);
size_t
strtrim
(
char
*
src
);
size_t
strtrim
(
char
*
src
);
char
*
strnchr
(
char
*
haystack
,
char
needle
,
int32_t
len
,
bool
skipquote
);
char
*
strnchr
(
c
onst
c
har
*
haystack
,
char
needle
,
int32_t
len
,
bool
skipquote
);
char
**
strsplit
(
char
*
src
,
const
char
*
delim
,
int32_t
*
num
);
char
**
strsplit
(
char
*
src
,
const
char
*
delim
,
int32_t
*
num
);
char
*
strtolower
(
char
*
dst
,
const
char
*
src
);
char
*
strtolower
(
char
*
dst
,
const
char
*
src
);
char
*
strntolower
(
char
*
dst
,
const
char
*
src
,
int32_t
n
);
char
*
strntolower
(
char
*
dst
,
const
char
*
src
,
int32_t
n
);
...
@@ -60,7 +60,7 @@ static FORCE_INLINE void taosEncryptPass_c(uint8_t *inBuf, size_t len, char *tar
...
@@ -60,7 +60,7 @@ static FORCE_INLINE void taosEncryptPass_c(uint8_t *inBuf, size_t len, char *tar
tMD5Update
(
&
context
,
inBuf
,
(
unsigned
int
)
len
);
tMD5Update
(
&
context
,
inBuf
,
(
unsigned
int
)
len
);
tMD5Final
(
&
context
);
tMD5Final
(
&
context
);
sprintf
(
target
,
"%
x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%
x"
,
context
.
digest
[
0
],
context
.
digest
[
1
],
context
.
digest
[
2
],
sprintf
(
target
,
"%
02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02
x"
,
context
.
digest
[
0
],
context
.
digest
[
1
],
context
.
digest
[
2
],
context
.
digest
[
3
],
context
.
digest
[
4
],
context
.
digest
[
5
],
context
.
digest
[
6
],
context
.
digest
[
7
],
context
.
digest
[
3
],
context
.
digest
[
4
],
context
.
digest
[
5
],
context
.
digest
[
6
],
context
.
digest
[
7
],
context
.
digest
[
8
],
context
.
digest
[
9
],
context
.
digest
[
10
],
context
.
digest
[
11
],
context
.
digest
[
12
],
context
.
digest
[
8
],
context
.
digest
[
9
],
context
.
digest
[
10
],
context
.
digest
[
11
],
context
.
digest
[
12
],
context
.
digest
[
13
],
context
.
digest
[
14
],
context
.
digest
[
15
]);
context
.
digest
[
13
],
context
.
digest
[
14
],
context
.
digest
[
15
]);
...
...
source/client/inc/clientInt.h
浏览文件 @
04057a39
...
@@ -26,25 +26,27 @@ extern "C" {
...
@@ -26,25 +26,27 @@ extern "C" {
#include "tlist.h"
#include "tlist.h"
#include "trpc.h"
#include "trpc.h"
#include "tdef.h"
#include "tdef.h"
#include "tmsgtype.h"
#include "tep.h"
typedef
struct
SQueryExecMetric
{
typedef
struct
SQueryExecMetric
{
int64_t
start
;
// start timestamp
int64_t
start
;
// start timestamp
int64_t
parsed
;
// start to parse
int64_t
parsed
;
// start to parse
int64_t
send
;
// start to send to server
int64_t
send
;
// start to send to server
int64_t
rsp
;
// receive response from server
int64_t
rsp
;
// receive response from server
}
SQueryExecMetric
;
}
SQueryExecMetric
;
typedef
struct
SInstanceActivity
{
typedef
struct
SInstanceActivity
{
uint64_t
numOfInsertsReq
;
uint64_t
numOfInsertsReq
;
uint64_t
numOfInsertRows
;
uint64_t
numOfInsertRows
;
uint64_t
insertElapsedTime
;
uint64_t
insertElapsedTime
;
uint64_t
insertBytes
;
// submit to tsdb since launched.
uint64_t
insertBytes
;
// submit to tsdb since launched.
uint64_t
fetchBytes
;
uint64_t
fetchBytes
;
uint64_t
queryElapsedTime
;
uint64_t
queryElapsedTime
;
uint64_t
numOfSlowQueries
;
uint64_t
numOfSlowQueries
;
uint64_t
totalRequests
;
uint64_t
totalRequests
;
uint64_t
currentRequests
;
// the number of SRequestObj
uint64_t
currentRequests
;
// the number of SRequestObj
}
SInstanceActivity
;
}
SInstanceActivity
;
typedef
struct
SHeartBeatInfo
{
typedef
struct
SHeartBeatInfo
{
...
@@ -53,10 +55,11 @@ typedef struct SHeartBeatInfo {
...
@@ -53,10 +55,11 @@ typedef struct SHeartBeatInfo {
typedef
struct
SAppInstInfo
{
typedef
struct
SAppInstInfo
{
int64_t
numOfConns
;
int64_t
numOfConns
;
S
RpcCorEpSet
mgmtEp
;
S
CorEpSet
mgmtEp
;
SInstanceActivity
summary
;
SInstanceActivity
summary
;
SList
*
pConnList
;
// STscObj linked list
SList
*
pConnList
;
// STscObj linked list
char
clusterId
[
TSDB_CLUSTER_ID_LEN
];
char
clusterId
[
TSDB_CLUSTER_ID_LEN
];
void
*
pTransporter
;
}
SAppInstInfo
;
}
SAppInstInfo
;
typedef
struct
SAppInfo
{
typedef
struct
SAppInfo
{
...
@@ -77,7 +80,7 @@ typedef struct STscObj {
...
@@ -77,7 +80,7 @@ typedef struct STscObj {
uint32_t
connId
;
uint32_t
connId
;
uint64_t
id
;
// ref ID returned by taosAddRef
uint64_t
id
;
// ref ID returned by taosAddRef
// struct SSqlObj *sqlList;
// struct SSqlObj *sqlList;
// SRpcObj *pRpcObj
;
void
*
pTransporter
;
pthread_mutex_t
mutex
;
// used to protect the operation on db
pthread_mutex_t
mutex
;
// used to protect the operation on db
int32_t
numOfReqs
;
// number of sqlObj from this tscObj
int32_t
numOfReqs
;
// number of sqlObj from this tscObj
SAppInstInfo
*
pAppInfo
;
SAppInstInfo
*
pAppInfo
;
...
@@ -102,13 +105,27 @@ typedef struct SRequestObj {
...
@@ -102,13 +105,27 @@ typedef struct SRequestObj {
void
*
pInfo
;
// sql parse info, generated by parser module
void
*
pInfo
;
// sql parse info, generated by parser module
}
SRequestObj
;
}
SRequestObj
;
typedef
struct
SRequestMsgBody
{
int32_t
msgType
;
void
*
pData
;
int32_t
msgLen
;
uint64_t
requestId
;
uint64_t
requestObjRefId
;
}
SRequestMsgBody
;
extern
SAppInfo
appInfo
;
extern
int32_t
tscReqRef
;
extern
int32_t
tscReqRef
;
extern
void
*
tscQhandle
;
extern
void
*
tscQhandle
;
extern
int32_t
tscConnRef
;
extern
int32_t
tscConnRef
;
extern
void
*
tscRpcCache
;
extern
void
*
tscRpcCache
;
extern
pthread_mutex_t
rpcObjMutex
;
extern
pthread_mutex_t
rpcObjMutex
;
void
*
createTscObj
(
const
char
*
user
,
const
char
*
auth
,
const
char
*
ip
,
uint32_t
port
);
extern
int
(
*
tscBuildMsg
[
TSDB_SQL_MAX
])(
SRequestObj
*
pRequest
,
SRequestMsgBody
*
pMsg
);
extern
int
(
*
handleRequestRspFp
[
TSDB_SQL_MAX
])(
SRequestObj
*
pRequest
,
const
char
*
pMsg
,
int32_t
msgLen
);
int
taos_init
();
void
*
createTscObj
(
const
char
*
user
,
const
char
*
auth
,
const
char
*
ip
,
uint32_t
port
,
SAppInstInfo
*
pAppInfo
);
void
destroyTscObj
(
void
*
pTscObj
);
void
destroyTscObj
(
void
*
pTscObj
);
void
*
createRequest
(
STscObj
*
pObj
,
__taos_async_fn_t
fp
,
void
*
param
,
int32_t
type
);
void
*
createRequest
(
STscObj
*
pObj
,
__taos_async_fn_t
fp
,
void
*
param
,
int32_t
type
);
...
@@ -119,6 +136,11 @@ TAOS *taos_connect_internal(const char *ip, const char *user, const char *pass,
...
@@ -119,6 +136,11 @@ TAOS *taos_connect_internal(const char *ip, const char *user, const char *pass,
void
taos_init_imp
(
void
);
void
taos_init_imp
(
void
);
int
taos_options_imp
(
TSDB_OPTION
option
,
const
char
*
str
);
int
taos_options_imp
(
TSDB_OPTION
option
,
const
char
*
str
);
void
*
openTransporter
(
const
char
*
user
,
const
char
*
auth
);
void
processMsgFromServer
(
void
*
parent
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
);
void
initMsgHandleFp
();
#ifdef __cplusplus
#ifdef __cplusplus
}
}
#endif
#endif
...
...
source/client/src/clientImpl.c
浏览文件 @
04057a39
#include
"tglobal.h"
#include
<tpagedfile.h>
#include "clientInt.h"
#include "clientInt.h"
#include "tdef.h"
#include "tdef.h"
#include "tep.h"
#include "tep.h"
#include "tglobal.h"
#include "tmsgtype.h"
#include "tmsgtype.h"
#include "tref.h"
#include "tref.h"
#include "tscLog.h"
#include "tscLog.h"
static
int
initEpSetFromCfg
(
const
char
*
firstEp
,
const
char
*
secondEp
,
SRpcCorEpSet
*
pEpSet
);
static
int32_t
initEpSetFromCfg
(
const
char
*
firstEp
,
const
char
*
secondEp
,
SCorEpSet
*
pEpSet
);
static
int32_t
buildConnectMsg
(
SRequestObj
*
pRequest
,
SRequestMsgBody
*
pMsgBody
);
static
int32_t
sendMsgToServer
(
void
*
pTransporter
,
SEpSet
*
epSet
,
const
SRequestMsgBody
*
pBody
,
int64_t
*
pTransporterId
);
static
bool
stringLengthCheck
(
const
char
*
str
,
size_t
maxsize
)
{
static
bool
stringLengthCheck
(
const
char
*
str
,
size_t
maxsize
)
{
if
(
str
==
NULL
)
{
if
(
str
==
NULL
)
{
...
@@ -33,9 +36,19 @@ static bool validateDbName(const char* db) {
...
@@ -33,9 +36,19 @@ static bool validateDbName(const char* db) {
return
stringLengthCheck
(
db
,
TSDB_DB_NAME_LEN
-
1
);
return
stringLengthCheck
(
db
,
TSDB_DB_NAME_LEN
-
1
);
}
}
static
STscObj
*
taosConnectImpl
(
const
char
*
ip
,
const
char
*
user
,
const
char
*
auth
,
const
char
*
db
,
uint16_t
port
,
__taos_async_fn_t
fp
,
void
*
param
);
static
char
*
getClusterKey
(
const
char
*
user
,
const
char
*
auth
,
const
char
*
ip
,
int32_t
port
)
{
char
key
[
512
]
=
{
0
};
snprintf
(
key
,
sizeof
(
key
),
"%s:%s:%s:%d"
,
user
,
auth
,
ip
,
port
);
return
strdup
(
key
);
}
static
STscObj
*
taosConnectImpl
(
const
char
*
ip
,
const
char
*
user
,
const
char
*
auth
,
const
char
*
db
,
uint16_t
port
,
__taos_async_fn_t
fp
,
void
*
param
,
SAppInstInfo
*
pAppInfo
);
TAOS
*
taos_connect_internal
(
const
char
*
ip
,
const
char
*
user
,
const
char
*
pass
,
const
char
*
auth
,
const
char
*
db
,
uint16_t
port
)
{
TAOS
*
taos_connect_internal
(
const
char
*
ip
,
const
char
*
user
,
const
char
*
pass
,
const
char
*
auth
,
const
char
*
db
,
uint16_t
port
)
{
if
(
taos_init
()
!=
TSDB_CODE_SUCCESS
)
{
return
NULL
;
}
if
(
!
validateUserName
(
user
))
{
if
(
!
validateUserName
(
user
))
{
terrno
=
TSDB_CODE_TSC_INVALID_USER_LENGTH
;
terrno
=
TSDB_CODE_TSC_INVALID_USER_LENGTH
;
return
NULL
;
return
NULL
;
...
@@ -52,7 +65,7 @@ TAOS *taos_connect_internal(const char *ip, const char *user, const char *pass,
...
@@ -52,7 +65,7 @@ TAOS *taos_connect_internal(const char *ip, const char *user, const char *pass,
strdequote
(
tmp
);
strdequote
(
tmp
);
}
}
char
secretEncrypt
[
64
]
=
{
0
};
char
secretEncrypt
[
32
]
=
{
0
};
if
(
auth
==
NULL
)
{
if
(
auth
==
NULL
)
{
if
(
!
validatePassword
(
pass
))
{
if
(
!
validatePassword
(
pass
))
{
terrno
=
TSDB_CODE_TSC_INVALID_PASS_LENGTH
;
terrno
=
TSDB_CODE_TSC_INVALID_PASS_LENGTH
;
...
@@ -64,7 +77,7 @@ TAOS *taos_connect_internal(const char *ip, const char *user, const char *pass,
...
@@ -64,7 +77,7 @@ TAOS *taos_connect_internal(const char *ip, const char *user, const char *pass,
tstrncpy
(
secretEncrypt
,
auth
,
tListLen
(
secretEncrypt
));
tstrncpy
(
secretEncrypt
,
auth
,
tListLen
(
secretEncrypt
));
}
}
S
RpcCorEpSet
epSet
;
S
CorEpSet
epSet
=
{
0
}
;
if
(
ip
)
{
if
(
ip
)
{
if
(
initEpSetFromCfg
(
ip
,
NULL
,
&
epSet
)
<
0
)
{
if
(
initEpSetFromCfg
(
ip
,
NULL
,
&
epSet
)
<
0
)
{
return
NULL
;
return
NULL
;
...
@@ -79,10 +92,22 @@ TAOS *taos_connect_internal(const char *ip, const char *user, const char *pass,
...
@@ -79,10 +92,22 @@ TAOS *taos_connect_internal(const char *ip, const char *user, const char *pass,
}
}
}
}
return
taosConnectImpl
(
ip
,
user
,
&
secretEncrypt
[
0
],
db
,
port
,
NULL
,
NULL
);
char
*
key
=
getClusterKey
(
user
,
secretEncrypt
,
ip
,
port
);
SAppInstInfo
*
pInst
=
taosHashGet
(
appInfo
.
pInstMap
,
key
,
strlen
(
key
));
if
(
pInst
==
NULL
)
{
pInst
=
calloc
(
1
,
sizeof
(
struct
SAppInstInfo
));
pInst
->
mgmtEp
=
epSet
;
pInst
->
pTransporter
=
openTransporter
(
user
,
secretEncrypt
);
taosHashPut
(
appInfo
.
pInstMap
,
key
,
strlen
(
key
),
&
pInst
,
POINTER_BYTES
);
}
return
taosConnectImpl
(
ip
,
user
,
&
secretEncrypt
[
0
],
db
,
port
,
NULL
,
NULL
,
pInst
);
}
}
int
initEpSetFromCfg
(
const
char
*
firstEp
,
const
char
*
secondEp
,
S
Rpc
CorEpSet
*
pEpSet
)
{
int
initEpSetFromCfg
(
const
char
*
firstEp
,
const
char
*
secondEp
,
SCorEpSet
*
pEpSet
)
{
pEpSet
->
version
=
0
;
pEpSet
->
version
=
0
;
// init mgmt ip set
// init mgmt ip set
...
@@ -118,48 +143,148 @@ int initEpSetFromCfg(const char *firstEp, const char *secondEp, SRpcCorEpSet *pE
...
@@ -118,48 +143,148 @@ int initEpSetFromCfg(const char *firstEp, const char *secondEp, SRpcCorEpSet *pE
return
0
;
return
0
;
}
}
STscObj
*
taosConnectImpl
(
const
char
*
ip
,
const
char
*
user
,
const
char
*
auth
,
const
char
*
db
,
uint16_t
port
,
__taos_async_fn_t
fp
,
void
*
param
)
{
STscObj
*
taosConnectImpl
(
const
char
*
ip
,
const
char
*
user
,
const
char
*
auth
,
const
char
*
db
,
uint16_t
port
,
__taos_async_fn_t
fp
,
void
*
param
,
SAppInstInfo
*
pAppInfo
)
{
if
(
taos_init
()
!=
TSDB_CODE_SUCCESS
)
{
STscObj
*
pTscObj
=
createTscObj
(
user
,
auth
,
ip
,
port
,
pAppInfo
);
if
(
NULL
==
pTscObj
)
{
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
pTscObj
;
}
SRequestObj
*
pRequest
=
createRequest
(
pTscObj
,
fp
,
param
,
TSDB_SQL_CONNECT
);
if
(
pRequest
==
NULL
)
{
destroyTscObj
(
pTscObj
);
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
NULL
;
return
NULL
;
}
}
STscObj
*
pObj
=
createTscObj
(
user
,
auth
,
ip
,
port
);
SRequestMsgBody
body
=
{
0
};
if
(
NULL
==
pObj
)
{
buildConnectMsg
(
pRequest
,
&
body
);
int64_t
transporterId
=
0
;
sendMsgToServer
(
pTscObj
->
pTransporter
,
&
pTscObj
->
pAppInfo
->
mgmtEp
.
epSet
,
&
body
,
&
transporterId
);
tsem_wait
(
&
pRequest
->
body
.
rspSem
);
if
(
pRequest
->
code
!=
TSDB_CODE_SUCCESS
)
{
const
char
*
errorMsg
=
(
pRequest
->
code
==
TSDB_CODE_RPC_FQDN_ERROR
)
?
taos_errstr
(
pRequest
)
:
tstrerror
(
terrno
);
printf
(
"failed to connect to server, reason: %s
\n\n
"
,
errorMsg
);
destroyRequest
(
pRequest
);
taos_close
(
pTscObj
);
pTscObj
=
NULL
;
}
else
{
tscDebug
(
"%p connection is opening, dnodeConn:%p"
,
pTscObj
,
pTscObj
->
pTransporter
);
destroyRequest
(
pRequest
);
}
return
pTscObj
;
}
static
int32_t
buildConnectMsg
(
SRequestObj
*
pRequest
,
SRequestMsgBody
*
pMsgBody
)
{
pMsgBody
->
msgType
=
TSDB_MSG_TYPE_CONNECT
;
pMsgBody
->
msgLen
=
sizeof
(
SConnectMsg
);
pMsgBody
->
requestObjRefId
=
pRequest
->
self
;
SConnectMsg
*
pConnect
=
calloc
(
1
,
sizeof
(
SConnectMsg
));
if
(
pConnect
==
NULL
)
{
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
pObj
;
return
-
1
;
}
}
// void *pRpcObj = NULL;
// TODO refactor full_name
//
char
*
db
;
// ugly code to move the space
// char rpcKey[512] = {0};
// snprintf(rpcKey, sizeof(rpcKey), "%s:%s:%s:%d", user, auth, ip, port);
// if (tscAcquireRpc(rpcKey, user, auth, &pRpcObj) != 0) {
// terrno = TSDB_CODE_RPC_NETWORK_UNAVAIL;
// return NULL;
// }
SRequestObj
*
pRequest
=
createRequest
(
pObj
,
fp
,
param
,
TSDB_SQL_CONNECT
);
STscObj
*
pObj
=
pRequest
->
pTscObj
;
if
(
pRequest
==
NULL
)
{
pthread_mutex_lock
(
&
pObj
->
mutex
);
destroyTscObj
(
pObj
);
db
=
strstr
(
pObj
->
db
,
TS_PATH_DELIMITER
);
db
=
(
db
==
NULL
)
?
pObj
->
db
:
db
+
1
;
tstrncpy
(
pConnect
->
db
,
db
,
sizeof
(
pConnect
->
db
));
pthread_mutex_unlock
(
&
pObj
->
mutex
);
// tstrncpy(pConnect->clientVersion, version, sizeof(pConnect->clientVersion));
// tstrncpy(pConnect->msgVersion, "", sizeof(pConnect->msgVersion));
// pConnect->pid = htonl(taosGetPId());
// taosGetCurrentAPPName(pConnect->appName, NULL);
pMsgBody
->
pData
=
pConnect
;
return
0
;
}
int32_t
sendMsgToServer
(
void
*
pTransporter
,
SEpSet
*
epSet
,
const
SRequestMsgBody
*
pBody
,
int64_t
*
pTransporterId
)
{
char
*
pMsg
=
rpcMallocCont
(
pBody
->
msgLen
);
if
(
NULL
==
pMsg
)
{
tscError
(
"0x%"
PRIx64
" msg:%s malloc failed"
,
pBody
->
requestId
,
taosMsg
[
pBody
->
msgType
]);
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
-
1
;
}
}
// tscBuildAndSendRequest(pRequest, NULL);
memcpy
(
pMsg
,
pBody
->
pData
,
pBody
->
msgLen
);
// tsem_wait(&pRequest->body.rspSem);
SRpcMsg
rpcMsg
=
{
if
(
pRequest
->
code
!=
TSDB_CODE_SUCCESS
)
{
.
msgType
=
pBody
->
msgType
,
const
char
*
errorMsg
=
(
pRequest
->
code
==
TSDB_CODE_RPC_FQDN_ERROR
)
.
pCont
=
pMsg
,
?
taos_errstr
(
pRequest
)
.
contLen
=
pBody
->
msgLen
,
:
tstrerror
(
terrno
);
.
ahandle
=
(
void
*
)
pBody
->
requestObjRefId
,
.
handle
=
NULL
,
.
code
=
0
};
rpcSendRequest
(
pTransporter
,
epSet
,
&
rpcMsg
,
pTransporterId
);
return
TSDB_CODE_SUCCESS
;
}
//
//int tscBuildAndSendRequest(SRequestObj *pRequest) {
// assert(pRequest != NULL);
// char name[TSDB_TABLE_FNAME_LEN] = {0};
//
// uint32_t type = 0;
// tscDebug("0x%"PRIx64" SQL cmd:%s will be processed, name:%s, type:%d", pRequest->requestId, taosMsg[pRequest->type], name, type);
// if (pRequest->type < TSDB_SQL_MGMT) { // the pTableMetaInfo cannot be NULL
//
// } else if (pCmd->command >= TSDB_SQL_LOCAL) {
// return (*tscProcessMsgRsp[pCmd->command])(pSql);
// }
//
// return buildConnectMsg(pRequest);
//}
void
processMsgFromServer
(
void
*
parent
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
)
{
int64_t
requestRefId
=
(
int64_t
)
pMsg
->
ahandle
;
SRequestObj
*
pRequest
=
(
SRequestObj
*
)
taosAcquireRef
(
tscReqRef
,
requestRefId
);
if
(
pRequest
==
NULL
)
{
rpcFreeCont
(
pMsg
->
pCont
);
return
;
}
printf
(
"connect failed, reason: %s
\n\n
"
,
errorMsg
);
assert
(
pRequest
->
self
==
requestRefId
);
pRequest
->
metric
.
rsp
=
taosGetTimestampMs
();
taos_free_result
(
pRequest
);
pRequest
->
code
=
pMsg
->
code
;
taos_close
(
pObj
);
return
NULL
;
STscObj
*
pTscObj
=
pRequest
->
pTscObj
;
if
(
pEpSet
)
{
if
(
!
isEpsetEqual
(
&
pTscObj
->
pAppInfo
->
mgmtEp
.
epSet
,
pEpSet
))
{
updateEpSet_s
(
&
pTscObj
->
pAppInfo
->
mgmtEp
,
pEpSet
);
}
}
/*
* There is not response callback function for submit response.
* The actual inserted number of points is the first number.
*/
if
(
pMsg
->
code
==
TSDB_CODE_SUCCESS
)
{
tscDebug
(
"0x%"
PRIx64
" SQL cmd:%s, code:%s rspLen:%d"
,
pRequest
->
requestId
,
taosMsg
[
pRequest
->
type
],
tstrerror
(
pMsg
->
code
),
pMsg
->
contLen
);
if
(
handleRequestRspFp
[
pRequest
->
type
])
{
pMsg
->
code
=
(
*
handleRequestRspFp
[
pRequest
->
type
])(
pRequest
,
pMsg
->
pCont
,
pMsg
->
contLen
);
}
}
else
{
tscError
(
"0x%"
PRIx64
" SQL cmd:%s, code:%s rspLen:%d"
,
pRequest
->
requestId
,
taosMsg
[
pRequest
->
type
],
tstrerror
(
pMsg
->
code
),
pMsg
->
contLen
);
}
}
// tscDebug("0x%"PRIx64" connection is opening, rpcObj: %p, dnodeConn:%p", pObj, pObj->pRpcObj,
taosReleaseRef
(
requestRefId
,
requestRefId
);
// pObj->pRpcObj->pDnodeConn);
rpcFreeCont
(
pMsg
->
pCont
);
destroyRequest
(
pRequest
);
}
return
pObj
;
}
\ No newline at end of file
source/client/src/tscEnv.c
浏览文件 @
04057a39
...
@@ -36,23 +36,28 @@ int32_t tscConnRef = -1;
...
@@ -36,23 +36,28 @@ int32_t tscConnRef = -1;
void
*
tscQhandle
=
NULL
;
void
*
tscQhandle
=
NULL
;
void
*
tscRpcCache
=
NULL
;
// TODO removed from here.
void
*
tscRpcCache
=
NULL
;
// TODO removed from here.
int32_t
tsNumOfThreads
=
1
;
pthread_mutex_t
rpcObjMutex
;
// mutex to protect open the rpc obj concurrently
pthread_mutex_t
rpcObjMutex
;
// mutex to protect open the rpc obj concurrently
volatile
int32_t
tscInitRes
=
0
;
volatile
int32_t
tscInitRes
=
0
;
static
void
registerRequest
(
SRequestObj
*
pRequest
)
{
static
void
registerRequest
(
SRequestObj
*
pRequest
)
{
STscObj
*
pTscObj
=
(
STscObj
*
)
taosAcquireRef
(
tscConnRef
,
pRequest
->
pTscObj
->
id
);
STscObj
*
pTscObj
=
(
STscObj
*
)
taosAcquireRef
(
tscConnRef
,
pRequest
->
pTscObj
->
id
);
assert
(
pTscObj
!=
NULL
);
assert
(
pTscObj
!=
NULL
);
// connection has been released already, abort creating request.
// connection has been released already, abort creating request.
pRequest
->
self
=
taosAddRef
(
tscReqRef
,
pRequest
);
pRequest
->
self
=
taosAddRef
(
tscReqRef
,
pRequest
);
int32_t
num
=
atomic_add_fetch_32
(
&
pTscObj
->
numOfReqs
,
1
);
int32_t
num
=
atomic_add_fetch_32
(
&
pTscObj
->
numOfReqs
,
1
);
SInstanceActivity
*
pActivity
=
&
pTscObj
->
pAppInfo
->
summary
;
if
(
pTscObj
->
pAppInfo
)
{
int32_t
total
=
atomic_add_fetch_32
(
&
pActivity
->
totalRequests
,
1
);
SInstanceActivity
*
pActivity
=
&
pTscObj
->
pAppInfo
->
summary
;
int32_t
currentInst
=
atomic_add_fetch_32
(
&
pActivity
->
currentRequests
,
1
);
tscDebug
(
"0x%"
PRIx64
" new Request from 0x%"
PRIx64
", current:%d, app current:%d, total:%d"
,
pRequest
->
self
,
pRequest
->
pTscObj
->
id
,
num
,
currentInst
,
total
);
int32_t
total
=
atomic_add_fetch_32
(
&
pActivity
->
totalRequests
,
1
);
int32_t
currentInst
=
atomic_add_fetch_32
(
&
pActivity
->
currentRequests
,
1
);
tscDebug
(
"0x%"
PRIx64
" new Request from 0x%"
PRIx64
", current:%d, app current:%d, total:%d"
,
pRequest
->
self
,
pRequest
->
pTscObj
->
id
,
num
,
currentInst
,
total
);
}
}
}
static
void
deregisterRequest
(
SRequestObj
*
pRequest
)
{
static
void
deregisterRequest
(
SRequestObj
*
pRequest
)
{
...
@@ -103,80 +108,52 @@ void tscReleaseRpc(void *param) {
...
@@ -103,80 +108,52 @@ void tscReleaseRpc(void *param) {
taosCacheRelease
(
tscRpcCache
,
(
void
*
)
&
param
,
false
);
taosCacheRelease
(
tscRpcCache
,
(
void
*
)
&
param
,
false
);
}
}
void
*
tscAcquireRpc
(
const
char
*
key
,
const
char
*
user
,
const
char
*
secretEncrypt
)
{
// TODO refactor
#if 0
void
*
openTransporter
(
const
char
*
user
,
const
char
*
auth
)
{
SRpcObj *pRpcObj = (SRpcObj *)taosCacheAcquireByKey(tscRpcCache, key, strlen(key));
pthread_mutex_lock(&rpcObjMutex);
if (pRpcObj != NULL) {
pthread_mutex_unlock(&rpcObjMutex);
return pRpcObj;
}
SRpcInit
rpcInit
;
SRpcInit
rpcInit
;
memset
(
&
rpcInit
,
0
,
sizeof
(
rpcInit
));
memset
(
&
rpcInit
,
0
,
sizeof
(
rpcInit
));
rpcInit
.
localPort
=
0
;
rpcInit
.
localPort
=
0
;
rpcInit
.
label
=
"TSC"
;
rpcInit
.
label
=
"TSC"
;
rpcInit.numOfThreads = ts
c
NumOfThreads;
rpcInit
.
numOfThreads
=
tsNumOfThreads
;
rpcInit.cfp =
tscP
rocessMsgFromServer;
rpcInit
.
cfp
=
p
rocessMsgFromServer
;
rpcInit
.
sessions
=
tsMaxConnections
;
rpcInit
.
sessions
=
tsMaxConnections
;
rpcInit
.
connType
=
TAOS_CONN_CLIENT
;
rpcInit
.
connType
=
TAOS_CONN_CLIENT
;
rpcInit
.
user
=
(
char
*
)
user
;
rpcInit
.
user
=
(
char
*
)
user
;
rpcInit
.
idleTime
=
tsShellActivityTimer
*
1000
;
rpcInit
.
idleTime
=
tsShellActivityTimer
*
1000
;
rpcInit
.
ckey
=
"key"
;
rpcInit
.
ckey
=
"key"
;
rpcInit.spi = 1;
// rpcInit.spi = 1;
rpcInit.secret = (char *)secretEncrypt;
rpcInit
.
secret
=
(
char
*
)
auth
;
SRpcObj rpcObj = {0};
strncpy(rpcObj.key, key, strlen(key));
rpcObj.pDnodeConn = rpcOpen(&rpcInit);
if (rpcObj.pDnodeConn == NULL) {
pthread_mutex_unlock(&rpcObjMutex);
tscError("failed to init connection to server");
return NULL;
}
pRpcObj = taosCachePut(tscRpcCache, rpcObj.key, strlen(rpcObj.key), &rpcObj, sizeof(rpcObj), 1000*5);
void
*
pDnodeConn
=
rpcOpen
(
&
rpcInit
);
if (pRpcObj == NULL) {
if
(
pDnodeConn
==
NULL
)
{
rpcClose(rpcObj.pDnodeConn);
tscError
(
"failed to init connection to server"
);
pthread_mutex_unlock(&rpcObjMutex);
return
NULL
;
return
NULL
;
}
}
pthread_mutex_unlock(&rpcObjMutex);
return
pDnodeConn
;
return pRpcObj;
#endif
}
}
void
destroyTscObj
(
void
*
pTscObj
)
{
void
destroyTscObj
(
void
*
pTscObj
)
{
STscObj
*
pObj
=
pTscObj
;
STscObj
*
pObj
=
pTscObj
;
// tfree(pObj->tscCorMgmtEpSet);
// tscReleaseRpc(pObj->pRpcObj);
// tscReleaseRpc(pObj->pRpcObj);
pthread_mutex_destroy
(
&
pObj
->
mutex
);
pthread_mutex_destroy
(
&
pObj
->
mutex
);
tfree
(
pObj
);
tfree
(
pObj
);
}
}
void
*
createTscObj
(
const
char
*
user
,
const
char
*
auth
,
const
char
*
ip
,
uint32_t
port
)
{
void
*
createTscObj
(
const
char
*
user
,
const
char
*
auth
,
const
char
*
ip
,
uint32_t
port
,
SAppInstInfo
*
pAppInfo
)
{
STscObj
*
pObj
=
(
STscObj
*
)
calloc
(
1
,
sizeof
(
STscObj
));
STscObj
*
pObj
=
(
STscObj
*
)
calloc
(
1
,
sizeof
(
STscObj
));
if
(
NULL
==
pObj
)
{
if
(
NULL
==
pObj
)
{
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_TSC_OUT_OF_MEMORY
;
return
NULL
;
return
NULL
;
}
}
// char rpcKey[512] = {0};
pObj
->
pAppInfo
=
pAppInfo
;
// snprintf(rpcKey, sizeof(rpcKey), "%s:%s:%s:%d", user, auth, ip, port);
if
(
pAppInfo
!=
NULL
)
{
pObj
->
pTransporter
=
pAppInfo
->
pTransporter
;
// pObj->tscCorMgmtEpSet = malloc(sizeof(SRpcCorEpSet));
}
// if (pObj->tscCorMgmtEpSet == NULL) {
// terrno = TSDB_CODE_TSC_OUT_OF_MEMORY;
// free(pObj);
// return NULL;
// }
//
// memcpy(pObj->tscCorMgmtEpSet, &corMgmtEpSet, sizeof(corMgmtEpSet));
tstrncpy
(
pObj
->
user
,
user
,
sizeof
(
pObj
->
user
));
tstrncpy
(
pObj
->
user
,
user
,
sizeof
(
pObj
->
user
));
int32_t
len
=
MIN
(
strlen
(
auth
)
+
1
,
sizeof
(
pObj
->
pass
));
memcpy
(
pObj
->
pass
,
auth
,
TSDB_PASSWORD_LEN
);
tstrncpy
(
pObj
->
pass
,
auth
,
len
);
pthread_mutex_init
(
&
pObj
->
mutex
,
NULL
);
pthread_mutex_init
(
&
pObj
->
mutex
,
NULL
);
pObj
->
id
=
taosAddRef
(
tscConnRef
,
pObj
);
pObj
->
id
=
taosAddRef
(
tscConnRef
,
pObj
);
...
@@ -194,6 +171,8 @@ void* createRequest(STscObj* pObj, __taos_async_fn_t fp, void* param, int32_t ty
...
@@ -194,6 +171,8 @@ void* createRequest(STscObj* pObj, __taos_async_fn_t fp, void* param, int32_t ty
// TODO generated request uuid
// TODO generated request uuid
pRequest
->
requestId
=
0
;
pRequest
->
requestId
=
0
;
pRequest
->
metric
.
start
=
taosGetTimestampMs
();
pRequest
->
type
=
type
;
pRequest
->
type
=
type
;
pRequest
->
pTscObj
=
pObj
;
pRequest
->
pTscObj
=
pObj
;
pRequest
->
body
.
fp
=
fp
;
pRequest
->
body
.
fp
=
fp
;
...
@@ -201,6 +180,7 @@ void* createRequest(STscObj* pObj, __taos_async_fn_t fp, void* param, int32_t ty
...
@@ -201,6 +180,7 @@ void* createRequest(STscObj* pObj, __taos_async_fn_t fp, void* param, int32_t ty
tsem_init
(
&
pRequest
->
body
.
rspSem
,
0
,
0
);
tsem_init
(
&
pRequest
->
body
.
rspSem
,
0
,
0
);
registerRequest
(
pRequest
);
registerRequest
(
pRequest
);
return
pRequest
;
}
}
void
destroyRequest
(
void
*
p
)
{
void
destroyRequest
(
void
*
p
)
{
...
@@ -235,6 +215,8 @@ void taos_init_imp(void) {
...
@@ -235,6 +215,8 @@ void taos_init_imp(void) {
}
}
taosInitNotes
();
taosInitNotes
();
initMsgHandleFp
();
rpcInit
();
rpcInit
();
tscDebug
(
"starting to initialize TAOS client ...
\n
Local End Point is:%s"
,
tsLocalEp
);
tscDebug
(
"starting to initialize TAOS client ...
\n
Local End Point is:%s"
,
tsLocalEp
);
...
@@ -262,8 +244,9 @@ void taos_init_imp(void) {
...
@@ -262,8 +244,9 @@ void taos_init_imp(void) {
tscReqRef
=
taosOpenRef
(
40960
,
destroyRequest
);
tscReqRef
=
taosOpenRef
(
40960
,
destroyRequest
);
taosGetAppName
(
appInfo
.
appName
,
NULL
);
taosGetAppName
(
appInfo
.
appName
,
NULL
);
appInfo
.
pid
=
taosGetPId
();
appInfo
.
pid
=
taosGetPId
();
appInfo
.
startTime
=
taosGetTimestampMs
();
appInfo
.
startTime
=
taosGetTimestampMs
();
appInfo
.
pInstMap
=
taosHashInit
(
4
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
true
,
HASH_ENTRY_LOCK
);
tscDebug
(
"client is initialized successfully"
);
tscDebug
(
"client is initialized successfully"
);
}
}
...
...
source/client/test/clientTests.cpp
浏览文件 @
04057a39
...
@@ -33,6 +33,5 @@ int main(int argc, char** argv) {
...
@@ -33,6 +33,5 @@ int main(int argc, char** argv) {
}
}
TEST
(
testCase
,
driverInit_Test
)
{
TEST
(
testCase
,
driverInit_Test
)
{
taos_init
();
TAOS
*
pTaos
=
taos_connect
(
"ubuntu"
,
"root"
,
"taosdata"
,
NULL
,
0
);
TAOS
*
pTaos
=
taos_connect
(
"ubuntu"
,
"root"
,
"taosdata"
,
NULL
,
0
);
}
}
\ No newline at end of file
source/common/src/tep.c
浏览文件 @
04057a39
#include "os.h"
#include "tep.h"
#include "tep.h"
#include "tglobal.h"
#include "tglobal.h"
#include "tlockfree.h"
int
taosGetFqdnPortFromEp
(
const
char
*
ep
,
char
*
fqdn
,
uint16_t
*
port
)
{
int
taosGetFqdnPortFromEp
(
const
char
*
ep
,
char
*
fqdn
,
uint16_t
*
port
)
{
*
port
=
0
;
*
port
=
0
;
...
@@ -20,3 +20,22 @@ int taosGetFqdnPortFromEp(const char *ep, char *fqdn, uint16_t *port) {
...
@@ -20,3 +20,22 @@ int taosGetFqdnPortFromEp(const char *ep, char *fqdn, uint16_t *port) {
return
0
;
return
0
;
}
}
bool
isEpsetEqual
(
const
SEpSet
*
s1
,
const
SEpSet
*
s2
)
{
if
(
s1
->
numOfEps
!=
s2
->
numOfEps
||
s1
->
inUse
!=
s2
->
inUse
)
{
return
false
;
}
for
(
int32_t
i
=
0
;
i
<
s1
->
numOfEps
;
i
++
)
{
if
(
s1
->
port
[
i
]
!=
s2
->
port
[
i
]
||
strncmp
(
s1
->
fqdn
[
i
],
s2
->
fqdn
[
i
],
TSDB_FQDN_LEN
)
!=
0
)
return
false
;
}
return
true
;
}
void
updateEpSet_s
(
SCorEpSet
*
pEpSet
,
SEpSet
*
pNewEpSet
)
{
taosCorBeginWrite
(
&
pEpSet
->
version
);
pEpSet
->
epSet
=
*
pNewEpSet
;
taosCorEndWrite
(
&
pEpSet
->
version
);
}
source/common/src/tglobal.c
浏览文件 @
04057a39
...
@@ -47,7 +47,7 @@ int64_t tsDnodeStartTime = 0;
...
@@ -47,7 +47,7 @@ int64_t tsDnodeStartTime = 0;
// common
// common
int32_t
tsRpcTimer
=
300
;
int32_t
tsRpcTimer
=
300
;
int32_t
tsRpcMaxTime
=
600
;
// seconds;
int32_t
tsRpcMaxTime
=
600
;
// seconds;
int32_t
tsRpcForceTcp
=
0
;
//disable this, means query, show command use udp protocol as default
int32_t
tsRpcForceTcp
=
1
;
//disable this, means query, show command use udp protocol as default
int32_t
tsMaxShellConns
=
50000
;
int32_t
tsMaxShellConns
=
50000
;
int32_t
tsMaxConnections
=
5000
;
int32_t
tsMaxConnections
=
5000
;
int32_t
tsShellActivityTimer
=
3
;
// second
int32_t
tsShellActivityTimer
=
3
;
// second
...
@@ -157,7 +157,6 @@ int8_t tsEnableBalance = 1;
...
@@ -157,7 +157,6 @@ int8_t tsEnableBalance = 1;
int8_t
tsAlternativeRole
=
0
;
int8_t
tsAlternativeRole
=
0
;
int32_t
tsBalanceInterval
=
300
;
// seconds
int32_t
tsBalanceInterval
=
300
;
// seconds
int32_t
tsOfflineThreshold
=
86400
*
10
;
// seconds of 10 days
int32_t
tsOfflineThreshold
=
86400
*
10
;
// seconds of 10 days
int32_t
tsMnodeEqualVnodeNum
=
4
;
int8_t
tsEnableFlowCtrl
=
1
;
int8_t
tsEnableFlowCtrl
=
1
;
int8_t
tsEnableSlaveQuery
=
1
;
int8_t
tsEnableSlaveQuery
=
1
;
int8_t
tsEnableAdjustMaster
=
1
;
int8_t
tsEnableAdjustMaster
=
1
;
...
@@ -1063,17 +1062,6 @@ static void doInitGlobalConfig(void) {
...
@@ -1063,17 +1062,6 @@ static void doInitGlobalConfig(void) {
cfg
.
maxValue
=
10000000
;
cfg
.
maxValue
=
10000000
;
cfg
.
ptrLength
=
0
;
cfg
.
ptrLength
=
0
;
cfg
.
unitType
=
TAOS_CFG_UTYPE_GB
;
cfg
.
unitType
=
TAOS_CFG_UTYPE_GB
;
taosAddConfigOption
(
cfg
);
// module configs
cfg
.
option
=
"mnodeEqualVnodeNum"
;
cfg
.
ptr
=
&
tsMnodeEqualVnodeNum
;
cfg
.
valType
=
TAOS_CFG_VTYPE_INT32
;
cfg
.
cfgType
=
TSDB_CFG_CTYPE_B_CONFIG
|
TSDB_CFG_CTYPE_B_SHOW
;
cfg
.
minValue
=
0
;
cfg
.
maxValue
=
1000
;
cfg
.
ptrLength
=
0
;
cfg
.
unitType
=
TAOS_CFG_UTYPE_NONE
;
taosAddConfigOption
(
cfg
);
taosAddConfigOption
(
cfg
);
// module configs
// module configs
...
@@ -1546,7 +1534,7 @@ static void doInitGlobalConfig(void) {
...
@@ -1546,7 +1534,7 @@ static void doInitGlobalConfig(void) {
taosAddConfigOption
(
cfg
);
taosAddConfigOption
(
cfg
);
assert
(
tsGlobalConfigNum
==
TSDB_CFG_MAX_NUM
);
assert
(
tsGlobalConfigNum
==
TSDB_CFG_MAX_NUM
);
#else
#else
assert
(
tsGlobalConfigNum
==
(
TSDB_CFG_MAX_NUM
-
5
)
);
//assert(tsGlobalConfigNum == TSDB_CFG_MAX_NUM - 5
);
#endif
#endif
}
}
...
@@ -1603,12 +1591,6 @@ int32_t taosCheckAndPrintCfg() {
...
@@ -1603,12 +1591,6 @@ int32_t taosCheckAndPrintCfg() {
tsNumOfCores
=
1
;
tsNumOfCores
=
1
;
}
}
if
(
tsMaxTablePerVnode
<
tsMinTablePerVnode
)
{
uError
(
"maxTablesPerVnode(%d) < minTablesPerVnode(%d), reset to minTablesPerVnode(%d)"
,
tsMaxTablePerVnode
,
tsMinTablePerVnode
,
tsMinTablePerVnode
);
tsMaxTablePerVnode
=
tsMinTablePerVnode
;
}
if
(
tsQueryBufferSize
>=
0
)
{
if
(
tsQueryBufferSize
>=
0
)
{
tsQueryBufferSizeBytes
=
tsQueryBufferSize
*
1048576UL
;
tsQueryBufferSizeBytes
=
tsQueryBufferSize
*
1048576UL
;
}
}
...
...
source/common/src/ttime.c
浏览文件 @
04057a39
...
@@ -82,18 +82,18 @@ void deltaToUtcInitOnce() {
...
@@ -82,18 +82,18 @@ void deltaToUtcInitOnce() {
}
}
static
int64_t
parseFraction
(
char
*
str
,
char
**
end
,
int32_t
timePrec
);
static
int64_t
parseFraction
(
char
*
str
,
char
**
end
,
int32_t
timePrec
);
static
int32_t
parseTimeWithTz
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
,
char
delim
);
static
int32_t
parseTimeWithTz
(
c
onst
c
har
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
,
char
delim
);
static
int32_t
parseLocaltime
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
);
static
int32_t
parseLocaltime
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
);
static
int32_t
parseLocaltimeDst
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
);
static
int32_t
parseLocaltimeDst
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
);
static
char
*
forwardToTimeStringEnd
(
char
*
str
);
static
char
*
forwardToTimeStringEnd
(
char
*
str
);
static
bool
checkTzPresent
(
char
*
str
,
int32_t
len
);
static
bool
checkTzPresent
(
c
onst
c
har
*
str
,
int32_t
len
);
static
int32_t
(
*
parseLocaltimeFp
[])
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
)
=
{
static
int32_t
(
*
parseLocaltimeFp
[])
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
)
=
{
parseLocaltime
,
parseLocaltime
,
parseLocaltimeDst
parseLocaltimeDst
};
};
int32_t
taosParseTime
(
char
*
timestr
,
int64_t
*
time
,
int32_t
len
,
int32_t
timePrec
,
int8_t
day_light
)
{
int32_t
taosParseTime
(
c
onst
c
har
*
timestr
,
int64_t
*
time
,
int32_t
len
,
int32_t
timePrec
,
int8_t
day_light
)
{
/* parse datatime string in with tz */
/* parse datatime string in with tz */
if
(
strnchr
(
timestr
,
'T'
,
len
,
false
)
!=
NULL
)
{
if
(
strnchr
(
timestr
,
'T'
,
len
,
false
)
!=
NULL
)
{
return
parseTimeWithTz
(
timestr
,
time
,
timePrec
,
'T'
);
return
parseTimeWithTz
(
timestr
,
time
,
timePrec
,
'T'
);
...
@@ -104,7 +104,7 @@ int32_t taosParseTime(char* timestr, int64_t* time, int32_t len, int32_t timePre
...
@@ -104,7 +104,7 @@ int32_t taosParseTime(char* timestr, int64_t* time, int32_t len, int32_t timePre
}
}
}
}
bool
checkTzPresent
(
char
*
str
,
int32_t
len
)
{
bool
checkTzPresent
(
c
onst
c
har
*
str
,
int32_t
len
)
{
char
*
seg
=
forwardToTimeStringEnd
(
str
);
char
*
seg
=
forwardToTimeStringEnd
(
str
);
int32_t
seg_len
=
len
-
(
int32_t
)(
seg
-
str
);
int32_t
seg_len
=
len
-
(
int32_t
)(
seg
-
str
);
...
@@ -237,7 +237,7 @@ int32_t parseTimezone(char* str, int64_t* tzOffset) {
...
@@ -237,7 +237,7 @@ int32_t parseTimezone(char* str, int64_t* tzOffset) {
* 2013-04-12T15:52:01+0800
* 2013-04-12T15:52:01+0800
* 2013-04-12T15:52:01.123+0800
* 2013-04-12T15:52:01.123+0800
*/
*/
int32_t
parseTimeWithTz
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
,
char
delim
)
{
int32_t
parseTimeWithTz
(
c
onst
c
har
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
,
char
delim
)
{
int64_t
factor
=
(
timePrec
==
TSDB_TIME_PRECISION_MILLI
)
?
1000
:
int64_t
factor
=
(
timePrec
==
TSDB_TIME_PRECISION_MILLI
)
?
1000
:
(
timePrec
==
TSDB_TIME_PRECISION_MICRO
?
1000000
:
1000000000
);
(
timePrec
==
TSDB_TIME_PRECISION_MICRO
?
1000000
:
1000000000
);
...
@@ -432,7 +432,7 @@ static int32_t getDuration(int64_t val, char unit, int64_t* result, int32_t time
...
@@ -432,7 +432,7 @@ static int32_t getDuration(int64_t val, char unit, int64_t* result, int32_t time
* d - Days (24 hours)
* d - Days (24 hours)
* w - Weeks (7 days)
* w - Weeks (7 days)
*/
*/
int32_t
parseAbsoluteDuration
(
char
*
token
,
int32_t
tokenlen
,
int64_t
*
duration
,
char
*
unit
,
int32_t
timePrecision
)
{
int32_t
parseAbsoluteDuration
(
c
onst
c
har
*
token
,
int32_t
tokenlen
,
int64_t
*
duration
,
char
*
unit
,
int32_t
timePrecision
)
{
errno
=
0
;
errno
=
0
;
char
*
endPtr
=
NULL
;
char
*
endPtr
=
NULL
;
...
...
source/common/src/tvariant.c
浏览文件 @
04057a39
...
@@ -75,7 +75,7 @@ int32_t toInteger(const char* z, int32_t n, int32_t base, int64_t* value, bool*
...
@@ -75,7 +75,7 @@ int32_t toInteger(const char* z, int32_t n, int32_t base, int64_t* value, bool*
return
0
;
return
0
;
}
}
void
taosVariantCreate
(
SVariant
*
pVar
,
char
*
z
,
int32_t
n
,
int32_t
type
)
{
void
taosVariantCreate
(
SVariant
*
pVar
,
c
onst
c
har
*
z
,
int32_t
n
,
int32_t
type
)
{
int32_t
ret
=
0
;
int32_t
ret
=
0
;
memset
(
pVar
,
0
,
sizeof
(
SVariant
));
memset
(
pVar
,
0
,
sizeof
(
SVariant
));
...
...
source/dnode/mgmt/daemon/src/daemon.c
浏览文件 @
04057a39
...
@@ -112,7 +112,7 @@ int dmnReadConfig(const char *path) {
...
@@ -112,7 +112,7 @@ int dmnReadConfig(const char *path) {
return
-
1
;
return
-
1
;
}
}
if
(
taosRead
GlobalCfg
()
!=
0
)
{
if
(
taosRead
CfgFromFile
()
!=
0
)
{
uError
(
"failed to read global config"
);
uError
(
"failed to read global config"
);
return
-
1
;
return
-
1
;
}
}
...
@@ -142,7 +142,6 @@ void dmnInitOption(SDnodeOpt *pOption) {
...
@@ -142,7 +142,6 @@ void dmnInitOption(SDnodeOpt *pOption) {
pOption
->
numOfSupportVnodes
=
1
;
pOption
->
numOfSupportVnodes
=
1
;
pOption
->
numOfSupportQnodes
=
1
;
pOption
->
numOfSupportQnodes
=
1
;
pOption
->
statusInterval
=
tsStatusInterval
;
pOption
->
statusInterval
=
tsStatusInterval
;
pOption
->
mnodeEqualVnodeNum
=
tsMnodeEqualVnodeNum
;
pOption
->
numOfThreadsPerCore
=
tsNumOfThreadsPerCore
;
pOption
->
numOfThreadsPerCore
=
tsNumOfThreadsPerCore
;
pOption
->
ratioOfQueryCores
=
tsRatioOfQueryCores
;
pOption
->
ratioOfQueryCores
=
tsRatioOfQueryCores
;
pOption
->
maxShellConns
=
tsMaxShellConns
;
pOption
->
maxShellConns
=
tsMaxShellConns
;
...
...
source/dnode/mgmt/impl/inc/dndDnode.h
浏览文件 @
04057a39
...
@@ -31,6 +31,7 @@ int32_t dndGetClusterId(SDnode *pDnode);
...
@@ -31,6 +31,7 @@ int32_t dndGetClusterId(SDnode *pDnode);
void
dndGetDnodeEp
(
SDnode
*
pDnode
,
int32_t
dnodeId
,
char
*
pEp
,
char
*
pFqdn
,
uint16_t
*
pPort
);
void
dndGetDnodeEp
(
SDnode
*
pDnode
,
int32_t
dnodeId
,
char
*
pEp
,
char
*
pFqdn
,
uint16_t
*
pPort
);
void
dndGetMnodeEpSet
(
SDnode
*
pDnode
,
SEpSet
*
pEpSet
);
void
dndGetMnodeEpSet
(
SDnode
*
pDnode
,
SEpSet
*
pEpSet
);
void
dndSendRedirectMsg
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
);
void
dndSendRedirectMsg
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
);
void
dndSendStatusMsg
(
SDnode
*
pDnode
);
#ifdef __cplusplus
#ifdef __cplusplus
}
}
...
...
source/dnode/mgmt/impl/inc/dndInt.h
浏览文件 @
04057a39
...
@@ -58,7 +58,8 @@ typedef struct {
...
@@ -58,7 +58,8 @@ typedef struct {
int32_t
dnodeId
;
int32_t
dnodeId
;
int32_t
dropped
;
int32_t
dropped
;
int32_t
clusterId
;
int32_t
clusterId
;
uint32_t
rebootTime
;
int64_t
rebootTime
;
int8_t
statusSent
;
SEpSet
mnodeEpSet
;
SEpSet
mnodeEpSet
;
char
*
file
;
char
*
file
;
SHashObj
*
dnodeHash
;
SHashObj
*
dnodeHash
;
...
@@ -111,6 +112,7 @@ typedef struct SDnode {
...
@@ -111,6 +112,7 @@ typedef struct SDnode {
EStat
stat
;
EStat
stat
;
SDnodeOpt
opt
;
SDnodeOpt
opt
;
SDnodeDir
dir
;
SDnodeDir
dir
;
FileFd
lockFd
;
SDnodeMgmt
dmgmt
;
SDnodeMgmt
dmgmt
;
SMnodeMgmt
mmgmt
;
SMnodeMgmt
mmgmt
;
SVnodesMgmt
vmgmt
;
SVnodesMgmt
vmgmt
;
...
...
source/dnode/mgmt/impl/src/dndDnode.c
浏览文件 @
04057a39
...
@@ -281,9 +281,8 @@ PRASE_DNODE_OVER:
...
@@ -281,9 +281,8 @@ PRASE_DNODE_OVER:
if
(
pMgmt
->
dnodeEps
==
NULL
)
{
if
(
pMgmt
->
dnodeEps
==
NULL
)
{
pMgmt
->
dnodeEps
=
calloc
(
1
,
sizeof
(
SDnodeEps
)
+
sizeof
(
SDnodeEp
));
pMgmt
->
dnodeEps
=
calloc
(
1
,
sizeof
(
SDnodeEps
)
+
sizeof
(
SDnodeEp
));
pMgmt
->
dnodeEps
->
num
=
1
;
pMgmt
->
dnodeEps
->
num
=
1
;
pMgmt
->
dnodeEps
->
eps
[
0
].
isMnode
=
1
;
pMgmt
->
dnodeEps
->
eps
[
0
].
isMnode
=
1
;
pMgmt
->
dnodeEps
->
eps
[
0
].
port
=
pDnode
->
opt
.
serverPort
;
taosGetFqdnPortFromEp
(
pDnode
->
opt
.
firstEp
,
pMgmt
->
dnodeEps
->
eps
[
0
].
fqdn
,
&
pMgmt
->
dnodeEps
->
eps
[
0
].
port
);
tstrncpy
(
pMgmt
->
dnodeEps
->
eps
[
0
].
fqdn
,
pDnode
->
opt
.
localFqdn
,
TSDB_FQDN_LEN
);
}
}
dndResetDnodes
(
pDnode
,
pMgmt
->
dnodeEps
);
dndResetDnodes
(
pDnode
,
pMgmt
->
dnodeEps
);
...
@@ -335,7 +334,7 @@ static int32_t dndWriteDnodes(SDnode *pDnode) {
...
@@ -335,7 +334,7 @@ static int32_t dndWriteDnodes(SDnode *pDnode) {
return
0
;
return
0
;
}
}
static
void
dndSendStatusMsg
(
SDnode
*
pDnode
)
{
void
dndSendStatusMsg
(
SDnode
*
pDnode
)
{
int32_t
contLen
=
sizeof
(
SStatusMsg
)
+
TSDB_MAX_VNODES
*
sizeof
(
SVnodeLoad
);
int32_t
contLen
=
sizeof
(
SStatusMsg
)
+
TSDB_MAX_VNODES
*
sizeof
(
SVnodeLoad
);
SStatusMsg
*
pStatus
=
rpcMallocCont
(
contLen
);
SStatusMsg
*
pStatus
=
rpcMallocCont
(
contLen
);
...
@@ -349,7 +348,7 @@ static void dndSendStatusMsg(SDnode *pDnode) {
...
@@ -349,7 +348,7 @@ static void dndSendStatusMsg(SDnode *pDnode) {
pStatus
->
sver
=
htonl
(
pDnode
->
opt
.
sver
);
pStatus
->
sver
=
htonl
(
pDnode
->
opt
.
sver
);
pStatus
->
dnodeId
=
htonl
(
pMgmt
->
dnodeId
);
pStatus
->
dnodeId
=
htonl
(
pMgmt
->
dnodeId
);
pStatus
->
clusterId
=
htonl
(
pMgmt
->
clusterId
);
pStatus
->
clusterId
=
htonl
(
pMgmt
->
clusterId
);
pStatus
->
rebootTime
=
hto
nl
(
pMgmt
->
rebootTime
);
pStatus
->
rebootTime
=
hto
be64
(
pMgmt
->
rebootTime
);
pStatus
->
numOfCores
=
htons
(
pDnode
->
opt
.
numOfCores
);
pStatus
->
numOfCores
=
htons
(
pDnode
->
opt
.
numOfCores
);
pStatus
->
numOfSupportMnodes
=
htons
(
pDnode
->
opt
.
numOfCores
);
pStatus
->
numOfSupportMnodes
=
htons
(
pDnode
->
opt
.
numOfCores
);
pStatus
->
numOfSupportVnodes
=
htons
(
pDnode
->
opt
.
numOfCores
);
pStatus
->
numOfSupportVnodes
=
htons
(
pDnode
->
opt
.
numOfCores
);
...
@@ -357,7 +356,6 @@ static void dndSendStatusMsg(SDnode *pDnode) {
...
@@ -357,7 +356,6 @@ static void dndSendStatusMsg(SDnode *pDnode) {
tstrncpy
(
pStatus
->
dnodeEp
,
pDnode
->
opt
.
localEp
,
TSDB_EP_LEN
);
tstrncpy
(
pStatus
->
dnodeEp
,
pDnode
->
opt
.
localEp
,
TSDB_EP_LEN
);
pStatus
->
clusterCfg
.
statusInterval
=
htonl
(
pDnode
->
opt
.
statusInterval
);
pStatus
->
clusterCfg
.
statusInterval
=
htonl
(
pDnode
->
opt
.
statusInterval
);
pStatus
->
clusterCfg
.
mnodeEqualVnodeNum
=
htonl
(
pDnode
->
opt
.
mnodeEqualVnodeNum
);
pStatus
->
clusterCfg
.
checkTime
=
0
;
pStatus
->
clusterCfg
.
checkTime
=
0
;
char
timestr
[
32
]
=
"1970-01-01 00:00:00.00"
;
char
timestr
[
32
]
=
"1970-01-01 00:00:00.00"
;
(
void
)
taosParseTime
(
timestr
,
&
pStatus
->
clusterCfg
.
checkTime
,
(
int32_t
)
strlen
(
timestr
),
TSDB_TIME_PRECISION_MILLI
,
0
);
(
void
)
taosParseTime
(
timestr
,
&
pStatus
->
clusterCfg
.
checkTime
,
(
int32_t
)
strlen
(
timestr
),
TSDB_TIME_PRECISION_MILLI
,
0
);
...
@@ -371,6 +369,9 @@ static void dndSendStatusMsg(SDnode *pDnode) {
...
@@ -371,6 +369,9 @@ static void dndSendStatusMsg(SDnode *pDnode) {
contLen
=
sizeof
(
SStatusMsg
)
+
pStatus
->
vnodeLoads
.
num
*
sizeof
(
SVnodeLoad
);
contLen
=
sizeof
(
SStatusMsg
)
+
pStatus
->
vnodeLoads
.
num
*
sizeof
(
SVnodeLoad
);
SRpcMsg
rpcMsg
=
{.
pCont
=
pStatus
,
.
contLen
=
contLen
,
.
msgType
=
TSDB_MSG_TYPE_STATUS
};
SRpcMsg
rpcMsg
=
{.
pCont
=
pStatus
,
.
contLen
=
contLen
,
.
msgType
=
TSDB_MSG_TYPE_STATUS
};
pMgmt
->
statusSent
=
1
;
dTrace
(
"pDnode:%p, send status msg to mnode"
,
pDnode
);
dndSendMsgToMnode
(
pDnode
,
&
rpcMsg
);
dndSendMsgToMnode
(
pDnode
,
&
rpcMsg
);
}
}
...
@@ -383,7 +384,7 @@ static void dndUpdateDnodeCfg(SDnode *pDnode, SDnodeCfg *pCfg) {
...
@@ -383,7 +384,7 @@ static void dndUpdateDnodeCfg(SDnode *pDnode, SDnodeCfg *pCfg) {
pMgmt
->
dnodeId
=
pCfg
->
dnodeId
;
pMgmt
->
dnodeId
=
pCfg
->
dnodeId
;
pMgmt
->
clusterId
=
pCfg
->
clusterId
;
pMgmt
->
clusterId
=
pCfg
->
clusterId
;
pMgmt
->
dropped
=
pCfg
->
dropped
;
pMgmt
->
dropped
=
pCfg
->
dropped
;
(
void
)
dndWriteDnodes
(
pDnode
);
dndWriteDnodes
(
pDnode
);
taosWUnLockLatch
(
&
pMgmt
->
latch
);
taosWUnLockLatch
(
&
pMgmt
->
latch
);
}
}
}
}
...
@@ -409,11 +410,16 @@ static void dndUpdateDnodeEps(SDnode *pDnode, SDnodeEps *pDnodeEps) {
...
@@ -409,11 +410,16 @@ static void dndUpdateDnodeEps(SDnode *pDnode, SDnodeEps *pDnodeEps) {
}
}
static
void
dndProcessStatusRsp
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
)
{
static
void
dndProcessStatusRsp
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
)
{
SDnodeMgmt
*
pMgmt
=
&
pDnode
->
dmgmt
;
if
(
pEpSet
&&
pEpSet
->
numOfEps
>
0
)
{
if
(
pEpSet
&&
pEpSet
->
numOfEps
>
0
)
{
dndUpdateMnodeEpSet
(
pDnode
,
pEpSet
);
dndUpdateMnodeEpSet
(
pDnode
,
pEpSet
);
}
}
if
(
pMsg
->
code
!=
TSDB_CODE_SUCCESS
)
return
;
if
(
pMsg
->
code
!=
TSDB_CODE_SUCCESS
)
{
pMgmt
->
statusSent
=
0
;
return
;
}
SStatusRsp
*
pRsp
=
pMsg
->
pCont
;
SStatusRsp
*
pRsp
=
pMsg
->
pCont
;
SDnodeCfg
*
pCfg
=
&
pRsp
->
dnodeCfg
;
SDnodeCfg
*
pCfg
=
&
pRsp
->
dnodeCfg
;
...
@@ -421,7 +427,10 @@ static void dndProcessStatusRsp(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet) {
...
@@ -421,7 +427,10 @@ static void dndProcessStatusRsp(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet) {
pCfg
->
clusterId
=
htonl
(
pCfg
->
clusterId
);
pCfg
->
clusterId
=
htonl
(
pCfg
->
clusterId
);
dndUpdateDnodeCfg
(
pDnode
,
pCfg
);
dndUpdateDnodeCfg
(
pDnode
,
pCfg
);
if
(
pCfg
->
dropped
)
return
;
if
(
pCfg
->
dropped
)
{
pMgmt
->
statusSent
=
0
;
return
;
}
SDnodeEps
*
pDnodeEps
=
&
pRsp
->
dnodeEps
;
SDnodeEps
*
pDnodeEps
=
&
pRsp
->
dnodeEps
;
pDnodeEps
->
num
=
htonl
(
pDnodeEps
->
num
);
pDnodeEps
->
num
=
htonl
(
pDnodeEps
->
num
);
...
@@ -431,6 +440,7 @@ static void dndProcessStatusRsp(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet) {
...
@@ -431,6 +440,7 @@ static void dndProcessStatusRsp(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet) {
}
}
dndUpdateDnodeEps
(
pDnode
,
pDnodeEps
);
dndUpdateDnodeEps
(
pDnode
,
pDnodeEps
);
pMgmt
->
statusSent
=
0
;
}
}
static
void
dndProcessAuthRsp
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
)
{
assert
(
1
);
}
static
void
dndProcessAuthRsp
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
)
{
assert
(
1
);
}
...
@@ -438,13 +448,12 @@ static void dndProcessAuthRsp(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet) { a
...
@@ -438,13 +448,12 @@ static void dndProcessAuthRsp(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet) { a
static
void
dndProcessGrantRsp
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
)
{
assert
(
1
);
}
static
void
dndProcessGrantRsp
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
)
{
assert
(
1
);
}
static
void
dndProcessConfigDnodeReq
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
)
{
static
void
dndProcessConfigDnodeReq
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
)
{
d
Debug
(
"config msg is received
"
);
d
Error
(
"config msg is received, but not supported yet
"
);
SCfgDnodeMsg
*
pCfg
=
pMsg
->
pCont
;
SCfgDnodeMsg
*
pCfg
=
pMsg
->
pCont
;
int32_t
code
=
TSDB_CODE_OPS_NOT_SUPPORT
;
int32_t
code
=
TSDB_CODE_OPS_NOT_SUPPORT
;
SRpcMsg
rspMsg
=
{.
handle
=
pMsg
->
handle
,
.
pCont
=
NULL
,
.
contLen
=
0
,
.
code
=
code
};
SRpcMsg
rspMsg
=
{.
handle
=
pMsg
->
handle
,
.
pCont
=
NULL
,
.
contLen
=
0
,
.
code
=
code
};
rpcSendResponse
(
&
rspMsg
);
rpcSendResponse
(
&
rspMsg
);
rpcFreeCont
(
pMsg
->
pCont
);
}
}
static
void
dndProcessStartupReq
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
)
{
static
void
dndProcessStartupReq
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
)
{
...
@@ -457,18 +466,18 @@ static void dndProcessStartupReq(SDnode *pDnode, SRpcMsg *pMsg) {
...
@@ -457,18 +466,18 @@ static void dndProcessStartupReq(SDnode *pDnode, SRpcMsg *pMsg) {
SRpcMsg
rpcRsp
=
{.
handle
=
pMsg
->
handle
,
.
pCont
=
pStartup
,
.
contLen
=
sizeof
(
SStartupMsg
)};
SRpcMsg
rpcRsp
=
{.
handle
=
pMsg
->
handle
,
.
pCont
=
pStartup
,
.
contLen
=
sizeof
(
SStartupMsg
)};
rpcSendResponse
(
&
rpcRsp
);
rpcSendResponse
(
&
rpcRsp
);
rpcFreeCont
(
pMsg
->
pCont
);
}
}
static
void
*
dnodeThreadRoutine
(
void
*
param
)
{
static
void
*
dnodeThreadRoutine
(
void
*
param
)
{
SDnode
*
pDnode
=
param
;
SDnode
*
pDnode
=
param
;
int32_t
ms
=
pDnode
->
opt
.
statusInterval
*
1000
;
SDnodeMgmt
*
pMgmt
=
&
pDnode
->
dmgmt
;
int32_t
ms
=
pDnode
->
opt
.
statusInterval
*
1000
;
while
(
true
)
{
while
(
true
)
{
taosMsleep
(
ms
);
pthread_testcancel
();
pthread_testcancel
();
taosMsleep
(
ms
);
if
(
dndGetStat
(
pDnode
)
==
DND_STAT_RUNNING
)
{
if
(
dndGetStat
(
pDnode
)
==
DND_STAT_RUNNING
&&
!
pMgmt
->
statusSent
)
{
dndSendStatusMsg
(
pDnode
);
dndSendStatusMsg
(
pDnode
);
}
}
}
}
...
@@ -478,7 +487,7 @@ int32_t dndInitDnode(SDnode *pDnode) {
...
@@ -478,7 +487,7 @@ int32_t dndInitDnode(SDnode *pDnode) {
SDnodeMgmt
*
pMgmt
=
&
pDnode
->
dmgmt
;
SDnodeMgmt
*
pMgmt
=
&
pDnode
->
dmgmt
;
pMgmt
->
dnodeId
=
0
;
pMgmt
->
dnodeId
=
0
;
pMgmt
->
rebootTime
=
taosGetTimestamp
Sec
();
pMgmt
->
rebootTime
=
taosGetTimestamp
Ms
();
pMgmt
->
dropped
=
0
;
pMgmt
->
dropped
=
0
;
pMgmt
->
clusterId
=
0
;
pMgmt
->
clusterId
=
0
;
...
@@ -556,8 +565,10 @@ void dndProcessDnodeReq(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet) {
...
@@ -556,8 +565,10 @@ void dndProcessDnodeReq(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet) {
dError
(
"RPC %p, dnode req:%s not processed"
,
pMsg
->
handle
,
taosMsg
[
pMsg
->
msgType
]);
dError
(
"RPC %p, dnode req:%s not processed"
,
pMsg
->
handle
,
taosMsg
[
pMsg
->
msgType
]);
SRpcMsg
rspMsg
=
{.
handle
=
pMsg
->
handle
,
.
code
=
TSDB_CODE_MSG_NOT_PROCESSED
};
SRpcMsg
rspMsg
=
{.
handle
=
pMsg
->
handle
,
.
code
=
TSDB_CODE_MSG_NOT_PROCESSED
};
rpcSendResponse
(
&
rspMsg
);
rpcSendResponse
(
&
rspMsg
);
rpcFreeCont
(
pMsg
->
pCont
);
}
}
rpcFreeCont
(
pMsg
->
pCont
);
pMsg
->
pCont
=
NULL
;
}
}
void
dndProcessDnodeRsp
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
)
{
void
dndProcessDnodeRsp
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
)
{
...
@@ -574,4 +585,7 @@ void dndProcessDnodeRsp(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet) {
...
@@ -574,4 +585,7 @@ void dndProcessDnodeRsp(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet) {
default:
default:
dError
(
"RPC %p, dnode rsp:%s not processed"
,
pMsg
->
handle
,
taosMsg
[
pMsg
->
msgType
]);
dError
(
"RPC %p, dnode rsp:%s not processed"
,
pMsg
->
handle
,
taosMsg
[
pMsg
->
msgType
]);
}
}
rpcFreeCont
(
pMsg
->
pCont
);
pMsg
->
pCont
=
NULL
;
}
}
source/dnode/mgmt/impl/src/dndMnode.c
浏览文件 @
04057a39
...
@@ -334,7 +334,6 @@ static void dndInitMnodeOption(SDnode *pDnode, SMnodeOpt *pOption) {
...
@@ -334,7 +334,6 @@ static void dndInitMnodeOption(SDnode *pDnode, SMnodeOpt *pOption) {
pOption
->
cfg
.
sver
=
pDnode
->
opt
.
sver
;
pOption
->
cfg
.
sver
=
pDnode
->
opt
.
sver
;
pOption
->
cfg
.
enableTelem
=
pDnode
->
opt
.
enableTelem
;
pOption
->
cfg
.
enableTelem
=
pDnode
->
opt
.
enableTelem
;
pOption
->
cfg
.
statusInterval
=
pDnode
->
opt
.
statusInterval
;
pOption
->
cfg
.
statusInterval
=
pDnode
->
opt
.
statusInterval
;
pOption
->
cfg
.
mnodeEqualVnodeNum
=
pDnode
->
opt
.
mnodeEqualVnodeNum
;
pOption
->
cfg
.
shellActivityTimer
=
pDnode
->
opt
.
shellActivityTimer
;
pOption
->
cfg
.
shellActivityTimer
=
pDnode
->
opt
.
shellActivityTimer
;
pOption
->
cfg
.
timezone
=
pDnode
->
opt
.
timezone
;
pOption
->
cfg
.
timezone
=
pDnode
->
opt
.
timezone
;
pOption
->
cfg
.
charset
=
pDnode
->
opt
.
charset
;
pOption
->
cfg
.
charset
=
pDnode
->
opt
.
charset
;
...
@@ -560,9 +559,12 @@ static void dndProcessMnodeMgmtQueue(SDnode *pDnode, SRpcMsg *pMsg) {
...
@@ -560,9 +559,12 @@ static void dndProcessMnodeMgmtQueue(SDnode *pDnode, SRpcMsg *pMsg) {
break
;
break
;
}
}
SRpcMsg
rsp
=
{.
code
=
code
,
.
handle
=
pMsg
->
handle
};
if
(
pMsg
->
msgType
&
1u
)
{
rpcSendResponse
(
&
rsp
);
SRpcMsg
rsp
=
{.
code
=
code
,
.
handle
=
pMsg
->
handle
};
rpcSendResponse
(
&
rsp
);
}
rpcFreeCont
(
pMsg
->
pCont
);
rpcFreeCont
(
pMsg
->
pCont
);
pMsg
->
pCont
=
NULL
;
taosFreeQitem
(
pMsg
);
taosFreeQitem
(
pMsg
);
}
}
...
@@ -646,9 +648,12 @@ void dndProcessMnodeMgmtMsg(SDnode *pDnode, SRpcMsg *pRpcMsg, SEpSet *pEpSet) {
...
@@ -646,9 +648,12 @@ void dndProcessMnodeMgmtMsg(SDnode *pDnode, SRpcMsg *pRpcMsg, SEpSet *pEpSet) {
SRpcMsg
*
pMsg
=
taosAllocateQitem
(
sizeof
(
SRpcMsg
));
SRpcMsg
*
pMsg
=
taosAllocateQitem
(
sizeof
(
SRpcMsg
));
if
(
pMsg
==
NULL
||
taosWriteQitem
(
pMgmt
->
pMgmtQ
,
pMsg
)
!=
0
)
{
if
(
pMsg
==
NULL
||
taosWriteQitem
(
pMgmt
->
pMgmtQ
,
pMsg
)
!=
0
)
{
SRpcMsg
rsp
=
{.
handle
=
pRpcMsg
->
handle
,
.
code
=
TSDB_CODE_OUT_OF_MEMORY
};
if
(
pRpcMsg
->
msgType
&
1u
)
{
rpcSendResponse
(
&
rsp
);
SRpcMsg
rsp
=
{.
handle
=
pRpcMsg
->
handle
,
.
code
=
TSDB_CODE_OUT_OF_MEMORY
};
rpcSendResponse
(
&
rsp
);
}
rpcFreeCont
(
pRpcMsg
->
pCont
);
rpcFreeCont
(
pRpcMsg
->
pCont
);
pRpcMsg
->
pCont
=
NULL
;
taosFreeQitem
(
pMsg
);
taosFreeQitem
(
pMsg
);
}
}
}
}
...
@@ -657,9 +662,12 @@ void dndProcessMnodeWriteMsg(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet) {
...
@@ -657,9 +662,12 @@ void dndProcessMnodeWriteMsg(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet) {
SMnodeMgmt
*
pMgmt
=
&
pDnode
->
mmgmt
;
SMnodeMgmt
*
pMgmt
=
&
pDnode
->
mmgmt
;
SMnode
*
pMnode
=
dndAcquireMnode
(
pDnode
);
SMnode
*
pMnode
=
dndAcquireMnode
(
pDnode
);
if
(
pMnode
==
NULL
||
dndWriteMnodeMsgToQueue
(
pMnode
,
pMgmt
->
pWriteQ
,
pMsg
)
!=
0
)
{
if
(
pMnode
==
NULL
||
dndWriteMnodeMsgToQueue
(
pMnode
,
pMgmt
->
pWriteQ
,
pMsg
)
!=
0
)
{
SRpcMsg
rsp
=
{.
handle
=
pMsg
->
handle
,
.
code
=
terrno
};
if
(
pMsg
->
msgType
&
1u
)
{
rpcSendResponse
(
&
rsp
);
SRpcMsg
rsp
=
{.
handle
=
pMsg
->
handle
,
.
code
=
terrno
};
rpcSendResponse
(
&
rsp
);
}
rpcFreeCont
(
pMsg
->
pCont
);
rpcFreeCont
(
pMsg
->
pCont
);
pMsg
->
pCont
=
NULL
;
}
}
dndReleaseMnode
(
pDnode
,
pMnode
);
dndReleaseMnode
(
pDnode
,
pMnode
);
...
@@ -669,9 +677,12 @@ void dndProcessMnodeSyncMsg(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet) {
...
@@ -669,9 +677,12 @@ void dndProcessMnodeSyncMsg(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet) {
SMnodeMgmt
*
pMgmt
=
&
pDnode
->
mmgmt
;
SMnodeMgmt
*
pMgmt
=
&
pDnode
->
mmgmt
;
SMnode
*
pMnode
=
dndAcquireMnode
(
pDnode
);
SMnode
*
pMnode
=
dndAcquireMnode
(
pDnode
);
if
(
pMnode
==
NULL
||
dndWriteMnodeMsgToQueue
(
pMnode
,
pMgmt
->
pSyncQ
,
pMsg
)
!=
0
)
{
if
(
pMnode
==
NULL
||
dndWriteMnodeMsgToQueue
(
pMnode
,
pMgmt
->
pSyncQ
,
pMsg
)
!=
0
)
{
SRpcMsg
rsp
=
{.
handle
=
pMsg
->
handle
,
.
code
=
terrno
};
if
(
pMsg
->
msgType
&
1u
)
{
rpcSendResponse
(
&
rsp
);
SRpcMsg
rsp
=
{.
handle
=
pMsg
->
handle
,
.
code
=
terrno
};
rpcSendResponse
(
&
rsp
);
}
rpcFreeCont
(
pMsg
->
pCont
);
rpcFreeCont
(
pMsg
->
pCont
);
pMsg
->
pCont
=
NULL
;
}
}
dndReleaseMnode
(
pDnode
,
pMnode
);
dndReleaseMnode
(
pDnode
,
pMnode
);
...
@@ -681,9 +692,12 @@ void dndProcessMnodeReadMsg(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet) {
...
@@ -681,9 +692,12 @@ void dndProcessMnodeReadMsg(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet) {
SMnodeMgmt
*
pMgmt
=
&
pDnode
->
mmgmt
;
SMnodeMgmt
*
pMgmt
=
&
pDnode
->
mmgmt
;
SMnode
*
pMnode
=
dndAcquireMnode
(
pDnode
);
SMnode
*
pMnode
=
dndAcquireMnode
(
pDnode
);
if
(
pMnode
==
NULL
||
dndWriteMnodeMsgToQueue
(
pMnode
,
pMgmt
->
pReadQ
,
pMsg
)
!=
0
)
{
if
(
pMnode
==
NULL
||
dndWriteMnodeMsgToQueue
(
pMnode
,
pMgmt
->
pReadQ
,
pMsg
)
!=
0
)
{
SRpcMsg
rsp
=
{.
handle
=
pMsg
->
handle
,
.
code
=
terrno
};
if
(
pMsg
->
msgType
&
1u
)
{
rpcSendResponse
(
&
rsp
);
SRpcMsg
rsp
=
{.
handle
=
pMsg
->
handle
,
.
code
=
terrno
};
rpcSendResponse
(
&
rsp
);
}
rpcFreeCont
(
pMsg
->
pCont
);
rpcFreeCont
(
pMsg
->
pCont
);
pMsg
->
pCont
=
NULL
;
}
}
dndReleaseMnode
(
pDnode
,
pMnode
);
dndReleaseMnode
(
pDnode
,
pMnode
);
...
...
source/dnode/mgmt/impl/src/dndTransport.c
浏览文件 @
04057a39
...
@@ -69,10 +69,10 @@ static void dndInitMsgFp(STransMgmt *pMgmt) {
...
@@ -69,10 +69,10 @@ static void dndInitMsgFp(STransMgmt *pMgmt) {
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_CREATE_FUNCTION
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_CREATE_FUNCTION
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_RETRIEVE_FUNCTION
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_RETRIEVE_FUNCTION
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_DROP_FUNCTION
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_DROP_FUNCTION
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_CREATE_ST
ABLE
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_CREATE_ST
B
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_ALTER_ST
ABLE
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_ALTER_ST
B
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_DROP_ST
ABLE
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_DROP_ST
B
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_ST
ABLE
_VGROUP
]
=
dndProcessMnodeReadMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_ST
B
_VGROUP
]
=
dndProcessMnodeReadMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_KILL_QUERY
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_KILL_QUERY
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_KILL_STREAM
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_KILL_STREAM
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_KILL_CONN
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_KILL_CONN
]
=
dndProcessMnodeWriteMsg
;
...
@@ -84,12 +84,12 @@ static void dndInitMsgFp(STransMgmt *pMgmt) {
...
@@ -84,12 +84,12 @@ static void dndInitMsgFp(STransMgmt *pMgmt) {
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_NETWORK_TEST
]
=
dndProcessDnodeReq
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_NETWORK_TEST
]
=
dndProcessDnodeReq
;
// message from mnode to vnode
// message from mnode to vnode
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_CREATE_ST
ABLE
_IN
]
=
dndProcessVnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_CREATE_ST
B
_IN
]
=
dndProcessVnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_CREATE_ST
ABLE
_IN_RSP
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_CREATE_ST
B
_IN_RSP
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_ALTER_ST
ABLE
_IN
]
=
dndProcessVnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_ALTER_ST
B
_IN
]
=
dndProcessVnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_ALTER_ST
ABLE
_IN_RSP
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_ALTER_ST
B
_IN_RSP
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_DROP_ST
ABLE
_IN
]
=
dndProcessVnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_DROP_ST
B
_IN
]
=
dndProcessVnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_DROP_ST
ABLE
_IN_RSP
]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_DROP_ST
B
_IN_RSP
]
=
dndProcessMnodeWriteMsg
;
// message from mnode to dnode
// message from mnode to dnode
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_CREATE_VNODE_IN
]
=
dndProcessVnodeMgmtMsg
;
pMgmt
->
msgFp
[
TSDB_MSG_TYPE_CREATE_VNODE_IN
]
=
dndProcessVnodeMgmtMsg
;
...
@@ -130,7 +130,7 @@ static void dndProcessResponse(void *parent, SRpcMsg *pMsg, SEpSet *pEpSet) {
...
@@ -130,7 +130,7 @@ static void dndProcessResponse(void *parent, SRpcMsg *pMsg, SEpSet *pEpSet) {
if
(
dndGetStat
(
pDnode
)
==
DND_STAT_STOPPED
)
{
if
(
dndGetStat
(
pDnode
)
==
DND_STAT_STOPPED
)
{
if
(
pMsg
==
NULL
||
pMsg
->
pCont
==
NULL
)
return
;
if
(
pMsg
==
NULL
||
pMsg
->
pCont
==
NULL
)
return
;
dTrace
(
"RPC %p, rsp:%s
app:%p is ignored since dnode is stopping"
,
pMsg
->
handle
,
taosMsg
[
msgType
],
pMsg
->
ahandle
);
dTrace
(
"RPC %p, rsp:%s
is ignored since dnode is stopping"
,
pMsg
->
handle
,
taosMsg
[
msgType
]
);
rpcFreeCont
(
pMsg
->
pCont
);
rpcFreeCont
(
pMsg
->
pCont
);
return
;
return
;
}
}
...
@@ -138,12 +138,11 @@ static void dndProcessResponse(void *parent, SRpcMsg *pMsg, SEpSet *pEpSet) {
...
@@ -138,12 +138,11 @@ static void dndProcessResponse(void *parent, SRpcMsg *pMsg, SEpSet *pEpSet) {
DndMsgFp
fp
=
pMgmt
->
msgFp
[
msgType
];
DndMsgFp
fp
=
pMgmt
->
msgFp
[
msgType
];
if
(
fp
!=
NULL
)
{
if
(
fp
!=
NULL
)
{
(
*
fp
)(
pDnode
,
pMsg
,
pEpSet
);
(
*
fp
)(
pDnode
,
pMsg
,
pEpSet
);
dTrace
(
"RPC %p, rsp:%s app:%p is processed, code:0x%0X"
,
pMsg
->
handle
,
taosMsg
[
msgType
],
pMsg
->
ahandle
,
dTrace
(
"RPC %p, rsp:%s is processed, code:0x%0X"
,
pMsg
->
handle
,
taosMsg
[
msgType
],
pMsg
->
code
&
0XFFFF
);
pMsg
->
code
&
0XFFFF
);
}
else
{
}
else
{
dError
(
"RPC %p, rsp:%s app:%p not processed"
,
pMsg
->
handle
,
taosMsg
[
msgType
],
pMsg
->
ahandle
);
dError
(
"RPC %p, rsp:%s not processed"
,
pMsg
->
handle
,
taosMsg
[
msgType
]);
rpcFreeCont
(
pMsg
->
pCont
);
}
}
rpcFreeCont
(
pMsg
->
pCont
);
}
}
static
int32_t
dndInitClient
(
SDnode
*
pDnode
)
{
static
int32_t
dndInitClient
(
SDnode
*
pDnode
)
{
...
...
source/dnode/mgmt/impl/src/dnode.c
浏览文件 @
04057a39
...
@@ -55,30 +55,31 @@ void dndGetStartup(SDnode *pDnode, SStartupMsg *pStartup) {
...
@@ -55,30 +55,31 @@ void dndGetStartup(SDnode *pDnode, SStartupMsg *pStartup) {
pStartup
->
finished
=
(
dndGetStat
(
pDnode
)
==
DND_STAT_RUNNING
);
pStartup
->
finished
=
(
dndGetStat
(
pDnode
)
==
DND_STAT_RUNNING
);
}
}
static
int32_t
dndCheckRunning
(
char
*
dataDir
)
{
static
FileFd
dndCheckRunning
(
char
*
dataDir
)
{
char
filepath
[
PATH_MAX
]
=
{
0
};
char
filepath
[
PATH_MAX
]
=
{
0
};
snprintf
(
filepath
,
sizeof
(
filepath
),
"%s/.running"
,
dataDir
);
snprintf
(
filepath
,
sizeof
(
filepath
),
"%s/.running"
,
dataDir
);
FileFd
fd
=
taosOpenFileCreateWriteTrunc
(
filepath
);
FileFd
fd
=
taosOpenFileCreateWriteTrunc
(
filepath
);
if
(
fd
<
0
)
{
if
(
fd
<
0
)
{
dError
(
"failed to lock file:%s since %s, quit"
,
filepath
,
strerror
(
errno
));
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
dError
(
"failed to lock file:%s since %s, quit"
,
filepath
,
terrstr
());
return
-
1
;
return
-
1
;
}
}
int32_t
ret
=
taosLockFile
(
fd
);
int32_t
ret
=
taosLockFile
(
fd
);
if
(
ret
!=
0
)
{
if
(
ret
!=
0
)
{
dError
(
"failed to lock file:%s since %s, quit"
,
filepath
,
strerror
(
errno
));
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
dError
(
"failed to lock file:%s since %s, quit"
,
filepath
,
terrstr
());
taosCloseFile
(
fd
);
taosCloseFile
(
fd
);
return
-
1
;
return
-
1
;
}
}
return
0
;
return
fd
;
}
}
static
int32_t
dndInitEnv
(
SDnode
*
pDnode
,
SDnodeOpt
*
pOption
)
{
static
int32_t
dndInitEnv
(
SDnode
*
pDnode
,
SDnodeOpt
*
pOption
)
{
if
(
dndCheckRunning
(
pOption
->
dataDir
)
!=
0
)
{
pDnode
->
lockFd
=
dndCheckRunning
(
pOption
->
dataDir
);
if
(
pDnode
->
lockFd
<
0
)
{
return
-
1
;
return
-
1
;
}
}
...
@@ -133,6 +134,12 @@ static void dndCleanupEnv(SDnode *pDnode) {
...
@@ -133,6 +134,12 @@ static void dndCleanupEnv(SDnode *pDnode) {
tfree
(
pDnode
->
dir
.
dnode
);
tfree
(
pDnode
->
dir
.
dnode
);
}
}
if
(
pDnode
->
lockFd
>=
0
)
{
taosUnLockFile
(
pDnode
->
lockFd
);
taosCloseFile
(
pDnode
->
lockFd
);
pDnode
->
lockFd
=
0
;
}
taosStopCacheRefreshWorker
();
taosStopCacheRefreshWorker
();
}
}
...
@@ -194,13 +201,16 @@ SDnode *dndInit(SDnodeOpt *pOption) {
...
@@ -194,13 +201,16 @@ SDnode *dndInit(SDnodeOpt *pOption) {
}
}
dndSetStat
(
pDnode
,
DND_STAT_RUNNING
);
dndSetStat
(
pDnode
,
DND_STAT_RUNNING
);
dndSendStatusMsg
(
pDnode
);
dndReportStartup
(
pDnode
,
"TDengine"
,
"initialized successfully"
);
dndReportStartup
(
pDnode
,
"TDengine"
,
"initialized successfully"
);
dInfo
(
"TDengine is initialized successfully
"
);
dInfo
(
"TDengine is initialized successfully
, pDnode:%p"
,
pDnode
);
return
pDnode
;
return
pDnode
;
}
}
void
dndCleanup
(
SDnode
*
pDnode
)
{
void
dndCleanup
(
SDnode
*
pDnode
)
{
if
(
pDnode
==
NULL
)
return
;
if
(
dndGetStat
(
pDnode
)
==
DND_STAT_STOPPED
)
{
if
(
dndGetStat
(
pDnode
)
==
DND_STAT_STOPPED
)
{
dError
(
"dnode is shutting down"
);
dError
(
"dnode is shutting down"
);
return
;
return
;
...
...
source/dnode/mgmt/impl/test/CMakeLists.txt
浏览文件 @
04057a39
# add_subdirectory(acct)
# add_subdirectory(acct)
# add_subdirectory(cluster)
# add_subdirectory(cluster)
add_subdirectory
(
dnode
)
# add_subdirectory(profile)
# add_subdirectory(profile)
# add_subdirectory(show)
# add_subdirectory(show)
add_subdirectory
(
user
)
add_subdirectory
(
user
)
source/dnode/mgmt/impl/test/acct/acct.cpp
浏览文件 @
04057a39
...
@@ -33,7 +33,7 @@ class DndTestAcct : public ::testing::Test {
...
@@ -33,7 +33,7 @@ class DndTestAcct : public ::testing::Test {
}
}
static
void
TearDownTestSuite
()
{
static
void
TearDownTestSuite
()
{
dr
opServer
(
pServer
);
st
opServer
(
pServer
);
dropClient
(
pClient
);
dropClient
(
pClient
);
}
}
...
...
source/dnode/mgmt/impl/test/cluster/cluster.cpp
浏览文件 @
04057a39
...
@@ -33,7 +33,7 @@ class DndTestCluster : public ::testing::Test {
...
@@ -33,7 +33,7 @@ class DndTestCluster : public ::testing::Test {
}
}
static
void
TearDownTestSuite
()
{
static
void
TearDownTestSuite
()
{
dr
opServer
(
pServer
);
st
opServer
(
pServer
);
dropClient
(
pClient
);
dropClient
(
pClient
);
}
}
...
@@ -80,7 +80,7 @@ TEST_F(DndTestCluster, ShowCluster) {
...
@@ -80,7 +80,7 @@ TEST_F(DndTestCluster, ShowCluster) {
EXPECT_NE
(
pRsp
->
showId
,
0
);
EXPECT_NE
(
pRsp
->
showId
,
0
);
EXPECT_EQ
(
pMeta
->
contLen
,
0
);
EXPECT_EQ
(
pMeta
->
contLen
,
0
);
EXPECT_STREQ
(
pMeta
->
t
able
Fname
,
"show cluster"
);
EXPECT_STREQ
(
pMeta
->
t
b
Fname
,
"show cluster"
);
EXPECT_EQ
(
pMeta
->
numOfTags
,
0
);
EXPECT_EQ
(
pMeta
->
numOfTags
,
0
);
EXPECT_EQ
(
pMeta
->
precision
,
0
);
EXPECT_EQ
(
pMeta
->
precision
,
0
);
EXPECT_EQ
(
pMeta
->
tableType
,
0
);
EXPECT_EQ
(
pMeta
->
tableType
,
0
);
...
...
source/dnode/mgmt/impl/test/dnode/CMakeLists.txt
0 → 100644
浏览文件 @
04057a39
add_executable
(
dndTestDnode
""
)
target_sources
(
dndTestDnode
PRIVATE
"dnode.cpp"
"../sut/deploy.cpp"
)
target_link_libraries
(
dndTestDnode
PUBLIC dnode
PUBLIC util
PUBLIC os
PUBLIC gtest_main
)
target_include_directories
(
dndTestDnode
PUBLIC
"
${
CMAKE_SOURCE_DIR
}
/include/server/dnode/mgmt"
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/../../inc"
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/../sut"
)
enable_testing
()
add_test
(
NAME dndTestDnode
COMMAND dndTestDnode
)
source/dnode/mgmt/impl/test/dnode/dnode.cpp
0 → 100644
浏览文件 @
04057a39
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "deploy.h"
class
DndTestDnode
:
public
::
testing
::
Test
{
public:
static
SServer
*
CreateServer
(
const
char
*
path
,
const
char
*
fqdn
,
uint16_t
port
,
const
char
*
firstEp
)
{
SServer
*
pServer
=
createServer
(
path
,
fqdn
,
port
,
firstEp
);
ASSERT
(
pServer
);
return
pServer
;
}
static
void
SetUpTestSuite
()
{
initLog
(
"/tmp/dndTestDnode"
);
const
char
*
fqdn
=
"localhost"
;
const
char
*
firstEp
=
"localhost:9521"
;
pServer1
=
CreateServer
(
"/tmp/dndTestDnode1"
,
fqdn
,
9521
,
firstEp
);
pServer2
=
CreateServer
(
"/tmp/dndTestDnode2"
,
fqdn
,
9522
,
firstEp
);
pServer3
=
CreateServer
(
"/tmp/dndTestDnode3"
,
fqdn
,
9523
,
firstEp
);
pServer4
=
CreateServer
(
"/tmp/dndTestDnode4"
,
fqdn
,
9524
,
firstEp
);
pServer5
=
CreateServer
(
"/tmp/dndTestDnode5"
,
fqdn
,
9525
,
firstEp
);
pClient
=
createClient
(
"root"
,
"taosdata"
,
fqdn
,
9521
);
taosMsleep
(
300
);
}
static
void
TearDownTestSuite
()
{
stopServer
(
pServer1
);
stopServer
(
pServer2
);
stopServer
(
pServer3
);
stopServer
(
pServer4
);
stopServer
(
pServer5
);
dropClient
(
pClient
);
pServer1
=
NULL
;
pServer2
=
NULL
;
pServer3
=
NULL
;
pServer4
=
NULL
;
pServer5
=
NULL
;
pClient
=
NULL
;
}
static
SServer
*
pServer1
;
static
SServer
*
pServer2
;
static
SServer
*
pServer3
;
static
SServer
*
pServer4
;
static
SServer
*
pServer5
;
static
SClient
*
pClient
;
public:
void
SetUp
()
override
{}
void
TearDown
()
override
{}
void
SendTheCheckShowMetaMsg
(
int8_t
showType
,
const
char
*
showName
,
int32_t
columns
)
{
SShowMsg
*
pShow
=
(
SShowMsg
*
)
rpcMallocCont
(
sizeof
(
SShowMsg
));
pShow
->
type
=
showType
;
strcpy
(
pShow
->
db
,
""
);
SRpcMsg
showRpcMsg
=
{
0
};
showRpcMsg
.
pCont
=
pShow
;
showRpcMsg
.
contLen
=
sizeof
(
SShowMsg
);
showRpcMsg
.
msgType
=
TSDB_MSG_TYPE_SHOW
;
sendMsg
(
pClient
,
&
showRpcMsg
);
ASSERT_NE
(
pClient
->
pRsp
,
nullptr
);
ASSERT_EQ
(
pClient
->
pRsp
->
code
,
0
);
ASSERT_NE
(
pClient
->
pRsp
->
pCont
,
nullptr
);
SShowRsp
*
pShowRsp
=
(
SShowRsp
*
)
pClient
->
pRsp
->
pCont
;
ASSERT_NE
(
pShowRsp
,
nullptr
);
pShowRsp
->
showId
=
htonl
(
pShowRsp
->
showId
);
pMeta
=
&
pShowRsp
->
tableMeta
;
pMeta
->
numOfTags
=
htons
(
pMeta
->
numOfTags
);
pMeta
->
numOfColumns
=
htons
(
pMeta
->
numOfColumns
);
pMeta
->
sversion
=
htons
(
pMeta
->
sversion
);
pMeta
->
tversion
=
htons
(
pMeta
->
tversion
);
pMeta
->
tuid
=
htobe64
(
pMeta
->
tuid
);
pMeta
->
suid
=
htobe64
(
pMeta
->
suid
);
showId
=
pShowRsp
->
showId
;
EXPECT_NE
(
pShowRsp
->
showId
,
0
);
EXPECT_STREQ
(
pMeta
->
tbFname
,
showName
);
EXPECT_EQ
(
pMeta
->
numOfTags
,
0
);
EXPECT_EQ
(
pMeta
->
numOfColumns
,
columns
);
EXPECT_EQ
(
pMeta
->
precision
,
0
);
EXPECT_EQ
(
pMeta
->
tableType
,
0
);
EXPECT_EQ
(
pMeta
->
update
,
0
);
EXPECT_EQ
(
pMeta
->
sversion
,
0
);
EXPECT_EQ
(
pMeta
->
tversion
,
0
);
EXPECT_EQ
(
pMeta
->
tuid
,
0
);
EXPECT_EQ
(
pMeta
->
suid
,
0
);
}
void
CheckSchema
(
int32_t
index
,
int8_t
type
,
int32_t
bytes
,
const
char
*
name
)
{
SSchema
*
pSchema
=
&
pMeta
->
pSchema
[
index
];
pSchema
->
bytes
=
htons
(
pSchema
->
bytes
);
EXPECT_EQ
(
pSchema
->
colId
,
0
);
EXPECT_EQ
(
pSchema
->
type
,
type
);
EXPECT_EQ
(
pSchema
->
bytes
,
bytes
);
EXPECT_STREQ
(
pSchema
->
name
,
name
);
}
void
SendThenCheckShowRetrieveMsg
(
int32_t
rows
)
{
SRetrieveTableMsg
*
pRetrieve
=
(
SRetrieveTableMsg
*
)
rpcMallocCont
(
sizeof
(
SRetrieveTableMsg
));
pRetrieve
->
showId
=
htonl
(
showId
);
pRetrieve
->
free
=
0
;
SRpcMsg
retrieveRpcMsg
=
{
0
};
retrieveRpcMsg
.
pCont
=
pRetrieve
;
retrieveRpcMsg
.
contLen
=
sizeof
(
SRetrieveTableMsg
);
retrieveRpcMsg
.
msgType
=
TSDB_MSG_TYPE_SHOW_RETRIEVE
;
sendMsg
(
pClient
,
&
retrieveRpcMsg
);
ASSERT_NE
(
pClient
->
pRsp
,
nullptr
);
ASSERT_EQ
(
pClient
->
pRsp
->
code
,
0
);
ASSERT_NE
(
pClient
->
pRsp
->
pCont
,
nullptr
);
pRetrieveRsp
=
(
SRetrieveTableRsp
*
)
pClient
->
pRsp
->
pCont
;
ASSERT_NE
(
pRetrieveRsp
,
nullptr
);
pRetrieveRsp
->
numOfRows
=
htonl
(
pRetrieveRsp
->
numOfRows
);
pRetrieveRsp
->
offset
=
htobe64
(
pRetrieveRsp
->
offset
);
pRetrieveRsp
->
useconds
=
htobe64
(
pRetrieveRsp
->
useconds
);
pRetrieveRsp
->
compLen
=
htonl
(
pRetrieveRsp
->
compLen
);
EXPECT_EQ
(
pRetrieveRsp
->
numOfRows
,
rows
);
EXPECT_EQ
(
pRetrieveRsp
->
offset
,
0
);
EXPECT_EQ
(
pRetrieveRsp
->
useconds
,
0
);
// EXPECT_EQ(pRetrieveRsp->completed, completed);
EXPECT_EQ
(
pRetrieveRsp
->
precision
,
TSDB_TIME_PRECISION_MILLI
);
EXPECT_EQ
(
pRetrieveRsp
->
compressed
,
0
);
EXPECT_EQ
(
pRetrieveRsp
->
reserved
,
0
);
EXPECT_EQ
(
pRetrieveRsp
->
compLen
,
0
);
pData
=
pRetrieveRsp
->
data
;
pos
=
0
;
}
void
CheckInt16
(
int16_t
val
)
{
int16_t
data
=
*
((
int16_t
*
)(
pData
+
pos
));
pos
+=
sizeof
(
int16_t
);
EXPECT_EQ
(
data
,
val
);
}
void
CheckInt64
(
int64_t
val
)
{
int64_t
data
=
*
((
int64_t
*
)(
pData
+
pos
));
pos
+=
sizeof
(
int64_t
);
EXPECT_EQ
(
data
,
val
);
}
void
CheckTimestamp
()
{
int64_t
data
=
*
((
int64_t
*
)(
pData
+
pos
));
pos
+=
sizeof
(
int64_t
);
EXPECT_GT
(
data
,
0
);
}
void
CheckBinary
(
const
char
*
val
,
int32_t
len
)
{
pos
+=
sizeof
(
VarDataLenT
);
char
*
data
=
(
char
*
)(
pData
+
pos
);
pos
+=
len
;
EXPECT_STREQ
(
data
,
val
);
}
int32_t
showId
;
STableMetaMsg
*
pMeta
;
SRetrieveTableRsp
*
pRetrieveRsp
;
char
*
pData
;
int32_t
pos
;
};
SServer
*
DndTestDnode
::
pServer1
;
SServer
*
DndTestDnode
::
pServer2
;
SServer
*
DndTestDnode
::
pServer3
;
SServer
*
DndTestDnode
::
pServer4
;
SServer
*
DndTestDnode
::
pServer5
;
SClient
*
DndTestDnode
::
pClient
;
TEST_F
(
DndTestDnode
,
ShowDnode
)
{
SendTheCheckShowMetaMsg
(
TSDB_MGMT_TABLE_DNODE
,
"show dnodes"
,
7
);
CheckSchema
(
0
,
TSDB_DATA_TYPE_SMALLINT
,
2
,
"id"
);
CheckSchema
(
1
,
TSDB_DATA_TYPE_BINARY
,
TSDB_EP_LEN
+
VARSTR_HEADER_SIZE
,
"end point"
);
CheckSchema
(
2
,
TSDB_DATA_TYPE_SMALLINT
,
2
,
"vnodes"
);
CheckSchema
(
3
,
TSDB_DATA_TYPE_SMALLINT
,
2
,
"max vnodes"
);
CheckSchema
(
4
,
TSDB_DATA_TYPE_BINARY
,
10
+
VARSTR_HEADER_SIZE
,
"status"
);
CheckSchema
(
5
,
TSDB_DATA_TYPE_TIMESTAMP
,
8
,
"create time"
);
CheckSchema
(
6
,
TSDB_DATA_TYPE_BINARY
,
24
+
VARSTR_HEADER_SIZE
,
"offline reason"
);
SendThenCheckShowRetrieveMsg
(
1
);
CheckInt16
(
1
);
CheckBinary
(
"localhost:9521"
,
TSDB_EP_LEN
);
CheckInt16
(
0
);
CheckInt16
(
1
);
CheckBinary
(
"ready"
,
10
);
CheckTimestamp
();
CheckBinary
(
""
,
24
);
}
TEST_F
(
DndTestDnode
,
ConfigDnode_01
)
{
SCfgDnodeMsg
*
pReq
=
(
SCfgDnodeMsg
*
)
rpcMallocCont
(
sizeof
(
SCfgDnodeMsg
));
pReq
->
dnodeId
=
htonl
(
1
);
strcpy
(
pReq
->
config
,
"ddebugflag 131"
);
SRpcMsg
rpcMsg
=
{
0
};
rpcMsg
.
pCont
=
pReq
;
rpcMsg
.
contLen
=
sizeof
(
SCfgDnodeMsg
);
rpcMsg
.
msgType
=
TSDB_MSG_TYPE_CONFIG_DNODE
;
sendMsg
(
pClient
,
&
rpcMsg
);
SRpcMsg
*
pMsg
=
pClient
->
pRsp
;
ASSERT_NE
(
pMsg
,
nullptr
);
ASSERT_EQ
(
pMsg
->
code
,
0
);
}
TEST_F
(
DndTestDnode
,
CreateDnode_01
)
{
SCreateDnodeMsg
*
pReq
=
(
SCreateDnodeMsg
*
)
rpcMallocCont
(
sizeof
(
SCreateDnodeMsg
));
strcpy
(
pReq
->
ep
,
"localhost:9522"
);
SRpcMsg
rpcMsg
=
{
0
};
rpcMsg
.
pCont
=
pReq
;
rpcMsg
.
contLen
=
sizeof
(
SCreateDnodeMsg
);
rpcMsg
.
msgType
=
TSDB_MSG_TYPE_CREATE_DNODE
;
sendMsg
(
pClient
,
&
rpcMsg
);
SRpcMsg
*
pMsg
=
pClient
->
pRsp
;
ASSERT_NE
(
pMsg
,
nullptr
);
ASSERT_EQ
(
pMsg
->
code
,
0
);
taosMsleep
(
1300
);
SendTheCheckShowMetaMsg
(
TSDB_MGMT_TABLE_DNODE
,
"show dnodes"
,
7
);
SendThenCheckShowRetrieveMsg
(
2
);
CheckInt16
(
1
);
CheckInt16
(
2
);
CheckBinary
(
"localhost:9521"
,
TSDB_EP_LEN
);
CheckBinary
(
"localhost:9522"
,
TSDB_EP_LEN
);
CheckInt16
(
0
);
CheckInt16
(
0
);
CheckInt16
(
1
);
CheckInt16
(
1
);
CheckBinary
(
"ready"
,
10
);
CheckBinary
(
"ready"
,
10
);
CheckTimestamp
();
CheckTimestamp
();
CheckBinary
(
""
,
24
);
CheckBinary
(
""
,
24
);
}
TEST_F
(
DndTestDnode
,
DropDnode_01
)
{
SDropDnodeMsg
*
pReq
=
(
SDropDnodeMsg
*
)
rpcMallocCont
(
sizeof
(
SDropDnodeMsg
));
pReq
->
dnodeId
=
htonl
(
2
);
SRpcMsg
rpcMsg
=
{
0
};
rpcMsg
.
pCont
=
pReq
;
rpcMsg
.
contLen
=
sizeof
(
SDropDnodeMsg
);
rpcMsg
.
msgType
=
TSDB_MSG_TYPE_DROP_DNODE
;
sendMsg
(
pClient
,
&
rpcMsg
);
SRpcMsg
*
pMsg
=
pClient
->
pRsp
;
ASSERT_NE
(
pMsg
,
nullptr
);
ASSERT_EQ
(
pMsg
->
code
,
0
);
taosMsleep
(
1300
);
SendTheCheckShowMetaMsg
(
TSDB_MGMT_TABLE_DNODE
,
"show dnodes"
,
7
);
SendThenCheckShowRetrieveMsg
(
1
);
CheckInt16
(
1
);
CheckBinary
(
"localhost:9521"
,
TSDB_EP_LEN
);
CheckInt16
(
0
);
CheckInt16
(
1
);
CheckBinary
(
"ready"
,
10
);
CheckTimestamp
();
CheckBinary
(
""
,
24
);
}
TEST_F
(
DndTestDnode
,
CreateDnode_02
)
{
{
SCreateDnodeMsg
*
pReq
=
(
SCreateDnodeMsg
*
)
rpcMallocCont
(
sizeof
(
SCreateDnodeMsg
));
strcpy
(
pReq
->
ep
,
"localhost:9523"
);
SRpcMsg
rpcMsg
=
{
0
};
rpcMsg
.
pCont
=
pReq
;
rpcMsg
.
contLen
=
sizeof
(
SCreateDnodeMsg
);
rpcMsg
.
msgType
=
TSDB_MSG_TYPE_CREATE_DNODE
;
sendMsg
(
pClient
,
&
rpcMsg
);
SRpcMsg
*
pMsg
=
pClient
->
pRsp
;
ASSERT_NE
(
pMsg
,
nullptr
);
ASSERT_EQ
(
pMsg
->
code
,
0
);
}
{
SCreateDnodeMsg
*
pReq
=
(
SCreateDnodeMsg
*
)
rpcMallocCont
(
sizeof
(
SCreateDnodeMsg
));
strcpy
(
pReq
->
ep
,
"localhost:9524"
);
SRpcMsg
rpcMsg
=
{
0
};
rpcMsg
.
pCont
=
pReq
;
rpcMsg
.
contLen
=
sizeof
(
SCreateDnodeMsg
);
rpcMsg
.
msgType
=
TSDB_MSG_TYPE_CREATE_DNODE
;
sendMsg
(
pClient
,
&
rpcMsg
);
SRpcMsg
*
pMsg
=
pClient
->
pRsp
;
ASSERT_NE
(
pMsg
,
nullptr
);
ASSERT_EQ
(
pMsg
->
code
,
0
);
}
{
SCreateDnodeMsg
*
pReq
=
(
SCreateDnodeMsg
*
)
rpcMallocCont
(
sizeof
(
SCreateDnodeMsg
));
strcpy
(
pReq
->
ep
,
"localhost:9525"
);
SRpcMsg
rpcMsg
=
{
0
};
rpcMsg
.
pCont
=
pReq
;
rpcMsg
.
contLen
=
sizeof
(
SCreateDnodeMsg
);
rpcMsg
.
msgType
=
TSDB_MSG_TYPE_CREATE_DNODE
;
sendMsg
(
pClient
,
&
rpcMsg
);
SRpcMsg
*
pMsg
=
pClient
->
pRsp
;
ASSERT_NE
(
pMsg
,
nullptr
);
ASSERT_EQ
(
pMsg
->
code
,
0
);
}
taosMsleep
(
1300
);
SendTheCheckShowMetaMsg
(
TSDB_MGMT_TABLE_DNODE
,
"show dnodes"
,
7
);
SendThenCheckShowRetrieveMsg
(
4
);
CheckInt16
(
1
);
CheckInt16
(
3
);
CheckInt16
(
4
);
CheckInt16
(
5
);
CheckBinary
(
"localhost:9521"
,
TSDB_EP_LEN
);
CheckBinary
(
"localhost:9523"
,
TSDB_EP_LEN
);
CheckBinary
(
"localhost:9524"
,
TSDB_EP_LEN
);
CheckBinary
(
"localhost:9525"
,
TSDB_EP_LEN
);
CheckInt16
(
0
);
CheckInt16
(
0
);
CheckInt16
(
0
);
CheckInt16
(
0
);
CheckInt16
(
1
);
CheckInt16
(
1
);
CheckInt16
(
1
);
CheckInt16
(
1
);
CheckBinary
(
"ready"
,
10
);
CheckBinary
(
"ready"
,
10
);
CheckBinary
(
"ready"
,
10
);
CheckBinary
(
"ready"
,
10
);
CheckTimestamp
();
CheckTimestamp
();
CheckTimestamp
();
CheckTimestamp
();
CheckBinary
(
""
,
24
);
CheckBinary
(
""
,
24
);
CheckBinary
(
""
,
24
);
CheckBinary
(
""
,
24
);
}
TEST_F
(
DndTestDnode
,
RestartDnode_01
)
{
uInfo
(
"===> stop all server"
);
stopServer
(
pServer1
);
stopServer
(
pServer2
);
stopServer
(
pServer3
);
stopServer
(
pServer4
);
stopServer
(
pServer5
);
pServer1
=
NULL
;
pServer2
=
NULL
;
pServer3
=
NULL
;
pServer4
=
NULL
;
pServer5
=
NULL
;
taosMsleep
(
3000
);
// wait tcp port cleanedup
uInfo
(
"===> start all server"
);
const
char
*
fqdn
=
"localhost"
;
const
char
*
firstEp
=
"localhost:9521"
;
pServer1
=
startServer
(
"/tmp/dndTestDnode1"
,
fqdn
,
9521
,
firstEp
);
uInfo
(
"===> all server is running"
);
// taosMsleep(1300);
// SendTheCheckShowMetaMsg(TSDB_MGMT_TABLE_DNODE, "show dnodes", 7);
// SendThenCheckShowRetrieveMsg(4);
// CheckInt16(1);
// CheckInt16(3);
// CheckInt16(4);
// CheckInt16(5);
// CheckBinary("localhost:9521", TSDB_EP_LEN);
// CheckBinary("localhost:9523", TSDB_EP_LEN);
// CheckBinary("localhost:9524", TSDB_EP_LEN);
// CheckBinary("localhost:9525", TSDB_EP_LEN);
// CheckInt16(0);
// CheckInt16(0);
// CheckInt16(0);
// CheckInt16(0);
// CheckInt16(1);
// CheckInt16(1);
// CheckInt16(1);
// CheckInt16(1);
// CheckBinary("ready", 10);
// CheckBinary("ready", 10);
// CheckBinary("ready", 10);
// CheckBinary("ready", 10);
// CheckTimestamp();
// CheckTimestamp();
// CheckTimestamp();
// CheckTimestamp();
// CheckBinary("", 24);
// CheckBinary("", 24);
// CheckBinary("", 24);
// CheckBinary("", 24);
}
source/dnode/mgmt/impl/test/profile/profile.cpp
浏览文件 @
04057a39
...
@@ -33,7 +33,7 @@ class DndTestProfile : public ::testing::Test {
...
@@ -33,7 +33,7 @@ class DndTestProfile : public ::testing::Test {
}
}
static
void
TearDownTestSuite
()
{
static
void
TearDownTestSuite
()
{
dr
opServer
(
pServer
);
st
opServer
(
pServer
);
dropClient
(
pClient
);
dropClient
(
pClient
);
}
}
...
@@ -139,7 +139,7 @@ TEST_F(DndTestProfile, SConnectMsg_03) {
...
@@ -139,7 +139,7 @@ TEST_F(DndTestProfile, SConnectMsg_03) {
EXPECT_NE
(
pRsp
->
showId
,
0
);
EXPECT_NE
(
pRsp
->
showId
,
0
);
EXPECT_EQ
(
pMeta
->
contLen
,
0
);
EXPECT_EQ
(
pMeta
->
contLen
,
0
);
EXPECT_STREQ
(
pMeta
->
t
able
Fname
,
""
);
EXPECT_STREQ
(
pMeta
->
t
b
Fname
,
""
);
EXPECT_EQ
(
pMeta
->
numOfTags
,
0
);
EXPECT_EQ
(
pMeta
->
numOfTags
,
0
);
EXPECT_EQ
(
pMeta
->
precision
,
0
);
EXPECT_EQ
(
pMeta
->
precision
,
0
);
EXPECT_EQ
(
pMeta
->
tableType
,
0
);
EXPECT_EQ
(
pMeta
->
tableType
,
0
);
...
@@ -480,7 +480,7 @@ TEST_F(DndTestProfile, SKillQueryMsg_03) {
...
@@ -480,7 +480,7 @@ TEST_F(DndTestProfile, SKillQueryMsg_03) {
EXPECT_NE
(
pRsp
->
showId
,
0
);
EXPECT_NE
(
pRsp
->
showId
,
0
);
EXPECT_EQ
(
pMeta
->
contLen
,
0
);
EXPECT_EQ
(
pMeta
->
contLen
,
0
);
EXPECT_STREQ
(
pMeta
->
t
able
Fname
,
""
);
EXPECT_STREQ
(
pMeta
->
t
b
Fname
,
""
);
EXPECT_EQ
(
pMeta
->
numOfTags
,
0
);
EXPECT_EQ
(
pMeta
->
numOfTags
,
0
);
EXPECT_EQ
(
pMeta
->
precision
,
0
);
EXPECT_EQ
(
pMeta
->
precision
,
0
);
EXPECT_EQ
(
pMeta
->
tableType
,
0
);
EXPECT_EQ
(
pMeta
->
tableType
,
0
);
...
@@ -667,7 +667,7 @@ TEST_F(DndTestProfile, SKillStreamMsg_03) {
...
@@ -667,7 +667,7 @@ TEST_F(DndTestProfile, SKillStreamMsg_03) {
EXPECT_NE
(
pRsp
->
showId
,
0
);
EXPECT_NE
(
pRsp
->
showId
,
0
);
EXPECT_EQ
(
pMeta
->
contLen
,
0
);
EXPECT_EQ
(
pMeta
->
contLen
,
0
);
EXPECT_STREQ
(
pMeta
->
t
able
Fname
,
""
);
EXPECT_STREQ
(
pMeta
->
t
b
Fname
,
""
);
EXPECT_EQ
(
pMeta
->
numOfTags
,
0
);
EXPECT_EQ
(
pMeta
->
numOfTags
,
0
);
EXPECT_EQ
(
pMeta
->
precision
,
0
);
EXPECT_EQ
(
pMeta
->
precision
,
0
);
EXPECT_EQ
(
pMeta
->
tableType
,
0
);
EXPECT_EQ
(
pMeta
->
tableType
,
0
);
...
...
source/dnode/mgmt/impl/test/show/show.cpp
浏览文件 @
04057a39
...
@@ -33,7 +33,7 @@ class DndTestShow : public ::testing::Test {
...
@@ -33,7 +33,7 @@ class DndTestShow : public ::testing::Test {
}
}
static
void
TearDownTestSuite
()
{
static
void
TearDownTestSuite
()
{
dr
opServer
(
pServer
);
st
opServer
(
pServer
);
dropClient
(
pClient
);
dropClient
(
pClient
);
}
}
...
@@ -141,7 +141,7 @@ TEST_F(DndTestShow, SShowMsg_04) {
...
@@ -141,7 +141,7 @@ TEST_F(DndTestShow, SShowMsg_04) {
EXPECT_NE
(
pRsp
->
showId
,
0
);
EXPECT_NE
(
pRsp
->
showId
,
0
);
EXPECT_EQ
(
pMeta
->
contLen
,
0
);
EXPECT_EQ
(
pMeta
->
contLen
,
0
);
EXPECT_STREQ
(
pMeta
->
t
able
Fname
,
""
);
EXPECT_STREQ
(
pMeta
->
t
b
Fname
,
""
);
EXPECT_EQ
(
pMeta
->
numOfTags
,
0
);
EXPECT_EQ
(
pMeta
->
numOfTags
,
0
);
EXPECT_EQ
(
pMeta
->
precision
,
0
);
EXPECT_EQ
(
pMeta
->
precision
,
0
);
EXPECT_EQ
(
pMeta
->
tableType
,
0
);
EXPECT_EQ
(
pMeta
->
tableType
,
0
);
...
...
source/dnode/mgmt/impl/test/sut/deploy.cpp
浏览文件 @
04057a39
...
@@ -16,16 +16,17 @@
...
@@ -16,16 +16,17 @@
#include "deploy.h"
#include "deploy.h"
void
initLog
(
const
char
*
path
)
{
void
initLog
(
const
char
*
path
)
{
dDebugFlag
=
0
;
dDebugFlag
=
143
;
vDebugFlag
=
0
;
vDebugFlag
=
0
;
mDebugFlag
=
207
;
mDebugFlag
=
143
;
cDebugFlag
=
0
;
jniDebugFlag
=
0
;
jniDebugFlag
=
0
;
tmrDebugFlag
=
0
;
tmrDebugFlag
=
0
;
sdbDebugFlag
=
0
;
sdbDebugFlag
=
0
;
httpDebugFlag
=
0
;
httpDebugFlag
=
0
;
mqttDebugFlag
=
0
;
mqttDebugFlag
=
0
;
monDebugFlag
=
0
;
monDebugFlag
=
0
;
uDebugFlag
=
0
;
uDebugFlag
=
143
;
rpcDebugFlag
=
0
;
rpcDebugFlag
=
0
;
odbcDebugFlag
=
0
;
odbcDebugFlag
=
0
;
qDebugFlag
=
0
;
qDebugFlag
=
0
;
...
@@ -33,6 +34,10 @@ void initLog(const char* path) {
...
@@ -33,6 +34,10 @@ void initLog(const char* path) {
sDebugFlag
=
0
;
sDebugFlag
=
0
;
tsdbDebugFlag
=
0
;
tsdbDebugFlag
=
0
;
cqDebugFlag
=
0
;
cqDebugFlag
=
0
;
tscEmbeddedInUtil
=
1
;
taosRemoveDir
(
path
);
taosMkDir
(
path
);
char
temp
[
PATH_MAX
];
char
temp
[
PATH_MAX
];
snprintf
(
temp
,
PATH_MAX
,
"%s/taosdlog"
,
path
);
snprintf
(
temp
,
PATH_MAX
,
"%s/taosdlog"
,
path
);
...
@@ -49,14 +54,13 @@ void* runServer(void* param) {
...
@@ -49,14 +54,13 @@ void* runServer(void* param) {
}
}
}
}
void
initOption
(
SDnodeOpt
*
pOption
,
const
char
*
path
,
const
char
*
fqdn
,
uint16_t
port
)
{
void
initOption
(
SDnodeOpt
*
pOption
,
const
char
*
path
,
const
char
*
fqdn
,
uint16_t
port
,
const
char
*
firstEp
)
{
pOption
->
sver
=
1
;
pOption
->
sver
=
1
;
pOption
->
numOfCores
=
1
;
pOption
->
numOfCores
=
1
;
pOption
->
numOfSupportMnodes
=
1
;
pOption
->
numOfSupportMnodes
=
1
;
pOption
->
numOfSupportVnodes
=
1
;
pOption
->
numOfSupportVnodes
=
1
;
pOption
->
numOfSupportQnodes
=
1
;
pOption
->
numOfSupportQnodes
=
1
;
pOption
->
statusInterval
=
1
;
pOption
->
statusInterval
=
1
;
pOption
->
mnodeEqualVnodeNum
=
1
;
pOption
->
numOfThreadsPerCore
=
1
;
pOption
->
numOfThreadsPerCore
=
1
;
pOption
->
ratioOfQueryCores
=
1
;
pOption
->
ratioOfQueryCores
=
1
;
pOption
->
maxShellConns
=
1000
;
pOption
->
maxShellConns
=
1000
;
...
@@ -65,16 +69,14 @@ void initOption(SDnodeOpt* pOption, const char* path, const char* fqdn, uint16_t
...
@@ -65,16 +69,14 @@ void initOption(SDnodeOpt* pOption, const char* path, const char* fqdn, uint16_t
strcpy
(
pOption
->
dataDir
,
path
);
strcpy
(
pOption
->
dataDir
,
path
);
snprintf
(
pOption
->
localEp
,
TSDB_EP_LEN
,
"%s:%u"
,
fqdn
,
port
);
snprintf
(
pOption
->
localEp
,
TSDB_EP_LEN
,
"%s:%u"
,
fqdn
,
port
);
snprintf
(
pOption
->
localFqdn
,
TSDB_FQDN_LEN
,
"%s"
,
fqdn
);
snprintf
(
pOption
->
localFqdn
,
TSDB_FQDN_LEN
,
"%s"
,
fqdn
);
snprintf
(
pOption
->
firstEp
,
TSDB_EP_LEN
,
"%s
:%u"
,
fqdn
,
port
);
snprintf
(
pOption
->
firstEp
,
TSDB_EP_LEN
,
"%s
"
,
firstEp
);
}
}
SServer
*
createServer
(
const
char
*
path
,
const
char
*
fqdn
,
uint16_t
port
)
{
SServer
*
startServer
(
const
char
*
path
,
const
char
*
fqdn
,
uint16_t
port
,
const
char
*
firstEp
)
{
taosRemoveDir
(
path
);
taosMkDir
(
path
);
taosMkDir
(
path
);
initLog
(
path
);
SDnodeOpt
option
=
{
0
};
SDnodeOpt
option
=
{
0
};
initOption
(
&
option
,
path
,
fqdn
,
port
);
initOption
(
&
option
,
path
,
fqdn
,
port
,
firstEp
);
SDnode
*
pDnode
=
dndInit
(
&
option
);
SDnode
*
pDnode
=
dndInit
(
&
option
);
ASSERT
(
pDnode
);
ASSERT
(
pDnode
);
...
@@ -89,16 +91,28 @@ SServer* createServer(const char* path, const char* fqdn, uint16_t port) {
...
@@ -89,16 +91,28 @@ SServer* createServer(const char* path, const char* fqdn, uint16_t port) {
return
pServer
;
return
pServer
;
}
}
void
dropServer
(
SServer
*
pServer
)
{
SServer
*
createServer
(
const
char
*
path
,
const
char
*
fqdn
,
uint16_t
port
,
const
char
*
firstEp
)
{
taosRemoveDir
(
path
);
return
startServer
(
path
,
fqdn
,
port
,
firstEp
);
}
void
stopServer
(
SServer
*
pServer
)
{
if
(
pServer
==
NULL
)
return
;
if
(
pServer
->
threadId
!=
NULL
)
{
if
(
pServer
->
threadId
!=
NULL
)
{
taosDestoryThread
(
pServer
->
threadId
);
taosDestoryThread
(
pServer
->
threadId
);
}
}
if
(
pServer
->
pDnode
!=
NULL
)
{
dndCleanup
(
pServer
->
pDnode
);
pServer
->
pDnode
=
NULL
;
}
}
}
void
processClientRsp
(
void
*
parent
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
)
{
void
processClientRsp
(
void
*
parent
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
)
{
SClient
*
pClient
=
(
SClient
*
)
parent
;
SClient
*
pClient
=
(
SClient
*
)
parent
;
pClient
->
pRsp
=
pMsg
;
pClient
->
pRsp
=
pMsg
;
// taosMsleep(1000000);
uInfo
(
"response:%s from dnode, pCont:%p contLen:%d code:0x%X"
,
taosMsg
[
pMsg
->
msgType
],
pMsg
->
pCont
,
pMsg
->
contLen
,
pMsg
->
code
);
tsem_post
(
&
pClient
->
sem
);
tsem_post
(
&
pClient
->
sem
);
}
}
...
@@ -144,7 +158,7 @@ void sendMsg(SClient* pClient, SRpcMsg* pMsg) {
...
@@ -144,7 +158,7 @@ void sendMsg(SClient* pClient, SRpcMsg* pMsg) {
epSet
.
inUse
=
0
;
epSet
.
inUse
=
0
;
epSet
.
numOfEps
=
1
;
epSet
.
numOfEps
=
1
;
epSet
.
port
[
0
]
=
pClient
->
port
;
epSet
.
port
[
0
]
=
pClient
->
port
;
strcpy
(
epSet
.
fqdn
[
0
],
pClient
->
fqdn
);
memcpy
(
epSet
.
fqdn
[
0
],
pClient
->
fqdn
,
TSDB_FQDN_LEN
);
rpcSendRequest
(
pClient
->
clientRpc
,
&
epSet
,
pMsg
,
NULL
);
rpcSendRequest
(
pClient
->
clientRpc
,
&
epSet
,
pMsg
,
NULL
);
tsem_wait
(
&
pClient
->
sem
);
tsem_wait
(
&
pClient
->
sem
);
...
...
source/dnode/mgmt/impl/test/sut/deploy.h
浏览文件 @
04057a39
...
@@ -39,8 +39,10 @@ typedef struct {
...
@@ -39,8 +39,10 @@ typedef struct {
tsem_t
sem
;
tsem_t
sem
;
}
SClient
;
}
SClient
;
SServer
*
createServer
(
const
char
*
path
,
const
char
*
fqdn
,
uint16_t
port
);
void
initLog
(
const
char
*
path
);
void
dropServer
(
SServer
*
pServer
);
SServer
*
createServer
(
const
char
*
path
,
const
char
*
fqdn
,
uint16_t
port
,
const
char
*
firstEp
);
SServer
*
startServer
(
const
char
*
path
,
const
char
*
fqdn
,
uint16_t
port
,
const
char
*
firstEp
);
void
stopServer
(
SServer
*
pServer
);
SClient
*
createClient
(
const
char
*
user
,
const
char
*
pass
,
const
char
*
fqdn
,
uint16_t
port
);
SClient
*
createClient
(
const
char
*
user
,
const
char
*
pass
,
const
char
*
fqdn
,
uint16_t
port
);
void
dropClient
(
SClient
*
pClient
);
void
dropClient
(
SClient
*
pClient
);
void
sendMsg
(
SClient
*
pClient
,
SRpcMsg
*
pMsg
);
void
sendMsg
(
SClient
*
pClient
,
SRpcMsg
*
pMsg
);
source/dnode/mgmt/impl/test/user/user.cpp
浏览文件 @
04057a39
...
@@ -26,14 +26,15 @@ class DndTestUser : public ::testing::Test {
...
@@ -26,14 +26,15 @@ class DndTestUser : public ::testing::Test {
const
char
*
path
=
"/tmp/dndTestUser"
;
const
char
*
path
=
"/tmp/dndTestUser"
;
const
char
*
fqdn
=
"localhost"
;
const
char
*
fqdn
=
"localhost"
;
uint16_t
port
=
9524
;
uint16_t
port
=
9524
;
const
char
*
firstEp
=
"localhost:9524"
;
pServer
=
createServer
(
path
,
fqdn
,
port
);
pServer
=
createServer
(
path
,
fqdn
,
port
,
firstEp
);
ASSERT
(
pServer
);
ASSERT
(
pServer
);
pClient
=
createClient
(
user
,
pass
,
fqdn
,
port
);
pClient
=
createClient
(
user
,
pass
,
fqdn
,
port
);
}
}
static
void
TearDownTestSuite
()
{
static
void
TearDownTestSuite
()
{
dr
opServer
(
pServer
);
st
opServer
(
pServer
);
dropClient
(
pClient
);
dropClient
(
pClient
);
}
}
...
@@ -79,7 +80,7 @@ TEST_F(DndTestUser, ShowUser) {
...
@@ -79,7 +80,7 @@ TEST_F(DndTestUser, ShowUser) {
EXPECT_NE(pShowRsp->showId, 0);
EXPECT_NE(pShowRsp->showId, 0);
EXPECT_EQ(pMeta->contLen, 0);
EXPECT_EQ(pMeta->contLen, 0);
EXPECT_STREQ(pMeta->t
able
Fname, "show users");
EXPECT_STREQ(pMeta->t
b
Fname, "show users");
EXPECT_EQ(pMeta->numOfTags, 0);
EXPECT_EQ(pMeta->numOfTags, 0);
EXPECT_EQ(pMeta->precision, 0);
EXPECT_EQ(pMeta->precision, 0);
EXPECT_EQ(pMeta->tableType, 0);
EXPECT_EQ(pMeta->tableType, 0);
...
...
source/dnode/mnode/impl/inc/mndDef.h
浏览文件 @
04057a39
...
@@ -92,7 +92,6 @@ typedef enum {
...
@@ -92,7 +92,6 @@ typedef enum {
DND_REASON_VERSION_NOT_MATCH
,
DND_REASON_VERSION_NOT_MATCH
,
DND_REASON_DNODE_ID_NOT_MATCH
,
DND_REASON_DNODE_ID_NOT_MATCH
,
DND_REASON_CLUSTER_ID_NOT_MATCH
,
DND_REASON_CLUSTER_ID_NOT_MATCH
,
DND_REASON_MN_EQUAL_VN_NOT_MATCH
,
DND_REASON_STATUS_INTERVAL_NOT_MATCH
,
DND_REASON_STATUS_INTERVAL_NOT_MATCH
,
DND_REASON_TIME_ZONE_NOT_MATCH
,
DND_REASON_TIME_ZONE_NOT_MATCH
,
DND_REASON_LOCALE_NOT_MATCH
,
DND_REASON_LOCALE_NOT_MATCH
,
...
@@ -125,6 +124,7 @@ typedef struct SDnodeObj {
...
@@ -125,6 +124,7 @@ typedef struct SDnodeObj {
int64_t
createdTime
;
int64_t
createdTime
;
int64_t
updateTime
;
int64_t
updateTime
;
int64_t
rebootTime
;
int64_t
rebootTime
;
int64_t
lastAccessTime
;
int32_t
accessTimes
;
int32_t
accessTimes
;
int16_t
numOfMnodes
;
int16_t
numOfMnodes
;
int16_t
numOfVnodes
;
int16_t
numOfVnodes
;
...
@@ -241,7 +241,7 @@ typedef struct SVgObj {
...
@@ -241,7 +241,7 @@ typedef struct SVgObj {
SVnodeGid
vnodeGid
[
TSDB_MAX_REPLICA
];
SVnodeGid
vnodeGid
[
TSDB_MAX_REPLICA
];
}
SVgObj
;
}
SVgObj
;
typedef
struct
SStableObj
{
typedef
struct
{
char
name
[
TSDB_TABLE_FNAME_LEN
];
char
name
[
TSDB_TABLE_FNAME_LEN
];
char
db
[
TSDB_FULL_DB_NAME_LEN
];
char
db
[
TSDB_FULL_DB_NAME_LEN
];
int64_t
createdTime
;
int64_t
createdTime
;
...
@@ -251,9 +251,8 @@ typedef struct SStableObj {
...
@@ -251,9 +251,8 @@ typedef struct SStableObj {
int32_t
numOfColumns
;
int32_t
numOfColumns
;
int32_t
numOfTags
;
int32_t
numOfTags
;
SRWLatch
lock
;
SRWLatch
lock
;
SSchema
*
columnSchema
;
SSchema
*
pSchema
;
SSchema
*
tagSchema
;
}
SStbObj
;
}
SStableObj
;
typedef
struct
SFuncObj
{
typedef
struct
SFuncObj
{
char
name
[
TSDB_FUNC_NAME_LEN
];
char
name
[
TSDB_FUNC_NAME_LEN
];
...
...
source/dnode/mnode/impl/inc/mndInt.h
浏览文件 @
04057a39
...
@@ -88,6 +88,8 @@ void mndSendMsgToMnode(SMnode *pMnode, SRpcMsg *pMsg);
...
@@ -88,6 +88,8 @@ void mndSendMsgToMnode(SMnode *pMnode, SRpcMsg *pMsg);
void
mndSendRedirectMsg
(
SMnode
*
pMnode
,
SRpcMsg
*
pMsg
);
void
mndSendRedirectMsg
(
SMnode
*
pMnode
,
SRpcMsg
*
pMsg
);
void
mndSetMsgHandle
(
SMnode
*
pMnode
,
int32_t
msgType
,
MndMsgFp
fp
);
void
mndSetMsgHandle
(
SMnode
*
pMnode
,
int32_t
msgType
,
MndMsgFp
fp
);
uint64_t
mndGenerateUid
(
char
*
name
,
int32_t
len
)
;
#ifdef __cplusplus
#ifdef __cplusplus
}
}
#endif
#endif
...
...
source/dnode/mnode/impl/inc/mndSt
able
.h
→
source/dnode/mnode/impl/inc/mndSt
b
.h
浏览文件 @
04057a39
...
@@ -13,8 +13,8 @@
...
@@ -13,8 +13,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
*/
#ifndef _TD_MND_ST
ABLE
_H_
#ifndef _TD_MND_ST
B
_H_
#define _TD_MND_ST
ABLE
_H_
#define _TD_MND_ST
B
_H_
#include "mndInt.h"
#include "mndInt.h"
...
@@ -22,11 +22,11 @@
...
@@ -22,11 +22,11 @@
extern
"C"
{
extern
"C"
{
#endif
#endif
int32_t
mndInitSt
able
(
SMnode
*
pMnode
);
int32_t
mndInitSt
b
(
SMnode
*
pMnode
);
void
mndCleanupSt
able
(
SMnode
*
pMnode
);
void
mndCleanupSt
b
(
SMnode
*
pMnode
);
#ifdef __cplusplus
#ifdef __cplusplus
}
}
#endif
#endif
#endif
/*_TD_MND_ST
ABLE
_H_*/
#endif
/*_TD_MND_ST
B
_H_*/
source/dnode/mnode/impl/src/mndCluster.c
浏览文件 @
04057a39
...
@@ -159,7 +159,7 @@ static int32_t mndGetClusterMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg
...
@@ -159,7 +159,7 @@ static int32_t mndGetClusterMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg
cols
++
;
cols
++
;
pMeta
->
numOfColumns
=
htons
(
cols
);
pMeta
->
numOfColumns
=
htons
(
cols
);
strcpy
(
pMeta
->
t
ableFname
,
"show cluster"
);
strcpy
(
pMeta
->
t
bFname
,
mndShowStr
(
pShow
->
type
)
);
pShow
->
numOfColumns
=
cols
;
pShow
->
numOfColumns
=
cols
;
pShow
->
offset
[
0
]
=
0
;
pShow
->
offset
[
0
]
=
0
;
...
...
source/dnode/mnode/impl/src/mndDb.c
浏览文件 @
04057a39
...
@@ -767,7 +767,7 @@ static int32_t mndGetDbMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *pMe
...
@@ -767,7 +767,7 @@ static int32_t mndGetDbMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *pMe
pShow
->
numOfRows
=
sdbGetSize
(
pSdb
,
SDB_DB
);
pShow
->
numOfRows
=
sdbGetSize
(
pSdb
,
SDB_DB
);
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
strcpy
(
pMeta
->
t
able
Fname
,
mndShowStr
(
pShow
->
type
));
strcpy
(
pMeta
->
t
b
Fname
,
mndShowStr
(
pShow
->
type
));
return
0
;
return
0
;
}
}
...
...
source/dnode/mnode/impl/src/mndDnode.c
浏览文件 @
04057a39
...
@@ -22,10 +22,13 @@
...
@@ -22,10 +22,13 @@
#include "tutil.h"
#include "tutil.h"
#define TSDB_DNODE_VER 1
#define TSDB_DNODE_VER 1
#define TSDB_DNODE_RESERVE_SIZE 64
#define TSDB_CONFIG_OPTION_LEN 16
#define TSDB_CONFIG_OPTION_LEN 16
#define TSDB_CONIIG_VALUE_LEN 48
#define TSDB_CONIIG_VALUE_LEN 48
#define TSDB_CONFIG_NUMBER 8
#define TSDB_CONFIG_NUMBER 8
static
int32_t
id
=
2
;
static
const
char
*
offlineReason
[]
=
{
static
const
char
*
offlineReason
[]
=
{
""
,
""
,
"status msg timeout"
,
"status msg timeout"
,
...
@@ -33,7 +36,6 @@ static const char *offlineReason[] = {
...
@@ -33,7 +36,6 @@ static const char *offlineReason[] = {
"version not match"
,
"version not match"
,
"dnodeId not match"
,
"dnodeId not match"
,
"clusterId not match"
,
"clusterId not match"
,
"mnEqualVn not match"
,
"interval not match"
,
"interval not match"
,
"timezone not match"
,
"timezone not match"
,
"locale not match"
,
"locale not match"
,
...
@@ -117,6 +119,7 @@ static SSdbRaw *mndDnodeActionEncode(SDnodeObj *pDnode) {
...
@@ -117,6 +119,7 @@ static SSdbRaw *mndDnodeActionEncode(SDnodeObj *pDnode) {
SDB_SET_INT64
(
pRaw
,
dataPos
,
pDnode
->
updateTime
)
SDB_SET_INT64
(
pRaw
,
dataPos
,
pDnode
->
updateTime
)
SDB_SET_INT16
(
pRaw
,
dataPos
,
pDnode
->
port
)
SDB_SET_INT16
(
pRaw
,
dataPos
,
pDnode
->
port
)
SDB_SET_BINARY
(
pRaw
,
dataPos
,
pDnode
->
fqdn
,
TSDB_FQDN_LEN
)
SDB_SET_BINARY
(
pRaw
,
dataPos
,
pDnode
->
fqdn
,
TSDB_FQDN_LEN
)
SDB_SET_RESERVE
(
pRaw
,
dataPos
,
TSDB_DNODE_RESERVE_SIZE
)
SDB_SET_DATALEN
(
pRaw
,
dataPos
);
SDB_SET_DATALEN
(
pRaw
,
dataPos
);
return
pRaw
;
return
pRaw
;
...
@@ -142,28 +145,28 @@ static SSdbRow *mndDnodeActionDecode(SSdbRaw *pRaw) {
...
@@ -142,28 +145,28 @@ static SSdbRow *mndDnodeActionDecode(SSdbRaw *pRaw) {
SDB_GET_INT64
(
pRaw
,
pRow
,
dataPos
,
&
pDnode
->
updateTime
)
SDB_GET_INT64
(
pRaw
,
pRow
,
dataPos
,
&
pDnode
->
updateTime
)
SDB_GET_INT16
(
pRaw
,
pRow
,
dataPos
,
&
pDnode
->
port
)
SDB_GET_INT16
(
pRaw
,
pRow
,
dataPos
,
&
pDnode
->
port
)
SDB_GET_BINARY
(
pRaw
,
pRow
,
dataPos
,
pDnode
->
fqdn
,
TSDB_FQDN_LEN
)
SDB_GET_BINARY
(
pRaw
,
pRow
,
dataPos
,
pDnode
->
fqdn
,
TSDB_FQDN_LEN
)
SDB_GET_RESERVE
(
pRaw
,
pRow
,
dataPos
,
TSDB_DNODE_RESERVE_SIZE
)
return
pRow
;
return
pRow
;
}
}
static
void
mnodeResetDnode
(
SDnodeObj
*
pDnode
)
{
static
int32_t
mndDnodeActionInsert
(
SSdb
*
pSdb
,
SDnodeObj
*
pDnode
)
{
mTrace
(
"dnode:%d, perform insert action"
,
pDnode
->
id
);
pDnode
->
rebootTime
=
0
;
pDnode
->
rebootTime
=
0
;
pDnode
->
lastAccessTime
=
0
;
pDnode
->
accessTimes
=
0
;
pDnode
->
accessTimes
=
0
;
pDnode
->
numOfCores
=
0
;
pDnode
->
numOfMnodes
=
0
;
pDnode
->
numOfMnodes
=
0
;
pDnode
->
numOfVnodes
=
0
;
pDnode
->
numOfVnodes
=
0
;
pDnode
->
numOfQnodes
=
0
;
pDnode
->
numOfQnodes
=
0
;
pDnode
->
numOfSupportMnodes
=
0
;
pDnode
->
numOfSupportMnodes
=
0
;
pDnode
->
numOfSupportVnodes
=
0
;
pDnode
->
numOfSupportVnodes
=
0
;
pDnode
->
numOfSupportQnodes
=
0
;
pDnode
->
numOfSupportQnodes
=
0
;
pDnode
->
numOfCores
=
0
;
pDnode
->
status
=
DND_STATUS_OFFLINE
;
pDnode
->
status
=
DND_STATUS_OFFLINE
;
pDnode
->
offlineReason
=
DND_REASON_STATUS_NOT_RECEIVED
;
pDnode
->
offlineReason
=
DND_REASON_STATUS_NOT_RECEIVED
;
snprintf
(
pDnode
->
ep
,
TSDB_EP_LEN
,
"%s:%u"
,
pDnode
->
fqdn
,
pDnode
->
port
);
snprintf
(
pDnode
->
ep
,
TSDB_EP_LEN
,
"%s:%u"
,
pDnode
->
fqdn
,
pDnode
->
port
);
}
static
int32_t
mndDnodeActionInsert
(
SSdb
*
pSdb
,
SDnodeObj
*
pDnode
)
{
mTrace
(
"dnode:%d, perform insert action"
,
pDnode
->
id
);
mnodeResetDnode
(
pDnode
);
return
0
;
return
0
;
}
}
...
@@ -174,11 +177,6 @@ static int32_t mndDnodeActionDelete(SSdb *pSdb, SDnodeObj *pDnode) {
...
@@ -174,11 +177,6 @@ static int32_t mndDnodeActionDelete(SSdb *pSdb, SDnodeObj *pDnode) {
static
int32_t
mndDnodeActionUpdate
(
SSdb
*
pSdb
,
SDnodeObj
*
pOldDnode
,
SDnodeObj
*
pNewDnode
)
{
static
int32_t
mndDnodeActionUpdate
(
SSdb
*
pSdb
,
SDnodeObj
*
pOldDnode
,
SDnodeObj
*
pNewDnode
)
{
mTrace
(
"dnode:%d, perform update action"
,
pOldDnode
->
id
);
mTrace
(
"dnode:%d, perform update action"
,
pOldDnode
->
id
);
pOldDnode
->
id
=
pNewDnode
->
id
;
pOldDnode
->
createdTime
=
pNewDnode
->
createdTime
;
pOldDnode
->
updateTime
=
pNewDnode
->
updateTime
;
pOldDnode
->
port
=
pNewDnode
->
port
;
memcpy
(
pOldDnode
->
fqdn
,
pNewDnode
->
fqdn
,
TSDB_FQDN_LEN
);
return
0
;
return
0
;
}
}
...
@@ -232,6 +230,7 @@ static void mndGetDnodeData(SMnode *pMnode, SDnodeEps *pEps, int32_t numOfEps) {
...
@@ -232,6 +230,7 @@ static void mndGetDnodeData(SMnode *pMnode, SDnodeEps *pEps, int32_t numOfEps) {
if
(
pIter
==
NULL
)
break
;
if
(
pIter
==
NULL
)
break
;
if
(
i
>=
numOfEps
)
{
if
(
i
>=
numOfEps
)
{
sdbCancelFetch
(
pSdb
,
pIter
);
sdbCancelFetch
(
pSdb
,
pIter
);
sdbRelease
(
pSdb
,
pDnode
);
break
;
break
;
}
}
...
@@ -244,20 +243,15 @@ static void mndGetDnodeData(SMnode *pMnode, SDnodeEps *pEps, int32_t numOfEps) {
...
@@ -244,20 +243,15 @@ static void mndGetDnodeData(SMnode *pMnode, SDnodeEps *pEps, int32_t numOfEps) {
pEp
->
isMnode
=
1
;
pEp
->
isMnode
=
1
;
}
}
i
++
;
i
++
;
sdbRelease
(
pSdb
,
pDnode
);
}
}
pEps
->
num
=
htonl
(
i
);
pEps
->
num
=
htonl
(
i
);
}
}
static
int32_t
mndCheckClusterCfgPara
(
SMnode
*
pMnode
,
const
SClusterCfg
*
pCfg
)
{
static
int32_t
mndCheckClusterCfgPara
(
SMnode
*
pMnode
,
const
SClusterCfg
*
pCfg
)
{
if
(
pCfg
->
mnodeEqualVnodeNum
!=
pMnode
->
cfg
.
mnodeEqualVnodeNum
)
{
mError
(
"
\"
mnodeEqualVnodeNum
\"
[%d - %d] cfg inconsistent"
,
pCfg
->
mnodeEqualVnodeNum
,
pMnode
->
cfg
.
mnodeEqualVnodeNum
);
return
DND_REASON_MN_EQUAL_VN_NOT_MATCH
;
}
if
(
pCfg
->
statusInterval
!=
pMnode
->
cfg
.
statusInterval
)
{
if
(
pCfg
->
statusInterval
!=
pMnode
->
cfg
.
statusInterval
)
{
mError
(
"
\"
statusInterval
\"
[%d - %d] cfg inconsistent"
,
pCfg
->
statusInterval
,
pMnode
->
cfg
.
statusInterval
);
mError
(
"
statusInterval
[%d - %d] cfg inconsistent"
,
pCfg
->
statusInterval
,
pMnode
->
cfg
.
statusInterval
);
return
DND_REASON_STATUS_INTERVAL_NOT_MATCH
;
return
DND_REASON_STATUS_INTERVAL_NOT_MATCH
;
}
}
...
@@ -265,18 +259,18 @@ static int32_t mndCheckClusterCfgPara(SMnode *pMnode, const SClusterCfg *pCfg) {
...
@@ -265,18 +259,18 @@ static int32_t mndCheckClusterCfgPara(SMnode *pMnode, const SClusterCfg *pCfg) {
char
timestr
[
32
]
=
"1970-01-01 00:00:00.00"
;
char
timestr
[
32
]
=
"1970-01-01 00:00:00.00"
;
(
void
)
taosParseTime
(
timestr
,
&
checkTime
,
(
int32_t
)
strlen
(
timestr
),
TSDB_TIME_PRECISION_MILLI
,
0
);
(
void
)
taosParseTime
(
timestr
,
&
checkTime
,
(
int32_t
)
strlen
(
timestr
),
TSDB_TIME_PRECISION_MILLI
,
0
);
if
((
0
!=
strcasecmp
(
pCfg
->
timezone
,
pMnode
->
cfg
.
timezone
))
&&
(
checkTime
!=
pCfg
->
checkTime
))
{
if
((
0
!=
strcasecmp
(
pCfg
->
timezone
,
pMnode
->
cfg
.
timezone
))
&&
(
checkTime
!=
pCfg
->
checkTime
))
{
mError
(
"
\"
timezone
\"
[%s - %s] [%"
PRId64
" - %"
PRId64
"] cfg inconsistent"
,
pCfg
->
timezone
,
pMnode
->
cfg
.
timezone
,
mError
(
"
timezone
[%s - %s] [%"
PRId64
" - %"
PRId64
"] cfg inconsistent"
,
pCfg
->
timezone
,
pMnode
->
cfg
.
timezone
,
pCfg
->
checkTime
,
checkTime
);
pCfg
->
checkTime
,
checkTime
);
return
DND_REASON_TIME_ZONE_NOT_MATCH
;
return
DND_REASON_TIME_ZONE_NOT_MATCH
;
}
}
if
(
0
!=
strcasecmp
(
pCfg
->
locale
,
pMnode
->
cfg
.
locale
))
{
if
(
0
!=
strcasecmp
(
pCfg
->
locale
,
pMnode
->
cfg
.
locale
))
{
mError
(
"
\"
locale
\"
[%s - %s] cfg parameters
inconsistent"
,
pCfg
->
locale
,
pMnode
->
cfg
.
locale
);
mError
(
"
locale [%s - %s] cfg
inconsistent"
,
pCfg
->
locale
,
pMnode
->
cfg
.
locale
);
return
DND_REASON_LOCALE_NOT_MATCH
;
return
DND_REASON_LOCALE_NOT_MATCH
;
}
}
if
(
0
!=
strcasecmp
(
pCfg
->
charset
,
pMnode
->
cfg
.
charset
))
{
if
(
0
!=
strcasecmp
(
pCfg
->
charset
,
pMnode
->
cfg
.
charset
))
{
mError
(
"
\"
charset
\"
[%s - %s] cfg parameters
inconsistent."
,
pCfg
->
charset
,
pMnode
->
cfg
.
charset
);
mError
(
"
charset [%s - %s] cfg
inconsistent."
,
pCfg
->
charset
,
pMnode
->
cfg
.
charset
);
return
DND_REASON_CHARSET_NOT_MATCH
;
return
DND_REASON_CHARSET_NOT_MATCH
;
}
}
...
@@ -287,14 +281,12 @@ static void mndParseStatusMsg(SStatusMsg *pStatus) {
...
@@ -287,14 +281,12 @@ static void mndParseStatusMsg(SStatusMsg *pStatus) {
pStatus
->
sver
=
htonl
(
pStatus
->
sver
);
pStatus
->
sver
=
htonl
(
pStatus
->
sver
);
pStatus
->
dnodeId
=
htonl
(
pStatus
->
dnodeId
);
pStatus
->
dnodeId
=
htonl
(
pStatus
->
dnodeId
);
pStatus
->
clusterId
=
htonl
(
pStatus
->
clusterId
);
pStatus
->
clusterId
=
htonl
(
pStatus
->
clusterId
);
pStatus
->
rebootTime
=
hto
nl
(
pStatus
->
rebootTime
);
pStatus
->
rebootTime
=
hto
be64
(
pStatus
->
rebootTime
);
pStatus
->
numOfCores
=
htons
(
pStatus
->
numOfCores
);
pStatus
->
numOfCores
=
htons
(
pStatus
->
numOfCores
);
pStatus
->
numOfSupportMnodes
=
htons
(
pStatus
->
numOfSupportMnodes
);
pStatus
->
numOfSupportMnodes
=
htons
(
pStatus
->
numOfSupportMnodes
);
pStatus
->
numOfSupportVnodes
=
htons
(
pStatus
->
numOfSupportVnodes
);
pStatus
->
numOfSupportVnodes
=
htons
(
pStatus
->
numOfSupportVnodes
);
pStatus
->
numOfSupportQnodes
=
htons
(
pStatus
->
numOfSupportQnodes
);
pStatus
->
numOfSupportQnodes
=
htons
(
pStatus
->
numOfSupportQnodes
);
pStatus
->
clusterCfg
.
statusInterval
=
htonl
(
pStatus
->
clusterCfg
.
statusInterval
);
pStatus
->
clusterCfg
.
statusInterval
=
htonl
(
pStatus
->
clusterCfg
.
statusInterval
);
pStatus
->
clusterCfg
.
mnodeEqualVnodeNum
=
htonl
(
pStatus
->
clusterCfg
.
mnodeEqualVnodeNum
);
pStatus
->
clusterCfg
.
checkTime
=
htobe64
(
pStatus
->
clusterCfg
.
checkTime
);
pStatus
->
clusterCfg
.
checkTime
=
htobe64
(
pStatus
->
clusterCfg
.
checkTime
);
}
}
...
@@ -308,7 +300,8 @@ static int32_t mndProcessStatusMsg(SMnodeMsg *pMsg) {
...
@@ -308,7 +300,8 @@ static int32_t mndProcessStatusMsg(SMnodeMsg *pMsg) {
pDnode
=
mndAcquireDnodeByEp
(
pMnode
,
pStatus
->
dnodeEp
);
pDnode
=
mndAcquireDnodeByEp
(
pMnode
,
pStatus
->
dnodeEp
);
if
(
pDnode
==
NULL
)
{
if
(
pDnode
==
NULL
)
{
mDebug
(
"dnode:%s, not created yet"
,
pStatus
->
dnodeEp
);
mDebug
(
"dnode:%s, not created yet"
,
pStatus
->
dnodeEp
);
return
TSDB_CODE_MND_DNODE_NOT_EXIST
;
terrno
=
TSDB_CODE_MND_DNODE_NOT_EXIST
;
return
-
1
;
}
}
}
else
{
}
else
{
pDnode
=
mndAcquireDnode
(
pMnode
,
pStatus
->
dnodeId
);
pDnode
=
mndAcquireDnode
(
pMnode
,
pStatus
->
dnodeId
);
...
@@ -319,7 +312,8 @@ static int32_t mndProcessStatusMsg(SMnodeMsg *pMsg) {
...
@@ -319,7 +312,8 @@ static int32_t mndProcessStatusMsg(SMnodeMsg *pMsg) {
}
}
mError
(
"dnode:%d, %s not exist"
,
pStatus
->
dnodeId
,
pStatus
->
dnodeEp
);
mError
(
"dnode:%d, %s not exist"
,
pStatus
->
dnodeId
,
pStatus
->
dnodeEp
);
mndReleaseDnode
(
pMnode
,
pDnode
);
mndReleaseDnode
(
pMnode
,
pDnode
);
return
TSDB_CODE_MND_DNODE_NOT_EXIST
;
terrno
=
TSDB_CODE_MND_DNODE_NOT_EXIST
;
return
-
1
;
}
}
}
}
...
@@ -329,7 +323,8 @@ static int32_t mndProcessStatusMsg(SMnodeMsg *pMsg) {
...
@@ -329,7 +323,8 @@ static int32_t mndProcessStatusMsg(SMnodeMsg *pMsg) {
}
}
mndReleaseDnode
(
pMnode
,
pDnode
);
mndReleaseDnode
(
pMnode
,
pDnode
);
mError
(
"dnode:%d, status msg version:%d not match cluster:%d"
,
pStatus
->
dnodeId
,
pStatus
->
sver
,
pMnode
->
cfg
.
sver
);
mError
(
"dnode:%d, status msg version:%d not match cluster:%d"
,
pStatus
->
dnodeId
,
pStatus
->
sver
,
pMnode
->
cfg
.
sver
);
return
TSDB_CODE_MND_INVALID_MSG_VERSION
;
terrno
=
TSDB_CODE_MND_INVALID_MSG_VERSION
;
return
-
1
;
}
}
if
(
pStatus
->
dnodeId
==
0
)
{
if
(
pStatus
->
dnodeId
==
0
)
{
...
@@ -341,7 +336,8 @@ static int32_t mndProcessStatusMsg(SMnodeMsg *pMsg) {
...
@@ -341,7 +336,8 @@ static int32_t mndProcessStatusMsg(SMnodeMsg *pMsg) {
}
}
mError
(
"dnode:%d, clusterId %d not match exist %d"
,
pDnode
->
id
,
pStatus
->
clusterId
,
pMnode
->
clusterId
);
mError
(
"dnode:%d, clusterId %d not match exist %d"
,
pDnode
->
id
,
pStatus
->
clusterId
,
pMnode
->
clusterId
);
mndReleaseDnode
(
pMnode
,
pDnode
);
mndReleaseDnode
(
pMnode
,
pDnode
);
return
TSDB_CODE_MND_INVALID_CLUSTER_ID
;
terrno
!=
TSDB_CODE_MND_INVALID_CLUSTER_ID
;
return
-
1
;
}
else
{
}
else
{
pDnode
->
accessTimes
++
;
pDnode
->
accessTimes
++
;
mTrace
(
"dnode:%d, status received, access times %d"
,
pDnode
->
id
,
pDnode
->
accessTimes
);
mTrace
(
"dnode:%d, status received, access times %d"
,
pDnode
->
id
,
pDnode
->
accessTimes
);
...
@@ -355,7 +351,8 @@ static int32_t mndProcessStatusMsg(SMnodeMsg *pMsg) {
...
@@ -355,7 +351,8 @@ static int32_t mndProcessStatusMsg(SMnodeMsg *pMsg) {
pDnode
->
offlineReason
=
ret
;
pDnode
->
offlineReason
=
ret
;
mError
(
"dnode:%d, cluster cfg inconsistent since:%s"
,
pDnode
->
id
,
offlineReason
[
ret
]);
mError
(
"dnode:%d, cluster cfg inconsistent since:%s"
,
pDnode
->
id
,
offlineReason
[
ret
]);
mndReleaseDnode
(
pMnode
,
pDnode
);
mndReleaseDnode
(
pMnode
,
pDnode
);
return
TSDB_CODE_MND_CLUSTER_CFG_INCONSISTENT
;
terrno
=
TSDB_CODE_MND_INVALID_CLUSTER_CFG
;
return
-
1
;
}
}
mInfo
(
"dnode:%d, from offline to online"
,
pDnode
->
id
);
mInfo
(
"dnode:%d, from offline to online"
,
pDnode
->
id
);
...
@@ -366,6 +363,7 @@ static int32_t mndProcessStatusMsg(SMnodeMsg *pMsg) {
...
@@ -366,6 +363,7 @@ static int32_t mndProcessStatusMsg(SMnodeMsg *pMsg) {
pDnode
->
numOfSupportMnodes
=
pStatus
->
numOfSupportMnodes
;
pDnode
->
numOfSupportMnodes
=
pStatus
->
numOfSupportMnodes
;
pDnode
->
numOfSupportVnodes
=
pStatus
->
numOfSupportVnodes
;
pDnode
->
numOfSupportVnodes
=
pStatus
->
numOfSupportVnodes
;
pDnode
->
numOfSupportQnodes
=
pStatus
->
numOfSupportQnodes
;
pDnode
->
numOfSupportQnodes
=
pStatus
->
numOfSupportQnodes
;
pDnode
->
lastAccessTime
=
taosGetTimestampMs
();
pDnode
->
status
=
DND_STATUS_READY
;
pDnode
->
status
=
DND_STATUS_READY
;
int32_t
numOfEps
=
mndGetDnodeSize
(
pMnode
);
int32_t
numOfEps
=
mndGetDnodeSize
(
pMnode
);
...
@@ -373,7 +371,8 @@ static int32_t mndProcessStatusMsg(SMnodeMsg *pMsg) {
...
@@ -373,7 +371,8 @@ static int32_t mndProcessStatusMsg(SMnodeMsg *pMsg) {
SStatusRsp
*
pRsp
=
rpcMallocCont
(
contLen
);
SStatusRsp
*
pRsp
=
rpcMallocCont
(
contLen
);
if
(
pRsp
==
NULL
)
{
if
(
pRsp
==
NULL
)
{
mndReleaseDnode
(
pMnode
,
pDnode
);
mndReleaseDnode
(
pMnode
,
pDnode
);
return
TSDB_CODE_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
return
-
1
;
}
}
pRsp
->
dnodeCfg
.
dnodeId
=
htonl
(
pDnode
->
id
);
pRsp
->
dnodeCfg
.
dnodeId
=
htonl
(
pDnode
->
id
);
...
@@ -390,13 +389,13 @@ static int32_t mndProcessStatusMsg(SMnodeMsg *pMsg) {
...
@@ -390,13 +389,13 @@ static int32_t mndProcessStatusMsg(SMnodeMsg *pMsg) {
static
int32_t
mndCreateDnode
(
SMnode
*
pMnode
,
SMnodeMsg
*
pMsg
,
SCreateDnodeMsg
*
pCreate
)
{
static
int32_t
mndCreateDnode
(
SMnode
*
pMnode
,
SMnodeMsg
*
pMsg
,
SCreateDnodeMsg
*
pCreate
)
{
SDnodeObj
dnodeObj
=
{
0
};
SDnodeObj
dnodeObj
=
{
0
};
dnodeObj
.
id
=
1
;
// todo
dnodeObj
.
id
=
id
++
;
dnodeObj
.
createdTime
=
taosGetTimestampMs
();
dnodeObj
.
createdTime
=
taosGetTimestampMs
();
dnodeObj
.
updateTime
=
dnodeObj
.
createdTime
;
dnodeObj
.
updateTime
=
dnodeObj
.
createdTime
;
taosGetFqdnPortFromEp
(
pCreate
->
ep
,
dnodeObj
.
fqdn
,
&
dnodeObj
.
port
);
taosGetFqdnPortFromEp
(
pCreate
->
ep
,
dnodeObj
.
fqdn
,
&
dnodeObj
.
port
);
if
(
dnodeObj
.
fqdn
[
0
]
==
0
||
dnodeObj
.
port
<=
0
)
{
if
(
dnodeObj
.
fqdn
[
0
]
==
0
||
dnodeObj
.
port
<=
0
)
{
terrno
=
TSDB_CODE_
SDB_APP_ERROR
;
terrno
=
TSDB_CODE_
MND_INVALID_DNODE_EP
;
mError
(
"dnode:%s, failed to create since %s"
,
pCreate
->
ep
,
terrstr
());
mError
(
"dnode:%s, failed to create since %s"
,
pCreate
->
ep
,
terrstr
());
return
terrno
;
return
terrno
;
}
}
...
@@ -449,7 +448,7 @@ static int32_t mndProcessCreateDnodeMsg(SMnodeMsg *pMsg) {
...
@@ -449,7 +448,7 @@ static int32_t mndProcessCreateDnodeMsg(SMnodeMsg *pMsg) {
mDebug
(
"dnode:%s, start to create"
,
pCreate
->
ep
);
mDebug
(
"dnode:%s, start to create"
,
pCreate
->
ep
);
if
(
pCreate
->
ep
[
0
]
==
0
)
{
if
(
pCreate
->
ep
[
0
]
==
0
)
{
terrno
=
TSDB_CODE_
SDB_APP_ERROR
;
terrno
=
TSDB_CODE_
MND_INVALID_DNODE_EP
;
mError
(
"dnode:%s, failed to create since %s"
,
pCreate
->
ep
,
terrstr
());
mError
(
"dnode:%s, failed to create since %s"
,
pCreate
->
ep
,
terrstr
());
return
-
1
;
return
-
1
;
}
}
...
@@ -457,7 +456,7 @@ static int32_t mndProcessCreateDnodeMsg(SMnodeMsg *pMsg) {
...
@@ -457,7 +456,7 @@ static int32_t mndProcessCreateDnodeMsg(SMnodeMsg *pMsg) {
SDnodeObj
*
pDnode
=
mndAcquireDnodeByEp
(
pMnode
,
pCreate
->
ep
);
SDnodeObj
*
pDnode
=
mndAcquireDnodeByEp
(
pMnode
,
pCreate
->
ep
);
if
(
pDnode
!=
NULL
)
{
if
(
pDnode
!=
NULL
)
{
mError
(
"dnode:%d, already exist"
,
pDnode
->
id
);
mError
(
"dnode:%d, already exist"
,
pDnode
->
id
);
sdbRelease
(
pMnode
->
pSdb
,
pDnode
);
mndReleaseDnode
(
pMnode
,
pDnode
);
terrno
=
TSDB_CODE_MND_DNODE_ALREADY_EXIST
;
terrno
=
TSDB_CODE_MND_DNODE_ALREADY_EXIST
;
return
-
1
;
return
-
1
;
}
}
...
@@ -478,7 +477,7 @@ static int32_t mndDropDnode(SMnode *pMnode, SMnodeMsg *pMsg, SDnodeObj *pDnode)
...
@@ -478,7 +477,7 @@ static int32_t mndDropDnode(SMnode *pMnode, SMnodeMsg *pMsg, SDnodeObj *pDnode)
mError
(
"dnode:%d, failed to drop since %s"
,
pDnode
->
id
,
terrstr
());
mError
(
"dnode:%d, failed to drop since %s"
,
pDnode
->
id
,
terrstr
());
return
-
1
;
return
-
1
;
}
}
mDebug
(
"trans:%d, used to drop
user
:%d"
,
pTrans
->
id
,
pDnode
->
id
);
mDebug
(
"trans:%d, used to drop
dnode
:%d"
,
pTrans
->
id
,
pDnode
->
id
);
SSdbRaw
*
pRedoRaw
=
mndDnodeActionEncode
(
pDnode
);
SSdbRaw
*
pRedoRaw
=
mndDnodeActionEncode
(
pDnode
);
if
(
pRedoRaw
==
NULL
||
mndTransAppendRedolog
(
pTrans
,
pRedoRaw
)
!=
0
)
{
if
(
pRedoRaw
==
NULL
||
mndTransAppendRedolog
(
pTrans
,
pRedoRaw
)
!=
0
)
{
...
@@ -522,26 +521,26 @@ static int32_t mndProcessDropDnodeMsg(SMnodeMsg *pMsg) {
...
@@ -522,26 +521,26 @@ static int32_t mndProcessDropDnodeMsg(SMnodeMsg *pMsg) {
mDebug
(
"dnode:%d, start to drop"
,
pDrop
->
dnodeId
);
mDebug
(
"dnode:%d, start to drop"
,
pDrop
->
dnodeId
);
if
(
pDrop
->
dnodeId
<=
0
)
{
if
(
pDrop
->
dnodeId
<=
0
)
{
terrno
=
TSDB_CODE_
SDB_APP_ERROR
;
terrno
=
TSDB_CODE_
MND_INVALID_DNODE_ID
;
mError
(
"dnode:%d, failed to drop since %s"
,
pDrop
->
dnodeId
,
terrstr
());
mError
(
"dnode:%d, failed to drop since %s"
,
pDrop
->
dnodeId
,
terrstr
());
return
-
1
;
return
-
1
;
}
}
SDnodeObj
*
pDnode
=
mndAcquireDnode
(
pMnode
,
pDrop
->
dnodeId
);
SDnodeObj
*
pDnode
=
mndAcquireDnode
(
pMnode
,
pDrop
->
dnodeId
);
if
(
pDnode
==
NULL
)
{
if
(
pDnode
==
NULL
)
{
mError
(
"dnode:%d, not exist"
,
pDrop
->
dnodeId
);
terrno
=
TSDB_CODE_MND_DNODE_NOT_EXIST
;
terrno
=
TSDB_CODE_MND_DNODE_NOT_EXIST
;
mError
(
"dnode:%d, failed to drop since %s"
,
pDrop
->
dnodeId
,
terrstr
());
return
-
1
;
return
-
1
;
}
}
int32_t
code
=
mndDropDnode
(
pMnode
,
pMsg
,
pDnode
);
int32_t
code
=
mndDropDnode
(
pMnode
,
pMsg
,
pDnode
);
if
(
code
!=
0
)
{
if
(
code
!=
0
)
{
mndReleaseDnode
(
pMnode
,
pDnode
);
mError
(
"dnode:%d, failed to drop since %s"
,
pDrop
->
dnodeId
,
terrstr
());
mError
(
"dnode:%d, failed to drop since %s"
,
pDrop
->
dnodeId
,
terrstr
());
return
-
1
;
return
-
1
;
}
}
sdbRelease
(
pMnode
->
pSdb
,
pDnode
);
mndReleaseDnode
(
pMnode
,
pDnode
);
return
TSDB_CODE_MND_ACTION_IN_PROGRESS
;
return
TSDB_CODE_MND_ACTION_IN_PROGRESS
;
}
}
...
@@ -553,7 +552,7 @@ static int32_t mndProcessConfigDnodeMsg(SMnodeMsg *pMsg) {
...
@@ -553,7 +552,7 @@ static int32_t mndProcessConfigDnodeMsg(SMnodeMsg *pMsg) {
SDnodeObj
*
pDnode
=
mndAcquireDnode
(
pMnode
,
pCfg
->
dnodeId
);
SDnodeObj
*
pDnode
=
mndAcquireDnode
(
pMnode
,
pCfg
->
dnodeId
);
if
(
pDnode
==
NULL
)
{
if
(
pDnode
==
NULL
)
{
terrno
=
TSDB_CODE_MND_DNODE_NOT_EXIST
;
terrno
=
TSDB_CODE_MND_DNODE_NOT_EXIST
;
mError
(
"dnode:%d, failed to c
f
g since %s "
,
pCfg
->
dnodeId
,
terrstr
());
mError
(
"dnode:%d, failed to c
onfi
g since %s "
,
pCfg
->
dnodeId
,
terrstr
());
return
-
1
;
return
-
1
;
}
}
...
@@ -562,17 +561,22 @@ static int32_t mndProcessConfigDnodeMsg(SMnodeMsg *pMsg) {
...
@@ -562,17 +561,22 @@ static int32_t mndProcessConfigDnodeMsg(SMnodeMsg *pMsg) {
SCfgDnodeMsg
*
pCfgDnode
=
rpcMallocCont
(
sizeof
(
SCfgDnodeMsg
));
SCfgDnodeMsg
*
pCfgDnode
=
rpcMallocCont
(
sizeof
(
SCfgDnodeMsg
));
pCfgDnode
->
dnodeId
=
htonl
(
pCfg
->
dnodeId
);
pCfgDnode
->
dnodeId
=
htonl
(
pCfg
->
dnodeId
);
memcpy
(
pCfgDnode
->
config
,
pCfg
->
config
,
128
);
memcpy
(
pCfgDnode
->
config
,
pCfg
->
config
,
TSDB_DNODE_CONFIG_LEN
);
SRpcMsg
rpcMsg
=
{.
msgType
=
TSDB_MSG_TYPE_CONFIG_DNODE_IN
,
.
pCont
=
pCfgDnode
,
.
contLen
=
sizeof
(
SCfgDnodeMsg
)};
SRpcMsg
rpcMsg
=
{.
msgType
=
TSDB_MSG_TYPE_CONFIG_DNODE_IN
,
.
pCont
=
pCfgDnode
,
.
contLen
=
sizeof
(
SCfgDnodeMsg
),
.
ahandle
=
pMsg
->
rpcMsg
.
ahandle
};
mInfo
(
"dnode:%d,
is configured"
,
pCfg
->
dnodeId
);
mInfo
(
"dnode:%d,
app:%p config:%s req send to dnode"
,
pCfg
->
dnodeId
,
rpcMsg
.
ahandle
,
pCfg
->
config
);
mndSendMsgToDnode
(
pMnode
,
&
epSet
,
&
rpcMsg
);
mndSendMsgToDnode
(
pMnode
,
&
epSet
,
&
rpcMsg
);
return
0
;
return
0
;
}
}
static
int32_t
mndProcessConfigDnodeRsp
(
SMnodeMsg
*
pMsg
)
{
mInfo
(
"cfg dnode rsp is received"
);
}
static
int32_t
mndProcessConfigDnodeRsp
(
SMnodeMsg
*
pMsg
)
{
mInfo
(
"app:%p config rsp from dnode"
,
pMsg
->
rpcMsg
.
ahandle
);
}
static
int32_t
mndGetConfigMeta
(
SMnodeMsg
*
pMsg
,
SShowObj
*
pShow
,
STableMetaMsg
*
pMeta
)
{
static
int32_t
mndGetConfigMeta
(
SMnodeMsg
*
pMsg
,
SShowObj
*
pShow
,
STableMetaMsg
*
pMeta
)
{
int32_t
cols
=
0
;
int32_t
cols
=
0
;
...
@@ -600,8 +604,7 @@ static int32_t mndGetConfigMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg
...
@@ -600,8 +604,7 @@ static int32_t mndGetConfigMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg
pShow
->
numOfRows
=
TSDB_CONFIG_NUMBER
;
pShow
->
numOfRows
=
TSDB_CONFIG_NUMBER
;
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
pShow
->
pIter
=
NULL
;
strcpy
(
pMeta
->
tbFname
,
mndShowStr
(
pShow
->
type
));
strcpy
(
pMeta
->
tableFname
,
mndShowStr
(
pShow
->
type
));
return
0
;
return
0
;
}
}
...
@@ -676,7 +679,7 @@ static int32_t mndGetDnodeMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *
...
@@ -676,7 +679,7 @@ static int32_t mndGetDnodeMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *
pShow
->
bytes
[
cols
]
=
2
;
pShow
->
bytes
[
cols
]
=
2
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_SMALLINT
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_SMALLINT
;
strcpy
(
pSchema
[
cols
].
name
,
"
cor
es"
);
strcpy
(
pSchema
[
cols
].
name
,
"
max vnod
es"
);
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
cols
++
;
cols
++
;
...
@@ -708,7 +711,7 @@ static int32_t mndGetDnodeMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *
...
@@ -708,7 +711,7 @@ static int32_t mndGetDnodeMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *
pShow
->
numOfRows
=
sdbGetSize
(
pSdb
,
SDB_DNODE
);
pShow
->
numOfRows
=
sdbGetSize
(
pSdb
,
SDB_DNODE
);
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
strcpy
(
pMeta
->
t
able
Fname
,
mndShowStr
(
pShow
->
type
));
strcpy
(
pMeta
->
t
b
Fname
,
mndShowStr
(
pShow
->
type
));
return
0
;
return
0
;
}
}
...
@@ -740,7 +743,7 @@ static int32_t mndRetrieveDnodes(SMnodeMsg *pMsg, SShowObj *pShow, char *data, i
...
@@ -740,7 +743,7 @@ static int32_t mndRetrieveDnodes(SMnodeMsg *pMsg, SShowObj *pShow, char *data, i
cols
++
;
cols
++
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
*
(
int16_t
*
)
pWrite
=
pDnode
->
numOf
Cor
es
;
*
(
int16_t
*
)
pWrite
=
pDnode
->
numOf
SupportVnod
es
;
cols
++
;
cols
++
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
...
@@ -753,7 +756,11 @@ static int32_t mndRetrieveDnodes(SMnodeMsg *pMsg, SShowObj *pShow, char *data, i
...
@@ -753,7 +756,11 @@ static int32_t mndRetrieveDnodes(SMnodeMsg *pMsg, SShowObj *pShow, char *data, i
cols
++
;
cols
++
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
STR_TO_VARSTR
(
pWrite
,
offlineReason
[
pDnode
->
offlineReason
]);
if
(
pDnode
->
status
==
DND_STATUS_READY
)
{
STR_TO_VARSTR
(
pWrite
,
""
);
}
else
{
STR_TO_VARSTR
(
pWrite
,
offlineReason
[
pDnode
->
offlineReason
]);
}
cols
++
;
cols
++
;
numOfRows
++
;
numOfRows
++
;
...
...
source/dnode/mnode/impl/src/mndFunc.c
浏览文件 @
04057a39
...
@@ -429,7 +429,7 @@ static int32_t mndGetFuncMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *p
...
@@ -429,7 +429,7 @@ static int32_t mndGetFuncMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *p
pShow
->
numOfRows
=
sdbGetSize
(
pSdb
,
SDB_FUNC
);
pShow
->
numOfRows
=
sdbGetSize
(
pSdb
,
SDB_FUNC
);
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
strcpy
(
pMeta
->
t
able
Fname
,
"show funcs"
);
strcpy
(
pMeta
->
t
b
Fname
,
"show funcs"
);
return
0
;
return
0
;
}
}
...
...
source/dnode/mnode/impl/src/mndMnode.c
浏览文件 @
04057a39
...
@@ -405,7 +405,7 @@ static int32_t mndGetMnodeMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *
...
@@ -405,7 +405,7 @@ static int32_t mndGetMnodeMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *
pShow
->
numOfRows
=
sdbGetSize
(
pSdb
,
SDB_MNODE
);
pShow
->
numOfRows
=
sdbGetSize
(
pSdb
,
SDB_MNODE
);
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
strcpy
(
pMeta
->
t
able
Fname
,
mndShowStr
(
pShow
->
type
));
strcpy
(
pMeta
->
t
b
Fname
,
mndShowStr
(
pShow
->
type
));
return
0
;
return
0
;
}
}
...
...
source/dnode/mnode/impl/src/mndShow.c
浏览文件 @
04057a39
...
@@ -16,6 +16,8 @@
...
@@ -16,6 +16,8 @@
#define _DEFAULT_SOURCE
#define _DEFAULT_SOURCE
#include "mndShow.h"
#include "mndShow.h"
#define SHOW_STEP_SIZE 100
static
SShowObj
*
mndCreateShowObj
(
SMnode
*
pMnode
,
SShowMsg
*
pMsg
);
static
SShowObj
*
mndCreateShowObj
(
SMnode
*
pMnode
,
SShowMsg
*
pMsg
);
static
void
mndFreeShowObj
(
SShowObj
*
pShow
);
static
void
mndFreeShowObj
(
SShowObj
*
pShow
);
static
SShowObj
*
mndAcquireShowObj
(
SMnode
*
pMnode
,
int32_t
showId
);
static
SShowObj
*
mndAcquireShowObj
(
SMnode
*
pMnode
,
int32_t
showId
);
...
@@ -211,7 +213,7 @@ static int32_t mndProcessRetrieveMsg(SMnodeMsg *pMnodeMsg) {
...
@@ -211,7 +213,7 @@ static int32_t mndProcessRetrieveMsg(SMnodeMsg *pMnodeMsg) {
}
}
/* return no more than 100 tables in one round trip */
/* return no more than 100 tables in one round trip */
if
(
rowsToRead
>
100
)
rowsToRead
=
100
;
if
(
rowsToRead
>
SHOW_STEP_SIZE
)
rowsToRead
=
SHOW_STEP_SIZE
;
/*
/*
* the actual number of table may be larger than the value of pShow->numOfRows, if a query is
* the actual number of table may be larger than the value of pShow->numOfRows, if a query is
...
@@ -220,7 +222,7 @@ static int32_t mndProcessRetrieveMsg(SMnodeMsg *pMnodeMsg) {
...
@@ -220,7 +222,7 @@ static int32_t mndProcessRetrieveMsg(SMnodeMsg *pMnodeMsg) {
if
(
rowsToRead
<
0
)
rowsToRead
=
0
;
if
(
rowsToRead
<
0
)
rowsToRead
=
0
;
size
=
pShow
->
rowSize
*
rowsToRead
;
size
=
pShow
->
rowSize
*
rowsToRead
;
size
+=
100
;
size
+=
SHOW_STEP_SIZE
;
SRetrieveTableRsp
*
pRsp
=
rpcMallocCont
(
size
);
SRetrieveTableRsp
*
pRsp
=
rpcMallocCont
(
size
);
if
(
pRsp
==
NULL
)
{
if
(
pRsp
==
NULL
)
{
mndReleaseShowObj
(
pShow
,
false
);
mndReleaseShowObj
(
pShow
,
false
);
...
@@ -270,7 +272,7 @@ char *mndShowStr(int32_t showType) {
...
@@ -270,7 +272,7 @@ char *mndShowStr(int32_t showType) {
return
"show mnodes"
;
return
"show mnodes"
;
case
TSDB_MGMT_TABLE_VGROUP
:
case
TSDB_MGMT_TABLE_VGROUP
:
return
"show vgroups"
;
return
"show vgroups"
;
case
TSDB_MGMT_TABLE_ST
ABLE
:
case
TSDB_MGMT_TABLE_ST
B
:
return
"show stables"
;
return
"show stables"
;
case
TSDB_MGMT_TABLE_MODULE
:
case
TSDB_MGMT_TABLE_MODULE
:
return
"show modules"
;
return
"show modules"
;
...
...
source/dnode/mnode/impl/src/mndSt
able
.c
→
source/dnode/mnode/impl/src/mndSt
b
.c
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/dnode/mnode/impl/src/mndUser.c
浏览文件 @
04057a39
...
@@ -171,7 +171,7 @@ static int32_t mndUserActionDelete(SSdb *pSdb, SUserObj *pUser) {
...
@@ -171,7 +171,7 @@ static int32_t mndUserActionDelete(SSdb *pSdb, SUserObj *pUser) {
static
int32_t
mndUserActionUpdate
(
SSdb
*
pSdb
,
SUserObj
*
pOldUser
,
SUserObj
*
pNewUser
)
{
static
int32_t
mndUserActionUpdate
(
SSdb
*
pSdb
,
SUserObj
*
pOldUser
,
SUserObj
*
pNewUser
)
{
mTrace
(
"user:%s, perform update action"
,
pOldUser
->
user
);
mTrace
(
"user:%s, perform update action"
,
pOldUser
->
user
);
memcpy
(
pOldUser
->
user
,
pNewUser
->
user
,
TSDB_USER_LEN
);
memcpy
(
pOldUser
->
user
,
pNewUser
->
user
,
TSDB_USER_LEN
);
memcpy
(
pOldUser
->
pass
,
pNewUser
->
pass
,
TSDB_
KEY
_LEN
);
memcpy
(
pOldUser
->
pass
,
pNewUser
->
pass
,
TSDB_
PASSWORD
_LEN
);
memcpy
(
pOldUser
->
acct
,
pNewUser
->
acct
,
TSDB_USER_LEN
);
memcpy
(
pOldUser
->
acct
,
pNewUser
->
acct
,
TSDB_USER_LEN
);
pOldUser
->
createdTime
=
pNewUser
->
createdTime
;
pOldUser
->
createdTime
=
pNewUser
->
createdTime
;
pOldUser
->
updateTime
=
pNewUser
->
updateTime
;
pOldUser
->
updateTime
=
pNewUser
->
updateTime
;
...
@@ -489,7 +489,7 @@ static int32_t mndGetUserMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *p
...
@@ -489,7 +489,7 @@ static int32_t mndGetUserMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *p
pShow
->
numOfRows
=
sdbGetSize
(
pSdb
,
SDB_USER
);
pShow
->
numOfRows
=
sdbGetSize
(
pSdb
,
SDB_USER
);
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
strcpy
(
pMeta
->
t
able
Fname
,
mndShowStr
(
pShow
->
type
));
strcpy
(
pMeta
->
t
b
Fname
,
mndShowStr
(
pShow
->
type
));
return
0
;
return
0
;
}
}
...
...
source/dnode/mnode/impl/src/mndVgroup.c
浏览文件 @
04057a39
...
@@ -45,7 +45,7 @@ static void mndCancelGetNextVnode(SMnode *pMnode, void *pIter);
...
@@ -45,7 +45,7 @@ static void mndCancelGetNextVnode(SMnode *pMnode, void *pIter);
int32_t
mndInitVgroup
(
SMnode
*
pMnode
)
{
int32_t
mndInitVgroup
(
SMnode
*
pMnode
)
{
SSdbTable
table
=
{.
sdbType
=
SDB_VGROUP
,
SSdbTable
table
=
{.
sdbType
=
SDB_VGROUP
,
.
keyType
=
SDB_KEY_
BINARY
,
.
keyType
=
SDB_KEY_
INT32
,
.
encodeFp
=
(
SdbEncodeFp
)
mndVgroupActionEncode
,
.
encodeFp
=
(
SdbEncodeFp
)
mndVgroupActionEncode
,
.
decodeFp
=
(
SdbDecodeFp
)
mndVgroupActionDecode
,
.
decodeFp
=
(
SdbDecodeFp
)
mndVgroupActionDecode
,
.
insertFp
=
(
SdbInsertFp
)
mndVgroupActionInsert
,
.
insertFp
=
(
SdbInsertFp
)
mndVgroupActionInsert
,
...
@@ -238,7 +238,7 @@ static int32_t mndGetVgroupMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg
...
@@ -238,7 +238,7 @@ static int32_t mndGetVgroupMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg
}
}
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
strcpy
(
pMeta
->
t
able
Fname
,
mndShowStr
(
pShow
->
type
));
strcpy
(
pMeta
->
t
b
Fname
,
mndShowStr
(
pShow
->
type
));
return
0
;
return
0
;
}
}
...
@@ -337,7 +337,7 @@ static int32_t mndGetVnodeMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *
...
@@ -337,7 +337,7 @@ static int32_t mndGetVnodeMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *
pShow
->
replica
=
dnodeId
;
pShow
->
replica
=
dnodeId
;
pShow
->
numOfRows
=
mndGetVnodesNum
(
pMnode
,
dnodeId
);
pShow
->
numOfRows
=
mndGetVnodesNum
(
pMnode
,
dnodeId
);
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
strcpy
(
pMeta
->
t
able
Fname
,
mndShowStr
(
pShow
->
type
));
strcpy
(
pMeta
->
t
b
Fname
,
mndShowStr
(
pShow
->
type
));
return
0
;
return
0
;
}
}
...
...
source/dnode/mnode/impl/src/mnode.c
浏览文件 @
04057a39
...
@@ -24,7 +24,7 @@
...
@@ -24,7 +24,7 @@
#include "mndMnode.h"
#include "mndMnode.h"
#include "mndProfile.h"
#include "mndProfile.h"
#include "mndShow.h"
#include "mndShow.h"
#include "mndSt
able
.h"
#include "mndSt
b
.h"
#include "mndSync.h"
#include "mndSync.h"
#include "mndTelem.h"
#include "mndTelem.h"
#include "mndTrans.h"
#include "mndTrans.h"
...
@@ -131,7 +131,7 @@ static int32_t mndInitSteps(SMnode *pMnode) {
...
@@ -131,7 +131,7 @@ static int32_t mndInitSteps(SMnode *pMnode) {
if
(
mndAllocStep
(
pMnode
,
"mnode-user"
,
mndInitUser
,
mndCleanupUser
)
!=
0
)
return
-
1
;
if
(
mndAllocStep
(
pMnode
,
"mnode-user"
,
mndInitUser
,
mndCleanupUser
)
!=
0
)
return
-
1
;
if
(
mndAllocStep
(
pMnode
,
"mnode-db"
,
mndInitDb
,
mndCleanupDb
)
!=
0
)
return
-
1
;
if
(
mndAllocStep
(
pMnode
,
"mnode-db"
,
mndInitDb
,
mndCleanupDb
)
!=
0
)
return
-
1
;
if
(
mndAllocStep
(
pMnode
,
"mnode-vgroup"
,
mndInitVgroup
,
mndCleanupVgroup
)
!=
0
)
return
-
1
;
if
(
mndAllocStep
(
pMnode
,
"mnode-vgroup"
,
mndInitVgroup
,
mndCleanupVgroup
)
!=
0
)
return
-
1
;
if
(
mndAllocStep
(
pMnode
,
"mnode-st
able"
,
mndInitStable
,
mndCleanupStable
)
!=
0
)
return
-
1
;
if
(
mndAllocStep
(
pMnode
,
"mnode-st
b"
,
mndInitStb
,
mndCleanupStb
)
!=
0
)
return
-
1
;
if
(
mndAllocStep
(
pMnode
,
"mnode-func"
,
mndInitFunc
,
mndCleanupFunc
)
!=
0
)
return
-
1
;
if
(
mndAllocStep
(
pMnode
,
"mnode-func"
,
mndInitFunc
,
mndCleanupFunc
)
!=
0
)
return
-
1
;
if
(
pMnode
->
clusterId
<=
0
)
{
if
(
pMnode
->
clusterId
<=
0
)
{
if
(
mndAllocStep
(
pMnode
,
"mnode-sdb-deploy"
,
mndDeploySdb
,
NULL
)
!=
0
)
return
-
1
;
if
(
mndAllocStep
(
pMnode
,
"mnode-sdb-deploy"
,
mndDeploySdb
,
NULL
)
!=
0
)
return
-
1
;
...
@@ -205,7 +205,6 @@ static int32_t mndSetOptions(SMnode *pMnode, const SMnodeOpt *pOption) {
...
@@ -205,7 +205,6 @@ static int32_t mndSetOptions(SMnode *pMnode, const SMnodeOpt *pOption) {
pMnode
->
cfg
.
sver
=
pOption
->
cfg
.
sver
;
pMnode
->
cfg
.
sver
=
pOption
->
cfg
.
sver
;
pMnode
->
cfg
.
enableTelem
=
pOption
->
cfg
.
enableTelem
;
pMnode
->
cfg
.
enableTelem
=
pOption
->
cfg
.
enableTelem
;
pMnode
->
cfg
.
statusInterval
=
pOption
->
cfg
.
statusInterval
;
pMnode
->
cfg
.
statusInterval
=
pOption
->
cfg
.
statusInterval
;
pMnode
->
cfg
.
mnodeEqualVnodeNum
=
pOption
->
cfg
.
mnodeEqualVnodeNum
;
pMnode
->
cfg
.
shellActivityTimer
=
pOption
->
cfg
.
shellActivityTimer
;
pMnode
->
cfg
.
shellActivityTimer
=
pOption
->
cfg
.
shellActivityTimer
;
pMnode
->
cfg
.
timezone
=
strdup
(
pOption
->
cfg
.
timezone
);
pMnode
->
cfg
.
timezone
=
strdup
(
pOption
->
cfg
.
timezone
);
pMnode
->
cfg
.
locale
=
strdup
(
pOption
->
cfg
.
locale
);
pMnode
->
cfg
.
locale
=
strdup
(
pOption
->
cfg
.
locale
);
...
@@ -215,7 +214,7 @@ static int32_t mndSetOptions(SMnode *pMnode, const SMnodeOpt *pOption) {
...
@@ -215,7 +214,7 @@ static int32_t mndSetOptions(SMnode *pMnode, const SMnodeOpt *pOption) {
if
(
pMnode
->
sendMsgToDnodeFp
==
NULL
||
pMnode
->
sendMsgToMnodeFp
==
NULL
||
pMnode
->
sendRedirectMsgFp
==
NULL
||
if
(
pMnode
->
sendMsgToDnodeFp
==
NULL
||
pMnode
->
sendMsgToMnodeFp
==
NULL
||
pMnode
->
sendRedirectMsgFp
==
NULL
||
pMnode
->
putMsgToApplyMsgFp
==
NULL
||
pMnode
->
dnodeId
<
0
||
pMnode
->
clusterId
<
0
||
pMnode
->
putMsgToApplyMsgFp
==
NULL
||
pMnode
->
dnodeId
<
0
||
pMnode
->
clusterId
<
0
||
pMnode
->
cfg
.
statusInterval
<
1
||
pOption
->
cfg
.
mnodeEqualVnodeNum
<
0
)
{
pMnode
->
cfg
.
statusInterval
<
1
)
{
terrno
=
TSDB_CODE_MND_INVALID_OPTIONS
;
terrno
=
TSDB_CODE_MND_INVALID_OPTIONS
;
return
-
1
;
return
-
1
;
}
}
...
@@ -337,8 +336,8 @@ SMnodeMsg *mndInitMsg(SMnode *pMnode, SRpcMsg *pRpcMsg) {
...
@@ -337,8 +336,8 @@ SMnodeMsg *mndInitMsg(SMnode *pMnode, SRpcMsg *pRpcMsg) {
}
}
SRpcConnInfo
connInfo
=
{
0
};
SRpcConnInfo
connInfo
=
{
0
};
if
(
rpcGetConnInfo
(
pRpcMsg
->
handle
,
&
connInfo
)
!=
0
)
{
if
(
(
pRpcMsg
->
msgType
&
1U
)
&&
rpcGetConnInfo
(
pRpcMsg
->
handle
,
&
connInfo
)
!=
0
)
{
mndCleanupMsg
(
pMsg
);
taosFreeQitem
(
pMsg
);
terrno
=
TSDB_CODE_MND_NO_USER_FROM_CONN
;
terrno
=
TSDB_CODE_MND_NO_USER_FROM_CONN
;
mError
(
"RPC:%p, app:%p failed to create msg since %s"
,
pRpcMsg
->
handle
,
pRpcMsg
->
ahandle
,
terrstr
());
mError
(
"RPC:%p, app:%p failed to create msg since %s"
,
pRpcMsg
->
handle
,
pRpcMsg
->
ahandle
,
terrstr
());
return
NULL
;
return
NULL
;
...
@@ -355,6 +354,8 @@ SMnodeMsg *mndInitMsg(SMnode *pMnode, SRpcMsg *pRpcMsg) {
...
@@ -355,6 +354,8 @@ SMnodeMsg *mndInitMsg(SMnode *pMnode, SRpcMsg *pRpcMsg) {
void
mndCleanupMsg
(
SMnodeMsg
*
pMsg
)
{
void
mndCleanupMsg
(
SMnodeMsg
*
pMsg
)
{
mTrace
(
"msg:%p, app:%p is destroyed, RPC:%p"
,
pMsg
,
pMsg
->
rpcMsg
.
ahandle
,
pMsg
->
rpcMsg
.
handle
);
mTrace
(
"msg:%p, app:%p is destroyed, RPC:%p"
,
pMsg
,
pMsg
->
rpcMsg
.
ahandle
,
pMsg
->
rpcMsg
.
handle
);
rpcFreeCont
(
pMsg
->
rpcMsg
.
pCont
);
pMsg
->
rpcMsg
.
pCont
=
NULL
;
taosFreeQitem
(
pMsg
);
taosFreeQitem
(
pMsg
);
}
}
...
@@ -368,7 +369,7 @@ static void mndProcessRpcMsg(SMnodeMsg *pMsg) {
...
@@ -368,7 +369,7 @@ static void mndProcessRpcMsg(SMnodeMsg *pMsg) {
int32_t
code
=
0
;
int32_t
code
=
0
;
int32_t
msgType
=
pMsg
->
rpcMsg
.
msgType
;
int32_t
msgType
=
pMsg
->
rpcMsg
.
msgType
;
void
*
ahandle
=
pMsg
->
rpcMsg
.
ahandle
;
void
*
ahandle
=
pMsg
->
rpcMsg
.
ahandle
;
bool
isReq
=
(
msgType
%
2
==
1
);
bool
isReq
=
(
msgType
&
1U
);
mTrace
(
"msg:%p, app:%p type:%s will be processed"
,
pMsg
,
ahandle
,
taosMsg
[
msgType
]);
mTrace
(
"msg:%p, app:%p type:%s will be processed"
,
pMsg
,
ahandle
,
taosMsg
[
msgType
]);
...
@@ -430,3 +431,10 @@ void mndProcessWriteMsg(SMnodeMsg *pMsg) { mndProcessRpcMsg(pMsg); }
...
@@ -430,3 +431,10 @@ void mndProcessWriteMsg(SMnodeMsg *pMsg) { mndProcessRpcMsg(pMsg); }
void
mndProcessSyncMsg
(
SMnodeMsg
*
pMsg
)
{
mndProcessRpcMsg
(
pMsg
);
}
void
mndProcessSyncMsg
(
SMnodeMsg
*
pMsg
)
{
mndProcessRpcMsg
(
pMsg
);
}
void
mndProcessApplyMsg
(
SMnodeMsg
*
pMsg
)
{}
void
mndProcessApplyMsg
(
SMnodeMsg
*
pMsg
)
{}
uint64_t
mndGenerateUid
(
char
*
name
,
int32_t
len
)
{
int64_t
us
=
taosGetTimestampUs
();
int32_t
hashval
=
MurmurHash3_32
(
name
,
len
);
uint64_t
x
=
(
us
&
0x000000FFFFFFFFFF
)
<<
24
;
return
x
+
((
hashval
&
((
1ul
<<
16
)
-
1ul
))
<<
8
)
+
(
taosRand
()
&
((
1ul
<<
8
)
-
1ul
));
}
\ No newline at end of file
source/libs/index/inc/index_fst.h
浏览文件 @
04057a39
...
@@ -26,10 +26,24 @@ extern "C" {
...
@@ -26,10 +26,24 @@ extern "C" {
#include "index_fst_counting_writer.h"
#include "index_fst_counting_writer.h"
#include "index_fst_automation.h"
#include "index_fst_automation.h"
#define OUTPUT_PREFIX(a, b) ((a) > (b) ? (b) : (a)
typedef
struct
Fst
Fst
;
typedef
struct
FstNode
FstNode
;
typedef
struct
FstNode
FstNode
;
#define OUTPUT_PREFIX(a, b) ((a) > (b) ? (b) : (a)
typedef
enum
{
Included
,
Excluded
,
Unbounded
}
FstBound
;
typedef
struct
FstBoundWithData
{
FstSlice
data
;
FstBound
type
;
}
FstBoundWithData
;
typedef
struct
FstStreamBuilder
{
Fst
*
fst
;
AutomationCtx
*
aut
;
FstBoundWithData
*
min
;
FstBoundWithData
*
max
;
}
FstStreamBuilder
,
FstStreamWithStateBuilder
;
typedef
struct
FstRange
{
typedef
struct
FstRange
{
uint64_t
start
;
uint64_t
start
;
...
@@ -39,16 +53,9 @@ typedef struct FstRange {
...
@@ -39,16 +53,9 @@ typedef struct FstRange {
typedef
enum
{
GE
,
GT
,
LE
,
LT
}
RangeType
;
typedef
enum
{
GE
,
GT
,
LE
,
LT
}
RangeType
;
typedef
enum
{
OneTransNext
,
OneTrans
,
AnyTrans
,
EmptyFinal
}
State
;
typedef
enum
{
OneTransNext
,
OneTrans
,
AnyTrans
,
EmptyFinal
}
State
;
typedef
enum
{
Ordered
,
OutOfOrdered
,
DuplicateKey
}
OrderType
;
typedef
enum
{
Ordered
,
OutOfOrdered
,
DuplicateKey
}
OrderType
;
typedef
enum
{
Included
,
Excluded
,
Unbounded
}
FstBound
;
typedef
struct
FstBoundWithData
{
FstSlice
data
;
FstBound
type
;
}
FstBoundWithData
;
FstBoundWithData
*
fstBoundStateCreate
(
FstBound
type
,
FstSlice
*
data
);
FstBoundWithData
*
fstBoundStateCreate
(
FstBound
type
,
FstSlice
*
data
);
bool
fstBoundWithDataExceededBy
(
FstBoundWithData
*
bound
,
FstSlice
*
slice
);
bool
fstBoundWithDataExceededBy
(
FstBoundWithData
*
bound
,
FstSlice
*
slice
);
bool
fstBoundWithDataIsEmpty
(
FstBoundWithData
*
bound
);
bool
fstBoundWithDataIsEmpty
(
FstBoundWithData
*
bound
);
...
@@ -60,8 +67,6 @@ typedef struct FstOutput {
...
@@ -60,8 +67,6 @@ typedef struct FstOutput {
Output
out
;
Output
out
;
}
FstOutput
;
}
FstOutput
;
/*
/*
*
*
* UnFinished node and helper function
* UnFinished node and helper function
...
@@ -275,6 +280,9 @@ FstNode* fstGetRoot(Fst *fst);
...
@@ -275,6 +280,9 @@ FstNode* fstGetRoot(Fst *fst);
FstType
fstGetType
(
Fst
*
fst
);
FstType
fstGetType
(
Fst
*
fst
);
CompiledAddr
fstGetRootAddr
(
Fst
*
fst
);
CompiledAddr
fstGetRootAddr
(
Fst
*
fst
);
Output
fstEmptyFinalOutput
(
Fst
*
fst
,
bool
*
null
);
Output
fstEmptyFinalOutput
(
Fst
*
fst
,
bool
*
null
);
FstStreamBuilder
*
fstSearch
(
Fst
*
fst
,
AutomationCtx
*
ctx
);
FstStreamWithStateBuilder
*
fstSearchWithState
(
Fst
*
fst
,
AutomationCtx
*
ctx
);
bool
fstVerify
(
Fst
*
fst
);
bool
fstVerify
(
Fst
*
fst
);
...
@@ -291,13 +299,13 @@ typedef struct StreamState {
...
@@ -291,13 +299,13 @@ typedef struct StreamState {
void
streamStateDestroy
(
void
*
s
);
void
streamStateDestroy
(
void
*
s
);
typedef
struct
StreamWithState
{
typedef
struct
StreamWithState
{
Fst
*
fst
;
Fst
*
fst
;
Automation
*
aut
;
Automation
Ctx
*
aut
;
SArray
*
inp
;
SArray
*
inp
;
FstOutput
emptyOutput
;
FstOutput
emptyOutput
;
SArray
*
stack
;
// <StreamState>
SArray
*
stack
;
// <StreamState>
FstBoundWithData
*
endAt
;
FstBoundWithData
*
endAt
;
}
StreamWithState
;
}
StreamWithState
;
typedef
struct
StreamWithStateResult
{
typedef
struct
StreamWithStateResult
{
FstSlice
data
;
FstSlice
data
;
...
@@ -310,19 +318,13 @@ StreamWithStateResult *swsResultCreate(FstSlice *data, FstOutput fOut, void *sta
...
@@ -310,19 +318,13 @@ StreamWithStateResult *swsResultCreate(FstSlice *data, FstOutput fOut, void *sta
void
swsResultDestroy
(
StreamWithStateResult
*
result
);
void
swsResultDestroy
(
StreamWithStateResult
*
result
);
typedef
void
*
(
*
StreamCallback
)(
void
*
);
typedef
void
*
(
*
StreamCallback
)(
void
*
);
StreamWithState
*
streamWithStateCreate
(
Fst
*
fst
,
Automation
*
automation
,
FstBoundWithData
*
min
,
FstBoundWithData
*
max
)
;
StreamWithState
*
streamWithStateCreate
(
Fst
*
fst
,
Automation
Ctx
*
automation
,
FstBoundWithData
*
min
,
FstBoundWithData
*
max
)
;
void
streamWithStateDestroy
(
StreamWithState
*
sws
);
void
streamWithStateDestroy
(
StreamWithState
*
sws
);
bool
streamWithStateSeekMin
(
StreamWithState
*
sws
,
FstBoundWithData
*
min
);
bool
streamWithStateSeekMin
(
StreamWithState
*
sws
,
FstBoundWithData
*
min
);
StreamWithStateResult
*
streamWithStateNextWith
(
StreamWithState
*
sws
,
StreamCallback
callback
);
typedef
struct
FstStreamBuilder
{
StreamWithStateResult
*
streamWithStateNextWith
(
StreamWithState
*
sws
,
StreamCallback
callback
);
Fst
*
fst
;
Automation
*
aut
;
FstBoundWithData
*
min
;
FstBoundWithData
*
max
;
}
FstStreamBuilder
;
FstStreamBuilder
*
fstStreamBuilderCreate
(
Fst
*
fst
,
Automation
*
aut
);
FstStreamBuilder
*
fstStreamBuilderCreate
(
Fst
*
fst
,
Automation
Ctx
*
aut
);
// set up bound range
// set up bound range
// refator, simple code by marco
// refator, simple code by marco
...
...
source/libs/index/inc/index_fst_automation.h
浏览文件 @
04057a39
...
@@ -19,33 +19,50 @@
...
@@ -19,33 +19,50 @@
extern
"C"
{
extern
"C"
{
#endif
#endif
#include "index_fst_util.h"
typedef
struct
AutomationCtx
AutomationCtx
;
typedef
struct
AutomationCtx
AutomationCtx
;
typedef
enum
AutomationType
{
AUTOMATION_PREFIX
,
AUTMMATION_MATCH
}
AutomationType
;
typedef
struct
StartWith
{
typedef
struct
StartWith
{
AutomationCtx
*
autoSelf
;
AutomationCtx
*
autoSelf
;
}
StartWith
;
}
StartWith
;
typedef
struct
Complement
{
typedef
struct
Complement
{
AutomationCtx
*
autoSelf
;
AutomationCtx
*
autoSelf
;
}
Complement
;
}
Complement
;
// automation
// automation
typedef
struct
AutomationCtx
{
typedef
struct
AutomationCtx
{
// automation interface
AutomationType
type
;
void
*
data
;
void
*
data
;
}
AutomationCtx
;
}
AutomationCtx
;
typedef
struct
Automation
{
void
*
(
*
start
)()
;
bool
(
*
isMatch
)(
void
*
);
bool
(
*
canMatch
)(
void
*
data
);
bool
(
*
willAlwaysMatch
)(
void
*
state
);
void
*
(
*
accept
)(
void
*
state
,
uint8_t
byte
);
void
*
(
*
acceptEof
)(
void
*
state
);
void
*
data
;
}
Automation
;
typedef
enum
StartWithStateKind
{
Done
,
Running
}
StartWithStateKind
;
typedef
struct
StartWithStateValue
{
StartWithStateKind
kind
;
void
*
value
;
}
StartWithStateValue
;
typedef
struct
AutomationFunc
{
void
*
(
*
start
)(
AutomationCtx
*
ctx
)
;
bool
(
*
isMatch
)(
AutomationCtx
*
ctx
,
void
*
);
bool
(
*
canMatch
)(
AutomationCtx
*
ctx
,
void
*
data
);
bool
(
*
willAlwaysMatch
)(
AutomationCtx
*
ctx
,
void
*
state
);
void
*
(
*
accept
)(
AutomationCtx
*
ctx
,
void
*
state
,
uint8_t
byte
);
void
*
(
*
acceptEof
)(
AutomationCtx
*
ct
,
void
*
state
);
}
AutomationFunc
;
AutomationCtx
*
automCtxCreate
(
void
*
data
,
AutomationType
type
);
void
automCtxDestroy
(
AutomationCtx
*
ctx
);
extern
AutomationFunc
automFuncs
[];
#ifdef __cplusplus
#ifdef __cplusplus
}
}
#endif
#endif
...
...
source/libs/index/src/index_fst.c
浏览文件 @
04057a39
...
@@ -1072,7 +1072,6 @@ bool fstGet(Fst *fst, FstSlice *b, Output *out) {
...
@@ -1072,7 +1072,6 @@ bool fstGet(Fst *fst, FstSlice *b, Output *out) {
tOut
+=
trn
.
out
;
tOut
+=
trn
.
out
;
root
=
fstGetNode
(
fst
,
trn
.
addr
);
root
=
fstGetNode
(
fst
,
trn
.
addr
);
taosArrayPush
(
nodes
,
&
root
);
taosArrayPush
(
nodes
,
&
root
);
//fstNodeDestroy(root);
}
}
if
(
!
FST_NODE_IS_FINAL
(
root
))
{
if
(
!
FST_NODE_IS_FINAL
(
root
))
{
return
false
;
return
false
;
...
@@ -1091,6 +1090,12 @@ bool fstGet(Fst *fst, FstSlice *b, Output *out) {
...
@@ -1091,6 +1090,12 @@ bool fstGet(Fst *fst, FstSlice *b, Output *out) {
return
true
;
return
true
;
}
}
FstStreamBuilder
*
fstSearch
(
Fst
*
fst
,
AutomationCtx
*
ctx
)
{
return
fstStreamBuilderCreate
(
fst
,
ctx
);
}
FstStreamWithStateBuilder
*
fstSearchWithState
(
Fst
*
fst
,
AutomationCtx
*
ctx
)
{
return
fstStreamBuilderCreate
(
fst
,
ctx
);
}
FstNode
*
fstGetRoot
(
Fst
*
fst
)
{
FstNode
*
fstGetRoot
(
Fst
*
fst
)
{
if
(
fst
->
root
!=
NULL
)
{
if
(
fst
->
root
!=
NULL
)
{
...
@@ -1177,7 +1182,7 @@ void fstBoundDestroy(FstBoundWithData *bound) {
...
@@ -1177,7 +1182,7 @@ void fstBoundDestroy(FstBoundWithData *bound) {
free
(
bound
);
free
(
bound
);
}
}
StreamWithState
*
streamWithStateCreate
(
Fst
*
fst
,
Automation
*
automation
,
FstBoundWithData
*
min
,
FstBoundWithData
*
max
)
{
StreamWithState
*
streamWithStateCreate
(
Fst
*
fst
,
Automation
Ctx
*
automation
,
FstBoundWithData
*
min
,
FstBoundWithData
*
max
)
{
StreamWithState
*
sws
=
calloc
(
1
,
sizeof
(
StreamWithState
));
StreamWithState
*
sws
=
calloc
(
1
,
sizeof
(
StreamWithState
));
if
(
sws
==
NULL
)
{
return
NULL
;
}
if
(
sws
==
NULL
)
{
return
NULL
;
}
...
@@ -1204,6 +1209,8 @@ void streamWithStateDestroy(StreamWithState *sws) {
...
@@ -1204,6 +1209,8 @@ void streamWithStateDestroy(StreamWithState *sws) {
}
}
bool
streamWithStateSeekMin
(
StreamWithState
*
sws
,
FstBoundWithData
*
min
)
{
bool
streamWithStateSeekMin
(
StreamWithState
*
sws
,
FstBoundWithData
*
min
)
{
AutomationCtx
*
aut
=
sws
->
aut
;
if
(
fstBoundWithDataIsEmpty
(
min
))
{
if
(
fstBoundWithDataIsEmpty
(
min
))
{
if
(
fstBoundWithDataIsIncluded
(
min
))
{
if
(
fstBoundWithDataIsIncluded
(
min
))
{
sws
->
emptyOutput
.
out
=
fstEmptyFinalOutput
(
sws
->
fst
,
&
(
sws
->
emptyOutput
.
null
));
sws
->
emptyOutput
.
out
=
fstEmptyFinalOutput
(
sws
->
fst
,
&
(
sws
->
emptyOutput
.
null
));
...
@@ -1211,7 +1218,7 @@ bool streamWithStateSeekMin(StreamWithState *sws, FstBoundWithData *min) {
...
@@ -1211,7 +1218,7 @@ bool streamWithStateSeekMin(StreamWithState *sws, FstBoundWithData *min) {
StreamState
s
=
{.
node
=
fstGetRoot
(
sws
->
fst
),
StreamState
s
=
{.
node
=
fstGetRoot
(
sws
->
fst
),
.
trans
=
0
,
.
trans
=
0
,
.
out
=
{.
null
=
false
,
.
out
=
0
},
.
out
=
{.
null
=
false
,
.
out
=
0
},
.
autState
=
sws
->
aut
->
start
(
)};
// auto.start callback
.
autState
=
automFuncs
[
aut
->
type
].
start
(
aut
)};
// auto.start callback
taosArrayPush
(
sws
->
stack
,
&
s
);
taosArrayPush
(
sws
->
stack
,
&
s
);
return
true
;
return
true
;
}
}
...
@@ -1229,7 +1236,8 @@ bool streamWithStateSeekMin(StreamWithState *sws, FstBoundWithData *min) {
...
@@ -1229,7 +1236,8 @@ bool streamWithStateSeekMin(StreamWithState *sws, FstBoundWithData *min) {
FstNode
*
node
=
fstGetRoot
(
sws
->
fst
);
FstNode
*
node
=
fstGetRoot
(
sws
->
fst
);
Output
out
=
0
;
Output
out
=
0
;
void
*
autState
=
sws
->
aut
->
start
();
//void* autState = sws->aut->start();
void
*
autState
=
automFuncs
[
aut
->
type
].
start
(
aut
);
int32_t
len
;
int32_t
len
;
uint8_t
*
data
=
fstSliceData
(
key
,
&
len
);
uint8_t
*
data
=
fstSliceData
(
key
,
&
len
);
...
@@ -1241,7 +1249,8 @@ bool streamWithStateSeekMin(StreamWithState *sws, FstBoundWithData *min) {
...
@@ -1241,7 +1249,8 @@ bool streamWithStateSeekMin(StreamWithState *sws, FstBoundWithData *min) {
FstTransition
trn
;
FstTransition
trn
;
fstNodeGetTransitionAt
(
node
,
res
,
&
trn
);
fstNodeGetTransitionAt
(
node
,
res
,
&
trn
);
void
*
preState
=
autState
;
void
*
preState
=
autState
;
autState
=
sws
->
aut
->
accept
(
preState
,
b
);
// autState = sws->aut->accept(preState, b);
autState
=
automFuncs
[
aut
->
type
].
accept
(
aut
,
preState
,
b
);
taosArrayPush
(
sws
->
inp
,
&
b
);
taosArrayPush
(
sws
->
inp
,
&
b
);
StreamState
s
=
{.
node
=
node
,
StreamState
s
=
{.
node
=
node
,
.
trans
=
res
+
1
,
.
trans
=
res
+
1
,
...
@@ -1298,6 +1307,7 @@ bool streamWithStateSeekMin(StreamWithState *sws, FstBoundWithData *min) {
...
@@ -1298,6 +1307,7 @@ bool streamWithStateSeekMin(StreamWithState *sws, FstBoundWithData *min) {
}
}
StreamWithStateResult
*
streamWithStateNextWith
(
StreamWithState
*
sws
,
StreamCallback
callback
)
{
StreamWithStateResult
*
streamWithStateNextWith
(
StreamWithState
*
sws
,
StreamCallback
callback
)
{
AutomationCtx
*
aut
=
sws
->
aut
;
FstOutput
output
=
sws
->
emptyOutput
;
FstOutput
output
=
sws
->
emptyOutput
;
if
(
output
.
null
==
false
)
{
if
(
output
.
null
==
false
)
{
FstSlice
emptySlice
=
fstSliceCreate
(
NULL
,
0
);
FstSlice
emptySlice
=
fstSliceCreate
(
NULL
,
0
);
...
@@ -1306,15 +1316,15 @@ StreamWithStateResult *streamWithStateNextWith(StreamWithState *sws, StreamCallb
...
@@ -1306,15 +1316,15 @@ StreamWithStateResult *streamWithStateNextWith(StreamWithState *sws, StreamCallb
sws
->
stack
=
(
SArray
*
)
taosArrayInit
(
256
,
sizeof
(
StreamState
));
sws
->
stack
=
(
SArray
*
)
taosArrayInit
(
256
,
sizeof
(
StreamState
));
return
NULL
;
return
NULL
;
}
}
void
*
start
=
sws
->
aut
->
start
(
);
void
*
start
=
automFuncs
[
aut
->
type
].
start
(
aut
);
if
(
sws
->
aut
->
isMatch
(
start
))
{
if
(
automFuncs
[
aut
->
type
].
isMatch
(
aut
,
start
))
{
FstSlice
s
=
fstSliceCreate
(
NULL
,
0
);
FstSlice
s
=
fstSliceCreate
(
NULL
,
0
);
return
swsResultCreate
(
&
s
,
output
,
callback
(
start
));
return
swsResultCreate
(
&
s
,
output
,
callback
(
start
));
}
}
}
}
while
(
taosArrayGetSize
(
sws
->
stack
)
>
0
)
{
while
(
taosArrayGetSize
(
sws
->
stack
)
>
0
)
{
StreamState
*
p
=
(
StreamState
*
)
taosArrayPop
(
sws
->
stack
);
StreamState
*
p
=
(
StreamState
*
)
taosArrayPop
(
sws
->
stack
);
if
(
p
->
trans
>=
FST_NODE_LEN
(
p
->
node
)
||
!
sws
->
aut
->
canMatch
(
p
->
autState
))
{
if
(
p
->
trans
>=
FST_NODE_LEN
(
p
->
node
)
||
automFuncs
[
aut
->
type
].
canMatch
(
aut
,
p
->
autState
))
{
if
(
FST_NODE_ADDR
(
p
->
node
)
!=
fstGetRootAddr
(
sws
->
fst
))
{
if
(
FST_NODE_ADDR
(
p
->
node
)
!=
fstGetRootAddr
(
sws
->
fst
))
{
taosArrayPop
(
sws
->
inp
);
taosArrayPop
(
sws
->
inp
);
}
}
...
@@ -1324,16 +1334,18 @@ StreamWithStateResult *streamWithStateNextWith(StreamWithState *sws, StreamCallb
...
@@ -1324,16 +1334,18 @@ StreamWithStateResult *streamWithStateNextWith(StreamWithState *sws, StreamCallb
FstTransition
trn
;
FstTransition
trn
;
fstNodeGetTransitionAt
(
p
->
node
,
p
->
trans
,
&
trn
);
fstNodeGetTransitionAt
(
p
->
node
,
p
->
trans
,
&
trn
);
Output
out
=
p
->
out
.
out
+
trn
.
out
;
Output
out
=
p
->
out
.
out
+
trn
.
out
;
void
*
nextState
=
sws
->
aut
->
accept
(
p
->
autState
,
trn
.
inp
);
void
*
nextState
=
automFuncs
[
aut
->
type
].
accept
(
aut
,
p
->
autState
,
trn
.
inp
);
void
*
tState
=
callback
(
nextState
);
void
*
tState
=
callback
(
nextState
);
bool
isMatch
=
sws
->
aut
->
isMatch
(
nextState
);
bool
isMatch
=
automFuncs
[
aut
->
type
].
isMatch
(
aut
,
nextState
);
//bool isMatch = sws->aut->isMatch(nextState);
FstNode
*
nextNode
=
fstGetNode
(
sws
->
fst
,
trn
.
addr
);
FstNode
*
nextNode
=
fstGetNode
(
sws
->
fst
,
trn
.
addr
);
taosArrayPush
(
sws
->
inp
,
&
(
trn
.
inp
));
taosArrayPush
(
sws
->
inp
,
&
(
trn
.
inp
));
if
(
FST_NODE_IS_FINAL
(
nextNode
))
{
if
(
FST_NODE_IS_FINAL
(
nextNode
))
{
void
*
eofState
=
sws
->
aut
->
acceptEof
(
nextState
);
//void *eofState = sws->aut->acceptEof(nextState);
void
*
eofState
=
automFuncs
[
aut
->
type
].
acceptEof
(
aut
,
nextState
);
if
(
eofState
!=
NULL
)
{
if
(
eofState
!=
NULL
)
{
isMatch
=
sws
->
aut
->
isMatch
(
eofState
);
isMatch
=
automFuncs
[
aut
->
type
].
isMatch
(
aut
,
eofState
);
}
}
}
}
StreamState
s1
=
{
.
node
=
p
->
node
,
.
trans
=
p
->
trans
+
1
,
.
out
=
p
->
out
,
.
autState
=
p
->
autState
};
StreamState
s1
=
{
.
node
=
p
->
node
,
.
trans
=
p
->
trans
+
1
,
.
out
=
p
->
out
,
.
autState
=
p
->
autState
};
...
@@ -1391,7 +1403,7 @@ void streamStateDestroy(void *s) {
...
@@ -1391,7 +1403,7 @@ void streamStateDestroy(void *s) {
//free(s->autoState);
//free(s->autoState);
}
}
FstStreamBuilder
*
fstStreamBuilderCreate
(
Fst
*
fst
,
Automation
*
aut
)
{
FstStreamBuilder
*
fstStreamBuilderCreate
(
Fst
*
fst
,
Automation
Ctx
*
aut
)
{
FstStreamBuilder
*
b
=
calloc
(
1
,
sizeof
(
FstStreamBuilder
));
FstStreamBuilder
*
b
=
calloc
(
1
,
sizeof
(
FstStreamBuilder
));
if
(
NULL
==
b
)
{
return
NULL
;
}
if
(
NULL
==
b
)
{
return
NULL
;
}
...
@@ -1434,3 +1446,5 @@ FstStreamBuilder *fstStreamBuilderRange(FstStreamBuilder *b, FstSlice *val, Rang
...
@@ -1434,3 +1446,5 @@ FstStreamBuilder *fstStreamBuilderRange(FstStreamBuilder *b, FstSlice *val, Rang
source/libs/index/src/index_fst_automation.c
浏览文件 @
04057a39
...
@@ -13,3 +13,94 @@
...
@@ -13,3 +13,94 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
*/
#include "index_fst_automation.h"
// prefix query, impl later
static
void
*
prefixStart
(
AutomationCtx
*
ctx
)
{
StartWithStateValue
*
data
=
(
StartWithStateValue
*
)(
ctx
->
data
);
return
data
;
};
static
bool
prefixIsMatch
(
AutomationCtx
*
ctx
,
void
*
data
)
{
return
true
;
}
static
bool
prefixCanMatch
(
AutomationCtx
*
ctx
,
void
*
data
)
{
return
true
;
}
static
bool
prefixWillAlwaysMatch
(
AutomationCtx
*
ctx
,
void
*
state
)
{
return
true
;
}
static
void
*
prefixAccept
(
AutomationCtx
*
ctx
,
void
*
state
,
uint8_t
byte
)
{
return
NULL
;
}
static
void
*
prefixAcceptEof
(
AutomationCtx
*
ctx
,
void
*
state
)
{
return
NULL
;
}
// pattern query, impl later
static
void
*
patternStart
(
AutomationCtx
*
ctx
)
{
return
NULL
;
}
static
bool
patternIsMatch
(
AutomationCtx
*
ctx
,
void
*
data
)
{
return
true
;
}
static
bool
patternCanMatch
(
AutomationCtx
*
ctx
,
void
*
data
)
{
return
true
;
}
static
bool
patternWillAlwaysMatch
(
AutomationCtx
*
ctx
,
void
*
state
)
{
return
true
;
}
static
void
*
patternAccept
(
AutomationCtx
*
ctx
,
void
*
state
,
uint8_t
byte
)
{
return
NULL
;
}
static
void
*
patternAcceptEof
(
AutomationCtx
*
ctx
,
void
*
state
)
{
return
NULL
;
}
AutomationFunc
automFuncs
[]
=
{{
prefixStart
,
prefixIsMatch
,
prefixCanMatch
,
prefixWillAlwaysMatch
,
prefixAccept
,
prefixAcceptEof
},
{
patternStart
,
patternIsMatch
,
patternCanMatch
,
patternWillAlwaysMatch
,
patternAccept
,
patternAcceptEof
}
// add more search type
};
AutomationCtx
*
automCtxCreate
(
void
*
data
,
AutomationType
type
)
{
AutomationCtx
*
ctx
=
calloc
(
1
,
sizeof
(
AutomationCtx
));
if
(
ctx
==
NULL
)
{
return
NULL
;
}
if
(
type
==
AUTOMATION_PREFIX
)
{
StartWithStateValue
*
swsv
=
(
StartWithStateValue
*
)
calloc
(
1
,
sizeof
(
StartWithStateValue
));
swsv
->
kind
=
Done
;
swsv
->
value
=
NULL
;
ctx
->
data
=
(
void
*
)
swsv
;
}
else
if
(
type
==
AUTMMATION_MATCH
)
{
}
else
{
// add more search type
}
ctx
->
type
=
type
;
return
ctx
;
}
void
automCtxDestroy
(
AutomationCtx
*
ctx
)
{
if
(
ctx
->
type
==
AUTOMATION_PREFIX
)
{
free
(
ctx
->
data
);
}
else
if
(
ctx
->
type
==
AUTMMATION_MATCH
)
{
}
free
(
ctx
);
}
source/libs/index/test/indexTests.cpp
浏览文件 @
04057a39
...
@@ -65,6 +65,7 @@ class FstReadMemory {
...
@@ -65,6 +65,7 @@ class FstReadMemory {
~
FstReadMemory
()
{
~
FstReadMemory
()
{
fstCountingWriterDestroy
(
_w
);
fstCountingWriterDestroy
(
_w
);
fstDestroy
(
_fst
);
fstSliceDestroy
(
&
_s
);
fstSliceDestroy
(
&
_s
);
}
}
...
@@ -129,10 +130,12 @@ class FstReadMemory {
...
@@ -129,10 +130,12 @@ class FstReadMemory {
//}
//}
#define L 100
#define M 100
#define N 100
int
Performance_fstWriteRecords
(
FstWriter
*
b
)
{
int
Performance_fstWriteRecords
(
FstWriter
*
b
)
{
std
::
string
str
(
"aa"
);
std
::
string
str
(
"aa"
);
int
L
=
100
,
M
=
100
,
N
=
10
;
for
(
int
i
=
0
;
i
<
L
;
i
++
)
{
for
(
int
i
=
0
;
i
<
L
;
i
++
)
{
str
[
0
]
=
'a'
+
i
;
str
[
0
]
=
'a'
+
i
;
str
.
resize
(
2
);
str
.
resize
(
2
);
...
@@ -150,22 +153,29 @@ int Performance_fstWriteRecords(FstWriter *b) {
...
@@ -150,22 +153,29 @@ int Performance_fstWriteRecords(FstWriter *b) {
}
}
void
Performance_fstReadRecords
(
FstReadMemory
*
m
)
{
void
Performance_fstReadRecords
(
FstReadMemory
*
m
)
{
std
::
string
str
(
"a"
);
std
::
string
str
(
"aa"
);
for
(
int
i
=
0
;
i
<
50
;
i
++
)
{
for
(
int
i
=
0
;
i
<
M
;
i
++
)
{
//std::string str("aa");
str
[
0
]
=
'a'
+
i
;
str
.
push_back
(
'a'
);
str
.
resize
(
2
);
uint64_t
out
,
cost
;
for
(
int
j
=
0
;
j
<
N
;
j
++
)
{
bool
ok
=
m
->
GetWithTimeCostUs
(
str
,
&
out
,
&
cost
);
str
[
1
]
=
'a'
+
j
;
if
(
ok
==
true
)
{
str
.
resize
(
2
);
printf
(
"success to get (%s, %"
PRId64
"), time cost: %"
PRId64
")
\n
"
,
str
.
c_str
(),
out
,
cost
);
for
(
int
k
=
0
;
k
<
L
;
k
++
)
{
}
else
{
str
.
push_back
(
'a'
);
printf
(
"failed to get(%s)
\n
"
,
str
.
c_str
());
uint64_t
val
,
cost
;
}
if
(
m
->
GetWithTimeCostUs
(
str
,
&
val
,
&
cost
))
{
}
printf
(
"succes to get kv(%s, %"
PRId64
"), cost: %"
PRId64
"
\n
"
,
str
.
c_str
(),
val
,
cost
);
}
else
{
printf
(
"failed to get key: %s
\n
"
,
str
.
c_str
());
}
}
}
}
}
}
void
checkFstPerf
()
{
void
checkFstPerf
()
{
FstWriter
*
fw
=
new
FstWriter
;
FstWriter
*
fw
=
new
FstWriter
;
int64_t
s
=
taosGetTimestampUs
();
int64_t
s
=
taosGetTimestampUs
();
int
num
=
Performance_fstWriteRecords
(
fw
);
int
num
=
Performance_fstWriteRecords
(
fw
);
int64_t
e
=
taosGetTimestampUs
();
int64_t
e
=
taosGetTimestampUs
();
printf
(
"write %d record cost %"
PRId64
"us
\n
"
,
num
,
e
-
s
);
printf
(
"write %d record cost %"
PRId64
"us
\n
"
,
num
,
e
-
s
);
...
@@ -173,13 +183,11 @@ void checkFstPerf() {
...
@@ -173,13 +183,11 @@ void checkFstPerf() {
FstReadMemory
*
m
=
new
FstReadMemory
(
1024
*
64
);
FstReadMemory
*
m
=
new
FstReadMemory
(
1024
*
64
);
if
(
m
->
init
())
{
if
(
m
->
init
())
{
uint64_t
val
;
printf
(
"success to init fst read"
);
if
(
m
->
Get
(
"aaaaaaa"
,
&
val
))
{
std
::
cout
<<
"succes to Get val: "
<<
val
<<
std
::
endl
;
}
else
{
std
::
cout
<<
"failed to Get "
<<
std
::
endl
;
}
}
}
Performance_fstReadRecords
(
m
);
delete
m
;
}
}
...
...
source/libs/parser/inc/astGenerator.h
浏览文件 @
04057a39
...
@@ -121,7 +121,7 @@ typedef struct SRelationInfo {
...
@@ -121,7 +121,7 @@ typedef struct SRelationInfo {
typedef
struct
SCreatedTableInfo
{
typedef
struct
SCreatedTableInfo
{
SToken
name
;
// table name token
SToken
name
;
// table name token
SToken
st
ableName
;
// super table name token , for using clause
SToken
st
bName
;
// super table name token , for using clause
SArray
*
pTagNames
;
// create by using super table, tag name
SArray
*
pTagNames
;
// create by using super table, tag name
SArray
*
pTagVals
;
// create by using super table, tag value
SArray
*
pTagVals
;
// create by using super table, tag value
char
*
fullname
;
// table full name
char
*
fullname
;
// table full name
...
...
source/libs/parser/inc/dataBlockMgt.h
0 → 100644
浏览文件 @
04057a39
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef TDENGINE_DATABLOCKMGT_H
#define TDENGINE_DATABLOCKMGT_H
#include "catalog.h"
#include "os.h"
#include "ttypes.h"
#include "tname.h"
#define IS_DATA_COL_ORDERED(spd) ((spd->orderStatus) == (int8_t)ORDER_STATUS_ORDERED)
typedef
enum
EOrderStatus
{
ORDER_STATUS_UNKNOWN
=
0
,
ORDER_STATUS_ORDERED
=
1
,
ORDER_STATUS_DISORDERED
=
2
,
}
EOrderStatus
;
typedef
enum
EValStat
{
VAL_STAT_HAS
=
0x0
,
// 0 means has val
VAL_STAT_NONE
=
0x01
,
// 1 means no val
}
EValStat
;
typedef
enum
ERowCompareStat
{
ROW_COMPARE_NO_NEED
=
0
,
ROW_COMPARE_NEED
=
1
,
}
ERowCompareStat
;
typedef
struct
SBoundColumn
{
int32_t
offset
;
// all column offset value
int32_t
toffset
;
// first part offset for SDataRow TODO: get offset from STSchema on future
uint8_t
valStat
;
// EValStat. denote if current column bound or not(0 means has val, 1 means no val)
}
SBoundColumn
;
typedef
struct
{
uint16_t
schemaColIdx
;
uint16_t
boundIdx
;
uint16_t
finalIdx
;
}
SBoundIdxInfo
;
typedef
struct
SParsedDataColInfo
{
int16_t
numOfCols
;
int16_t
numOfBound
;
uint16_t
flen
;
// TODO: get from STSchema
uint16_t
allNullLen
;
// TODO: get from STSchema
uint16_t
extendedVarLen
;
int32_t
*
boundedColumns
;
// bound column idx according to schema
SBoundColumn
*
cols
;
SBoundIdxInfo
*
colIdxInfo
;
int8_t
orderStatus
;
// bound columns
}
SParsedDataColInfo
;
typedef
struct
SMemRowInfo
{
int32_t
dataLen
;
// len of SDataRow
int32_t
kvLen
;
// len of SKVRow
}
SMemRowInfo
;
typedef
struct
{
uint8_t
memRowType
;
// default is 0, that is SDataRow
uint8_t
compareStat
;
// 0 no need, 1 need compare
TDRowTLenT
kvRowInitLen
;
SMemRowInfo
*
rowInfo
;
}
SMemRowBuilder
;
typedef
struct
SParamInfo
{
int32_t
idx
;
uint8_t
type
;
uint8_t
timePrec
;
int16_t
bytes
;
uint32_t
offset
;
}
SParamInfo
;
typedef
struct
STableDataBlocks
{
SName
tableName
;
int8_t
tsSource
;
// where does the UNIX timestamp come from, server or client
bool
ordered
;
// if current rows are ordered or not
int64_t
vgId
;
// virtual group id
int64_t
prevTS
;
// previous timestamp, recorded to decide if the records array is ts ascending
int32_t
numOfTables
;
// number of tables in current submit block
int32_t
rowSize
;
// row size for current table
uint32_t
nAllocSize
;
uint32_t
headerSize
;
// header for table info (uid, tid, submit metadata)
uint32_t
size
;
STableMeta
*
pTableMeta
;
// the tableMeta of current table, the table meta will be used during submit, keep a ref to avoid to be removed from cache
char
*
pData
;
bool
cloned
;
STagData
tagData
;
SParsedDataColInfo
boundColumnInfo
;
// for parameter ('?') binding
uint32_t
numOfAllocedParams
;
uint32_t
numOfParams
;
SParamInfo
*
params
;
SMemRowBuilder
rowBuilder
;
}
STableDataBlocks
;
static
FORCE_INLINE
void
initSMemRow
(
SMemRow
row
,
uint8_t
memRowType
,
STableDataBlocks
*
pBlock
,
int16_t
nBoundCols
)
{
memRowSetType
(
row
,
memRowType
);
if
(
isDataRowT
(
memRowType
))
{
dataRowSetVersion
(
memRowDataBody
(
row
),
pBlock
->
pTableMeta
->
sversion
);
dataRowSetLen
(
memRowDataBody
(
row
),
(
TDRowLenT
)(
TD_DATA_ROW_HEAD_SIZE
+
pBlock
->
boundColumnInfo
.
flen
));
}
else
{
ASSERT
(
nBoundCols
>
0
);
memRowSetKvVersion
(
row
,
pBlock
->
pTableMeta
->
sversion
);
kvRowSetNCols
(
memRowKvBody
(
row
),
nBoundCols
);
kvRowSetLen
(
memRowKvBody
(
row
),
(
TDRowLenT
)(
TD_KV_ROW_HEAD_SIZE
+
sizeof
(
SColIdx
)
*
nBoundCols
));
}
}
static
FORCE_INLINE
int32_t
getExtendedRowSize
(
STableDataBlocks
*
pBlock
)
{
ASSERT
(
pBlock
->
rowSize
==
pBlock
->
pTableMeta
->
tableInfo
.
rowSize
);
return
pBlock
->
rowSize
+
TD_MEM_ROW_DATA_HEAD_SIZE
+
pBlock
->
boundColumnInfo
.
extendedVarLen
;
}
// Applicable to consume by one row
static
FORCE_INLINE
void
appendMemRowColValEx
(
SMemRow
row
,
const
void
*
value
,
bool
isCopyVarData
,
int16_t
colId
,
int8_t
colType
,
int32_t
toffset
,
int32_t
*
dataLen
,
int32_t
*
kvLen
,
uint8_t
compareStat
)
{
tdAppendMemRowColVal
(
row
,
value
,
isCopyVarData
,
colId
,
colType
,
toffset
);
if
(
compareStat
==
ROW_COMPARE_NEED
)
{
tdGetColAppendDeltaLen
(
value
,
colType
,
dataLen
,
kvLen
);
}
}
static
FORCE_INLINE
void
getMemRowAppendInfo
(
SSchema
*
pSchema
,
uint8_t
memRowType
,
SParsedDataColInfo
*
spd
,
int32_t
idx
,
int32_t
*
toffset
)
{
int32_t
schemaIdx
=
0
;
if
(
IS_DATA_COL_ORDERED
(
spd
))
{
schemaIdx
=
spd
->
boundedColumns
[
idx
];
if
(
isDataRowT
(
memRowType
))
{
*
toffset
=
(
spd
->
cols
+
schemaIdx
)
->
toffset
;
// the offset of firstPart
}
else
{
*
toffset
=
idx
*
sizeof
(
SColIdx
);
// the offset of SColIdx
}
}
else
{
ASSERT
(
idx
==
(
spd
->
colIdxInfo
+
idx
)
->
boundIdx
);
schemaIdx
=
(
spd
->
colIdxInfo
+
idx
)
->
schemaColIdx
;
if
(
isDataRowT
(
memRowType
))
{
*
toffset
=
(
spd
->
cols
+
schemaIdx
)
->
toffset
;
}
else
{
*
toffset
=
((
spd
->
colIdxInfo
+
idx
)
->
finalIdx
)
*
sizeof
(
SColIdx
);
}
}
}
static
FORCE_INLINE
void
convertMemRow
(
SMemRow
row
,
int32_t
dataLen
,
int32_t
kvLen
)
{
if
(
isDataRow
(
row
))
{
if
(
kvLen
<
(
dataLen
*
KVRatioConvert
))
{
memRowSetConvert
(
row
);
}
}
else
if
(
kvLen
>
dataLen
)
{
memRowSetConvert
(
row
);
}
}
static
FORCE_INLINE
int32_t
setBlockInfo
(
SSubmitBlk
*
pBlocks
,
const
STableMeta
*
pTableMeta
,
int32_t
numOfRows
)
{
pBlocks
->
tid
=
pTableMeta
->
suid
;
pBlocks
->
uid
=
pTableMeta
->
uid
;
pBlocks
->
sversion
=
pTableMeta
->
sversion
;
if
(
pBlocks
->
numOfRows
+
numOfRows
>=
INT16_MAX
)
{
return
TSDB_CODE_TSC_INVALID_OPERATION
;
}
else
{
pBlocks
->
numOfRows
+=
numOfRows
;
return
TSDB_CODE_SUCCESS
;
}
}
int32_t
schemaIdxCompar
(
const
void
*
lhs
,
const
void
*
rhs
);
int32_t
boundIdxCompar
(
const
void
*
lhs
,
const
void
*
rhs
);
void
setBoundColumnInfo
(
SParsedDataColInfo
*
pColList
,
SSchema
*
pSchema
,
int32_t
numOfCols
);
void
destroyBoundColumnInfo
(
SParsedDataColInfo
*
pColList
);
int32_t
initMemRowBuilder
(
SMemRowBuilder
*
pBuilder
,
uint32_t
nRows
,
uint32_t
nCols
,
uint32_t
nBoundCols
,
int32_t
allNullLen
);
int32_t
allocateMemIfNeed
(
STableDataBlocks
*
pDataBlock
,
int32_t
rowSize
,
int32_t
*
numOfRows
);
int32_t
getDataBlockFromList
(
SHashObj
*
pHashList
,
int64_t
id
,
int32_t
size
,
int32_t
startOffset
,
int32_t
rowSize
,
SName
*
name
,
const
STableMeta
*
pTableMeta
,
STableDataBlocks
**
dataBlocks
,
SArray
*
pBlockList
);
int32_t
mergeTableDataBlocks
(
SHashObj
*
pHashObj
,
int8_t
schemaAttached
,
uint8_t
payloadType
,
bool
freeBlockMap
);
#endif // TDENGINE_DATABLOCKMGT_H
source/libs/parser/inc/insertParser.h
浏览文件 @
04057a39
...
@@ -16,4 +16,16 @@
...
@@ -16,4 +16,16 @@
#ifndef TDENGINE_INSERTPARSER_H
#ifndef TDENGINE_INSERTPARSER_H
#define TDENGINE_INSERTPARSER_H
#define TDENGINE_INSERTPARSER_H
#ifdef __cplusplus
extern
"C"
{
#endif
#include "parser.h"
int32_t
parseInsertSql
(
SParseContext
*
pContext
,
SInsertStmtInfo
**
pInfo
);
#ifdef __cplusplus
}
#endif
#endif // TDENGINE_INSERTPARSER_H
#endif // TDENGINE_INSERTPARSER_H
source/libs/parser/inc/parserInt.h
浏览文件 @
04057a39
...
@@ -26,14 +26,6 @@ extern "C" {
...
@@ -26,14 +26,6 @@ extern "C" {
struct
SSqlNode
;
struct
SSqlNode
;
typedef
struct
SInsertStmtInfo
{
SHashObj
*
pTableBlockHashList
;
// data block for each table
SArray
*
pDataBlocks
;
// SArray<STableDataBlocks*>. Merged submit block for each vgroup
int8_t
schemaAttached
;
// denote if submit block is built with table schema or not
uint8_t
payloadType
;
// EPayloadType. 0: K-V payload for non-prepare insert, 1: rawPayload for prepare insert
uint32_t
insertType
;
// insert data from [file|sql statement| bound statement]
char
*
sql
;
// current sql statement position
}
SInsertStmtInfo
;
typedef
struct
SInternalField
{
typedef
struct
SInternalField
{
TAOS_FIELD
field
;
TAOS_FIELD
field
;
...
...
source/libs/parser/inc/parserUtil.h
浏览文件 @
04057a39
...
@@ -46,7 +46,7 @@ SInternalField* getInternalField(SFieldInfo* pFieldInfo, int32_t index);
...
@@ -46,7 +46,7 @@ SInternalField* getInternalField(SFieldInfo* pFieldInfo, int32_t index);
int32_t
parserValidateIdToken
(
SToken
*
pToken
);
int32_t
parserValidateIdToken
(
SToken
*
pToken
);
int32_t
buildInvalidOperationMsg
(
SMsgBuf
*
pMsgBuf
,
const
char
*
msg
);
int32_t
buildInvalidOperationMsg
(
SMsgBuf
*
pMsgBuf
,
const
char
*
msg
);
int32_t
buildSyntaxErrMsg
(
char
*
dst
,
int32_t
dstBufLen
,
const
char
*
additionalInfo
,
const
char
*
sourceStr
);
int32_t
buildSyntaxErrMsg
(
SMsgBuf
*
pBuf
,
const
char
*
additionalInfo
,
const
char
*
sourceStr
);
STableMetaInfo
*
addEmptyMetaInfo
(
SQueryStmtInfo
*
pQueryInfo
);
STableMetaInfo
*
addEmptyMetaInfo
(
SQueryStmtInfo
*
pQueryInfo
);
...
@@ -61,6 +61,8 @@ void cleanupColumnCond(SArray** pCond);
...
@@ -61,6 +61,8 @@ void cleanupColumnCond(SArray** pCond);
uint32_t
convertRelationalOperator
(
SToken
*
pToken
);
uint32_t
convertRelationalOperator
(
SToken
*
pToken
);
int32_t
getExprFunctionId
(
SExprInfo
*
pExprInfo
);
int32_t
getExprFunctionId
(
SExprInfo
*
pExprInfo
);
STableMeta
*
tableMetaDup
(
const
STableMeta
*
pTableMeta
);
#ifdef __cplusplus
#ifdef __cplusplus
}
}
#endif
#endif
...
...
source/libs/parser/inc/sql.y
浏览文件 @
04057a39
...
@@ -112,13 +112,13 @@ cmd ::= SHOW dbPrefix(X) TABLES LIKE ids(Y). {
...
@@ -112,13 +112,13 @@ cmd ::= SHOW dbPrefix(X) TABLES LIKE ids(Y). {
}
}
cmd ::= SHOW dbPrefix(X) STABLES. {
cmd ::= SHOW dbPrefix(X) STABLES. {
setShowOptions(pInfo, TSDB_MGMT_TABLE_ST
ABLE
, &X, 0);
setShowOptions(pInfo, TSDB_MGMT_TABLE_ST
B
, &X, 0);
}
}
cmd ::= SHOW dbPrefix(X) STABLES LIKE ids(Y). {
cmd ::= SHOW dbPrefix(X) STABLES LIKE ids(Y). {
SToken token;
SToken token;
tSetDbName(&token, &X);
tSetDbName(&token, &X);
setShowOptions(pInfo, TSDB_MGMT_TABLE_ST
ABLE
, &token, &Y);
setShowOptions(pInfo, TSDB_MGMT_TABLE_ST
B
, &token, &Y);
}
}
cmd ::= SHOW dbPrefix(X) VGROUPS. {
cmd ::= SHOW dbPrefix(X) VGROUPS. {
...
...
source/libs/parser/inc/ttoken.h
浏览文件 @
04057a39
...
@@ -44,7 +44,7 @@ typedef struct SToken {
...
@@ -44,7 +44,7 @@ typedef struct SToken {
* @param tokenType
* @param tokenType
* @return
* @return
*/
*/
uint32_t
tGetToken
(
char
*
z
,
uint32_t
*
tokenType
);
uint32_t
tGetToken
(
c
onst
c
har
*
z
,
uint32_t
*
tokenType
);
/**
/**
* enhanced tokenizer for sql string.
* enhanced tokenizer for sql string.
...
@@ -54,7 +54,7 @@ uint32_t tGetToken(char *z, uint32_t *tokenType);
...
@@ -54,7 +54,7 @@ uint32_t tGetToken(char *z, uint32_t *tokenType);
* @param isPrevOptr
* @param isPrevOptr
* @return
* @return
*/
*/
SToken
tStrGetToken
(
char
*
str
,
int32_t
*
i
,
bool
isPrevOptr
);
SToken
tStrGetToken
(
c
onst
c
har
*
str
,
int32_t
*
i
,
bool
isPrevOptr
);
/**
/**
* check if it is a keyword or not
* check if it is a keyword or not
...
...
source/libs/parser/src/astGenerator.c
浏览文件 @
04057a39
...
@@ -191,7 +191,7 @@ tSqlExpr *tSqlExprCreate(tSqlExpr *pLeft, tSqlExpr *pRight, int32_t optrType) {
...
@@ -191,7 +191,7 @@ tSqlExpr *tSqlExprCreate(tSqlExpr *pLeft, tSqlExpr *pRight, int32_t optrType) {
pExpr
->
type
=
SQL_NODE_EXPR
;
pExpr
->
type
=
SQL_NODE_EXPR
;
if
(
pLeft
!=
NULL
&&
pRight
!=
NULL
&&
(
optrType
!=
TK_IN
))
{
if
(
pLeft
!=
NULL
&&
pRight
!=
NULL
&&
(
optrType
!=
TK_IN
))
{
char
*
endPos
=
pRight
->
exprToken
.
z
+
pRight
->
exprToken
.
n
;
c
onst
c
har
*
endPos
=
pRight
->
exprToken
.
z
+
pRight
->
exprToken
.
n
;
pExpr
->
exprToken
.
z
=
pLeft
->
exprToken
.
z
;
pExpr
->
exprToken
.
z
=
pLeft
->
exprToken
.
z
;
pExpr
->
exprToken
.
n
=
(
uint32_t
)(
endPos
-
pExpr
->
exprToken
.
z
);
pExpr
->
exprToken
.
n
=
(
uint32_t
)(
endPos
-
pExpr
->
exprToken
.
z
);
pExpr
->
exprToken
.
type
=
pLeft
->
exprToken
.
type
;
pExpr
->
exprToken
.
type
=
pLeft
->
exprToken
.
type
;
...
@@ -634,7 +634,7 @@ SCreatedTableInfo createNewChildTableInfo(SToken *pTableName, SArray *pTagNames,
...
@@ -634,7 +634,7 @@ SCreatedTableInfo createNewChildTableInfo(SToken *pTableName, SArray *pTagNames,
info
.
name
=
*
pToken
;
info
.
name
=
*
pToken
;
info
.
pTagNames
=
pTagNames
;
info
.
pTagNames
=
pTagNames
;
info
.
pTagVals
=
pTagVals
;
info
.
pTagVals
=
pTagVals
;
info
.
st
ableName
=
*
pTableName
;
info
.
st
bName
=
*
pTableName
;
info
.
igExist
=
(
igExists
->
n
>
0
)
?
1
:
0
;
info
.
igExist
=
(
igExists
->
n
>
0
)
?
1
:
0
;
return
info
;
return
info
;
...
...
source/libs/parser/src/dataBlockMgt.c
0 → 100644
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/parser/src/insertParser.c
0 → 100644
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/parser/src/parser.c
浏览文件 @
04057a39
...
@@ -18,6 +18,7 @@
...
@@ -18,6 +18,7 @@
#include "parserUtil.h"
#include "parserUtil.h"
#include "ttoken.h"
#include "ttoken.h"
#include "function.h"
#include "function.h"
#include "insertParser.h"
bool
qIsInsertSql
(
const
char
*
pStr
,
size_t
length
)
{
bool
qIsInsertSql
(
const
char
*
pStr
,
size_t
length
)
{
int32_t
index
=
0
;
int32_t
index
=
0
;
...
@@ -46,8 +47,8 @@ int32_t qParseQuerySql(const char* pStr, size_t length, struct SQueryStmtInfo**
...
@@ -46,8 +47,8 @@ int32_t qParseQuerySql(const char* pStr, size_t length, struct SQueryStmtInfo**
return
qParserValidateSqlNode
(
pCatalog
,
&
info
,
*
pQueryInfo
,
id
,
msg
,
msgLen
);
return
qParserValidateSqlNode
(
pCatalog
,
&
info
,
*
pQueryInfo
,
id
,
msg
,
msgLen
);
}
}
int32_t
qParseInsertSql
(
const
char
*
pStr
,
size_t
length
,
struct
SInsertStmtInfo
**
pInsertInfo
,
int64_t
id
,
char
*
msg
,
int32_t
msgLen
)
{
int32_t
qParseInsertSql
(
SParseContext
*
pContext
,
SInsertStmtInfo
**
pInfo
)
{
return
0
;
return
parseInsertSql
(
pContext
,
pInfo
)
;
}
}
int32_t
qParserConvertSql
(
const
char
*
pStr
,
size_t
length
,
char
**
pConvertSql
)
{
int32_t
qParserConvertSql
(
const
char
*
pStr
,
size_t
length
,
char
**
pConvertSql
)
{
...
@@ -173,7 +174,7 @@ int32_t qParserExtractRequestedMetaInfo(const SSqlInfo* pSqlInfo, SMetaReq* pMet
...
@@ -173,7 +174,7 @@ int32_t qParserExtractRequestedMetaInfo(const SSqlInfo* pSqlInfo, SMetaReq* pMet
assert
(
t
!=
NULL
);
assert
(
t
!=
NULL
);
if
(
t
->
n
>=
TSDB_FUNC_NAME_LEN
)
{
if
(
t
->
n
>=
TSDB_FUNC_NAME_LEN
)
{
return
buildSyntaxErrMsg
(
msg
,
msgBufLen
,
"too long function name"
,
t
->
z
);
return
buildSyntaxErrMsg
(
&
msgBuf
,
"too long function name"
,
t
->
z
);
}
}
// Let's assume that it is an UDF/UDAF, if it is not a built-in function.
// Let's assume that it is an UDF/UDAF, if it is not a built-in function.
...
...
source/libs/parser/src/parserUtil.c
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/parser/src/sql.c
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/parser/src/ttokenizer.c
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/parser/test/insertTest.cpp
0 → 100644
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/parser/test/mockCatalog.cpp
0 → 100644
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/parser/test/mockCatalog.h
0 → 100644
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/parser/test/mockCatalogService.cpp
0 → 100644
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/parser/test/mockCatalogService.h
0 → 100644
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/parser/test/parserMain.cpp
0 → 100644
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/parser/test/tokenizerTest.cpp
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/transport/src/rpcMain.c
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/wal/inc/walInt.h
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/wal/src/walMeta.c
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/wal/src/walMgmt.c
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/wal/src/walRead.c
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/wal/src/wal
Index
.c
→
source/libs/wal/src/wal
Seek
.c
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/wal/src/walWrite.c
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/libs/wal/test/walMetaTest.cpp
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/os/src/osString.c
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/util/src/tarray.c
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/util/src/terror.c
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
source/util/src/tutil.c
浏览文件 @
04057a39
此差异已折叠。
点击以展开。
src/client/inc/tscParseLine.h
浏览文件 @
04057a39
...
@@ -28,7 +28,7 @@ typedef struct {
...
@@ -28,7 +28,7 @@ typedef struct {
}
TAOS_SML_KV
;
}
TAOS_SML_KV
;
typedef
struct
{
typedef
struct
{
char
*
st
able
Name
;
char
*
st
b
Name
;
char
*
childTableName
;
char
*
childTableName
;
TAOS_SML_KV
*
tags
;
TAOS_SML_KV
*
tags
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录