Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
8e5b263d
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
8e5b263d
编写于
5月 13, 2022
作者:
S
Shengliang Guan
提交者:
GitHub
5月 13, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #12414 from taosdata/feature/dnode
refactror: node mgmt
上级
66305075
9debc281
变更
73
展开全部
隐藏空白更改
内联
并排
Showing
73 changed file
with
2654 addition
and
2057 deletion
+2654
-2057
include/common/tglobal.h
include/common/tglobal.h
+0
-1
include/common/tmsgcb.h
include/common/tmsgcb.h
+9
-5
include/util/tdef.h
include/util/tdef.h
+5
-2
source/client/src/clientEnv.c
source/client/src/clientEnv.c
+1
-1
source/common/src/systable.c
source/common/src/systable.c
+1
-1
source/common/src/tglobal.c
source/common/src/tglobal.c
+13
-16
source/common/src/tmsgcb.c
source/common/src/tmsgcb.c
+18
-5
source/dnode/mgmt/CMakeLists.txt
source/dnode/mgmt/CMakeLists.txt
+4
-3
source/dnode/mgmt/exe/dmMain.c
source/dnode/mgmt/exe/dmMain.c
+3
-3
source/dnode/mgmt/implement/src/dmHandle.c
source/dnode/mgmt/implement/src/dmHandle.c
+0
-299
source/dnode/mgmt/implement/src/dmMonitor.c
source/dnode/mgmt/implement/src/dmMonitor.c
+0
-211
source/dnode/mgmt/implement/src/dmObj.c
source/dnode/mgmt/implement/src/dmObj.c
+0
-144
source/dnode/mgmt/interface/inc/dmDef.h
source/dnode/mgmt/interface/inc/dmDef.h
+0
-180
source/dnode/mgmt/interface/inc/dmLog.h
source/dnode/mgmt/interface/inc/dmLog.h
+0
-36
source/dnode/mgmt/mgmt_bnode/CMakeLists.txt
source/dnode/mgmt/mgmt_bnode/CMakeLists.txt
+1
-1
source/dnode/mgmt/mgmt_bnode/inc/bmInt.h
source/dnode/mgmt/mgmt_bnode/inc/bmInt.h
+10
-9
source/dnode/mgmt/mgmt_bnode/src/bmHandle.c
source/dnode/mgmt/mgmt_bnode/src/bmHandle.c
+26
-15
source/dnode/mgmt/mgmt_bnode/src/bmInt.c
source/dnode/mgmt/mgmt_bnode/src/bmInt.c
+25
-29
source/dnode/mgmt/mgmt_bnode/src/bmWorker.c
source/dnode/mgmt/mgmt_bnode/src/bmWorker.c
+13
-17
source/dnode/mgmt/mgmt_dnode/CMakeLists.txt
source/dnode/mgmt/mgmt_dnode/CMakeLists.txt
+9
-0
source/dnode/mgmt/mgmt_dnode/inc/dmInt.h
source/dnode/mgmt/mgmt_dnode/inc/dmInt.h
+70
-0
source/dnode/mgmt/mgmt_dnode/src/dmEps.c
source/dnode/mgmt/mgmt_dnode/src/dmEps.c
+58
-59
source/dnode/mgmt/mgmt_dnode/src/dmHandle.c
source/dnode/mgmt/mgmt_dnode/src/dmHandle.c
+206
-0
source/dnode/mgmt/mgmt_dnode/src/dmInt.c
source/dnode/mgmt/mgmt_dnode/src/dmInt.c
+129
-0
source/dnode/mgmt/mgmt_dnode/src/dmMonitor.c
source/dnode/mgmt/mgmt_dnode/src/dmMonitor.c
+105
-0
source/dnode/mgmt/mgmt_dnode/src/dmWorker.c
source/dnode/mgmt/mgmt_dnode/src/dmWorker.c
+195
-0
source/dnode/mgmt/mgmt_mnode/CMakeLists.txt
source/dnode/mgmt/mgmt_mnode/CMakeLists.txt
+1
-1
source/dnode/mgmt/mgmt_mnode/inc/mmInt.h
source/dnode/mgmt/mgmt_mnode/inc/mmInt.h
+19
-21
source/dnode/mgmt/mgmt_mnode/src/mmFile.c
source/dnode/mgmt/mgmt_mnode/src/mmFile.c
+16
-20
source/dnode/mgmt/mgmt_mnode/src/mmHandle.c
source/dnode/mgmt/mgmt_mnode/src/mmHandle.c
+118
-105
source/dnode/mgmt/mgmt_mnode/src/mmInt.c
source/dnode/mgmt/mgmt_mnode/src/mmInt.c
+51
-64
source/dnode/mgmt/mgmt_mnode/src/mmWorker.c
source/dnode/mgmt/mgmt_mnode/src/mmWorker.c
+38
-62
source/dnode/mgmt/mgmt_qnode/CMakeLists.txt
source/dnode/mgmt/mgmt_qnode/CMakeLists.txt
+1
-1
source/dnode/mgmt/mgmt_qnode/inc/qmInt.h
source/dnode/mgmt/mgmt_qnode/inc/qmInt.h
+14
-13
source/dnode/mgmt/mgmt_qnode/src/qmHandle.c
source/dnode/mgmt/mgmt_qnode/src/qmHandle.c
+35
-24
source/dnode/mgmt/mgmt_qnode/src/qmInt.c
source/dnode/mgmt/mgmt_qnode/src/qmInt.c
+33
-32
source/dnode/mgmt/mgmt_qnode/src/qmWorker.c
source/dnode/mgmt/mgmt_qnode/src/qmWorker.c
+23
-33
source/dnode/mgmt/mgmt_snode/CMakeLists.txt
source/dnode/mgmt/mgmt_snode/CMakeLists.txt
+1
-1
source/dnode/mgmt/mgmt_snode/inc/smInt.h
source/dnode/mgmt/mgmt_snode/inc/smInt.h
+13
-12
source/dnode/mgmt/mgmt_snode/src/smHandle.c
source/dnode/mgmt/mgmt_snode/src/smHandle.c
+27
-16
source/dnode/mgmt/mgmt_snode/src/smInt.c
source/dnode/mgmt/mgmt_snode/src/smInt.c
+26
-30
source/dnode/mgmt/mgmt_snode/src/smWorker.c
source/dnode/mgmt/mgmt_snode/src/smWorker.c
+18
-24
source/dnode/mgmt/mgmt_vnode/CMakeLists.txt
source/dnode/mgmt/mgmt_vnode/CMakeLists.txt
+1
-1
source/dnode/mgmt/mgmt_vnode/inc/vmInt.h
source/dnode/mgmt/mgmt_vnode/inc/vmInt.h
+43
-44
source/dnode/mgmt/mgmt_vnode/src/vmFile.c
source/dnode/mgmt/mgmt_vnode/src/vmFile.c
+5
-5
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
+77
-77
source/dnode/mgmt/mgmt_vnode/src/vmInt.c
source/dnode/mgmt/mgmt_vnode/src/vmInt.c
+58
-69
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
+41
-53
source/dnode/mgmt/node_mgmt/CMakeLists.txt
source/dnode/mgmt/node_mgmt/CMakeLists.txt
+2
-2
source/dnode/mgmt/node_mgmt/inc/dmMgmt.h
source/dnode/mgmt/node_mgmt/inc/dmMgmt.h
+133
-0
source/dnode/mgmt/node_mgmt/src/dmMgmt.c
source/dnode/mgmt/node_mgmt/src/dmMgmt.c
+358
-0
source/dnode/mgmt/node_mgmt/src/dmRun.c
source/dnode/mgmt/node_mgmt/src/dmRun.c
+79
-74
source/dnode/mgmt/node_mgmt/src/dmTransport.c
source/dnode/mgmt/node_mgmt/src/dmTransport.c
+62
-82
source/dnode/mgmt/node_util/CMakeLists.txt
source/dnode/mgmt/node_util/CMakeLists.txt
+10
-0
source/dnode/mgmt/node_util/inc/dmUtil.h
source/dnode/mgmt/node_util/inc/dmUtil.h
+188
-0
source/dnode/mgmt/node_util/src/dmEnv.c
source/dnode/mgmt/node_util/src/dmEnv.c
+8
-8
source/dnode/mgmt/node_util/src/dmFile.c
source/dnode/mgmt/node_util/src/dmFile.c
+29
-31
source/dnode/mgmt/node_util/src/dmUtil.c
source/dnode/mgmt/node_util/src/dmUtil.c
+132
-0
source/dnode/mgmt/test/CMakeLists.txt
source/dnode/mgmt/test/CMakeLists.txt
+1
-1
source/dnode/mgmt/test/bnode/dbnode.cpp
source/dnode/mgmt/test/bnode/dbnode.cpp
+2
-1
source/dnode/mgmt/test/qnode/dqnode.cpp
source/dnode/mgmt/test/qnode/dqnode.cpp
+2
-0
source/dnode/mgmt/test/snode/dsnode.cpp
source/dnode/mgmt/test/snode/dsnode.cpp
+2
-0
source/dnode/mnode/impl/inc/mndInt.h
source/dnode/mnode/impl/inc/mndInt.h
+2
-4
source/dnode/mnode/impl/src/mnode.c
source/dnode/mnode/impl/src/mnode.c
+51
-57
source/dnode/mnode/impl/test/CMakeLists.txt
source/dnode/mnode/impl/test/CMakeLists.txt
+1
-1
source/dnode/qnode/src/qnode.c
source/dnode/qnode/src/qnode.c
+0
-7
source/libs/function/inc/fnLog.h
source/libs/function/inc/fnLog.h
+6
-6
source/libs/function/src/tudf.c
source/libs/function/src/tudf.c
+4
-4
source/libs/qcom/src/queryUtil.c
source/libs/qcom/src/queryUtil.c
+1
-1
tests/pytest/util/dnodes.py
tests/pytest/util/dnodes.py
+18
-30
tests/script/jenkins/basic.txt
tests/script/jenkins/basic.txt
+1
-1
tests/system-test/fulltest.sh
tests/system-test/fulltest.sh
+1
-1
tools/shell/src/shellNettest.c
tools/shell/src/shellNettest.c
+1
-1
未找到文件。
include/common/tglobal.h
浏览文件 @
8e5b263d
...
...
@@ -34,7 +34,6 @@ extern int32_t tsVersion;
extern
int32_t
tsStatusInterval
;
// common
extern
int32_t
tsMaxConnections
;
extern
int32_t
tsMaxShellConns
;
extern
int32_t
tsShellActivityTimer
;
extern
int32_t
tsCompressMsgSize
;
...
...
include/common/tmsgcb.h
浏览文件 @
8e5b263d
...
...
@@ -37,11 +37,12 @@ typedef enum {
QUEUE_MAX
,
}
EQueueType
;
typedef
int32_t
(
*
PutToQueueFp
)(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pReq
);
typedef
int32_t
(
*
GetQueueSizeFp
)(
SMgmtWrapper
*
pWrapper
,
int32_t
vgId
,
EQueueType
qtype
);
typedef
int32_t
(
*
PutToQueueFp
)(
void
*
pMgmt
,
SRpcMsg
*
pReq
);
typedef
int32_t
(
*
GetQueueSizeFp
)(
void
*
pMgmt
,
int32_t
vgId
,
EQueueType
qtype
);
typedef
int32_t
(
*
SendReqFp
)(
SMgmtWrapper
*
pWrapper
,
const
SEpSet
*
epSet
,
SRpcMsg
*
pReq
);
typedef
int32_t
(
*
SendMnodeReqFp
)(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pReq
);
typedef
void
(
*
SendRspFp
)(
SMgmtWrapper
*
pWrapper
,
const
SRpcMsg
*
pRsp
);
typedef
void
(
*
SendMnodeRecvFp
)(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pReq
,
SRpcMsg
*
pRsp
);
typedef
void
(
*
SendRedirectRspFp
)(
SMgmtWrapper
*
pWrapper
,
const
SRpcMsg
*
pRsp
,
const
SEpSet
*
pNewEpSet
);
typedef
void
(
*
RegisterBrokenLinkArgFp
)(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pMsg
);
typedef
void
(
*
ReleaseHandleFp
)(
SMgmtWrapper
*
pWrapper
,
void
*
handle
,
int8_t
type
);
...
...
@@ -49,23 +50,26 @@ typedef void (*ReportStartup)(SMgmtWrapper* pWrapper, const char* name, const ch
typedef
struct
{
SMgmtWrapper
*
pWrapper
;
void
*
pMgmt
;
void
*
clientRpc
;
PutToQueueFp
queueFps
[
QUEUE_MAX
];
GetQueueSizeFp
qsizeFp
;
SendReqFp
sendReqFp
;
SendRspFp
sendRspFp
;
SendMnodeRecvFp
sendMnodeRecvFp
;
SendRedirectRspFp
sendRedirectRspFp
;
RegisterBrokenLinkArgFp
registerBrokenLinkArgFp
;
ReleaseHandleFp
releaseHandleFp
;
ReportStartup
reportStartupFp
;
void
*
clientRpc
;
}
SMsgCb
;
void
tmsgSetDefaultMsgCb
(
const
SMsgCb
*
pMsgCb
);
int32_t
tmsgPutToQueue
(
const
SMsgCb
*
pMsgCb
,
EQueueType
qtype
,
SRpcMsg
*
pReq
);
int32_t
tmsgGetQueueSize
(
const
SMsgCb
*
pMsgCb
,
int32_t
vgId
,
EQueueType
qtype
);
int32_t
tmsgSendReq
(
const
SMsgCb
*
pMsgCb
,
const
SEpSet
*
epSet
,
SRpcMsg
*
pReq
);
void
tmsgSendRsp
(
const
SRpcMsg
*
pRsp
);
void
tmsgSendRedirectRsp
(
const
SRpcMsg
*
pRsp
,
const
SEpSet
*
pNewEpSet
);
void
tmsgSendRsp
(
SRpcMsg
*
pRsp
);
void
tmsgSendMnodeRecv
(
SRpcMsg
*
pReq
,
SRpcMsg
*
pRsp
);
void
tmsgSendRedirectRsp
(
SRpcMsg
*
pRsp
,
const
SEpSet
*
pNewEpSet
);
void
tmsgRegisterBrokenLinkArg
(
const
SMsgCb
*
pMsgCb
,
SRpcMsg
*
pMsg
);
void
tmsgReleaseHandle
(
void
*
handle
,
int8_t
type
);
void
tmsgReportStartup
(
const
char
*
name
,
const
char
*
desc
);
...
...
include/util/tdef.h
浏览文件 @
8e5b263d
...
...
@@ -425,9 +425,12 @@ enum {
SND_WORKER_TYPE__UNIQUE
,
};
#define MNODE_HANDLE -1
#define QNODE_HANDLE 1
#define DEFAULT_HANDLE 0
#define MNODE_HANDLE -1
#define QNODE_HANDLE -2
#define SNODE_HANDLE -3
#define VNODE_HANDLE -4
#define BNODE_HANDLE -5
#define TSDB_CONFIG_OPTION_LEN 16
#define TSDB_CONIIG_VALUE_LEN 48
...
...
source/client/src/clientEnv.c
浏览文件 @
8e5b263d
...
...
@@ -91,7 +91,7 @@ void *openTransporter(const char *user, const char *auth, int32_t numOfThread) {
rpcInit
.
label
=
"TSC"
;
rpcInit
.
numOfThreads
=
numOfThread
;
rpcInit
.
cfp
=
processMsgFromServer
;
rpcInit
.
sessions
=
tsMaxConnections
;
rpcInit
.
sessions
=
1024
;
rpcInit
.
connType
=
TAOS_CONN_CLIENT
;
rpcInit
.
user
=
(
char
*
)
user
;
rpcInit
.
idleTime
=
tsShellActivityTimer
*
1000
;
...
...
source/common/src/systable.c
浏览文件 @
8e5b263d
...
...
@@ -26,7 +26,7 @@ static const SSysDbTableSchema dnodesSchema[] = {
{.
name
=
"id"
,
.
bytes
=
2
,
.
type
=
TSDB_DATA_TYPE_SMALLINT
},
{.
name
=
"endpoint"
,
.
bytes
=
TSDB_EP_LEN
+
VARSTR_HEADER_SIZE
,
.
type
=
TSDB_DATA_TYPE_VARCHAR
},
{.
name
=
"vnodes"
,
.
bytes
=
2
,
.
type
=
TSDB_DATA_TYPE_SMALLINT
},
{.
name
=
"
max
_vnodes"
,
.
bytes
=
2
,
.
type
=
TSDB_DATA_TYPE_SMALLINT
},
{.
name
=
"
support
_vnodes"
,
.
bytes
=
2
,
.
type
=
TSDB_DATA_TYPE_SMALLINT
},
{.
name
=
"status"
,
.
bytes
=
10
+
VARSTR_HEADER_SIZE
,
.
type
=
TSDB_DATA_TYPE_VARCHAR
},
{.
name
=
"create_time"
,
.
bytes
=
8
,
.
type
=
TSDB_DATA_TYPE_TIMESTAMP
},
{.
name
=
"note"
,
.
bytes
=
256
+
VARSTR_HEADER_SIZE
,
.
type
=
TSDB_DATA_TYPE_VARCHAR
},
...
...
source/common/src/tglobal.c
浏览文件 @
8e5b263d
...
...
@@ -33,18 +33,17 @@ int32_t tsStatusInterval = 1; // second
// common
int32_t
tsMaxShellConns
=
50000
;
int32_t
tsMaxConnections
=
50000
;
int32_t
tsShellActivityTimer
=
3
;
// second
bool
tsEnableSlaveQuery
=
true
;
bool
tsPrintAuth
=
false
;
// multi process
bool
tsMultiProcess
=
false
;
int32_t
tsMnodeShmSize
=
TSDB_MAX_WAL_SIZE
*
2
;
int32_t
tsVnodeShmSize
=
TSDB_MAX_WAL_SIZE
*
10
;
int32_t
tsQnodeShmSize
=
TSDB_MAX_WAL_SIZE
*
4
;
int32_t
tsSnodeShmSize
=
TSDB_MAX_WAL_SIZE
*
4
;
int32_t
tsBnodeShmSize
=
TSDB_MAX_WAL_SIZE
*
4
;
int32_t
tsMnodeShmSize
=
TSDB_MAX_WAL_SIZE
*
2
+
128
;
int32_t
tsVnodeShmSize
=
TSDB_MAX_WAL_SIZE
*
10
+
128
;
int32_t
tsQnodeShmSize
=
TSDB_MAX_WAL_SIZE
*
4
+
128
;
int32_t
tsSnodeShmSize
=
TSDB_MAX_WAL_SIZE
*
4
+
128
;
int32_t
tsBnodeShmSize
=
TSDB_MAX_WAL_SIZE
*
4
+
128
;
// queue & threads
int32_t
tsNumOfRpcThreads
=
1
;
...
...
@@ -351,15 +350,14 @@ static int32_t taosAddSystemCfg(SConfig *pCfg) {
}
static
int32_t
taosAddServerCfg
(
SConfig
*
pCfg
)
{
if
(
cfgAddInt32
(
pCfg
,
"supportVnodes"
,
256
,
0
,
4096
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddDir
(
pCfg
,
"dataDir"
,
tsDataDir
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddFloat
(
pCfg
,
"minimalDataDirGB"
,
2
.
0
f
,
0
.
001
f
,
10000000
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"maxNumOfDistinctRes"
,
tsMaxNumOfDistinctResults
,
10
*
10000
,
10000
*
10000
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"maxConnections"
,
tsMaxConnections
,
1
,
100000
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"supportVnodes"
,
256
,
0
,
4096
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"maxShellConns"
,
tsMaxShellConns
,
10
,
50000000
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"statusInterval"
,
tsStatusInterval
,
1
,
30
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"minSlidingTime"
,
tsMinSlidingTime
,
10
,
1000000
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"minIntervalTime"
,
tsMinIntervalTime
,
1
,
1000000
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"maxNumOfDistinctRes"
,
tsMaxNumOfDistinctResults
,
10
*
10000
,
10000
*
10000
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"maxStreamCompDelay"
,
tsMaxStreamComputDelay
,
10
,
1000000000
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"maxFirstStreamCompDelay"
,
tsStreamCompStartDelay
,
1000
,
1000000000
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"retryStreamCompDelay"
,
tsRetryStreamCompDelay
,
10
,
1000000000
,
0
)
!=
0
)
return
-
1
;
...
...
@@ -371,11 +369,11 @@ static int32_t taosAddServerCfg(SConfig *pCfg) {
if
(
cfgAddBool
(
pCfg
,
"deadLockKillQuery"
,
tsDeadLockKillQuery
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddBool
(
pCfg
,
"multiProcess"
,
tsMultiProcess
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"mnodeShmSize"
,
tsMnodeShmSize
,
4096
,
INT32_MAX
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"vnodeShmSize"
,
tsVnodeShmSize
,
4096
,
INT32_MAX
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"qnodeShmSize"
,
tsQnodeShmSize
,
4096
,
INT32_MAX
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"snodeShmSize"
,
tsSnodeShmSize
,
4096
,
INT32_MAX
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"bnodeShmSize"
,
tsBnodeShmSize
,
4096
,
INT32_MAX
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"mnodeShmSize"
,
tsMnodeShmSize
,
TSDB_MAX_WAL_SIZE
+
128
,
INT32_MAX
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"vnodeShmSize"
,
tsVnodeShmSize
,
TSDB_MAX_WAL_SIZE
+
128
,
INT32_MAX
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"qnodeShmSize"
,
tsQnodeShmSize
,
TSDB_MAX_WAL_SIZE
+
128
,
INT32_MAX
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"snodeShmSize"
,
tsSnodeShmSize
,
TSDB_MAX_WAL_SIZE
+
128
,
INT32_MAX
,
0
)
!=
0
)
return
-
1
;
if
(
cfgAddInt32
(
pCfg
,
"bnodeShmSize"
,
tsBnodeShmSize
,
TSDB_MAX_WAL_SIZE
+
128
,
INT32_MAX
,
0
)
!=
0
)
return
-
1
;
tsNumOfRpcThreads
=
tsNumOfCores
/
2
;
tsNumOfRpcThreads
=
TRANGE
(
tsNumOfRpcThreads
,
1
,
4
);
...
...
@@ -533,12 +531,11 @@ static void taosSetSystemCfg(SConfig *pCfg) {
static
int32_t
taosSetServerCfg
(
SConfig
*
pCfg
)
{
tsDataSpace
.
reserved
=
cfgGetItem
(
pCfg
,
"minimalDataDirGB"
)
->
fval
;
tsMaxNumOfDistinctResults
=
cfgGetItem
(
pCfg
,
"maxNumOfDistinctRes"
)
->
i32
;
tsMaxConnections
=
cfgGetItem
(
pCfg
,
"maxConnections"
)
->
i32
;
tsMaxShellConns
=
cfgGetItem
(
pCfg
,
"maxShellConns"
)
->
i32
;
tsStatusInterval
=
cfgGetItem
(
pCfg
,
"statusInterval"
)
->
i32
;
tsMinSlidingTime
=
cfgGetItem
(
pCfg
,
"minSlidingTime"
)
->
i32
;
tsMinIntervalTime
=
cfgGetItem
(
pCfg
,
"minIntervalTime"
)
->
i32
;
tsMaxNumOfDistinctResults
=
cfgGetItem
(
pCfg
,
"maxNumOfDistinctRes"
)
->
i32
;
tsMaxStreamComputDelay
=
cfgGetItem
(
pCfg
,
"maxStreamCompDelay"
)
->
i32
;
tsStreamCompStartDelay
=
cfgGetItem
(
pCfg
,
"maxFirstStreamCompDelay"
)
->
i32
;
tsRetryStreamCompDelay
=
cfgGetItem
(
pCfg
,
"retryStreamCompDelay"
)
->
i32
;
...
...
source/common/src/tmsgcb.c
浏览文件 @
8e5b263d
...
...
@@ -19,12 +19,16 @@
static
SMsgCb
tsDefaultMsgCb
;
void
tmsgSetDefaultMsgCb
(
const
SMsgCb
*
pMsgCb
)
{
tsDefaultMsgCb
=
*
pMsgCb
;
}
void
tmsgSetDefaultMsgCb
(
const
SMsgCb
*
pMsgCb
)
{
// if (tsDefaultMsgCb.pWrapper == NULL) {
tsDefaultMsgCb
=
*
pMsgCb
;
//}
}
int32_t
tmsgPutToQueue
(
const
SMsgCb
*
pMsgCb
,
EQueueType
qtype
,
SRpcMsg
*
pReq
)
{
PutToQueueFp
fp
=
pMsgCb
->
queueFps
[
qtype
];
if
(
fp
!=
NULL
)
{
return
(
*
fp
)(
pMsgCb
->
p
Wrapper
,
pReq
);
return
(
*
fp
)(
pMsgCb
->
p
Mgmt
,
pReq
);
}
else
{
terrno
=
TSDB_CODE_INVALID_PTR
;
return
-
1
;
...
...
@@ -34,7 +38,7 @@ int32_t tmsgPutToQueue(const SMsgCb* pMsgCb, EQueueType qtype, SRpcMsg* pReq) {
int32_t
tmsgGetQueueSize
(
const
SMsgCb
*
pMsgCb
,
int32_t
vgId
,
EQueueType
qtype
)
{
GetQueueSizeFp
fp
=
pMsgCb
->
qsizeFp
;
if
(
fp
!=
NULL
)
{
return
(
*
fp
)(
pMsgCb
->
p
Wrapper
,
vgId
,
qtype
);
return
(
*
fp
)(
pMsgCb
->
p
Mgmt
,
vgId
,
qtype
);
}
else
{
terrno
=
TSDB_CODE_INVALID_PTR
;
return
-
1
;
...
...
@@ -51,7 +55,7 @@ int32_t tmsgSendReq(const SMsgCb* pMsgCb, const SEpSet* epSet, SRpcMsg* pReq) {
}
}
void
tmsgSendRsp
(
const
SRpcMsg
*
pRsp
)
{
void
tmsgSendRsp
(
SRpcMsg
*
pRsp
)
{
SendRspFp
fp
=
tsDefaultMsgCb
.
sendRspFp
;
if
(
fp
!=
NULL
)
{
return
(
*
fp
)(
tsDefaultMsgCb
.
pWrapper
,
pRsp
);
...
...
@@ -60,7 +64,7 @@ void tmsgSendRsp(const SRpcMsg* pRsp) {
}
}
void
tmsgSendRedirectRsp
(
const
SRpcMsg
*
pRsp
,
const
SEpSet
*
pNewEpSet
)
{
void
tmsgSendRedirectRsp
(
SRpcMsg
*
pRsp
,
const
SEpSet
*
pNewEpSet
)
{
SendRedirectRspFp
fp
=
tsDefaultMsgCb
.
sendRedirectRspFp
;
if
(
fp
!=
NULL
)
{
(
*
fp
)(
tsDefaultMsgCb
.
pWrapper
,
pRsp
,
pNewEpSet
);
...
...
@@ -69,6 +73,15 @@ void tmsgSendRedirectRsp(const SRpcMsg* pRsp, const SEpSet* pNewEpSet) {
}
}
void
tmsgSendMnodeRecv
(
SRpcMsg
*
pReq
,
SRpcMsg
*
pRsp
)
{
SendMnodeRecvFp
fp
=
tsDefaultMsgCb
.
sendMnodeRecvFp
;
if
(
fp
!=
NULL
)
{
(
*
fp
)(
tsDefaultMsgCb
.
pWrapper
,
pReq
,
pRsp
);
}
else
{
terrno
=
TSDB_CODE_INVALID_PTR
;
}
}
void
tmsgRegisterBrokenLinkArg
(
const
SMsgCb
*
pMsgCb
,
SRpcMsg
*
pMsg
)
{
RegisterBrokenLinkArgFp
fp
=
pMsgCb
->
registerBrokenLinkArgFp
;
if
(
fp
!=
NULL
)
{
...
...
source/dnode/mgmt/CMakeLists.txt
浏览文件 @
8e5b263d
add_subdirectory
(
interface
)
add_subdirectory
(
implement
)
add_subdirectory
(
node_mgmt
)
add_subdirectory
(
node_util
)
add_subdirectory
(
mgmt_bnode
)
add_subdirectory
(
mgmt_mnode
)
add_subdirectory
(
mgmt_qnode
)
add_subdirectory
(
mgmt_snode
)
add_subdirectory
(
mgmt_vnode
)
add_subdirectory
(
mgmt_dnode
)
add_subdirectory
(
test
)
aux_source_directory
(
exe EXEC_SRC
)
add_executable
(
taosd
${
EXEC_SRC
}
)
target_include_directories
(
taosd
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/
implemen
t/inc"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/
node_mgm
t/inc"
)
target_link_libraries
(
taosd dnode
)
source/dnode/mgmt/exe/dmMain.c
浏览文件 @
8e5b263d
...
...
@@ -14,7 +14,7 @@
*/
#define _DEFAULT_SOURCE
#include "dm
Imp
.h"
#include "dm
Mgmt
.h"
#include "tconfig.h"
#define DM_APOLLO_URL "The apollo string to use when configuring the server, such as: -a 'jsonFile:./tests/cfg.json', cfg.json text can be '{\"fqdn\":\"td1\"}'."
...
...
@@ -163,14 +163,14 @@ static SDnodeOpt dmGetOpt() {
static
int32_t
dmInitLog
()
{
char
logName
[
12
]
=
{
0
};
snprintf
(
logName
,
sizeof
(
logName
),
"%slog"
,
dmLogName
(
global
.
ntype
));
snprintf
(
logName
,
sizeof
(
logName
),
"%slog"
,
dm
Node
LogName
(
global
.
ntype
));
return
taosCreateLog
(
logName
,
1
,
configDir
,
global
.
envCmd
,
global
.
envFile
,
global
.
apolloUrl
,
global
.
pArgs
,
0
);
}
static
void
dmSetProcInfo
(
int32_t
argc
,
char
**
argv
)
{
taosSetProcPath
(
argc
,
argv
);
if
(
global
.
ntype
!=
DNODE
&&
global
.
ntype
!=
NODE_END
)
{
const
char
*
name
=
dmProcName
(
global
.
ntype
);
const
char
*
name
=
dm
Node
ProcName
(
global
.
ntype
);
taosSetProcName
(
argc
,
argv
,
name
);
}
}
...
...
source/dnode/mgmt/implement/src/dmHandle.c
已删除
100644 → 0
浏览文件 @
66305075
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http:www.gnu.org/licenses/>.
*/
#define _DEFAULT_SOURCE
#include "dmImp.h"
static
void
dmUpdateDnodeCfg
(
SDnode
*
pDnode
,
SDnodeCfg
*
pCfg
)
{
if
(
pDnode
->
data
.
dnodeId
==
0
||
pDnode
->
data
.
clusterId
==
0
)
{
dInfo
(
"set dnodeId:%d clusterId:%"
PRId64
,
pCfg
->
dnodeId
,
pCfg
->
clusterId
);
taosWLockLatch
(
&
pDnode
->
data
.
latch
);
pDnode
->
data
.
dnodeId
=
pCfg
->
dnodeId
;
pDnode
->
data
.
clusterId
=
pCfg
->
clusterId
;
dmWriteEps
(
pDnode
);
taosWUnLockLatch
(
&
pDnode
->
data
.
latch
);
}
}
static
int32_t
dmProcessStatusRsp
(
SDnode
*
pDnode
,
SRpcMsg
*
pRsp
)
{
if
(
pRsp
->
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
pRsp
->
code
==
TSDB_CODE_MND_DNODE_NOT_EXIST
&&
!
pDnode
->
data
.
dropped
&&
pDnode
->
data
.
dnodeId
>
0
)
{
dInfo
(
"dnode:%d, set to dropped since not exist in mnode"
,
pDnode
->
data
.
dnodeId
);
pDnode
->
data
.
dropped
=
1
;
dmWriteEps
(
pDnode
);
}
}
else
{
SStatusRsp
statusRsp
=
{
0
};
if
(
pRsp
->
pCont
!=
NULL
&&
pRsp
->
contLen
>
0
&&
tDeserializeSStatusRsp
(
pRsp
->
pCont
,
pRsp
->
contLen
,
&
statusRsp
)
==
0
)
{
pDnode
->
data
.
dnodeVer
=
statusRsp
.
dnodeVer
;
dmUpdateDnodeCfg
(
pDnode
,
&
statusRsp
.
dnodeCfg
);
dmUpdateEps
(
pDnode
,
statusRsp
.
pDnodeEps
);
}
rpcFreeCont
(
pRsp
->
pCont
);
tFreeSStatusRsp
(
&
statusRsp
);
}
return
TSDB_CODE_SUCCESS
;
}
void
dmSendStatusReq
(
SDnode
*
pDnode
)
{
SStatusReq
req
=
{
0
};
taosRLockLatch
(
&
pDnode
->
data
.
latch
);
req
.
sver
=
tsVersion
;
req
.
dnodeVer
=
pDnode
->
data
.
dnodeVer
;
req
.
dnodeId
=
pDnode
->
data
.
dnodeId
;
req
.
clusterId
=
pDnode
->
data
.
clusterId
;
if
(
req
.
clusterId
==
0
)
req
.
dnodeId
=
0
;
req
.
rebootTime
=
pDnode
->
data
.
rebootTime
;
req
.
updateTime
=
pDnode
->
data
.
updateTime
;
req
.
numOfCores
=
tsNumOfCores
;
req
.
numOfSupportVnodes
=
pDnode
->
data
.
supportVnodes
;
tstrncpy
(
req
.
dnodeEp
,
pDnode
->
data
.
localEp
,
TSDB_EP_LEN
);
req
.
clusterCfg
.
statusInterval
=
tsStatusInterval
;
req
.
clusterCfg
.
checkTime
=
0
;
char
timestr
[
32
]
=
"1970-01-01 00:00:00.00"
;
(
void
)
taosParseTime
(
timestr
,
&
req
.
clusterCfg
.
checkTime
,
(
int32_t
)
strlen
(
timestr
),
TSDB_TIME_PRECISION_MILLI
,
0
);
memcpy
(
req
.
clusterCfg
.
timezone
,
tsTimezoneStr
,
TD_TIMEZONE_LEN
);
memcpy
(
req
.
clusterCfg
.
locale
,
tsLocale
,
TD_LOCALE_LEN
);
memcpy
(
req
.
clusterCfg
.
charset
,
tsCharset
,
TD_LOCALE_LEN
);
taosRUnLockLatch
(
&
pDnode
->
data
.
latch
);
SMonVloadInfo
vinfo
=
{
0
};
dmGetVnodeLoads
(
pDnode
,
&
vinfo
);
req
.
pVloads
=
vinfo
.
pVloads
;
pDnode
->
data
.
unsyncedVgId
=
0
;
pDnode
->
data
.
vndState
=
TAOS_SYNC_STATE_LEADER
;
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
req
.
pVloads
);
++
i
)
{
SVnodeLoad
*
pLoad
=
taosArrayGet
(
req
.
pVloads
,
i
);
if
(
pLoad
->
syncState
!=
TAOS_SYNC_STATE_LEADER
&&
pLoad
->
syncState
!=
TAOS_SYNC_STATE_FOLLOWER
)
{
pDnode
->
data
.
unsyncedVgId
=
pLoad
->
vgId
;
pDnode
->
data
.
vndState
=
pLoad
->
syncState
;
}
}
SMonMloadInfo
minfo
=
{
0
};
dmGetMnodeLoads
(
pDnode
,
&
minfo
);
pDnode
->
data
.
isMnode
=
minfo
.
isMnode
;
pDnode
->
data
.
mndState
=
minfo
.
load
.
syncState
;
int32_t
contLen
=
tSerializeSStatusReq
(
NULL
,
0
,
&
req
);
void
*
pHead
=
rpcMallocCont
(
contLen
);
tSerializeSStatusReq
(
pHead
,
contLen
,
&
req
);
tFreeSStatusReq
(
&
req
);
SRpcMsg
rpcMsg
=
{.
pCont
=
pHead
,
.
contLen
=
contLen
,
.
msgType
=
TDMT_MND_STATUS
,
.
ahandle
=
(
void
*
)
0x9527
};
SRpcMsg
rpcRsp
=
{
0
};
dTrace
(
"send req:%s to mnode, app:%p"
,
TMSG_INFO
(
rpcMsg
.
msgType
),
rpcMsg
.
ahandle
);
dmSendToMnodeRecv
(
pDnode
,
&
rpcMsg
,
&
rpcRsp
);
dmProcessStatusRsp
(
pDnode
,
&
rpcRsp
);
}
int32_t
dmProcessAuthRsp
(
SDnode
*
pDnode
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pRsp
=
&
pMsg
->
rpcMsg
;
dError
(
"auth rsp is received, but not supported yet"
);
return
0
;
}
int32_t
dmProcessGrantRsp
(
SDnode
*
pDnode
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pRsp
=
&
pMsg
->
rpcMsg
;
dError
(
"grant rsp is received, but not supported yet"
);
return
0
;
}
int32_t
dmProcessConfigReq
(
SDnode
*
pDnode
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SDCfgDnodeReq
*
pCfg
=
pReq
->
pCont
;
dError
(
"config req is received, but not supported yet"
);
return
TSDB_CODE_OPS_NOT_SUPPORT
;
}
int32_t
dmProcessCreateNodeReq
(
SDnode
*
pDnode
,
EDndNodeType
ntype
,
SNodeMsg
*
pMsg
)
{
SMgmtWrapper
*
pWrapper
=
dmAcquireWrapper
(
pDnode
,
ntype
);
if
(
pWrapper
!=
NULL
)
{
dmReleaseWrapper
(
pWrapper
);
terrno
=
TSDB_CODE_NODE_ALREADY_DEPLOYED
;
dError
(
"failed to create node since %s"
,
terrstr
());
return
-
1
;
}
taosThreadMutexLock
(
&
pDnode
->
mutex
);
pWrapper
=
&
pDnode
->
wrappers
[
ntype
];
if
(
taosMkDir
(
pWrapper
->
path
)
!=
0
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
dError
(
"failed to create dir:%s since %s"
,
pWrapper
->
path
,
terrstr
());
return
-
1
;
}
int32_t
code
=
(
*
pWrapper
->
fp
.
createFp
)(
pWrapper
,
pMsg
);
if
(
code
!=
0
)
{
dError
(
"node:%s, failed to create since %s"
,
pWrapper
->
name
,
terrstr
());
}
else
{
dDebug
(
"node:%s, has been created"
,
pWrapper
->
name
);
(
void
)
dmOpenNode
(
pWrapper
);
pWrapper
->
required
=
true
;
pWrapper
->
deployed
=
true
;
pWrapper
->
procType
=
pDnode
->
ptype
;
}
taosThreadMutexUnlock
(
&
pDnode
->
mutex
);
return
code
;
}
int32_t
dmProcessDropNodeReq
(
SDnode
*
pDnode
,
EDndNodeType
ntype
,
SNodeMsg
*
pMsg
)
{
SMgmtWrapper
*
pWrapper
=
dmAcquireWrapper
(
pDnode
,
ntype
);
if
(
pWrapper
==
NULL
)
{
terrno
=
TSDB_CODE_NODE_NOT_DEPLOYED
;
dError
(
"failed to drop node since %s"
,
terrstr
());
return
-
1
;
}
taosThreadMutexLock
(
&
pDnode
->
mutex
);
int32_t
code
=
(
*
pWrapper
->
fp
.
dropFp
)(
pWrapper
,
pMsg
);
if
(
code
!=
0
)
{
dError
(
"node:%s, failed to drop since %s"
,
pWrapper
->
name
,
terrstr
());
}
else
{
dDebug
(
"node:%s, has been dropped"
,
pWrapper
->
name
);
pWrapper
->
required
=
false
;
pWrapper
->
deployed
=
false
;
}
dmReleaseWrapper
(
pWrapper
);
if
(
code
==
0
)
{
dmCloseNode
(
pWrapper
);
taosRemoveDir
(
pWrapper
->
path
);
}
taosThreadMutexUnlock
(
&
pDnode
->
mutex
);
return
code
;
}
static
void
dmSetMgmtMsgHandle
(
SMgmtWrapper
*
pWrapper
)
{
// Requests handled by DNODE
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_MNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_MNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_QNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_QNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_SNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_SNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_BNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_BNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_CONFIG_DNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
// Requests handled by MNODE
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_GRANT_RSP
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_AUTH_RSP
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
}
static
int32_t
dmStartMgmt
(
SMgmtWrapper
*
pWrapper
)
{
if
(
dmStartStatusThread
(
pWrapper
->
pDnode
)
!=
0
)
{
return
-
1
;
}
if
(
dmStartMonitorThread
(
pWrapper
->
pDnode
)
!=
0
)
{
return
-
1
;
}
return
0
;
}
static
void
dmStopMgmt
(
SMgmtWrapper
*
pWrapper
)
{
dmStopMonitorThread
(
pWrapper
->
pDnode
);
dmStopStatusThread
(
pWrapper
->
pDnode
);
}
static
int32_t
dmInitMgmt
(
SMgmtWrapper
*
pWrapper
)
{
dInfo
(
"dnode-mgmt start to init"
);
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
pDnode
->
data
.
dnodeHash
=
taosHashInit
(
4
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_INT
),
true
,
HASH_NO_LOCK
);
if
(
pDnode
->
data
.
dnodeHash
==
NULL
)
{
dError
(
"failed to init dnode hash"
);
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
return
-
1
;
}
if
(
dmReadEps
(
pDnode
)
!=
0
)
{
dError
(
"failed to read file since %s"
,
terrstr
());
return
-
1
;
}
if
(
pDnode
->
data
.
dropped
)
{
dError
(
"dnode will not start since its already dropped"
);
return
-
1
;
}
if
(
dmStartWorker
(
pDnode
)
!=
0
)
{
return
-
1
;
}
if
(
dmInitServer
(
pDnode
)
!=
0
)
{
dError
(
"failed to init transport since %s"
,
terrstr
());
return
-
1
;
}
dmReportStartup
(
pDnode
,
"dnode-transport"
,
"initialized"
);
if
(
udfStartUdfd
(
pDnode
->
data
.
dnodeId
)
!=
0
)
{
dError
(
"failed to start udfd"
);
}
dInfo
(
"dnode-mgmt is initialized"
);
return
0
;
}
static
void
dmCleanupMgmt
(
SMgmtWrapper
*
pWrapper
)
{
dInfo
(
"dnode-mgmt start to clean up"
);
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
udfStopUdfd
();
dmStopWorker
(
pDnode
);
taosWLockLatch
(
&
pDnode
->
data
.
latch
);
if
(
pDnode
->
data
.
dnodeEps
!=
NULL
)
{
taosArrayDestroy
(
pDnode
->
data
.
dnodeEps
);
pDnode
->
data
.
dnodeEps
=
NULL
;
}
if
(
pDnode
->
data
.
dnodeHash
!=
NULL
)
{
taosHashCleanup
(
pDnode
->
data
.
dnodeHash
);
pDnode
->
data
.
dnodeHash
=
NULL
;
}
taosWUnLockLatch
(
&
pDnode
->
data
.
latch
);
dmCleanupClient
(
pDnode
);
dmCleanupServer
(
pDnode
);
dInfo
(
"dnode-mgmt is cleaned up"
);
}
static
int32_t
dmRequireMgmt
(
SMgmtWrapper
*
pWrapper
,
bool
*
required
)
{
*
required
=
true
;
return
0
;
}
void
dmSetMgmtFp
(
SMgmtWrapper
*
pWrapper
)
{
SMgmtFp
mgmtFp
=
{
0
};
mgmtFp
.
openFp
=
dmInitMgmt
;
mgmtFp
.
closeFp
=
dmCleanupMgmt
;
mgmtFp
.
startFp
=
dmStartMgmt
;
mgmtFp
.
stopFp
=
dmStopMgmt
;
mgmtFp
.
requiredFp
=
dmRequireMgmt
;
dmSetMgmtMsgHandle
(
pWrapper
);
pWrapper
->
name
=
"dnode"
;
pWrapper
->
fp
=
mgmtFp
;
}
source/dnode/mgmt/implement/src/dmMonitor.c
已删除
100644 → 0
浏览文件 @
66305075
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#define _DEFAULT_SOURCE
#include "dmImp.h"
static
void
dmGetMonitorBasicInfo
(
SDnode
*
pDnode
,
SMonBasicInfo
*
pInfo
)
{
pInfo
->
protocol
=
1
;
pInfo
->
dnode_id
=
pDnode
->
data
.
dnodeId
;
pInfo
->
cluster_id
=
pDnode
->
data
.
clusterId
;
tstrncpy
(
pInfo
->
dnode_ep
,
tsLocalEp
,
TSDB_EP_LEN
);
}
static
void
dmGetMonitorDnodeInfo
(
SDnode
*
pDnode
,
SMonDnodeInfo
*
pInfo
)
{
pInfo
->
uptime
=
(
taosGetTimestampMs
()
-
pDnode
->
data
.
rebootTime
)
/
(
86400000
.
0
f
);
pInfo
->
has_mnode
=
pDnode
->
wrappers
[
MNODE
].
required
;
pInfo
->
has_qnode
=
pDnode
->
wrappers
[
QNODE
].
required
;
pInfo
->
has_snode
=
pDnode
->
wrappers
[
SNODE
].
required
;
pInfo
->
has_bnode
=
pDnode
->
wrappers
[
BNODE
].
required
;
tstrncpy
(
pInfo
->
logdir
.
name
,
tsLogDir
,
sizeof
(
pInfo
->
logdir
.
name
));
pInfo
->
logdir
.
size
=
tsLogSpace
.
size
;
tstrncpy
(
pInfo
->
tempdir
.
name
,
tsTempDir
,
sizeof
(
pInfo
->
tempdir
.
name
));
pInfo
->
tempdir
.
size
=
tsTempSpace
.
size
;
}
static
void
dmGetMonitorInfo
(
SDnode
*
pDnode
,
SMonDmInfo
*
pInfo
)
{
dmGetMonitorBasicInfo
(
pDnode
,
&
pInfo
->
basic
);
dmGetMonitorSysInfo
(
&
pInfo
->
sys
);
dmGetMonitorDnodeInfo
(
pDnode
,
&
pInfo
->
dnode
);
}
void
dmSendMonitorReport
(
SDnode
*
pDnode
)
{
if
(
!
tsEnableMonitor
||
tsMonitorFqdn
[
0
]
==
0
||
tsMonitorPort
==
0
)
return
;
dTrace
(
"send monitor report to %s:%u"
,
tsMonitorFqdn
,
tsMonitorPort
);
SMonDmInfo
dmInfo
=
{
0
};
SMonMmInfo
mmInfo
=
{
0
};
SMonVmInfo
vmInfo
=
{
0
};
SMonQmInfo
qmInfo
=
{
0
};
SMonSmInfo
smInfo
=
{
0
};
SMonBmInfo
bmInfo
=
{
0
};
SRpcMsg
req
=
{
0
};
SRpcMsg
rsp
;
SEpSet
epset
=
{.
inUse
=
0
,
.
numOfEps
=
1
};
tstrncpy
(
epset
.
eps
[
0
].
fqdn
,
pDnode
->
data
.
localFqdn
,
TSDB_FQDN_LEN
);
epset
.
eps
[
0
].
port
=
tsServerPort
;
SMgmtWrapper
*
pWrapper
=
NULL
;
dmGetMonitorInfo
(
pDnode
,
&
dmInfo
);
bool
getFromAPI
=
!
tsMultiProcess
;
pWrapper
=
&
pDnode
->
wrappers
[
MNODE
];
if
(
getFromAPI
)
{
if
(
dmMarkWrapper
(
pWrapper
)
==
0
)
{
mmGetMonitorInfo
(
pWrapper
,
&
mmInfo
);
dmReleaseWrapper
(
pWrapper
);
}
}
else
{
if
(
pWrapper
->
required
)
{
req
.
msgType
=
TDMT_MON_MM_INFO
;
dmSendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
if
(
rsp
.
code
==
0
&&
rsp
.
contLen
>
0
)
{
tDeserializeSMonMmInfo
(
rsp
.
pCont
,
rsp
.
contLen
,
&
mmInfo
);
}
rpcFreeCont
(
rsp
.
pCont
);
}
}
pWrapper
=
&
pDnode
->
wrappers
[
VNODE
];
if
(
getFromAPI
)
{
if
(
dmMarkWrapper
(
pWrapper
)
==
0
)
{
vmGetMonitorInfo
(
pWrapper
,
&
vmInfo
);
dmReleaseWrapper
(
pWrapper
);
}
}
else
{
if
(
pWrapper
->
required
)
{
req
.
msgType
=
TDMT_MON_VM_INFO
;
dmSendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
if
(
rsp
.
code
==
0
&&
rsp
.
contLen
>
0
)
{
tDeserializeSMonVmInfo
(
rsp
.
pCont
,
rsp
.
contLen
,
&
vmInfo
);
}
rpcFreeCont
(
rsp
.
pCont
);
}
}
pWrapper
=
&
pDnode
->
wrappers
[
QNODE
];
if
(
getFromAPI
)
{
if
(
dmMarkWrapper
(
pWrapper
)
==
0
)
{
qmGetMonitorInfo
(
pWrapper
,
&
qmInfo
);
dmReleaseWrapper
(
pWrapper
);
}
}
else
{
if
(
pWrapper
->
required
)
{
req
.
msgType
=
TDMT_MON_QM_INFO
;
dmSendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
if
(
rsp
.
code
==
0
&&
rsp
.
contLen
>
0
)
{
tDeserializeSMonQmInfo
(
rsp
.
pCont
,
rsp
.
contLen
,
&
qmInfo
);
}
rpcFreeCont
(
rsp
.
pCont
);
}
}
pWrapper
=
&
pDnode
->
wrappers
[
SNODE
];
if
(
getFromAPI
)
{
if
(
dmMarkWrapper
(
pWrapper
)
==
0
)
{
smGetMonitorInfo
(
pWrapper
,
&
smInfo
);
dmReleaseWrapper
(
pWrapper
);
}
}
else
{
if
(
pWrapper
->
required
)
{
req
.
msgType
=
TDMT_MON_SM_INFO
;
dmSendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
if
(
rsp
.
code
==
0
&&
rsp
.
contLen
>
0
)
{
tDeserializeSMonSmInfo
(
rsp
.
pCont
,
rsp
.
contLen
,
&
smInfo
);
}
rpcFreeCont
(
rsp
.
pCont
);
}
}
pWrapper
=
&
pDnode
->
wrappers
[
BNODE
];
if
(
getFromAPI
)
{
if
(
dmMarkWrapper
(
pWrapper
)
==
0
)
{
bmGetMonitorInfo
(
pWrapper
,
&
bmInfo
);
dmReleaseWrapper
(
pWrapper
);
}
}
else
{
if
(
pWrapper
->
required
)
{
req
.
msgType
=
TDMT_MON_BM_INFO
;
dmSendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
if
(
rsp
.
code
==
0
&&
rsp
.
contLen
>
0
)
{
tDeserializeSMonBmInfo
(
rsp
.
pCont
,
rsp
.
contLen
,
&
bmInfo
);
}
rpcFreeCont
(
rsp
.
pCont
);
}
}
monSetDmInfo
(
&
dmInfo
);
monSetMmInfo
(
&
mmInfo
);
monSetVmInfo
(
&
vmInfo
);
monSetQmInfo
(
&
qmInfo
);
monSetSmInfo
(
&
smInfo
);
monSetBmInfo
(
&
bmInfo
);
tFreeSMonMmInfo
(
&
mmInfo
);
tFreeSMonVmInfo
(
&
vmInfo
);
tFreeSMonQmInfo
(
&
qmInfo
);
tFreeSMonSmInfo
(
&
smInfo
);
tFreeSMonBmInfo
(
&
bmInfo
);
monSendReport
();
}
void
dmGetVnodeLoads
(
SDnode
*
pDnode
,
SMonVloadInfo
*
pInfo
)
{
SMgmtWrapper
*
pWrapper
=
dmAcquireWrapper
(
pDnode
,
VNODE
);
if
(
pWrapper
==
NULL
)
return
;
bool
getFromAPI
=
!
tsMultiProcess
;
if
(
getFromAPI
)
{
vmGetVnodeLoads
(
pWrapper
,
pInfo
);
}
else
{
SRpcMsg
req
=
{.
msgType
=
TDMT_MON_VM_LOAD
};
SRpcMsg
rsp
=
{
0
};
SEpSet
epset
=
{.
inUse
=
0
,
.
numOfEps
=
1
};
tstrncpy
(
epset
.
eps
[
0
].
fqdn
,
pDnode
->
data
.
localFqdn
,
TSDB_FQDN_LEN
);
epset
.
eps
[
0
].
port
=
tsServerPort
;
dmSendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
if
(
rsp
.
code
==
0
&&
rsp
.
contLen
>
0
)
{
tDeserializeSMonVloadInfo
(
rsp
.
pCont
,
rsp
.
contLen
,
pInfo
);
}
rpcFreeCont
(
rsp
.
pCont
);
}
dmReleaseWrapper
(
pWrapper
);
}
void
dmGetMnodeLoads
(
SDnode
*
pDnode
,
SMonMloadInfo
*
pInfo
)
{
SMgmtWrapper
*
pWrapper
=
dmAcquireWrapper
(
pDnode
,
MNODE
);
if
(
pWrapper
==
NULL
)
{
pInfo
->
isMnode
=
0
;
return
;
}
bool
getFromAPI
=
!
tsMultiProcess
;
if
(
getFromAPI
)
{
mmGetMnodeLoads
(
pWrapper
,
pInfo
);
}
else
{
SRpcMsg
req
=
{.
msgType
=
TDMT_MON_MM_LOAD
};
SRpcMsg
rsp
=
{
0
};
SEpSet
epset
=
{.
inUse
=
0
,
.
numOfEps
=
1
};
tstrncpy
(
epset
.
eps
[
0
].
fqdn
,
pDnode
->
data
.
localFqdn
,
TSDB_FQDN_LEN
);
epset
.
eps
[
0
].
port
=
tsServerPort
;
dmSendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
if
(
rsp
.
code
==
0
&&
rsp
.
contLen
>
0
)
{
tDeserializeSMonMloadInfo
(
rsp
.
pCont
,
rsp
.
contLen
,
pInfo
);
}
rpcFreeCont
(
rsp
.
pCont
);
}
dmReleaseWrapper
(
pWrapper
);
}
source/dnode/mgmt/implement/src/dmObj.c
已删除
100644 → 0
浏览文件 @
66305075
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#define _DEFAULT_SOURCE
#include "dmImp.h"
static
int32_t
dmInitVars
(
SDnode
*
pDnode
,
const
SDnodeOpt
*
pOption
)
{
pDnode
->
data
.
dnodeId
=
0
;
pDnode
->
data
.
clusterId
=
0
;
pDnode
->
data
.
dnodeVer
=
0
;
pDnode
->
data
.
updateTime
=
0
;
pDnode
->
data
.
rebootTime
=
taosGetTimestampMs
();
pDnode
->
data
.
dropped
=
0
;
pDnode
->
data
.
localEp
=
strdup
(
pOption
->
localEp
);
pDnode
->
data
.
localFqdn
=
strdup
(
pOption
->
localFqdn
);
pDnode
->
data
.
firstEp
=
strdup
(
pOption
->
firstEp
);
pDnode
->
data
.
secondEp
=
strdup
(
pOption
->
secondEp
);
pDnode
->
data
.
dataDir
=
strdup
(
pOption
->
dataDir
);
pDnode
->
data
.
disks
=
pOption
->
disks
;
pDnode
->
data
.
numOfDisks
=
pOption
->
numOfDisks
;
pDnode
->
data
.
supportVnodes
=
pOption
->
numOfSupportVnodes
;
pDnode
->
data
.
serverPort
=
pOption
->
serverPort
;
pDnode
->
ntype
=
pOption
->
ntype
;
if
(
pDnode
->
data
.
dataDir
==
NULL
||
pDnode
->
data
.
localEp
==
NULL
||
pDnode
->
data
.
localFqdn
==
NULL
||
pDnode
->
data
.
firstEp
==
NULL
||
pDnode
->
data
.
secondEp
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
return
-
1
;
}
if
(
!
tsMultiProcess
||
pDnode
->
ntype
==
DNODE
||
pDnode
->
ntype
==
NODE_END
)
{
pDnode
->
data
.
lockfile
=
dmCheckRunning
(
pDnode
->
data
.
dataDir
);
if
(
pDnode
->
data
.
lockfile
==
NULL
)
{
return
-
1
;
}
}
taosInitRWLatch
(
&
pDnode
->
data
.
latch
);
taosThreadMutexInit
(
&
pDnode
->
mutex
,
NULL
);
return
0
;
}
static
void
dmClearVars
(
SDnode
*
pDnode
)
{
for
(
EDndNodeType
n
=
DNODE
;
n
<
NODE_END
;
++
n
)
{
SMgmtWrapper
*
pMgmt
=
&
pDnode
->
wrappers
[
n
];
taosMemoryFreeClear
(
pMgmt
->
path
);
}
if
(
pDnode
->
data
.
lockfile
!=
NULL
)
{
taosUnLockFile
(
pDnode
->
data
.
lockfile
);
taosCloseFile
(
&
pDnode
->
data
.
lockfile
);
pDnode
->
data
.
lockfile
=
NULL
;
}
taosMemoryFreeClear
(
pDnode
->
data
.
localEp
);
taosMemoryFreeClear
(
pDnode
->
data
.
localFqdn
);
taosMemoryFreeClear
(
pDnode
->
data
.
firstEp
);
taosMemoryFreeClear
(
pDnode
->
data
.
secondEp
);
taosMemoryFreeClear
(
pDnode
->
data
.
dataDir
);
taosThreadMutexDestroy
(
&
pDnode
->
mutex
);
memset
(
&
pDnode
->
mutex
,
0
,
sizeof
(
pDnode
->
mutex
));
taosMemoryFree
(
pDnode
);
dDebug
(
"dnode memory is cleared, data:%p"
,
pDnode
);
}
SDnode
*
dmCreate
(
const
SDnodeOpt
*
pOption
)
{
dDebug
(
"start to create dnode"
);
int32_t
code
=
-
1
;
char
path
[
PATH_MAX
]
=
{
0
};
SDnode
*
pDnode
=
NULL
;
pDnode
=
taosMemoryCalloc
(
1
,
sizeof
(
SDnode
));
if
(
pDnode
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_OVER
;
}
if
(
dmInitVars
(
pDnode
,
pOption
)
!=
0
)
{
dError
(
"failed to init variables since %s"
,
terrstr
());
goto
_OVER
;
}
dmSetStatus
(
pDnode
,
DND_STAT_INIT
);
dmSetMgmtFp
(
&
pDnode
->
wrappers
[
DNODE
]);
mmSetMgmtFp
(
&
pDnode
->
wrappers
[
MNODE
]);
vmSetMgmtFp
(
&
pDnode
->
wrappers
[
VNODE
]);
qmSetMgmtFp
(
&
pDnode
->
wrappers
[
QNODE
]);
smSetMgmtFp
(
&
pDnode
->
wrappers
[
SNODE
]);
bmSetMgmtFp
(
&
pDnode
->
wrappers
[
BNODE
]);
for
(
EDndNodeType
n
=
DNODE
;
n
<
NODE_END
;
++
n
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
snprintf
(
path
,
sizeof
(
path
),
"%s%s%s"
,
pDnode
->
data
.
dataDir
,
TD_DIRSEP
,
pWrapper
->
name
);
pWrapper
->
path
=
strdup
(
path
);
pWrapper
->
procShm
.
id
=
-
1
;
pWrapper
->
pDnode
=
pDnode
;
pWrapper
->
ntype
=
n
;
pWrapper
->
procType
=
DND_PROC_SINGLE
;
taosInitRWLatch
(
&
pWrapper
->
latch
);
if
(
pWrapper
->
path
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_OVER
;
}
if
(
n
!=
DNODE
&&
dmReadShmFile
(
pWrapper
)
!=
0
)
{
dError
(
"node:%s, failed to read shm file since %s"
,
pWrapper
->
name
,
terrstr
());
goto
_OVER
;
}
}
if
(
dmInitMsgHandle
(
pDnode
)
!=
0
)
{
dError
(
"failed to init msg handles since %s"
,
terrstr
());
goto
_OVER
;
}
dInfo
(
"dnode is created, data:%p"
,
pDnode
);
code
=
0
;
_OVER:
if
(
code
!=
0
&&
pDnode
)
{
dmClearVars
(
pDnode
);
pDnode
=
NULL
;
dError
(
"failed to create dnode since %s"
,
terrstr
());
}
return
pDnode
;
}
void
dmClose
(
SDnode
*
pDnode
)
{
if
(
pDnode
==
NULL
)
return
;
dmClearVars
(
pDnode
);
dInfo
(
"dnode is closed, data:%p"
,
pDnode
);
}
source/dnode/mgmt/interface/inc/dmDef.h
已删除
100644 → 0
浏览文件 @
66305075
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _TD_DM_DEF_H_
#define _TD_DM_DEF_H_
#include "uv.h"
#include "dmLog.h"
#include "cJSON.h"
#include "tcache.h"
#include "tcrc32c.h"
#include "tdatablock.h"
#include "tglobal.h"
#include "thash.h"
#include "tlockfree.h"
#include "tlog.h"
#include "tmsg.h"
#include "tmsgcb.h"
#include "tprocess.h"
#include "tqueue.h"
#include "trpc.h"
#include "tthread.h"
#include "ttime.h"
#include "tworker.h"
#include "dnode.h"
#include "mnode.h"
#include "monitor.h"
#include "sync.h"
#include "libs/function/function.h"
#ifdef __cplusplus
extern
"C"
{
#endif
typedef
enum
{
DNODE
,
VNODE
,
QNODE
,
SNODE
,
MNODE
,
BNODE
,
NODE_END
}
EDndNodeType
;
typedef
enum
{
DND_STAT_INIT
,
DND_STAT_RUNNING
,
DND_STAT_STOPPED
}
EDndRunStatus
;
typedef
enum
{
DND_ENV_INIT
,
DND_ENV_READY
,
DND_ENV_CLEANUP
}
EDndEnvStatus
;
typedef
enum
{
DND_PROC_SINGLE
,
DND_PROC_CHILD
,
DND_PROC_PARENT
}
EDndProcType
;
typedef
int32_t
(
*
NodeMsgFp
)(
struct
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
typedef
int32_t
(
*
OpenNodeFp
)(
struct
SMgmtWrapper
*
pWrapper
);
typedef
void
(
*
CloseNodeFp
)(
struct
SMgmtWrapper
*
pWrapper
);
typedef
int32_t
(
*
StartNodeFp
)(
struct
SMgmtWrapper
*
pWrapper
);
typedef
void
(
*
StopNodeFp
)(
struct
SMgmtWrapper
*
pWrapper
);
typedef
int32_t
(
*
CreateNodeFp
)(
struct
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
typedef
int32_t
(
*
DropNodeFp
)(
struct
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
typedef
int32_t
(
*
RequireNodeFp
)(
struct
SMgmtWrapper
*
pWrapper
,
bool
*
required
);
typedef
struct
{
SMgmtWrapper
*
pQndWrapper
;
SMgmtWrapper
*
pMndWrapper
;
SMgmtWrapper
*
pNdWrapper
;
}
SMsgHandle
;
typedef
struct
{
OpenNodeFp
openFp
;
CloseNodeFp
closeFp
;
StartNodeFp
startFp
;
StopNodeFp
stopFp
;
CreateNodeFp
createFp
;
DropNodeFp
dropFp
;
RequireNodeFp
requiredFp
;
}
SMgmtFp
;
typedef
struct
SMgmtWrapper
{
SDnode
*
pDnode
;
struct
{
const
char
*
name
;
char
*
path
;
int32_t
refCount
;
SRWLatch
latch
;
EDndNodeType
ntype
;
bool
deployed
;
bool
required
;
SMgmtFp
fp
;
void
*
pMgmt
;
};
struct
{
EDndProcType
procType
;
int32_t
procId
;
SProcObj
*
procObj
;
SShm
procShm
;
};
struct
{
int8_t
msgVgIds
[
TDMT_MAX
];
// Handle the case where the same message type is distributed to qnode or vnode
NodeMsgFp
msgFps
[
TDMT_MAX
];
};
}
SMgmtWrapper
;
typedef
struct
{
void
*
serverRpc
;
void
*
clientRpc
;
SMsgHandle
msgHandles
[
TDMT_MAX
];
}
SDnodeTrans
;
typedef
struct
{
int32_t
dnodeId
;
int64_t
clusterId
;
int64_t
dnodeVer
;
int64_t
updateTime
;
int64_t
rebootTime
;
int32_t
unsyncedVgId
;
ESyncState
vndState
;
ESyncState
mndState
;
bool
isMnode
;
bool
dropped
;
SEpSet
mnodeEps
;
SArray
*
dnodeEps
;
SHashObj
*
dnodeHash
;
TdThread
*
statusThreadId
;
TdThread
*
monitorThreadId
;
SRWLatch
latch
;
SSingleWorker
mgmtWorker
;
SMsgCb
msgCb
;
SDnode
*
pDnode
;
TdFilePtr
lockfile
;
char
*
localEp
;
char
*
localFqdn
;
char
*
firstEp
;
char
*
secondEp
;
char
*
dataDir
;
SDiskCfg
*
disks
;
int32_t
numOfDisks
;
int32_t
supportVnodes
;
uint16_t
serverPort
;
}
SDnodeData
;
typedef
struct
{
char
name
[
TSDB_STEP_NAME_LEN
];
char
desc
[
TSDB_STEP_DESC_LEN
];
}
SStartupInfo
;
typedef
struct
SUdfdData
{
bool
startCalled
;
bool
needCleanUp
;
uv_loop_t
loop
;
uv_thread_t
thread
;
uv_barrier_t
barrier
;
uv_process_t
process
;
int
spawnErr
;
uv_pipe_t
ctrlPipe
;
uv_async_t
stopAsync
;
int32_t
stopCalled
;
int32_t
dnodeId
;
}
SUdfdData
;
typedef
struct
SDnode
{
EDndProcType
ptype
;
EDndNodeType
ntype
;
EDndRunStatus
status
;
EDndEvent
event
;
SStartupInfo
startup
;
SDnodeTrans
trans
;
SDnodeData
data
;
SUdfdData
udfdData
;
TdThreadMutex
mutex
;
SMgmtWrapper
wrappers
[
NODE_END
];
}
SDnode
;
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DM_DEF_H_*/
\ No newline at end of file
source/dnode/mgmt/interface/inc/dmLog.h
已删除
100644 → 0
浏览文件 @
66305075
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _TD_DM_LOG_H_
#define _TD_DM_LOG_H_
#include "tlog.h"
#ifdef __cplusplus
extern
"C"
{
#endif
#define dFatal(...) { if (dDebugFlag & DEBUG_FATAL) { taosPrintLog("DND FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }}
#define dError(...) { if (dDebugFlag & DEBUG_ERROR) { taosPrintLog("DND ERROR ", DEBUG_ERROR, 255, __VA_ARGS__); }}
#define dWarn(...) { if (dDebugFlag & DEBUG_WARN) { taosPrintLog("DND WARN ", DEBUG_WARN, 255, __VA_ARGS__); }}
#define dInfo(...) { if (dDebugFlag & DEBUG_INFO) { taosPrintLog("DND ", DEBUG_INFO, 255, __VA_ARGS__); }}
#define dDebug(...) { if (dDebugFlag & DEBUG_DEBUG) { taosPrintLog("DND ", DEBUG_DEBUG, dDebugFlag, __VA_ARGS__); }}
#define dTrace(...) { if (dDebugFlag & DEBUG_TRACE) { taosPrintLog("DND ", DEBUG_TRACE, dDebugFlag, __VA_ARGS__); }}
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DM_LOG_H_*/
\ No newline at end of file
source/dnode/mgmt/mgmt_bnode/CMakeLists.txt
浏览文件 @
8e5b263d
...
...
@@ -5,5 +5,5 @@ target_include_directories(
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
)
target_link_libraries
(
mgmt_bnode
dnode_interface
mgmt_bnode
node_util
)
\ No newline at end of file
source/dnode/mgmt/mgmt_bnode/inc/bmInt.h
浏览文件 @
8e5b263d
...
...
@@ -16,7 +16,7 @@
#ifndef _TD_DND_BNODE_INT_H_
#define _TD_DND_BNODE_INT_H_
#include "dm
Int
.h"
#include "dm
Util
.h"
#include "bnode.h"
...
...
@@ -26,24 +26,25 @@ extern "C" {
typedef
struct
SBnodeMgmt
{
SBnode
*
pBnode
;
SDnode
*
pDnode
;
SMgmtWrapper
*
pWrapper
;
SMsgCb
msgCb
;
const
char
*
path
;
const
char
*
name
;
int32_t
dnodeId
;
SMultiWorker
writeWorker
;
SSingleWorker
monitorWorker
;
}
SBnodeMgmt
;
// bmHandle.c
void
bmInitMsgHandle
(
SMgmtWrapper
*
pWrapper
);
int32_t
bmProcessCreateReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
bmProcessDropReq
(
S
MgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
bmProcessGetMonBmInfoReq
(
S
MgmtWrapper
*
pWrapper
,
SNodeMsg
*
pReq
);
SArray
*
bmGetMsgHandles
(
);
int32_t
bmProcessCreateReq
(
const
SMgmtInputOpt
*
pInput
,
SNodeMsg
*
pMsg
);
int32_t
bmProcessDropReq
(
S
BnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
bmProcessGetMonBmInfoReq
(
S
BnodeMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
// bmWorker.c
int32_t
bmStartWorker
(
SBnodeMgmt
*
pMgmt
);
void
bmStopWorker
(
SBnodeMgmt
*
pMgmt
);
int32_t
bmP
rocessWriteMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
bmP
rocessMonitorMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
bmP
utNodeMsgToWriteQueue
(
SBnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
bmP
utNodeMsgToMonitorQueue
(
SBnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
#ifdef __cplusplus
}
...
...
source/dnode/mgmt/mgmt_bnode/src/bmHandle.c
浏览文件 @
8e5b263d
...
...
@@ -16,12 +16,12 @@
#define _DEFAULT_SOURCE
#include "bmInt.h"
void
bmGetMonitorInfo
(
SMgmtWrapper
*
pWrapper
,
SMonBmInfo
*
bmInfo
)
{}
static
void
bmGetMonitorInfo
(
SBnodeMgmt
*
pMgmt
,
SMonBmInfo
*
bmInfo
)
{}
int32_t
bmProcessGetMonBmInfoReq
(
S
MgmtWrapper
*
pWrapper
,
SNodeMsg
*
pReq
)
{
int32_t
bmProcessGetMonBmInfoReq
(
S
BnodeMgmt
*
pMgmt
,
SNodeMsg
*
pReq
)
{
SMonBmInfo
bmInfo
=
{
0
};
bmGetMonitorInfo
(
p
Wrapper
,
&
bmInfo
);
dmGetMonitorSysInfo
(
&
bmInfo
.
sys
);
bmGetMonitorInfo
(
p
Mgmt
,
&
bmInfo
);
dmGetMonitorSys
tem
Info
(
&
bmInfo
.
sys
);
monGetLogs
(
&
bmInfo
.
log
);
int32_t
rspLen
=
tSerializeSMonBmInfo
(
NULL
,
0
,
&
bmInfo
);
...
...
@@ -43,8 +43,7 @@ int32_t bmProcessGetMonBmInfoReq(SMgmtWrapper *pWrapper, SNodeMsg *pReq) {
return
0
;
}
int32_t
bmProcessCreateReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
int32_t
bmProcessCreateReq
(
const
SMgmtInputOpt
*
pInput
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SDCreateBnodeReq
createReq
=
{
0
};
...
...
@@ -53,14 +52,14 @@ int32_t bmProcessCreateReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
-
1
;
}
if
(
p
Dnode
->
data
.
dnodeId
!=
0
&&
createReq
.
dnodeId
!=
pDnode
->
data
.
dnodeId
)
{
if
(
p
Input
->
dnodeId
!=
0
&&
createReq
.
dnodeId
!=
pInput
->
dnodeId
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to create bnode since %s, input:%d cur:%d"
,
terrstr
(),
createReq
.
dnodeId
,
p
Dnode
->
data
.
dnodeId
);
dError
(
"failed to create bnode since %s, input:%d cur:%d"
,
terrstr
(),
createReq
.
dnodeId
,
p
Input
->
dnodeId
);
return
-
1
;
}
bool
deployed
=
true
;
if
(
dmWriteFile
(
p
Wrapper
,
deployed
)
!=
0
)
{
if
(
dmWriteFile
(
p
Input
->
path
,
pInput
->
name
,
deployed
)
!=
0
)
{
dError
(
"failed to write bnode file since %s"
,
terrstr
());
return
-
1
;
}
...
...
@@ -68,8 +67,7 @@ int32_t bmProcessCreateReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
0
;
}
int32_t
bmProcessDropReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
int32_t
bmProcessDropReq
(
SBnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SDDropBnodeReq
dropReq
=
{
0
};
...
...
@@ -78,14 +76,14 @@ int32_t bmProcessDropReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
-
1
;
}
if
(
dropReq
.
dnodeId
!=
pDnode
->
data
.
dnodeId
)
{
if
(
pMgmt
->
dnodeId
!=
0
&&
dropReq
.
dnodeId
!=
pMgmt
->
dnodeId
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to drop bnode since %s"
,
terrstr
());
return
-
1
;
}
bool
deployed
=
false
;
if
(
dmWriteFile
(
p
Wrapper
,
deployed
)
!=
0
)
{
if
(
dmWriteFile
(
p
Mgmt
->
path
,
pMgmt
->
name
,
deployed
)
!=
0
)
{
dError
(
"failed to write bnode file since %s"
,
terrstr
());
return
-
1
;
}
...
...
@@ -93,6 +91,19 @@ int32_t bmProcessDropReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
0
;
}
void
bmInitMsgHandle
(
SMgmtWrapper
*
pWrapper
)
{
dmSetMsgHandle
(
pWrapper
,
TDMT_MON_BM_INFO
,
bmProcessMonitorMsg
,
DEFAULT_HANDLE
);
SArray
*
bmGetMsgHandles
()
{
int32_t
code
=
-
1
;
SArray
*
pArray
=
taosArrayInit
(
2
,
sizeof
(
SMgmtHandle
));
if
(
pArray
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MON_BM_INFO
,
bmPutNodeMsgToMonitorQueue
,
0
)
==
NULL
)
goto
_OVER
;
code
=
0
;
_OVER:
if
(
code
!=
0
)
{
taosArrayDestroy
(
pArray
);
return
NULL
;
}
else
{
return
pArray
;
}
}
source/dnode/mgmt/mgmt_bnode/src/bmInt.c
浏览文件 @
8e5b263d
...
...
@@ -16,18 +16,13 @@
#define _DEFAULT_SOURCE
#include "bmInt.h"
static
int32_t
bmRequire
(
SMgmtWrapper
*
pWrapper
,
bool
*
required
)
{
return
dmReadFile
(
pWrapper
,
required
);
}
static
void
bmInitOption
(
SBnodeMgmt
*
pMgmt
,
SBnodeOpt
*
pOption
)
{
SMsgCb
msgCb
=
pMgmt
->
pDnode
->
data
.
msgCb
;
msgCb
.
pWrapper
=
pMgmt
->
pWrapper
;
pOption
->
msgCb
=
msgCb
;
static
int32_t
bmRequire
(
const
SMgmtInputOpt
*
pInput
,
bool
*
required
)
{
return
dmReadFile
(
pInput
->
path
,
pInput
->
name
,
required
);
}
static
void
bmClose
(
SMgmtWrapper
*
pWrapper
)
{
SBnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
if
(
pMgmt
==
NULL
)
return
;
static
void
bmInitOption
(
SBnodeMgmt
*
pMgmt
,
SBnodeOpt
*
pOption
)
{
pOption
->
msgCb
=
pMgmt
->
msgCb
;
}
static
void
bmClose
(
SBnodeMgmt
*
pMgmt
)
{
dInfo
(
"bnode-mgmt start to cleanup"
);
if
(
pMgmt
->
pBnode
!=
NULL
)
{
bmStopWorker
(
pMgmt
);
...
...
@@ -35,12 +30,11 @@ static void bmClose(SMgmtWrapper *pWrapper) {
pMgmt
->
pBnode
=
NULL
;
}
pWrapper
->
pMgmt
=
NULL
;
taosMemoryFree
(
pMgmt
);
dInfo
(
"bnode-mgmt is cleaned up"
);
}
int32_t
bmOpen
(
SMgmtWrapper
*
pWrapper
)
{
int32_t
bmOpen
(
const
SMgmtInputOpt
*
pInput
,
SMgmtOutputOpt
*
pOutput
)
{
dInfo
(
"bnode-mgmt start to init"
);
SBnodeMgmt
*
pMgmt
=
taosMemoryCalloc
(
1
,
sizeof
(
SBnodeMgmt
));
if
(
pMgmt
==
NULL
)
{
...
...
@@ -48,40 +42,42 @@ int32_t bmOpen(SMgmtWrapper *pWrapper) {
return
-
1
;
}
pMgmt
->
path
=
pWrapper
->
path
;
pMgmt
->
pDnode
=
pWrapper
->
pDnode
;
pMgmt
->
pWrapper
=
pWrapper
;
pWrapper
->
pMgmt
=
pMgmt
;
pMgmt
->
path
=
pInput
->
path
;
pMgmt
->
name
=
pInput
->
name
;
pMgmt
->
dnodeId
=
pInput
->
dnodeId
;
pMgmt
->
msgCb
=
pInput
->
msgCb
;
pMgmt
->
msgCb
.
pMgmt
=
pMgmt
;
SBnodeOpt
option
=
{
0
};
bmInitOption
(
pMgmt
,
&
option
);
pMgmt
->
pBnode
=
bndOpen
(
pMgmt
->
path
,
&
option
);
if
(
pMgmt
->
pBnode
==
NULL
)
{
dError
(
"failed to open bnode since %s"
,
terrstr
());
bmClose
(
p
Wrapper
);
bmClose
(
p
Mgmt
);
return
-
1
;
}
dmReportStartup
(
pWrapper
->
pDnode
,
"bnode-impl"
,
"initialized"
);
tmsgReportStartup
(
"bnode-impl"
,
"initialized"
);
if
(
bmStartWorker
(
pMgmt
)
!=
0
)
{
dError
(
"failed to start bnode worker since %s"
,
terrstr
());
bmClose
(
p
Wrapper
);
bmClose
(
p
Mgmt
);
return
-
1
;
}
dmReportStartup
(
pWrapper
->
pDnode
,
"bnode-worker"
,
"initialized"
);
tmsgReportStartup
(
"bnode-worker"
,
"initialized"
);
pOutput
->
pMgmt
=
pMgmt
;
dInfo
(
"bnode-mgmt is initialized"
);
return
0
;
}
void
bmSetMgmtFp
(
SMgmtWrapper
*
pWrapper
)
{
SMgmtFp
mgmtFp
=
{
0
};
mgmtFp
.
openFp
=
bmOpen
;
mgmtFp
.
closeFp
=
bmClose
;
mgmtFp
.
createFp
=
bmProcessCreateReq
;
mgmtFp
.
dropFp
=
bmProcessDropReq
;
mgmtFp
.
requiredFp
=
bmRequire
;
SMgmtFunc
bmGetMgmtFunc
()
{
SMgmtFunc
mgmtFunc
=
{
0
};
mgmtFunc
.
openFp
=
bmOpen
;
mgmtFunc
.
closeFp
=
(
NodeCloseFp
)
bmClose
;
mgmtFunc
.
createFp
=
(
NodeCreateFp
)
bmProcessCreateReq
;
mgmtFunc
.
dropFp
=
(
NodeDropFp
)
bmProcessDropReq
;
mgmtFunc
.
requiredFp
=
bmRequire
;
mgmtFunc
.
getHandlesFp
=
bmGetMsgHandles
;
bmInitMsgHandle
(
pWrapper
);
pWrapper
->
name
=
"bnode"
;
pWrapper
->
fp
=
mgmtFp
;
return
mgmtFunc
;
}
source/dnode/mgmt/mgmt_bnode/src/bmWorker.c
浏览文件 @
8e5b263d
...
...
@@ -58,7 +58,7 @@ static void bmProcessMonitorQueue(SQueueInfo *pInfo, SNodeMsg *pMsg) {
int32_t
code
=
-
1
;
if
(
pMsg
->
rpcMsg
.
msgType
==
TDMT_MON_BM_INFO
)
{
code
=
bmProcessGetMonBmInfoReq
(
pMgmt
->
pWrapper
,
pMsg
);
code
=
bmProcessGetMonBmInfoReq
(
pMgmt
,
pMsg
);
}
else
{
terrno
=
TSDB_CODE_MSG_NOT_PROCESSED
;
}
...
...
@@ -106,8 +106,7 @@ static void bmProcessWriteQueue(SQueueInfo *pInfo, STaosQall *qall, int32_t numO
taosArrayDestroy
(
pArray
);
}
int32_t
bmProcessWriteMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SBnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
bmPutNodeMsgToWriteQueue
(
SBnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SMultiWorker
*
pWorker
=
&
pMgmt
->
writeWorker
;
dTrace
(
"msg:%p, put into worker:%s"
,
pMsg
,
pWorker
->
name
);
...
...
@@ -115,8 +114,7 @@ int32_t bmProcessWriteMsg(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
0
;
}
int32_t
bmProcessMonitorMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SBnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
bmPutNodeMsgToMonitorQueue
(
SBnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SSingleWorker
*
pWorker
=
&
pMgmt
->
monitorWorker
;
dTrace
(
"msg:%p, put into worker:%s"
,
pMsg
,
pWorker
->
name
);
...
...
@@ -136,18 +134,16 @@ int32_t bmStartWorker(SBnodeMgmt *pMgmt) {
return
-
1
;
}
if
(
tsMultiProcess
)
{
SSingleWorkerCfg
mCfg
=
{
.
min
=
1
,
.
max
=
1
,
.
name
=
"bnode-monitor"
,
.
fp
=
(
FItem
)
bmProcessMonitorQueue
,
.
param
=
pMgmt
,
};
if
(
tSingleWorkerInit
(
&
pMgmt
->
monitorWorker
,
&
mCfg
)
!=
0
)
{
dError
(
"failed to start bnode-monitor worker since %s"
,
terrstr
());
return
-
1
;
}
SSingleWorkerCfg
mCfg
=
{
.
min
=
1
,
.
max
=
1
,
.
name
=
"bnode-monitor"
,
.
fp
=
(
FItem
)
bmProcessMonitorQueue
,
.
param
=
pMgmt
,
};
if
(
tSingleWorkerInit
(
&
pMgmt
->
monitorWorker
,
&
mCfg
)
!=
0
)
{
dError
(
"failed to start bnode-monitor worker since %s"
,
terrstr
());
return
-
1
;
}
dDebug
(
"bnode workers are initialized"
);
...
...
source/dnode/mgmt/mgmt_dnode/CMakeLists.txt
0 → 100644
浏览文件 @
8e5b263d
aux_source_directory
(
src MGMT_DNODE
)
add_library
(
mgmt_dnode STATIC
${
MGMT_DNODE
}
)
target_include_directories
(
mgmt_dnode
PUBLIC
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
)
target_link_libraries
(
mgmt_dnode node_util
)
\ No newline at end of file
source/dnode/mgmt/
interfac
e/inc/dmInt.h
→
source/dnode/mgmt/
mgmt_dnod
e/inc/dmInt.h
浏览文件 @
8e5b263d
...
...
@@ -13,42 +13,58 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _TD_D
M
_INT_H_
#define _TD_D
M
_INT_H_
#ifndef _TD_D
ND_QNODE
_INT_H_
#define _TD_D
ND_QNODE
_INT_H_
#include "dm
Def
.h"
#include "dm
Util
.h"
#ifdef __cplusplus
extern
"C"
{
#endif
// dmInt.c
SMgmtWrapper
*
dmAcquireWrapper
(
SDnode
*
pDnode
,
EDndNodeType
nType
);
int32_t
dmMarkWrapper
(
SMgmtWrapper
*
pWrapper
);
void
dmReleaseWrapper
(
SMgmtWrapper
*
pWrapper
);
const
char
*
dmStatName
(
EDndRunStatus
stat
);
const
char
*
dmLogName
(
EDndNodeType
ntype
);
const
char
*
dmProcName
(
EDndNodeType
ntype
);
const
char
*
dmEventName
(
EDndEvent
ev
);
void
dmSetStatus
(
SDnode
*
pDnode
,
EDndRunStatus
stat
);
void
dmSetEvent
(
SDnode
*
pDnode
,
EDndEvent
event
);
void
dmSetMsgHandle
(
SMgmtWrapper
*
pWrapper
,
tmsg_t
msgType
,
NodeMsgFp
nodeMsgFp
,
int8_t
vgId
);
void
dmReportStartup
(
SDnode
*
pDnode
,
const
char
*
pName
,
const
char
*
pDesc
);
void
dmReportStartupByWrapper
(
SMgmtWrapper
*
pWrapper
,
const
char
*
pName
,
const
char
*
pDesc
);
void
dmProcessServerStatusReq
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
);
void
dmProcessNetTestReq
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
);
void
dmGetMonitorSysInfo
(
SMonSysInfo
*
pInfo
);
// dmFile.c
int32_t
dmReadFile
(
SMgmtWrapper
*
pWrapper
,
bool
*
pDeployed
);
int32_t
dmWriteFile
(
SMgmtWrapper
*
pWrapper
,
bool
deployed
);
TdFilePtr
dmCheckRunning
(
const
char
*
dataDir
);
int32_t
dmReadShmFile
(
SMgmtWrapper
*
pWrapper
);
int32_t
dmWriteShmFile
(
SMgmtWrapper
*
pWrapper
);
typedef
struct
SDnodeMgmt
{
struct
SDnode
*
pDnode
;
SMsgCb
msgCb
;
const
char
*
path
;
const
char
*
name
;
TdThread
statusThread
;
TdThread
monitorThread
;
SSingleWorker
mgmtWorker
;
ProcessCreateNodeFp
processCreateNodeFp
;
ProcessDropNodeFp
processDropNodeFp
;
IsNodeDeployedFp
isNodeDeployedFp
;
SDnodeData
data
;
}
SDnodeMgmt
;
// dmEps.c
int32_t
dmReadEps
(
SDnodeMgmt
*
pMgmt
);
int32_t
dmWriteEps
(
SDnodeMgmt
*
pMgmt
);
void
dmUpdateEps
(
SDnodeMgmt
*
pMgmt
,
SArray
*
pDnodeEps
);
// dmHandle.c
SArray
*
dmGetMsgHandles
();
void
dmSendStatusReq
(
SDnodeMgmt
*
pMgmt
);
int32_t
dmProcessConfigReq
(
SDnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
dmProcessAuthRsp
(
SDnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
dmProcessGrantRsp
(
SDnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
dmProcessServerRunStatus
(
SDnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
// dmMonitor.c
void
dmGetVnodeLoads
(
SDnodeMgmt
*
pMgmt
,
SMonVloadInfo
*
pInfo
);
void
dmGetMnodeLoads
(
SDnodeMgmt
*
pMgmt
,
SMonMloadInfo
*
pInfo
);
void
dmSendMonitorReport
(
SDnodeMgmt
*
pMgmt
);
// dmWorker.c
int32_t
dmPutNodeMsgToMgmtQueue
(
SDnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
dmStartStatusThread
(
SDnodeMgmt
*
pMgmt
);
void
dmStopStatusThread
(
SDnodeMgmt
*
pMgmt
);
int32_t
dmStartMonitorThread
(
SDnodeMgmt
*
pMgmt
);
void
dmStopMonitorThread
(
SDnodeMgmt
*
pMgmt
);
int32_t
dmStartWorker
(
SDnodeMgmt
*
pMgmt
);
void
dmStopWorker
(
SDnodeMgmt
*
pMgmt
);
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DM_INT_H_*/
\ No newline at end of file
#endif
/*_TD_DND_QNODE_INT_H_*/
\ No newline at end of file
source/dnode/mgmt/
implement
/src/dmEps.c
→
source/dnode/mgmt/
mgmt_dnode
/src/dmEps.c
浏览文件 @
8e5b263d
...
...
@@ -14,16 +14,16 @@
*/
#define _DEFAULT_SOURCE
#include "dmI
mp
.h"
#include "dmI
nt
.h"
static
void
dmPrintEps
(
SDnode
*
pDnode
);
static
bool
dmIsEpChanged
(
SDnode
*
pDnode
,
int32_t
dnodeId
,
const
char
*
ep
);
static
void
dmResetEps
(
SDnode
*
pDnode
,
SArray
*
dnodeEps
);
static
void
dmPrintEps
(
SDnode
Mgmt
*
pMgmt
);
static
bool
dmIsEpChanged
(
SDnode
Mgmt
*
pMgmt
,
int32_t
dnodeId
,
const
char
*
ep
);
static
void
dmResetEps
(
SDnode
Mgmt
*
pMgmt
,
SArray
*
dnodeEps
);
static
void
dmGetDnodeEp
(
SDnode
*
pDnode
,
int32_t
dnodeId
,
char
*
pEp
,
char
*
pFqdn
,
uint16_t
*
pPort
)
{
taosRLockLatch
(
&
p
Dnode
->
data
.
latch
);
static
void
dmGetDnodeEp
(
SDnode
Mgmt
*
pMgmt
,
int32_t
dnodeId
,
char
*
pEp
,
char
*
pFqdn
,
uint16_t
*
pPort
)
{
taosRLockLatch
(
&
p
Mgmt
->
data
.
latch
);
SDnodeEp
*
pDnodeEp
=
taosHashGet
(
p
Dnode
->
data
.
dnodeHash
,
&
dnodeId
,
sizeof
(
int32_t
));
SDnodeEp
*
pDnodeEp
=
taosHashGet
(
p
Mgmt
->
data
.
dnodeHash
,
&
dnodeId
,
sizeof
(
int32_t
));
if
(
pDnodeEp
!=
NULL
)
{
if
(
pPort
!=
NULL
)
{
*
pPort
=
pDnodeEp
->
ep
.
port
;
...
...
@@ -36,10 +36,10 @@ static void dmGetDnodeEp(SDnode *pDnode, int32_t dnodeId, char *pEp, char *pFqdn
}
}
taosRUnLockLatch
(
&
p
Dnode
->
data
.
latch
);
taosRUnLockLatch
(
&
p
Mgmt
->
data
.
latch
);
}
int32_t
dmReadEps
(
SDnode
*
pDnode
)
{
int32_t
dmReadEps
(
SDnode
Mgmt
*
pMgmt
)
{
int32_t
code
=
TSDB_CODE_INVALID_JSON_FORMAT
;
int32_t
len
=
0
;
int32_t
maxLen
=
256
*
1024
;
...
...
@@ -48,16 +48,15 @@ int32_t dmReadEps(SDnode *pDnode) {
char
file
[
PATH_MAX
]
=
{
0
};
TdFilePtr
pFile
=
NULL
;
p
Dnode
->
data
.
dnodeEps
=
taosArrayInit
(
1
,
sizeof
(
SDnodeEp
));
if
(
p
Dnode
->
data
.
dnodeEps
==
NULL
)
{
p
Mgmt
->
data
.
dnodeEps
=
taosArrayInit
(
1
,
sizeof
(
SDnodeEp
));
if
(
p
Mgmt
->
data
.
dnodeEps
==
NULL
)
{
dError
(
"failed to calloc dnodeEp array since %s"
,
strerror
(
errno
));
goto
_OVER
;
}
snprintf
(
file
,
sizeof
(
file
),
"%s%sdnode.json"
,
p
Dnode
->
wrappers
[
DNODE
].
path
,
TD_DIRSEP
);
snprintf
(
file
,
sizeof
(
file
),
"%s%sdnode.json"
,
p
Mgmt
->
path
,
TD_DIRSEP
);
pFile
=
taosOpenFile
(
file
,
TD_FILE_READ
);
if
(
pFile
==
NULL
)
{
// dDebug("file %s not exist", file);
code
=
0
;
goto
_OVER
;
}
...
...
@@ -80,21 +79,21 @@ int32_t dmReadEps(SDnode *pDnode) {
dError
(
"failed to read %s since dnodeId not found"
,
file
);
goto
_OVER
;
}
p
Dnode
->
data
.
dnodeId
=
dnodeId
->
valueint
;
p
Mgmt
->
data
.
dnodeId
=
dnodeId
->
valueint
;
cJSON
*
clusterId
=
cJSON_GetObjectItem
(
root
,
"clusterId"
);
if
(
!
clusterId
||
clusterId
->
type
!=
cJSON_String
)
{
dError
(
"failed to read %s since clusterId not found"
,
file
);
goto
_OVER
;
}
p
Dnode
->
data
.
clusterId
=
atoll
(
clusterId
->
valuestring
);
p
Mgmt
->
data
.
clusterId
=
atoll
(
clusterId
->
valuestring
);
cJSON
*
dropped
=
cJSON_GetObjectItem
(
root
,
"dropped"
);
if
(
!
dropped
||
dropped
->
type
!=
cJSON_Number
)
{
dError
(
"failed to read %s since dropped not found"
,
file
);
goto
_OVER
;
}
p
Dnode
->
data
.
dropped
=
dropped
->
valueint
;
p
Mgmt
->
data
.
dropped
=
dropped
->
valueint
;
cJSON
*
dnodes
=
cJSON_GetObjectItem
(
root
,
"dnodes"
);
if
(
!
dnodes
||
dnodes
->
type
!=
cJSON_Array
)
{
...
...
@@ -144,29 +143,29 @@ int32_t dmReadEps(SDnode *pDnode) {
}
dnodeEp
.
isMnode
=
isMnode
->
valueint
;
taosArrayPush
(
p
Dnode
->
data
.
dnodeEps
,
&
dnodeEp
);
taosArrayPush
(
p
Mgmt
->
data
.
dnodeEps
,
&
dnodeEp
);
}
code
=
0
;
dDebug
(
"succcessed to read file %s"
,
file
);
dmPrintEps
(
p
Dnode
);
dmPrintEps
(
p
Mgmt
);
_OVER:
if
(
content
!=
NULL
)
taosMemoryFree
(
content
);
if
(
root
!=
NULL
)
cJSON_Delete
(
root
);
if
(
pFile
!=
NULL
)
taosCloseFile
(
&
pFile
);
if
(
taosArrayGetSize
(
p
Dnode
->
data
.
dnodeEps
)
==
0
)
{
if
(
taosArrayGetSize
(
p
Mgmt
->
data
.
dnodeEps
)
==
0
)
{
SDnodeEp
dnodeEp
=
{
0
};
dnodeEp
.
isMnode
=
1
;
taosGetFqdnPortFromEp
(
p
Dnode
->
data
.
firstEp
,
&
dnodeEp
.
ep
);
taosArrayPush
(
p
Dnode
->
data
.
dnodeEps
,
&
dnodeEp
);
taosGetFqdnPortFromEp
(
p
Mgmt
->
data
.
firstEp
,
&
dnodeEp
.
ep
);
taosArrayPush
(
p
Mgmt
->
data
.
dnodeEps
,
&
dnodeEp
);
}
dmResetEps
(
p
Dnode
,
pDnode
->
data
.
dnodeEps
);
dmResetEps
(
p
Mgmt
,
pMgmt
->
data
.
dnodeEps
);
if
(
dmIsEpChanged
(
p
Dnode
,
pDnode
->
data
.
dnodeId
,
pDnode
->
data
.
localEp
))
{
dError
(
"localEp %s different with %s and need reconfigured"
,
p
Dnode
->
data
.
localEp
,
file
);
if
(
dmIsEpChanged
(
p
Mgmt
,
pMgmt
->
data
.
dnodeId
,
pMgmt
->
data
.
localEp
))
{
dError
(
"localEp %s different with %s and need reconfigured"
,
p
Mgmt
->
data
.
localEp
,
file
);
return
-
1
;
}
...
...
@@ -174,11 +173,11 @@ _OVER:
return
code
;
}
int32_t
dmWriteEps
(
SDnode
*
pDnode
)
{
int32_t
dmWriteEps
(
SDnode
Mgmt
*
pMgmt
)
{
char
file
[
PATH_MAX
]
=
{
0
};
char
realfile
[
PATH_MAX
]
=
{
0
};
snprintf
(
file
,
sizeof
(
file
),
"%s%sdnode.json.bak"
,
p
Dnode
->
wrappers
[
DNODE
].
path
,
TD_DIRSEP
);
snprintf
(
realfile
,
sizeof
(
realfile
),
"%s%sdnode.json"
,
p
Dnode
->
wrappers
[
DNODE
].
path
,
TD_DIRSEP
);
snprintf
(
file
,
sizeof
(
file
),
"%s%sdnode.json.bak"
,
p
Mgmt
->
path
,
TD_DIRSEP
);
snprintf
(
realfile
,
sizeof
(
realfile
),
"%s%sdnode.json"
,
p
Mgmt
->
path
,
TD_DIRSEP
);
TdFilePtr
pFile
=
taosOpenFile
(
file
,
TD_FILE_CREATE
|
TD_FILE_WRITE
|
TD_FILE_TRUNC
);
if
(
pFile
==
NULL
)
{
...
...
@@ -192,14 +191,14 @@ int32_t dmWriteEps(SDnode *pDnode) {
char
*
content
=
taosMemoryCalloc
(
1
,
maxLen
+
1
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"{
\n
"
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
dnodeId
\"
: %d,
\n
"
,
p
Dnode
->
data
.
dnodeId
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
clusterId
\"
:
\"
%"
PRId64
"
\"
,
\n
"
,
p
Dnode
->
data
.
clusterId
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
dropped
\"
: %d,
\n
"
,
p
Dnode
->
data
.
dropped
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
dnodeId
\"
: %d,
\n
"
,
p
Mgmt
->
data
.
dnodeId
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
clusterId
\"
:
\"
%"
PRId64
"
\"
,
\n
"
,
p
Mgmt
->
data
.
clusterId
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
dropped
\"
: %d,
\n
"
,
p
Mgmt
->
data
.
dropped
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
dnodes
\"
: [{
\n
"
);
int32_t
numOfEps
=
(
int32_t
)
taosArrayGetSize
(
p
Dnode
->
data
.
dnodeEps
);
int32_t
numOfEps
=
(
int32_t
)
taosArrayGetSize
(
p
Mgmt
->
data
.
dnodeEps
);
for
(
int32_t
i
=
0
;
i
<
numOfEps
;
++
i
)
{
SDnodeEp
*
pDnodeEp
=
taosArrayGet
(
p
Dnode
->
data
.
dnodeEps
,
i
);
SDnodeEp
*
pDnodeEp
=
taosArrayGet
(
p
Mgmt
->
data
.
dnodeEps
,
i
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
id
\"
: %d,
\n
"
,
pDnodeEp
->
id
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
fqdn
\"
:
\"
%s
\"
,
\n
"
,
pDnodeEp
->
ep
.
fqdn
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
port
\"
: %u,
\n
"
,
pDnodeEp
->
ep
.
port
);
...
...
@@ -223,41 +222,41 @@ int32_t dmWriteEps(SDnode *pDnode) {
return
-
1
;
}
p
Dnode
->
data
.
updateTime
=
taosGetTimestampMs
();
p
Mgmt
->
data
.
updateTime
=
taosGetTimestampMs
();
dDebug
(
"successed to write %s"
,
realfile
);
return
0
;
}
void
dmUpdateEps
(
SDnode
*
pDnode
,
SArray
*
eps
)
{
void
dmUpdateEps
(
SDnode
Mgmt
*
pMgmt
,
SArray
*
eps
)
{
int32_t
numOfEps
=
taosArrayGetSize
(
eps
);
if
(
numOfEps
<=
0
)
return
;
taosWLockLatch
(
&
p
Dnode
->
data
.
latch
);
taosWLockLatch
(
&
p
Mgmt
->
data
.
latch
);
int32_t
numOfEpsOld
=
(
int32_t
)
taosArrayGetSize
(
p
Dnode
->
data
.
dnodeEps
);
int32_t
numOfEpsOld
=
(
int32_t
)
taosArrayGetSize
(
p
Mgmt
->
data
.
dnodeEps
);
if
(
numOfEps
!=
numOfEpsOld
)
{
dmResetEps
(
p
Dnode
,
eps
);
dmWriteEps
(
p
Dnode
);
dmResetEps
(
p
Mgmt
,
eps
);
dmWriteEps
(
p
Mgmt
);
}
else
{
int32_t
size
=
numOfEps
*
sizeof
(
SDnodeEp
);
if
(
memcmp
(
p
Dnode
->
data
.
dnodeEps
->
pData
,
eps
->
pData
,
size
)
!=
0
)
{
dmResetEps
(
p
Dnode
,
eps
);
dmWriteEps
(
p
Dnode
);
if
(
memcmp
(
p
Mgmt
->
data
.
dnodeEps
->
pData
,
eps
->
pData
,
size
)
!=
0
)
{
dmResetEps
(
p
Mgmt
,
eps
);
dmWriteEps
(
p
Mgmt
);
}
}
taosWUnLockLatch
(
&
p
Dnode
->
data
.
latch
);
taosWUnLockLatch
(
&
p
Mgmt
->
data
.
latch
);
}
static
void
dmResetEps
(
SDnode
*
pDnode
,
SArray
*
dnodeEps
)
{
if
(
p
Dnode
->
data
.
dnodeEps
!=
dnodeEps
)
{
SArray
*
tmp
=
p
Dnode
->
data
.
dnodeEps
;
p
Dnode
->
data
.
dnodeEps
=
taosArrayDup
(
dnodeEps
);
static
void
dmResetEps
(
SDnode
Mgmt
*
pMgmt
,
SArray
*
dnodeEps
)
{
if
(
p
Mgmt
->
data
.
dnodeEps
!=
dnodeEps
)
{
SArray
*
tmp
=
p
Mgmt
->
data
.
dnodeEps
;
p
Mgmt
->
data
.
dnodeEps
=
taosArrayDup
(
dnodeEps
);
taosArrayDestroy
(
tmp
);
}
p
Dnode
->
data
.
mnodeEps
.
inUse
=
0
;
p
Dnode
->
data
.
mnodeEps
.
numOfEps
=
0
;
p
Mgmt
->
data
.
mnodeEps
.
inUse
=
0
;
p
Mgmt
->
data
.
mnodeEps
.
numOfEps
=
0
;
int32_t
mIndex
=
0
;
int32_t
numOfEps
=
(
int32_t
)
taosArrayGetSize
(
dnodeEps
);
...
...
@@ -266,35 +265,35 @@ static void dmResetEps(SDnode *pDnode, SArray *dnodeEps) {
SDnodeEp
*
pDnodeEp
=
taosArrayGet
(
dnodeEps
,
i
);
if
(
!
pDnodeEp
->
isMnode
)
continue
;
if
(
mIndex
>=
TSDB_MAX_REPLICA
)
continue
;
p
Dnode
->
data
.
mnodeEps
.
numOfEps
++
;
p
Mgmt
->
data
.
mnodeEps
.
numOfEps
++
;
p
Dnode
->
data
.
mnodeEps
.
eps
[
mIndex
]
=
pDnodeEp
->
ep
;
p
Mgmt
->
data
.
mnodeEps
.
eps
[
mIndex
]
=
pDnodeEp
->
ep
;
mIndex
++
;
}
for
(
int32_t
i
=
0
;
i
<
numOfEps
;
i
++
)
{
SDnodeEp
*
pDnodeEp
=
taosArrayGet
(
dnodeEps
,
i
);
taosHashPut
(
p
Dnode
->
data
.
dnodeHash
,
&
pDnodeEp
->
id
,
sizeof
(
int32_t
),
pDnodeEp
,
sizeof
(
SDnodeEp
));
taosHashPut
(
p
Mgmt
->
data
.
dnodeHash
,
&
pDnodeEp
->
id
,
sizeof
(
int32_t
),
pDnodeEp
,
sizeof
(
SDnodeEp
));
}
dmPrintEps
(
p
Dnode
);
dmPrintEps
(
p
Mgmt
);
}
static
void
dmPrintEps
(
SDnode
*
pDnode
)
{
int32_t
numOfEps
=
(
int32_t
)
taosArrayGetSize
(
p
Dnode
->
data
.
dnodeEps
);
static
void
dmPrintEps
(
SDnode
Mgmt
*
pMgmt
)
{
int32_t
numOfEps
=
(
int32_t
)
taosArrayGetSize
(
p
Mgmt
->
data
.
dnodeEps
);
dDebug
(
"print dnode ep list, num:%d"
,
numOfEps
);
for
(
int32_t
i
=
0
;
i
<
numOfEps
;
i
++
)
{
SDnodeEp
*
pEp
=
taosArrayGet
(
p
Dnode
->
data
.
dnodeEps
,
i
);
SDnodeEp
*
pEp
=
taosArrayGet
(
p
Mgmt
->
data
.
dnodeEps
,
i
);
dDebug
(
"dnode:%d, fqdn:%s port:%u isMnode:%d"
,
pEp
->
id
,
pEp
->
ep
.
fqdn
,
pEp
->
ep
.
port
,
pEp
->
isMnode
);
}
}
static
bool
dmIsEpChanged
(
SDnode
*
pDnode
,
int32_t
dnodeId
,
const
char
*
ep
)
{
static
bool
dmIsEpChanged
(
SDnode
Mgmt
*
pMgmt
,
int32_t
dnodeId
,
const
char
*
ep
)
{
bool
changed
=
false
;
if
(
dnodeId
==
0
)
return
changed
;
taosRLockLatch
(
&
p
Dnode
->
data
.
latch
);
taosRLockLatch
(
&
p
Mgmt
->
data
.
latch
);
SDnodeEp
*
pDnodeEp
=
taosHashGet
(
p
Dnode
->
data
.
dnodeHash
,
&
dnodeId
,
sizeof
(
int32_t
));
SDnodeEp
*
pDnodeEp
=
taosHashGet
(
p
Mgmt
->
data
.
dnodeHash
,
&
dnodeId
,
sizeof
(
int32_t
));
if
(
pDnodeEp
!=
NULL
)
{
char
epstr
[
TSDB_EP_LEN
+
1
]
=
{
0
};
snprintf
(
epstr
,
TSDB_EP_LEN
,
"%s:%u"
,
pDnodeEp
->
ep
.
fqdn
,
pDnodeEp
->
ep
.
port
);
...
...
@@ -304,6 +303,6 @@ static bool dmIsEpChanged(SDnode *pDnode, int32_t dnodeId, const char *ep) {
}
}
taosRUnLockLatch
(
&
p
Dnode
->
data
.
latch
);
taosRUnLockLatch
(
&
p
Mgmt
->
data
.
latch
);
return
changed
;
}
source/dnode/mgmt/mgmt_dnode/src/dmHandle.c
0 → 100644
浏览文件 @
8e5b263d
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http:www.gnu.org/licenses/>.
*/
#define _DEFAULT_SOURCE
#include "dmInt.h"
static
void
dmUpdateDnodeCfg
(
SDnodeMgmt
*
pMgmt
,
SDnodeCfg
*
pCfg
)
{
if
(
pMgmt
->
data
.
dnodeId
==
0
||
pMgmt
->
data
.
clusterId
==
0
)
{
dInfo
(
"set dnodeId:%d clusterId:%"
PRId64
,
pCfg
->
dnodeId
,
pCfg
->
clusterId
);
taosWLockLatch
(
&
pMgmt
->
data
.
latch
);
pMgmt
->
data
.
dnodeId
=
pCfg
->
dnodeId
;
pMgmt
->
data
.
clusterId
=
pCfg
->
clusterId
;
dmWriteEps
(
pMgmt
);
taosWUnLockLatch
(
&
pMgmt
->
data
.
latch
);
}
}
static
void
dmProcessStatusRsp
(
SDnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRsp
)
{
if
(
pRsp
->
code
!=
0
)
{
if
(
pRsp
->
code
==
TSDB_CODE_MND_DNODE_NOT_EXIST
&&
!
pMgmt
->
data
.
dropped
&&
pMgmt
->
data
.
dnodeId
>
0
)
{
dInfo
(
"dnode:%d, set to dropped since not exist in mnode"
,
pMgmt
->
data
.
dnodeId
);
pMgmt
->
data
.
dropped
=
1
;
dmWriteEps
(
pMgmt
);
}
}
else
{
SStatusRsp
statusRsp
=
{
0
};
if
(
pRsp
->
pCont
!=
NULL
&&
pRsp
->
contLen
>
0
&&
tDeserializeSStatusRsp
(
pRsp
->
pCont
,
pRsp
->
contLen
,
&
statusRsp
)
==
0
)
{
pMgmt
->
data
.
dnodeVer
=
statusRsp
.
dnodeVer
;
dmUpdateDnodeCfg
(
pMgmt
,
&
statusRsp
.
dnodeCfg
);
dmUpdateEps
(
pMgmt
,
statusRsp
.
pDnodeEps
);
}
rpcFreeCont
(
pRsp
->
pCont
);
tFreeSStatusRsp
(
&
statusRsp
);
}
}
void
dmSendStatusReq
(
SDnodeMgmt
*
pMgmt
)
{
SStatusReq
req
=
{
0
};
taosRLockLatch
(
&
pMgmt
->
data
.
latch
);
req
.
sver
=
tsVersion
;
req
.
dnodeVer
=
pMgmt
->
data
.
dnodeVer
;
req
.
dnodeId
=
pMgmt
->
data
.
dnodeId
;
req
.
clusterId
=
pMgmt
->
data
.
clusterId
;
if
(
req
.
clusterId
==
0
)
req
.
dnodeId
=
0
;
req
.
rebootTime
=
pMgmt
->
data
.
rebootTime
;
req
.
updateTime
=
pMgmt
->
data
.
updateTime
;
req
.
numOfCores
=
tsNumOfCores
;
req
.
numOfSupportVnodes
=
pMgmt
->
data
.
supportVnodes
;
tstrncpy
(
req
.
dnodeEp
,
pMgmt
->
data
.
localEp
,
TSDB_EP_LEN
);
req
.
clusterCfg
.
statusInterval
=
tsStatusInterval
;
req
.
clusterCfg
.
checkTime
=
0
;
char
timestr
[
32
]
=
"1970-01-01 00:00:00.00"
;
(
void
)
taosParseTime
(
timestr
,
&
req
.
clusterCfg
.
checkTime
,
(
int32_t
)
strlen
(
timestr
),
TSDB_TIME_PRECISION_MILLI
,
0
);
memcpy
(
req
.
clusterCfg
.
timezone
,
tsTimezoneStr
,
TD_TIMEZONE_LEN
);
memcpy
(
req
.
clusterCfg
.
locale
,
tsLocale
,
TD_LOCALE_LEN
);
memcpy
(
req
.
clusterCfg
.
charset
,
tsCharset
,
TD_LOCALE_LEN
);
taosRUnLockLatch
(
&
pMgmt
->
data
.
latch
);
SMonVloadInfo
vinfo
=
{
0
};
dmGetVnodeLoads
(
pMgmt
,
&
vinfo
);
req
.
pVloads
=
vinfo
.
pVloads
;
pMgmt
->
data
.
unsyncedVgId
=
0
;
pMgmt
->
data
.
vndState
=
TAOS_SYNC_STATE_LEADER
;
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
req
.
pVloads
);
++
i
)
{
SVnodeLoad
*
pLoad
=
taosArrayGet
(
req
.
pVloads
,
i
);
if
(
pLoad
->
syncState
!=
TAOS_SYNC_STATE_LEADER
&&
pLoad
->
syncState
!=
TAOS_SYNC_STATE_FOLLOWER
)
{
pMgmt
->
data
.
unsyncedVgId
=
pLoad
->
vgId
;
pMgmt
->
data
.
vndState
=
pLoad
->
syncState
;
}
}
SMonMloadInfo
minfo
=
{
0
};
dmGetMnodeLoads
(
pMgmt
,
&
minfo
);
pMgmt
->
data
.
mndState
=
minfo
.
load
.
syncState
;
int32_t
contLen
=
tSerializeSStatusReq
(
NULL
,
0
,
&
req
);
void
*
pHead
=
rpcMallocCont
(
contLen
);
tSerializeSStatusReq
(
pHead
,
contLen
,
&
req
);
tFreeSStatusReq
(
&
req
);
SRpcMsg
rpcMsg
=
{.
pCont
=
pHead
,
.
contLen
=
contLen
,
.
msgType
=
TDMT_MND_STATUS
,
.
ahandle
=
(
void
*
)
0x9527
};
SRpcMsg
rpcRsp
=
{
0
};
dTrace
(
"send req:%s to mnode, app:%p"
,
TMSG_INFO
(
rpcMsg
.
msgType
),
rpcMsg
.
ahandle
);
tmsgSendMnodeRecv
(
&
rpcMsg
,
&
rpcRsp
);
dmProcessStatusRsp
(
pMgmt
,
&
rpcRsp
);
}
int32_t
dmProcessAuthRsp
(
SDnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pRsp
=
&
pMsg
->
rpcMsg
;
dError
(
"auth rsp is received, but not supported yet"
);
return
0
;
}
int32_t
dmProcessGrantRsp
(
SDnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pRsp
=
&
pMsg
->
rpcMsg
;
dError
(
"grant rsp is received, but not supported yet"
);
return
0
;
}
int32_t
dmProcessConfigReq
(
SDnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SDCfgDnodeReq
*
pCfg
=
pReq
->
pCont
;
dError
(
"config req is received, but not supported yet"
);
return
TSDB_CODE_OPS_NOT_SUPPORT
;
}
static
void
dmGetServerRunStatus
(
SDnodeMgmt
*
pMgmt
,
SServerStatusRsp
*
pStatus
)
{
pStatus
->
statusCode
=
TSDB_SRV_STATUS_SERVICE_OK
;
pStatus
->
details
[
0
]
=
0
;
SServerStatusRsp
statusRsp
=
{
0
};
SMonMloadInfo
minfo
=
{
0
};
dmGetMnodeLoads
(
pMgmt
,
&
minfo
);
if
(
minfo
.
isMnode
&&
minfo
.
load
.
syncState
!=
TAOS_SYNC_STATE_LEADER
&&
minfo
.
load
.
syncState
!=
TAOS_SYNC_STATE_CANDIDATE
)
{
pStatus
->
statusCode
=
TSDB_SRV_STATUS_SERVICE_DEGRADED
;
snprintf
(
pStatus
->
details
,
sizeof
(
pStatus
->
details
),
"mnode sync state is %s"
,
syncStr
(
minfo
.
load
.
syncState
));
return
;
}
SMonVloadInfo
vinfo
=
{
0
};
dmGetVnodeLoads
(
pMgmt
,
&
vinfo
);
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
vinfo
.
pVloads
);
++
i
)
{
SVnodeLoad
*
pLoad
=
taosArrayGet
(
vinfo
.
pVloads
,
i
);
if
(
pLoad
->
syncState
!=
TAOS_SYNC_STATE_LEADER
&&
pLoad
->
syncState
!=
TAOS_SYNC_STATE_FOLLOWER
)
{
pStatus
->
statusCode
=
TSDB_SRV_STATUS_SERVICE_DEGRADED
;
snprintf
(
pStatus
->
details
,
sizeof
(
pStatus
->
details
),
"vnode:%d sync state is %s"
,
pLoad
->
vgId
,
syncStr
(
pLoad
->
syncState
));
break
;
}
}
taosArrayDestroy
(
vinfo
.
pVloads
);
}
int32_t
dmProcessServerRunStatus
(
SDnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
dDebug
(
"server run status req is received"
);
SServerStatusRsp
statusRsp
=
{
0
};
dmGetServerRunStatus
(
pMgmt
,
&
statusRsp
);
SRpcMsg
rspMsg
=
{.
handle
=
pMsg
->
rpcMsg
.
handle
,
.
ahandle
=
pMsg
->
rpcMsg
.
ahandle
,
.
refId
=
pMsg
->
rpcMsg
.
refId
};
int32_t
rspLen
=
tSerializeSServerStatusRsp
(
NULL
,
0
,
&
statusRsp
);
if
(
rspLen
<
0
)
{
rspMsg
.
code
=
TSDB_CODE_OUT_OF_MEMORY
;
return
-
1
;
}
void
*
pRsp
=
rpcMallocCont
(
rspLen
);
if
(
pRsp
==
NULL
)
{
rspMsg
.
code
=
TSDB_CODE_OUT_OF_MEMORY
;
return
-
1
;
}
tSerializeSServerStatusRsp
(
pRsp
,
rspLen
,
&
statusRsp
);
pMsg
->
pRsp
=
pRsp
;
pMsg
->
rspLen
=
rspLen
;
return
0
;
}
SArray
*
dmGetMsgHandles
()
{
int32_t
code
=
-
1
;
SArray
*
pArray
=
taosArrayInit
(
16
,
sizeof
(
SMgmtHandle
));
if
(
pArray
==
NULL
)
goto
_OVER
;
// Requests handled by DNODE
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_CREATE_MNODE
,
dmPutNodeMsgToMgmtQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_DROP_MNODE
,
dmPutNodeMsgToMgmtQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_CREATE_QNODE
,
dmPutNodeMsgToMgmtQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_DROP_QNODE
,
dmPutNodeMsgToMgmtQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_CREATE_SNODE
,
dmPutNodeMsgToMgmtQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_DROP_SNODE
,
dmPutNodeMsgToMgmtQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_CREATE_BNODE
,
dmPutNodeMsgToMgmtQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_DROP_BNODE
,
dmPutNodeMsgToMgmtQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_CONFIG_DNODE
,
dmPutNodeMsgToMgmtQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_SERVER_STATUS
,
dmPutNodeMsgToMgmtQueue
,
0
)
==
NULL
)
goto
_OVER
;
// Requests handled by MNODE
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_GRANT_RSP
,
dmPutNodeMsgToMgmtQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_AUTH_RSP
,
dmPutNodeMsgToMgmtQueue
,
0
)
==
NULL
)
goto
_OVER
;
code
=
0
;
_OVER:
if
(
code
!=
0
)
{
taosArrayDestroy
(
pArray
);
return
NULL
;
}
else
{
return
pArray
;
}
}
source/dnode/mgmt/mgmt_dnode/src/dmInt.c
0 → 100644
浏览文件 @
8e5b263d
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http:www.gnu.org/licenses/>.
*/
#define _DEFAULT_SOURCE
#include "dmInt.h"
static
int32_t
dmStartMgmt
(
SDnodeMgmt
*
pMgmt
)
{
if
(
dmStartStatusThread
(
pMgmt
)
!=
0
)
{
return
-
1
;
}
if
(
dmStartMonitorThread
(
pMgmt
)
!=
0
)
{
return
-
1
;
}
return
0
;
}
static
void
dmStopMgmt
(
SDnodeMgmt
*
pMgmt
)
{
pMgmt
->
data
.
stopped
=
true
;
dmStopMonitorThread
(
pMgmt
);
dmStopStatusThread
(
pMgmt
);
}
static
int32_t
dmOpenMgmt
(
const
SMgmtInputOpt
*
pInput
,
SMgmtOutputOpt
*
pOutput
)
{
dInfo
(
"dnode-mgmt start to init"
);
SDnodeMgmt
*
pMgmt
=
taosMemoryCalloc
(
1
,
sizeof
(
SDnodeMgmt
));
if
(
pMgmt
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
return
-
1
;
}
pMgmt
->
data
.
dnodeId
=
0
;
pMgmt
->
data
.
clusterId
=
0
;
pMgmt
->
data
.
dnodeVer
=
0
;
pMgmt
->
data
.
updateTime
=
0
;
pMgmt
->
data
.
rebootTime
=
taosGetTimestampMs
();
pMgmt
->
data
.
dropped
=
0
;
pMgmt
->
data
.
localEp
=
pInput
->
localEp
;
pMgmt
->
data
.
localFqdn
=
pInput
->
localFqdn
;
pMgmt
->
data
.
firstEp
=
pInput
->
firstEp
;
pMgmt
->
data
.
secondEp
=
pInput
->
secondEp
;
pMgmt
->
data
.
supportVnodes
=
pInput
->
supportVnodes
;
pMgmt
->
data
.
serverPort
=
pInput
->
serverPort
;
pMgmt
->
pDnode
=
pInput
->
pDnode
;
pMgmt
->
msgCb
=
pInput
->
msgCb
;
pMgmt
->
path
=
pInput
->
path
;
pMgmt
->
name
=
pInput
->
name
;
pMgmt
->
processCreateNodeFp
=
pInput
->
processCreateNodeFp
;
pMgmt
->
processDropNodeFp
=
pInput
->
processDropNodeFp
;
pMgmt
->
isNodeDeployedFp
=
pInput
->
isNodeDeployedFp
;
taosInitRWLatch
(
&
pMgmt
->
data
.
latch
);
pMgmt
->
data
.
dnodeHash
=
taosHashInit
(
4
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_INT
),
true
,
HASH_NO_LOCK
);
if
(
pMgmt
->
data
.
dnodeHash
==
NULL
)
{
dError
(
"failed to init dnode hash"
);
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
return
-
1
;
}
if
(
dmReadEps
(
pMgmt
)
!=
0
)
{
dError
(
"failed to read file since %s"
,
terrstr
());
return
-
1
;
}
if
(
pMgmt
->
data
.
dropped
)
{
dError
(
"dnode will not start since its already dropped"
);
return
-
1
;
}
if
(
dmStartWorker
(
pMgmt
)
!=
0
)
{
return
-
1
;
}
if
(
udfStartUdfd
(
pMgmt
->
data
.
dnodeId
)
!=
0
)
{
dError
(
"failed to start udfd"
);
}
pOutput
->
pMgmt
=
pMgmt
;
pOutput
->
mnodeEps
=
pMgmt
->
data
.
mnodeEps
;
dInfo
(
"dnode-mgmt is initialized"
);
return
0
;
}
static
void
dmCloseMgmt
(
SDnodeMgmt
*
pMgmt
)
{
dInfo
(
"dnode-mgmt start to clean up"
);
dmStopWorker
(
pMgmt
);
taosWLockLatch
(
&
pMgmt
->
data
.
latch
);
if
(
pMgmt
->
data
.
dnodeEps
!=
NULL
)
{
taosArrayDestroy
(
pMgmt
->
data
.
dnodeEps
);
pMgmt
->
data
.
dnodeEps
=
NULL
;
}
if
(
pMgmt
->
data
.
dnodeHash
!=
NULL
)
{
taosHashCleanup
(
pMgmt
->
data
.
dnodeHash
);
pMgmt
->
data
.
dnodeHash
=
NULL
;
}
taosWUnLockLatch
(
&
pMgmt
->
data
.
latch
);
taosMemoryFree
(
pMgmt
);
dInfo
(
"dnode-mgmt is cleaned up"
);
}
static
int32_t
dmRequireMgmt
(
const
SMgmtInputOpt
*
pInput
,
bool
*
required
)
{
*
required
=
true
;
return
0
;
}
SMgmtFunc
dmGetMgmtFunc
()
{
SMgmtFunc
mgmtFunc
=
{
0
};
mgmtFunc
.
openFp
=
dmOpenMgmt
;
mgmtFunc
.
closeFp
=
(
NodeCloseFp
)
dmCloseMgmt
;
mgmtFunc
.
startFp
=
(
NodeStartFp
)
dmStartMgmt
;
mgmtFunc
.
stopFp
=
(
NodeStopFp
)
dmStopMgmt
;
mgmtFunc
.
requiredFp
=
dmRequireMgmt
;
mgmtFunc
.
getHandlesFp
=
dmGetMsgHandles
;
return
mgmtFunc
;
}
source/dnode/mgmt/mgmt_dnode/src/dmMonitor.c
0 → 100644
浏览文件 @
8e5b263d
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#define _DEFAULT_SOURCE
#include "dmInt.h"
#define dmSendLocalRecv(pMgmt, mtype, func, pInfo) \
if (!tsMultiProcess) { \
SRpcMsg rsp = {0}; \
SRpcMsg req = {.msgType = mtype}; \
SEpSet epset = {.inUse = 0, .numOfEps = 1}; \
tstrncpy(epset.eps[0].fqdn, pMgmt->data.localFqdn, TSDB_FQDN_LEN); \
epset.eps[0].port = pMgmt->data.serverPort; \
\
rpcSendRecv(pMgmt->msgCb.clientRpc, &epset, &req, &rsp); \
if (rsp.code == 0 && rsp.contLen > 0) { \
func(rsp.pCont, rsp.contLen, pInfo); \
} \
rpcFreeCont(rsp.pCont); \
}
static
void
dmGetMonitorBasicInfo
(
SDnodeMgmt
*
pMgmt
,
SMonBasicInfo
*
pInfo
)
{
pInfo
->
protocol
=
1
;
pInfo
->
dnode_id
=
pMgmt
->
data
.
dnodeId
;
pInfo
->
cluster_id
=
pMgmt
->
data
.
clusterId
;
tstrncpy
(
pInfo
->
dnode_ep
,
tsLocalEp
,
TSDB_EP_LEN
);
}
static
void
dmGetMonitorDnodeInfo
(
SDnodeMgmt
*
pMgmt
,
SMonDnodeInfo
*
pInfo
)
{
pInfo
->
uptime
=
(
taosGetTimestampMs
()
-
pMgmt
->
data
.
rebootTime
)
/
(
86400000
.
0
f
);
pInfo
->
has_mnode
=
(
*
pMgmt
->
isNodeDeployedFp
)(
pMgmt
->
pDnode
,
MNODE
);
pInfo
->
has_qnode
=
(
*
pMgmt
->
isNodeDeployedFp
)(
pMgmt
->
pDnode
,
QNODE
);
pInfo
->
has_snode
=
(
*
pMgmt
->
isNodeDeployedFp
)(
pMgmt
->
pDnode
,
SNODE
);
pInfo
->
has_bnode
=
(
*
pMgmt
->
isNodeDeployedFp
)(
pMgmt
->
pDnode
,
BNODE
);
tstrncpy
(
pInfo
->
logdir
.
name
,
tsLogDir
,
sizeof
(
pInfo
->
logdir
.
name
));
pInfo
->
logdir
.
size
=
tsLogSpace
.
size
;
tstrncpy
(
pInfo
->
tempdir
.
name
,
tsTempDir
,
sizeof
(
pInfo
->
tempdir
.
name
));
pInfo
->
tempdir
.
size
=
tsTempSpace
.
size
;
}
static
void
dmGetMonitorInfo
(
SDnodeMgmt
*
pMgmt
,
SMonDmInfo
*
pInfo
)
{
dmGetMonitorBasicInfo
(
pMgmt
,
&
pInfo
->
basic
);
dmGetMonitorDnodeInfo
(
pMgmt
,
&
pInfo
->
dnode
);
dmGetMonitorSystemInfo
(
&
pInfo
->
sys
);
}
void
dmSendMonitorReport
(
SDnodeMgmt
*
pMgmt
)
{
if
(
!
tsEnableMonitor
||
tsMonitorFqdn
[
0
]
==
0
||
tsMonitorPort
==
0
)
return
;
dTrace
(
"send monitor report to %s:%u"
,
tsMonitorFqdn
,
tsMonitorPort
);
SMonDmInfo
dmInfo
=
{
0
};
SMonMmInfo
mmInfo
=
{
0
};
SMonVmInfo
vmInfo
=
{
0
};
SMonQmInfo
qmInfo
=
{
0
};
SMonSmInfo
smInfo
=
{
0
};
SMonBmInfo
bmInfo
=
{
0
};
dmGetMonitorInfo
(
pMgmt
,
&
dmInfo
);
dmSendLocalRecv
(
pMgmt
,
TDMT_MON_VM_INFO
,
tDeserializeSMonVmInfo
,
&
vmInfo
);
if
(
dmInfo
.
dnode
.
has_mnode
)
{
dmSendLocalRecv
(
pMgmt
,
TDMT_MON_MM_INFO
,
tDeserializeSMonMmInfo
,
&
mmInfo
);
}
if
(
dmInfo
.
dnode
.
has_qnode
)
{
dmSendLocalRecv
(
pMgmt
,
TDMT_MON_QM_INFO
,
tDeserializeSMonQmInfo
,
&
qmInfo
);
}
if
(
dmInfo
.
dnode
.
has_snode
)
{
dmSendLocalRecv
(
pMgmt
,
TDMT_MON_SM_INFO
,
tDeserializeSMonSmInfo
,
&
smInfo
);
}
if
(
dmInfo
.
dnode
.
has_bnode
)
{
dmSendLocalRecv
(
pMgmt
,
TDMT_MON_BM_INFO
,
tDeserializeSMonBmInfo
,
&
bmInfo
);
}
monSetDmInfo
(
&
dmInfo
);
monSetMmInfo
(
&
mmInfo
);
monSetVmInfo
(
&
vmInfo
);
monSetQmInfo
(
&
qmInfo
);
monSetSmInfo
(
&
smInfo
);
monSetBmInfo
(
&
bmInfo
);
tFreeSMonMmInfo
(
&
mmInfo
);
tFreeSMonVmInfo
(
&
vmInfo
);
tFreeSMonQmInfo
(
&
qmInfo
);
tFreeSMonSmInfo
(
&
smInfo
);
tFreeSMonBmInfo
(
&
bmInfo
);
monSendReport
();
}
void
dmGetVnodeLoads
(
SDnodeMgmt
*
pMgmt
,
SMonVloadInfo
*
pInfo
)
{
dmSendLocalRecv
(
pMgmt
,
TDMT_MON_VM_LOAD
,
tDeserializeSMonVloadInfo
,
pInfo
);
}
void
dmGetMnodeLoads
(
SDnodeMgmt
*
pMgmt
,
SMonMloadInfo
*
pInfo
)
{
dmSendLocalRecv
(
pMgmt
,
TDMT_MON_MM_LOAD
,
tDeserializeSMonMloadInfo
,
pInfo
);
}
source/dnode/mgmt/
implement
/src/dmWorker.c
→
source/dnode/mgmt/
mgmt_dnode
/src/dmWorker.c
浏览文件 @
8e5b263d
...
...
@@ -14,26 +14,22 @@
*/
#define _DEFAULT_SOURCE
#include "dmI
mp
.h"
#include "dmI
nt
.h"
static
void
*
dmStatusThreadFp
(
void
*
param
)
{
SDnode
*
pDnode
=
param
;
int64_t
lastTime
=
taosGetTimestampMs
();
SDnode
Mgmt
*
pMgmt
=
param
;
int64_t
lastTime
=
taosGetTimestampMs
();
setThreadName
(
"dnode-status"
);
while
(
1
)
{
taosThreadTestCancel
();
taosMsleep
(
200
);
if
(
pDnode
->
status
!=
DND_STAT_RUNNING
||
pDnode
->
data
.
dropped
)
{
continue
;
}
if
(
pMgmt
->
data
.
dropped
||
pMgmt
->
data
.
stopped
)
break
;
int64_t
curTime
=
taosGetTimestampMs
();
float
interval
=
(
curTime
-
lastTime
)
/
1000
.
0
f
;
if
(
interval
>=
tsStatusInterval
)
{
dmSendStatusReq
(
p
Dnode
);
dmSendStatusReq
(
p
Mgmt
);
lastTime
=
curTime
;
}
}
...
...
@@ -42,23 +38,19 @@ static void *dmStatusThreadFp(void *param) {
}
static
void
*
dmMonitorThreadFp
(
void
*
param
)
{
SDnode
*
pDnode
=
param
;
int64_t
lastTime
=
taosGetTimestampMs
();
SDnode
Mgmt
*
pMgmt
=
param
;
int64_t
lastTime
=
taosGetTimestampMs
();
setThreadName
(
"dnode-monitor"
);
while
(
1
)
{
taosThreadTestCancel
();
taosMsleep
(
200
);
if
(
pDnode
->
status
!=
DND_STAT_RUNNING
||
pDnode
->
data
.
dropped
)
{
continue
;
}
if
(
pMgmt
->
data
.
dropped
||
pMgmt
->
data
.
stopped
)
break
;
int64_t
curTime
=
taosGetTimestampMs
();
float
interval
=
(
curTime
-
lastTime
)
/
1000
.
0
f
;
if
(
interval
>=
tsMonitorInterval
)
{
dmSendMonitorReport
(
p
Dnode
);
dmSendMonitorReport
(
p
Mgmt
);
lastTime
=
curTime
;
}
}
...
...
@@ -66,96 +58,104 @@ static void *dmMonitorThreadFp(void *param) {
return
NULL
;
}
int32_t
dmStartStatusThread
(
SDnode
*
pDnode
)
{
pDnode
->
data
.
statusThreadId
=
taosCreateThread
(
dmStatusThreadFp
,
pDnode
);
if
(
pDnode
->
data
.
statusThreadId
==
NULL
)
{
dError
(
"failed to init dnode status thread"
);
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
int32_t
dmStartStatusThread
(
SDnodeMgmt
*
pMgmt
)
{
TdThreadAttr
thAttr
;
taosThreadAttrInit
(
&
thAttr
);
taosThreadAttrSetDetachState
(
&
thAttr
,
PTHREAD_CREATE_JOINABLE
);
if
(
taosThreadCreate
(
&
pMgmt
->
statusThread
,
&
thAttr
,
dmStatusThreadFp
,
pMgmt
)
!=
0
)
{
dError
(
"failed to create status thread since %s"
,
strerror
(
errno
));
return
-
1
;
}
dmReportStartup
(
pDnode
,
"dnode-status"
,
"initialized"
);
taosThreadAttrDestroy
(
&
thAttr
);
tmsgReportStartup
(
"dnode-status"
,
"initialized"
);
return
0
;
}
void
dmStopStatusThread
(
SDnode
*
pDnode
)
{
if
(
pDnode
->
data
.
statusThreadId
!=
NULL
)
{
taosDestoryThread
(
pDnode
->
data
.
statusThreadId
);
pDnode
->
data
.
statusThreadId
=
NULL
;
void
dmStopStatusThread
(
SDnodeMgmt
*
pMgmt
)
{
if
(
taosCheckPthreadValid
(
pMgmt
->
statusThread
))
{
taosThreadJoin
(
pMgmt
->
statusThread
,
NULL
);
}
}
int32_t
dmStartMonitorThread
(
SDnode
*
pDnode
)
{
pDnode
->
data
.
monitorThreadId
=
taosCreateThread
(
dmMonitorThreadFp
,
pDnode
);
if
(
pDnode
->
data
.
monitorThreadId
==
NULL
)
{
dError
(
"failed to init dnode monitor thread"
);
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
int32_t
dmStartMonitorThread
(
SDnodeMgmt
*
pMgmt
)
{
TdThreadAttr
thAttr
;
taosThreadAttrInit
(
&
thAttr
);
taosThreadAttrSetDetachState
(
&
thAttr
,
PTHREAD_CREATE_JOINABLE
);
if
(
taosThreadCreate
(
&
pMgmt
->
monitorThread
,
&
thAttr
,
dmMonitorThreadFp
,
pMgmt
)
!=
0
)
{
dError
(
"failed to create monitor thread since %s"
,
strerror
(
errno
));
return
-
1
;
}
dmReportStartup
(
pDnode
,
"dnode-monitor"
,
"initialized"
);
taosThreadAttrDestroy
(
&
thAttr
);
tmsgReportStartup
(
"dnode-monitor"
,
"initialized"
);
return
0
;
}
void
dmStopMonitorThread
(
SDnode
*
pDnode
)
{
if
(
pDnode
->
data
.
monitorThreadId
!=
NULL
)
{
taosDestoryThread
(
pDnode
->
data
.
monitorThreadId
);
pDnode
->
data
.
monitorThreadId
=
NULL
;
void
dmStopMonitorThread
(
SDnodeMgmt
*
pMgmt
)
{
if
(
taosCheckPthreadValid
(
pMgmt
->
monitorThread
))
{
taosThreadJoin
(
pMgmt
->
monitorThread
,
NULL
);
}
}
static
void
dmProcessMgmtQueue
(
SQueueInfo
*
pInfo
,
SNodeMsg
*
pMsg
)
{
SDnode
*
pDnode
=
pInfo
->
ahandle
;
int32_t
code
=
-
1
;
tmsg_t
msgType
=
pMsg
->
rpcMsg
.
msgType
;
dTrace
(
"msg:%p, will be processed in dnode-mgmt queue
"
,
pMsg
);
SDnode
Mgmt
*
pMgmt
=
pInfo
->
ahandle
;
int32_t
code
=
-
1
;
tmsg_t
msgType
=
pMsg
->
rpcMsg
.
msgType
;
bool
isRequest
=
msgType
&
1u
;
dTrace
(
"msg:%p, will be processed in dnode-mgmt queue
, type:%s"
,
pMsg
,
TMSG_INFO
(
msgType
)
);
switch
(
msgType
)
{
case
TDMT_DND_CONFIG_DNODE
:
code
=
dmProcessConfigReq
(
p
Dnode
,
pMsg
);
code
=
dmProcessConfigReq
(
p
Mgmt
,
pMsg
);
break
;
case
TDMT_MND_AUTH_RSP
:
code
=
dmProcessAuthRsp
(
p
Dnode
,
pMsg
);
code
=
dmProcessAuthRsp
(
p
Mgmt
,
pMsg
);
break
;
case
TDMT_MND_GRANT_RSP
:
code
=
dmProcessGrantRsp
(
p
Dnode
,
pMsg
);
code
=
dmProcessGrantRsp
(
p
Mgmt
,
pMsg
);
break
;
case
TDMT_DND_CREATE_MNODE
:
code
=
dmProcessCreateNodeReq
(
pDnode
,
MNODE
,
pMsg
);
code
=
(
*
pMgmt
->
processCreateNodeFp
)(
pMgmt
->
pDnode
,
MNODE
,
pMsg
);
break
;
case
TDMT_DND_DROP_MNODE
:
code
=
dmProcessDropNodeReq
(
pDnode
,
MNODE
,
pMsg
);
code
=
(
*
pMgmt
->
processDropNodeFp
)(
pMgmt
->
pDnode
,
MNODE
,
pMsg
);
break
;
case
TDMT_DND_CREATE_QNODE
:
code
=
dmProcessCreateNodeReq
(
pDnode
,
QNODE
,
pMsg
);
code
=
(
*
pMgmt
->
processCreateNodeFp
)(
pMgmt
->
pDnode
,
QNODE
,
pMsg
);
break
;
case
TDMT_DND_DROP_QNODE
:
code
=
dmProcessDropNodeReq
(
pDnode
,
QNODE
,
pMsg
);
code
=
(
*
pMgmt
->
processDropNodeFp
)(
pMgmt
->
pDnode
,
QNODE
,
pMsg
);
break
;
case
TDMT_DND_CREATE_SNODE
:
code
=
dmProcessCreateNodeReq
(
pDnode
,
SNODE
,
pMsg
);
code
=
(
*
pMgmt
->
processCreateNodeFp
)(
pMgmt
->
pDnode
,
SNODE
,
pMsg
);
break
;
case
TDMT_DND_DROP_SNODE
:
code
=
dmProcessDropNodeReq
(
pDnode
,
SNODE
,
pMsg
);
code
=
(
*
pMgmt
->
processDropNodeFp
)(
pMgmt
->
pDnode
,
SNODE
,
pMsg
);
break
;
case
TDMT_DND_CREATE_BNODE
:
code
=
dmProcessCreateNodeReq
(
pDnode
,
BNODE
,
pMsg
);
code
=
(
*
pMgmt
->
processCreateNodeFp
)(
pMgmt
->
pDnode
,
BNODE
,
pMsg
);
break
;
case
TDMT_DND_DROP_BNODE
:
code
=
dmProcessDropNodeReq
(
pDnode
,
BNODE
,
pMsg
);
code
=
(
*
pMgmt
->
processDropNodeFp
)(
pMgmt
->
pDnode
,
BNODE
,
pMsg
);
break
;
case
TDMT_DND_SERVER_STATUS
:
code
=
dmProcessServerRunStatus
(
pMgmt
,
pMsg
);
break
;
default:
terrno
=
TSDB_CODE_MSG_NOT_PROCESSED
;
break
;
}
if
(
msgType
&
1u
)
{
if
(
isRequest
)
{
if
(
code
!=
0
&&
terrno
!=
0
)
code
=
terrno
;
SRpcMsg
rsp
=
{
.
handle
=
pMsg
->
rpcMsg
.
handle
,
.
ahandle
=
pMsg
->
rpcMsg
.
ahandle
,
.
code
=
code
,
.
refId
=
pMsg
->
rpcMsg
.
refId
,
.
pCont
=
pMsg
->
pRsp
,
.
contLen
=
pMsg
->
rspLen
,
};
rpcSendResponse
(
&
rsp
);
}
...
...
@@ -165,15 +165,15 @@ static void dmProcessMgmtQueue(SQueueInfo *pInfo, SNodeMsg *pMsg) {
taosFreeQitem
(
pMsg
);
}
int32_t
dmStartWorker
(
SDnode
*
pDnode
)
{
int32_t
dmStartWorker
(
SDnode
Mgmt
*
pMgmt
)
{
SSingleWorkerCfg
cfg
=
{
.
min
=
1
,
.
max
=
1
,
.
name
=
"dnode-mgmt"
,
.
fp
=
(
FItem
)
dmProcessMgmtQueue
,
.
param
=
p
Dnode
,
.
param
=
p
Mgmt
,
};
if
(
tSingleWorkerInit
(
&
p
Dnode
->
data
.
mgmtWorker
,
&
cfg
)
!=
0
)
{
if
(
tSingleWorkerInit
(
&
p
Mgmt
->
mgmtWorker
,
&
cfg
)
!=
0
)
{
dError
(
"failed to start dnode-mgmt worker since %s"
,
terrstr
());
return
-
1
;
}
...
...
@@ -182,13 +182,13 @@ int32_t dmStartWorker(SDnode *pDnode) {
return
0
;
}
void
dmStopWorker
(
SDnode
*
pDnode
)
{
tSingleWorkerCleanup
(
&
p
Dnode
->
data
.
mgmtWorker
);
void
dmStopWorker
(
SDnode
Mgmt
*
pMgmt
)
{
tSingleWorkerCleanup
(
&
p
Mgmt
->
mgmtWorker
);
dDebug
(
"dnode workers are closed"
);
}
int32_t
dmP
rocessMgmtMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SSingleWorker
*
pWorker
=
&
p
Wrapper
->
pDnode
->
data
.
mgmtWorker
;
int32_t
dmP
utNodeMsgToMgmtQueue
(
SDnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SSingleWorker
*
pWorker
=
&
p
Mgmt
->
mgmtWorker
;
dTrace
(
"msg:%p, put into worker %s"
,
pMsg
,
pWorker
->
name
);
taosWriteQitem
(
pWorker
->
queue
,
pMsg
);
return
0
;
...
...
source/dnode/mgmt/mgmt_mnode/CMakeLists.txt
浏览文件 @
8e5b263d
...
...
@@ -5,5 +5,5 @@ target_include_directories(
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
)
target_link_libraries
(
mgmt_mnode
dnode_interface
mgmt_mnode
node_util
)
\ No newline at end of file
source/dnode/mgmt/mgmt_mnode/inc/mmInt.h
浏览文件 @
8e5b263d
...
...
@@ -16,8 +16,7 @@
#ifndef _TD_DND_MNODE_INT_H_
#define _TD_DND_MNODE_INT_H_
#include "dmInt.h"
#include "dmUtil.h"
#include "mnode.h"
#ifdef __cplusplus
...
...
@@ -26,9 +25,10 @@ extern "C" {
typedef
struct
SMnodeMgmt
{
SMnode
*
pMnode
;
SDnode
*
pDnode
;
SMgmtWrapper
*
pWrapper
;
SMsgCb
msgCb
;
const
char
*
path
;
const
char
*
name
;
int32_t
dnodeId
;
SSingleWorker
queryWorker
;
SSingleWorker
readWorker
;
SSingleWorker
writeWorker
;
...
...
@@ -41,33 +41,31 @@ typedef struct SMnodeMgmt {
// mmFile.c
int32_t
mmReadFile
(
SMnodeMgmt
*
pMgmt
,
bool
*
pDeployed
);
int32_t
mmWriteFile
(
SM
gmtWrapper
*
pWrapper
,
SDCreateMnodeReq
*
pReq
,
bool
deployed
);
int32_t
mmWriteFile
(
SM
nodeMgmt
*
pMgmt
,
SDCreateMnodeReq
*
pReq
,
bool
deployed
);
// mmInt.c
int32_t
mmAlter
(
SMnodeMgmt
*
pMgmt
,
SDAlterMnodeReq
*
pReq
);
// mmHandle.c
void
mmInitMsgHandle
(
SMgmtWrapper
*
pWrapper
);
int32_t
mmProcessCreateReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
mmProcessDropReq
(
SM
gmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
SArray
*
mmGetMsgHandles
(
);
int32_t
mmProcessCreateReq
(
const
SMgmtInputOpt
*
pInput
,
SNodeMsg
*
pMsg
);
int32_t
mmProcessDropReq
(
SM
nodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
mmProcessAlterReq
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
mmProcessGetMonMmInfoReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pReq
);
int32_t
mmProcessGetMnodeLoadsReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pReq
);
void
mmGetMnodeLoads
(
SMgmtWrapper
*
pWrapper
,
SMonMloadInfo
*
pInfo
);
int32_t
mmProcessGetMonitorInfoReq
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
int32_t
mmProcessGetLoadsReq
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
// mmWorker.c
int32_t
mmStartWorker
(
SMnodeMgmt
*
pMgmt
);
void
mmStopWorker
(
SMnodeMgmt
*
pMgmt
);
int32_t
mmProcessWriteMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
mmProcessSyncMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
mmProcessReadMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
mmProcessQueryMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
mmProcessMonitorMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
mmPutMsgToQueryQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
);
int32_t
mmPutMsgToReadQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
);
int32_t
mmPutMsgToWriteQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
);
int32_t
mmPutMsgToSyncQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
);
int32_t
mmPutNodeMsgToWriteQueue
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
mmPutNodeMsgToSyncQueue
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
mmPutNodeMsgToReadQueue
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
mmPutNodeMsgToQueryQueue
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
mmPutNodeMsgToMonitorQueue
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
mmPutRpcMsgToQueryQueue
(
SMnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
);
int32_t
mmPutRpcMsgToReadQueue
(
SMnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
);
int32_t
mmPutRpcMsgToWriteQueue
(
SMnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
);
int32_t
mmPutRpcMsgToSyncQueue
(
SMnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
);
#ifdef __cplusplus
}
...
...
source/dnode/mgmt/mgmt_mnode/src/mmFile.c
浏览文件 @
8e5b263d
...
...
@@ -28,7 +28,6 @@ int32_t mmReadFile(SMnodeMgmt *pMgmt, bool *pDeployed) {
snprintf
(
file
,
sizeof
(
file
),
"%s%smnode.json"
,
pMgmt
->
path
,
TD_DIRSEP
);
pFile
=
taosOpenFile
(
file
,
TD_FILE_READ
);
if
(
pFile
==
NULL
)
{
// dDebug("file %s not exist", file);
code
=
0
;
goto
_OVER
;
}
...
...
@@ -105,11 +104,11 @@ _OVER:
return
code
;
}
int32_t
mmWriteFile
(
SM
gmtWrapper
*
pWrapper
,
SDCreateMnodeReq
*
pReq
,
bool
deployed
)
{
int32_t
mmWriteFile
(
SM
nodeMgmt
*
pMgmt
,
SDCreateMnodeReq
*
pReq
,
bool
deployed
)
{
char
file
[
PATH_MAX
]
=
{
0
};
char
realfile
[
PATH_MAX
]
=
{
0
};
snprintf
(
file
,
sizeof
(
file
),
"%s%smnode.json.bak"
,
p
Wrapper
->
path
,
TD_DIRSEP
);
snprintf
(
realfile
,
sizeof
(
realfile
),
"%s%smnode.json"
,
p
Wrapper
->
path
,
TD_DIRSEP
);
snprintf
(
file
,
sizeof
(
file
),
"%s%smnode.json.bak"
,
p
Mgmt
->
path
,
TD_DIRSEP
);
snprintf
(
realfile
,
sizeof
(
realfile
),
"%s%smnode.json"
,
p
Mgmt
->
path
,
TD_DIRSEP
);
TdFilePtr
pFile
=
taosOpenFile
(
file
,
TD_FILE_CREATE
|
TD_FILE_WRITE
|
TD_FILE_TRUNC
);
if
(
pFile
==
NULL
)
{
...
...
@@ -125,22 +124,19 @@ int32_t mmWriteFile(SMgmtWrapper *pWrapper, SDCreateMnodeReq *pReq, bool deploye
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"{
\n
"
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
mnodes
\"
: [{
\n
"
);
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
if
(
pReq
!=
NULL
||
pMgmt
!=
NULL
)
{
int8_t
replica
=
(
pReq
!=
NULL
?
pReq
->
replica
:
pMgmt
->
replica
);
for
(
int32_t
i
=
0
;
i
<
replica
;
++
i
)
{
SReplica
*
pReplica
=
&
pMgmt
->
replicas
[
i
];
if
(
pReq
!=
NULL
)
{
pReplica
=
&
pReq
->
replicas
[
i
];
}
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
id
\"
: %d,
\n
"
,
pReplica
->
id
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
fqdn
\"
:
\"
%s
\"
,
\n
"
,
pReplica
->
fqdn
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
port
\"
: %u
\n
"
,
pReplica
->
port
);
if
(
i
<
replica
-
1
)
{
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
" },{
\n
"
);
}
else
{
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
" }],
\n
"
);
}
int8_t
replica
=
(
pReq
!=
NULL
?
pReq
->
replica
:
pMgmt
->
replica
);
for
(
int32_t
i
=
0
;
i
<
replica
;
++
i
)
{
SReplica
*
pReplica
=
&
pMgmt
->
replicas
[
i
];
if
(
pReq
!=
NULL
)
{
pReplica
=
&
pReq
->
replicas
[
i
];
}
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
id
\"
: %d,
\n
"
,
pReplica
->
id
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
fqdn
\"
:
\"
%s
\"
,
\n
"
,
pReplica
->
fqdn
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
port
\"
: %u
\n
"
,
pReplica
->
port
);
if
(
i
<
replica
-
1
)
{
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
" },{
\n
"
);
}
else
{
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
" }],
\n
"
);
}
}
...
...
source/dnode/mgmt/mgmt_mnode/src/mmHandle.c
浏览文件 @
8e5b263d
...
...
@@ -16,15 +16,14 @@
#define _DEFAULT_SOURCE
#include "mmInt.h"
void
mmGetMonitorInfo
(
SMgmtWrapper
*
pWrapper
,
SMonMmInfo
*
mmInfo
)
{
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
static
void
mmGetMonitorInfo
(
SMnodeMgmt
*
pMgmt
,
SMonMmInfo
*
mmInfo
)
{
mndGetMonitorInfo
(
pMgmt
->
pMnode
,
&
mmInfo
->
cluster
,
&
mmInfo
->
vgroup
,
&
mmInfo
->
grant
);
}
int32_t
mmProcessGetMon
MmInfoReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pReq
)
{
int32_t
mmProcessGetMon
itorInfoReq
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pReq
)
{
SMonMmInfo
mmInfo
=
{
0
};
mmGetMonitorInfo
(
p
Wrapper
,
&
mmInfo
);
dmGetMonitorSysInfo
(
&
mmInfo
.
sys
);
mmGetMonitorInfo
(
p
Mgmt
,
&
mmInfo
);
dmGetMonitorSys
tem
Info
(
&
mmInfo
.
sys
);
monGetLogs
(
&
mmInfo
.
log
);
int32_t
rspLen
=
tSerializeSMonMmInfo
(
NULL
,
0
,
&
mmInfo
);
...
...
@@ -46,15 +45,14 @@ int32_t mmProcessGetMonMmInfoReq(SMgmtWrapper *pWrapper, SNodeMsg *pReq) {
return
0
;
}
void
mmGetMnodeLoads
(
SMgmtWrapper
*
pWrapper
,
SMonMloadInfo
*
pInfo
)
{
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
static
void
mmGetMnodeLoads
(
SMnodeMgmt
*
pMgmt
,
SMonMloadInfo
*
pInfo
)
{
pInfo
->
isMnode
=
1
;
mndGetLoad
(
pMgmt
->
pMnode
,
&
pInfo
->
load
);
}
int32_t
mmProcessGet
MnodeLoadsReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pReq
)
{
int32_t
mmProcessGet
LoadsReq
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pReq
)
{
SMonMloadInfo
mloads
=
{
0
};
mmGetMnodeLoads
(
p
Wrapper
,
&
mloads
);
mmGetMnodeLoads
(
p
Mgmt
,
&
mloads
);
int32_t
rspLen
=
tSerializeSMonMloadInfo
(
NULL
,
0
,
&
mloads
);
if
(
rspLen
<
0
)
{
...
...
@@ -74,8 +72,7 @@ int32_t mmProcessGetMnodeLoadsReq(SMgmtWrapper *pWrapper, SNodeMsg *pReq) {
return
0
;
}
int32_t
mmProcessCreateReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
int32_t
mmProcessCreateReq
(
const
SMgmtInputOpt
*
pInput
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SDCreateMnodeReq
createReq
=
{
0
};
...
...
@@ -84,14 +81,18 @@ int32_t mmProcessCreateReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
-
1
;
}
if
(
createReq
.
replica
<=
1
||
createReq
.
dnodeId
!=
pDnode
->
data
.
dnodeId
)
{
if
(
createReq
.
replica
<=
1
||
(
createReq
.
dnodeId
!=
pInput
->
dnodeId
&&
pInput
->
dnodeId
!=
0
)
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to create mnode since %s"
,
terrstr
());
return
-
1
;
}
bool
deployed
=
true
;
if
(
mmWriteFile
(
pWrapper
,
&
createReq
,
deployed
)
!=
0
)
{
SMnodeMgmt
mgmt
=
{
0
};
mgmt
.
path
=
pInput
->
path
;
mgmt
.
name
=
pInput
->
name
;
if
(
mmWriteFile
(
&
mgmt
,
&
createReq
,
deployed
)
!=
0
)
{
dError
(
"failed to write mnode file since %s"
,
terrstr
());
return
-
1
;
}
...
...
@@ -99,8 +100,7 @@ int32_t mmProcessCreateReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
0
;
}
int32_t
mmProcessDropReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
int32_t
mmProcessDropReq
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SDDropMnodeReq
dropReq
=
{
0
};
...
...
@@ -109,14 +109,14 @@ int32_t mmProcessDropReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
-
1
;
}
if
(
dropReq
.
dnodeId
!=
pDnode
->
data
.
dnodeId
)
{
if
(
pMgmt
->
dnodeId
!=
0
&&
dropReq
.
dnodeId
!=
pMgmt
->
dnodeId
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to drop mnode since %s"
,
terrstr
());
return
-
1
;
}
bool
deployed
=
false
;
if
(
mmWriteFile
(
p
Wrapper
,
NULL
,
deployed
)
!=
0
)
{
if
(
mmWriteFile
(
p
Mgmt
,
NULL
,
deployed
)
!=
0
)
{
dError
(
"failed to write mnode file since %s"
,
terrstr
());
return
-
1
;
}
...
...
@@ -125,7 +125,6 @@ int32_t mmProcessDropReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
}
int32_t
mmProcessAlterReq
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SDnode
*
pDnode
=
pMgmt
->
pDnode
;
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SDAlterMnodeReq
alterReq
=
{
0
};
...
...
@@ -134,104 +133,118 @@ int32_t mmProcessAlterReq(SMnodeMgmt *pMgmt, SNodeMsg *pMsg) {
return
-
1
;
}
if
(
p
Dnode
->
data
.
dnodeId
!=
0
&&
alterReq
.
dnodeId
!=
pDnode
->
data
.
dnodeId
)
{
if
(
p
Mgmt
->
dnodeId
!=
0
&&
alterReq
.
dnodeId
!=
pMgmt
->
dnodeId
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to alter mnode since %s, input:%d cur:%d"
,
terrstr
(),
alterReq
.
dnodeId
,
p
Dnode
->
data
.
dnodeId
);
dError
(
"failed to alter mnode since %s, input:%d cur:%d"
,
terrstr
(),
alterReq
.
dnodeId
,
p
Mgmt
->
dnodeId
);
return
-
1
;
}
else
{
return
mmAlter
(
pMgmt
,
&
alterReq
);
}
}
void
mmInitMsgHandle
(
SMgmtWrapper
*
pWrapper
)
{
dmSetMsgHandle
(
pWrapper
,
TDMT_MON_MM_INFO
,
mmProcessMonitorMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_MON_MM_LOAD
,
mmProcessMonitorMsg
,
DEFAULT_HANDLE
);
SArray
*
mmGetMsgHandles
()
{
int32_t
code
=
-
1
;
SArray
*
pArray
=
taosArrayInit
(
64
,
sizeof
(
SMgmtHandle
));
if
(
pArray
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MON_MM_INFO
,
mmPutNodeMsgToMonitorQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MON_MM_LOAD
,
mmPutNodeMsgToMonitorQueue
,
0
)
==
NULL
)
goto
_OVER
;
// Requests handled by DNODE
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_MNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_ALTER_MNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_MNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_QNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_QNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_SNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_SNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_BNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_BNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_VNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_VNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_CONFIG_DNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_CREATE_MNODE_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_ALTER_MNODE_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_DROP_MNODE_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_CREATE_QNODE_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_DROP_QNODE_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_CREATE_SNODE_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_DROP_SNODE_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_CREATE_BNODE_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_DROP_BNODE_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_CREATE_VNODE_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_DROP_VNODE_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_CONFIG_DNODE_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
// Requests handled by MNODE
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_CONNECT
,
mmProcessReadMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_ACCT
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_ALTER_ACCT
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_ACCT
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_USER
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_ALTER_USER
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_USER
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_GET_USER_AUTH
,
mmProcessReadMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_DNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_CONFIG_DNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_DNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_MNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_MNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_QNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_QNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_QNODE_LIST
,
mmProcessReadMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_SNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_SNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_BNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_BNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_USE_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_ALTER_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_COMPACT_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_FUNC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_RETRIEVE_FUNC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_FUNC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_STB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_ALTER_STB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_STB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_SMA
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_SMA
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_TABLE_META
,
mmProcessReadMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_VGROUP_LIST
,
mmProcessReadMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_KILL_QUERY
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_KILL_CONN
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_HEARTBEAT
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_SYSTABLE_RETRIEVE
,
mmProcessReadMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_STATUS
,
mmProcessReadMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_KILL_TRANS
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_GRANT
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_AUTH
,
mmProcessReadMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_ALTER_MNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_TOPIC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_ALTER_TOPIC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_TOPIC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_SUBSCRIBE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_MQ_COMMIT_OFFSET
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_MQ_ASK_EP
,
mmProcessReadMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_MQ_VG_CHANGE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_STREAM
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_TASK_DEPLOY_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_GET_DB_CFG
,
mmProcessReadMsg
,
DEFAULT_HANDLE
)
;
dmSetMsgHandle
(
pWrapper
,
TDMT_MND_GET_INDEX
,
mmProcessReadMsg
,
DEFAULT_HANDLE
)
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_CONNECT
,
mmPutNodeMsgToReadQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_CREATE_ACCT
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_ALTER_ACCT
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_DROP_ACCT
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_CREATE_USER
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_ALTER_USER
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_DROP_USER
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_GET_USER_AUTH
,
mmPutNodeMsgToReadQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_CREATE_DNODE
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_CONFIG_DNODE
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_DROP_DNODE
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_CREATE_MNODE
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_DROP_MNODE
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_CREATE_QNODE
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_DROP_QNODE
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_QNODE_LIST
,
mmPutNodeMsgToReadQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_CREATE_SNODE
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_DROP_SNODE
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_CREATE_BNODE
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_DROP_BNODE
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_CREATE_DB
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_DROP_DB
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_USE_DB
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_ALTER_DB
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_COMPACT_DB
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_CREATE_FUNC
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_RETRIEVE_FUNC
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_DROP_FUNC
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_CREATE_STB
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_ALTER_STB
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_DROP_STB
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_CREATE_SMA
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_DROP_SMA
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_TABLE_META
,
mmPutNodeMsgToReadQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_VGROUP_LIST
,
mmPutNodeMsgToReadQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_KILL_QUERY
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_KILL_CONN
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_HEARTBEAT
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_SYSTABLE_RETRIEVE
,
mmPutNodeMsgToReadQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_STATUS
,
mmPutNodeMsgToReadQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_KILL_TRANS
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_GRANT
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_AUTH
,
mmPutNodeMsgToReadQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_ALTER_MNODE
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_CREATE_TOPIC
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_ALTER_TOPIC
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_DROP_TOPIC
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_SUBSCRIBE
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_MQ_COMMIT_OFFSET
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_MQ_ASK_EP
,
mmPutNodeMsgToReadQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_MQ_VG_CHANGE_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_CREATE_STREAM
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_TASK_DEPLOY_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_GET_DB_CFG
,
mmPutNodeMsgToReadQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MND_GET_INDEX
,
mmPutNodeMsgToReadQueue
,
0
)
==
NULL
)
goto
_OVER
;
// Requests handled by VNODE
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_CREATE_STB_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_ALTER_STB_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_DROP_STB_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_CREATE_SMA_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_DROP_SMA_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY
,
mmProcessQueryMsg
,
MNODE_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY_CONTINUE
,
mmProcessQueryMsg
,
MNODE_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_FETCH
,
mmProcessQueryMsg
,
MNODE_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_DROP_TASK
,
mmProcessQueryMsg
,
MNODE_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY_HEARTBEAT
,
mmProcessQueryMsg
,
MNODE_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_ALTER_VNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_SYNC_VNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_COMPACT_VNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_CREATE_STB_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_ALTER_STB_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_DROP_STB_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_CREATE_SMA_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_DROP_SMA_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_QUERY
,
mmPutNodeMsgToQueryQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_QUERY_CONTINUE
,
mmPutNodeMsgToQueryQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_FETCH
,
mmPutNodeMsgToQueryQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_DROP_TASK
,
mmPutNodeMsgToQueryQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_QUERY_HEARTBEAT
,
mmPutNodeMsgToQueryQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_ALTER_VNODE_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_SYNC_VNODE_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_COMPACT_VNODE_RSP
,
mmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
code
=
0
;
_OVER:
if
(
code
!=
0
)
{
taosArrayDestroy
(
pArray
);
return
NULL
;
}
else
{
return
pArray
;
}
}
source/dnode/mgmt/mgmt_mnode/src/mmInt.c
浏览文件 @
8e5b263d
...
...
@@ -17,45 +17,35 @@
#include "mmInt.h"
#include "wal.h"
static
bool
mmDeployRequired
(
SDnode
*
pDnode
)
{
if
(
p
Dnode
->
data
.
dnodeId
>
0
)
return
false
;
if
(
p
Dnode
->
data
.
clusterId
>
0
)
return
false
;
if
(
strcmp
(
p
Dnode
->
data
.
localEp
,
pDnode
->
data
.
firstEp
)
!=
0
)
return
false
;
static
bool
mmDeployRequired
(
const
SMgmtInputOpt
*
pInput
)
{
if
(
p
Input
->
dnodeId
>
0
)
return
false
;
if
(
p
Input
->
clusterId
>
0
)
return
false
;
if
(
strcmp
(
p
Input
->
localEp
,
pInput
->
firstEp
)
!=
0
)
return
false
;
return
true
;
}
static
int32_t
mmRequire
(
SMgmtWrapper
*
pWrapper
,
bool
*
required
)
{
static
int32_t
mmRequire
(
const
SMgmtInputOpt
*
pInput
,
bool
*
required
)
{
SMnodeMgmt
mgmt
=
{
0
};
mgmt
.
path
=
p
Wrapper
->
path
;
mgmt
.
path
=
p
Input
->
path
;
if
(
mmReadFile
(
&
mgmt
,
required
)
!=
0
)
{
return
-
1
;
}
if
(
!
(
*
required
))
{
*
required
=
mmDeployRequired
(
p
Wrapper
->
pDnode
);
*
required
=
mmDeployRequired
(
p
Input
);
}
return
0
;
}
static
void
mmInitOption
(
SMnodeMgmt
*
pMgmt
,
SMnodeOpt
*
pOption
)
{
SMsgCb
msgCb
=
pMgmt
->
pDnode
->
data
.
msgCb
;
msgCb
.
pWrapper
=
pMgmt
->
pWrapper
;
msgCb
.
queueFps
[
QUERY_QUEUE
]
=
mmPutMsgToQueryQueue
;
msgCb
.
queueFps
[
READ_QUEUE
]
=
mmPutMsgToReadQueue
;
msgCb
.
queueFps
[
WRITE_QUEUE
]
=
mmPutMsgToWriteQueue
;
msgCb
.
queueFps
[
SYNC_QUEUE
]
=
mmPutMsgToWriteQueue
;
pOption
->
msgCb
=
msgCb
;
}
static
void
mmBuildOptionForDeploy
(
SMnodeMgmt
*
pMgmt
,
SMnodeOpt
*
pOption
)
{
mmInitOption
(
pMgmt
,
pOption
);
static
void
mmBuildOptionForDeploy
(
SMnodeMgmt
*
pMgmt
,
const
SMgmtInputOpt
*
pInput
,
SMnodeOpt
*
pOption
)
{
pOption
->
msgCb
=
pMgmt
->
msgCb
;
pOption
->
replica
=
1
;
pOption
->
selfIndex
=
0
;
SReplica
*
pReplica
=
&
pOption
->
replicas
[
0
];
pReplica
->
id
=
1
;
pReplica
->
port
=
p
Mgmt
->
pDnode
->
data
.
serverPort
;
tstrncpy
(
pReplica
->
fqdn
,
p
Mgmt
->
pDnode
->
data
.
localFqdn
,
TSDB_FQDN_LEN
);
pReplica
->
port
=
p
Input
->
serverPort
;
tstrncpy
(
pReplica
->
fqdn
,
p
Input
->
localFqdn
,
TSDB_FQDN_LEN
);
pOption
->
deploy
=
true
;
pMgmt
->
selfIndex
=
pOption
->
selfIndex
;
...
...
@@ -64,7 +54,7 @@ static void mmBuildOptionForDeploy(SMnodeMgmt *pMgmt, SMnodeOpt *pOption) {
}
static
void
mmBuildOptionForOpen
(
SMnodeMgmt
*
pMgmt
,
SMnodeOpt
*
pOption
)
{
mmInitOption
(
pMgmt
,
pOption
)
;
pOption
->
msgCb
=
pMgmt
->
msgCb
;
pOption
->
selfIndex
=
pMgmt
->
selfIndex
;
pOption
->
replica
=
pMgmt
->
replica
;
memcpy
(
&
pOption
->
replicas
,
pMgmt
->
replicas
,
sizeof
(
SReplica
)
*
TSDB_MAX_REPLICA
);
...
...
@@ -72,8 +62,7 @@ static void mmBuildOptionForOpen(SMnodeMgmt *pMgmt, SMnodeOpt *pOption) {
}
static
int32_t
mmBuildOptionFromReq
(
SMnodeMgmt
*
pMgmt
,
SMnodeOpt
*
pOption
,
SDCreateMnodeReq
*
pCreate
)
{
mmInitOption
(
pMgmt
,
pOption
);
pOption
->
msgCb
=
pMgmt
->
msgCb
;
pOption
->
replica
=
pCreate
->
replica
;
pOption
->
selfIndex
=
-
1
;
for
(
int32_t
i
=
0
;
i
<
pCreate
->
replica
;
++
i
)
{
...
...
@@ -81,7 +70,7 @@ static int32_t mmBuildOptionFromReq(SMnodeMgmt *pMgmt, SMnodeOpt *pOption, SDCre
pReplica
->
id
=
pCreate
->
replicas
[
i
].
id
;
pReplica
->
port
=
pCreate
->
replicas
[
i
].
port
;
memcpy
(
pReplica
->
fqdn
,
pCreate
->
replicas
[
i
].
fqdn
,
TSDB_FQDN_LEN
);
if
(
pReplica
->
id
==
pMgmt
->
pDnode
->
data
.
dnodeId
)
{
if
(
pReplica
->
id
==
pMgmt
->
dnodeId
)
{
pOption
->
selfIndex
=
i
;
}
}
...
...
@@ -109,7 +98,7 @@ int32_t mmAlter(SMnodeMgmt *pMgmt, SDAlterMnodeReq *pReq) {
}
bool
deployed
=
true
;
if
(
mmWriteFile
(
pMgmt
->
pWrapper
,
pReq
,
deployed
)
!=
0
)
{
if
(
mmWriteFile
(
pMgmt
,
pReq
,
deployed
)
!=
0
)
{
dError
(
"failed to write mnode file since %s"
,
terrstr
());
return
-
1
;
}
...
...
@@ -117,10 +106,7 @@ int32_t mmAlter(SMnodeMgmt *pMgmt, SDAlterMnodeReq *pReq) {
return
0
;
}
static
void
mmClose
(
SMgmtWrapper
*
pWrapper
)
{
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
if
(
pMgmt
==
NULL
)
return
;
static
void
mmClose
(
SMnodeMgmt
*
pMgmt
)
{
dInfo
(
"mnode-mgmt start to cleanup"
);
if
(
pMgmt
->
pMnode
!=
NULL
)
{
mmStopWorker
(
pMgmt
);
...
...
@@ -128,12 +114,11 @@ static void mmClose(SMgmtWrapper *pWrapper) {
pMgmt
->
pMnode
=
NULL
;
}
pWrapper
->
pMgmt
=
NULL
;
taosMemoryFree
(
pMgmt
);
dInfo
(
"mnode-mgmt is cleaned up"
);
}
static
int32_t
mmOpen
(
SMgmtWrapper
*
pWrapper
)
{
static
int32_t
mmOpen
(
const
SMgmtInputOpt
*
pInput
,
SMgmtOutputOpt
*
pOutput
)
{
dInfo
(
"mnode-mgmt start to init"
);
if
(
walInit
()
!=
0
)
{
dError
(
"failed to init wal since %s"
,
terrstr
());
...
...
@@ -146,23 +131,28 @@ static int32_t mmOpen(SMgmtWrapper *pWrapper) {
return
-
1
;
}
pMgmt
->
path
=
pWrapper
->
path
;
pMgmt
->
pDnode
=
pWrapper
->
pDnode
;
pMgmt
->
pWrapper
=
pWrapper
;
pWrapper
->
pMgmt
=
pMgmt
;
pMgmt
->
path
=
pInput
->
path
;
pMgmt
->
name
=
pInput
->
name
;
pMgmt
->
dnodeId
=
pInput
->
dnodeId
;
pMgmt
->
msgCb
=
pInput
->
msgCb
;
pMgmt
->
msgCb
.
queueFps
[
QUERY_QUEUE
]
=
(
PutToQueueFp
)
mmPutRpcMsgToQueryQueue
;
pMgmt
->
msgCb
.
queueFps
[
READ_QUEUE
]
=
(
PutToQueueFp
)
mmPutRpcMsgToReadQueue
;
pMgmt
->
msgCb
.
queueFps
[
WRITE_QUEUE
]
=
(
PutToQueueFp
)
mmPutRpcMsgToWriteQueue
;
pMgmt
->
msgCb
.
queueFps
[
SYNC_QUEUE
]
=
(
PutToQueueFp
)
mmPutRpcMsgToWriteQueue
;
pMgmt
->
msgCb
.
pMgmt
=
pMgmt
;
bool
deployed
=
false
;
if
(
mmReadFile
(
pMgmt
,
&
deployed
)
!=
0
)
{
dError
(
"failed to read file since %s"
,
terrstr
());
mmClose
(
p
Wrapper
);
mmClose
(
p
Mgmt
);
return
-
1
;
}
SMnodeOpt
option
=
{
0
};
if
(
!
deployed
)
{
dInfo
(
"mnode start to deploy"
);
p
Wrapper
->
pDnode
->
data
.
dnodeId
=
1
;
mmBuildOptionForDeploy
(
pMgmt
,
&
option
);
p
Mgmt
->
dnodeId
=
1
;
mmBuildOptionForDeploy
(
pMgmt
,
pInput
,
&
option
);
}
else
{
dInfo
(
"mnode start to open"
);
mmBuildOptionForOpen
(
pMgmt
,
&
option
);
...
...
@@ -171,55 +161,52 @@ static int32_t mmOpen(SMgmtWrapper *pWrapper) {
pMgmt
->
pMnode
=
mndOpen
(
pMgmt
->
path
,
&
option
);
if
(
pMgmt
->
pMnode
==
NULL
)
{
dError
(
"failed to open mnode since %s"
,
terrstr
());
mmClose
(
p
Wrapper
);
mmClose
(
p
Mgmt
);
return
-
1
;
}
dmReportStartup
(
pWrapper
->
pDnode
,
"mnode-impl"
,
"initialized"
);
tmsgReportStartup
(
"mnode-impl"
,
"initialized"
);
if
(
mmStartWorker
(
pMgmt
)
!=
0
)
{
dError
(
"failed to start mnode worker since %s"
,
terrstr
());
mmClose
(
p
Wrapper
);
mmClose
(
p
Mgmt
);
return
-
1
;
}
dmReportStartup
(
pWrapper
->
pDnode
,
"mnode-worker"
,
"initialized"
);
tmsgReportStartup
(
"mnode-worker"
,
"initialized"
);
if
(
!
deployed
)
{
deployed
=
true
;
if
(
mmWriteFile
(
p
Wrapper
,
NULL
,
deployed
)
!=
0
)
{
if
(
mmWriteFile
(
p
Mgmt
,
NULL
,
deployed
)
!=
0
)
{
dError
(
"failed to write mnode file since %s"
,
terrstr
());
return
-
1
;
}
}
pOutput
->
dnodeId
=
pMgmt
->
dnodeId
;
pOutput
->
pMgmt
=
pMgmt
;
dInfo
(
"mnode-mgmt is initialized"
);
return
0
;
}
static
int32_t
mmStart
(
SM
gmtWrapper
*
pWrapper
)
{
static
int32_t
mmStart
(
SM
nodeMgmt
*
pMgmt
)
{
dDebug
(
"mnode-mgmt start to run"
);
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
return
mndStart
(
pMgmt
->
pMnode
);
}
static
void
mmStop
(
SM
gmtWrapper
*
pWrapper
)
{
static
void
mmStop
(
SM
nodeMgmt
*
pMgmt
)
{
dDebug
(
"mnode-mgmt start to stop"
);
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
if
(
pMgmt
!=
NULL
)
{
mndStop
(
pMgmt
->
pMnode
);
}
mndStop
(
pMgmt
->
pMnode
);
}
void
mmSetMgmtFp
(
SMgmtWrapper
*
pWrapper
)
{
SMgmtFp
mgmtFp
=
{
0
};
mgmtFp
.
openFp
=
mmOpen
;
mgmtFp
.
closeFp
=
mmClose
;
mgmtFp
.
startFp
=
mmStart
;
mgmtFp
.
stopFp
=
mmStop
;
mgmtFp
.
createFp
=
mmProcessCreateReq
;
mgmtFp
.
dropFp
=
mmProcessDropReq
;
mgmtFp
.
requiredFp
=
mmRequire
;
mmInitMsgHandle
(
pWrapper
);
pWrapper
->
name
=
"mnode"
;
pWrapper
->
fp
=
mgmtFp
;
SMgmtFunc
mmGetMgmtFunc
()
{
SMgmtFunc
mgmtFunc
=
{
0
};
mgmtFunc
.
openFp
=
mmOpen
;
mgmtFunc
.
closeFp
=
(
NodeCloseFp
)
mmClose
;
mgmtFunc
.
startFp
=
(
NodeStartFp
)
mmStart
;
mgmtFunc
.
stopFp
=
(
NodeStopFp
)
mmStop
;
mgmtFunc
.
createFp
=
(
NodeCreateFp
)
mmProcessCreateReq
;
mgmtFunc
.
dropFp
=
(
NodeDropFp
)
mmProcessDropReq
;
mgmtFunc
.
requiredFp
=
mmRequire
;
mgmtFunc
.
getHandlesFp
=
mmGetMsgHandles
;
return
mgmtFunc
;
}
source/dnode/mgmt/mgmt_mnode/src/mmWorker.c
浏览文件 @
8e5b263d
...
...
@@ -30,27 +30,27 @@ static inline void mmSendRsp(SNodeMsg *pMsg, int32_t code) {
static
void
mmProcessQueue
(
SQueueInfo
*
pInfo
,
SNodeMsg
*
pMsg
)
{
SMnodeMgmt
*
pMgmt
=
pInfo
->
ahandle
;
int32_t
code
=
-
1
;
tmsg_t
msgType
=
pMsg
->
rpcMsg
.
msgType
;
dTrace
(
"msg:%p, get from mnode queue
"
,
pMsg
);
int32_t
code
=
-
1
;
tmsg_t
msgType
=
pMsg
->
rpcMsg
.
msgType
;
bool
isRequest
=
msgType
&
1U
;
dTrace
(
"msg:%p, get from mnode queue
, type:%s"
,
pMsg
,
TMSG_INFO
(
msgType
)
);
switch
(
msgType
)
{
case
TDMT_DND_ALTER_MNODE
:
code
=
mmProcessAlterReq
(
pMgmt
,
pMsg
);
break
;
case
TDMT_MON_MM_INFO
:
code
=
mmProcessGetMon
MmInfoReq
(
pMgmt
->
pWrapper
,
pMsg
);
code
=
mmProcessGetMon
itorInfoReq
(
pMgmt
,
pMsg
);
break
;
case
TDMT_MON_MM_LOAD
:
code
=
mmProcessGet
MnodeLoadsReq
(
pMgmt
->
pWrapper
,
pMsg
);
code
=
mmProcessGet
LoadsReq
(
pMgmt
,
pMsg
);
break
;
default:
pMsg
->
pNode
=
pMgmt
->
pMnode
;
code
=
mndProcessMsg
(
pMsg
);
}
if
(
msgType
&
1U
)
{
if
(
isRequest
)
{
if
(
pMsg
->
rpcMsg
.
handle
!=
NULL
&&
code
!=
TSDB_CODE_MND_ACTION_IN_PROGRESS
)
{
if
(
code
!=
0
&&
terrno
!=
0
)
code
=
terrno
;
mmSendRsp
(
pMsg
,
code
);
...
...
@@ -64,62 +64,46 @@ static void mmProcessQueue(SQueueInfo *pInfo, SNodeMsg *pMsg) {
static
void
mmProcessQueryQueue
(
SQueueInfo
*
pInfo
,
SNodeMsg
*
pMsg
)
{
SMnodeMgmt
*
pMgmt
=
pInfo
->
ahandle
;
int32_t
code
=
-
1
;
tmsg_t
msgType
=
pMsg
->
rpcMsg
.
msgType
;
bool
isRequest
=
msgType
&
1U
;
dTrace
(
"msg:%p, get from mnode-query queue"
,
pMsg
);
SRpcMsg
*
pRpc
=
&
pMsg
->
rpcMsg
;
int32_t
code
=
-
1
;
pMsg
->
pNode
=
pMgmt
->
pMnode
;
code
=
mndProcessMsg
(
pMsg
);
if
(
pRpc
->
msgType
&
1U
)
{
if
(
p
Rpc
->
handle
!=
NULL
&&
code
!=
0
)
{
dError
(
"msg:%p, failed to process since %s"
,
pMsg
,
terrstr
())
;
if
(
isRequest
)
{
if
(
p
Msg
->
rpcMsg
.
handle
!=
NULL
&&
code
!=
0
)
{
if
(
code
!=
0
&&
terrno
!=
0
)
code
=
terrno
;
mmSendRsp
(
pMsg
,
code
);
}
}
dTrace
(
"msg:%p, is freed, result:0x%04x:%s"
,
pMsg
,
code
&
0XFFFF
,
tstrerror
(
code
));
rpcFreeCont
(
p
Rpc
->
pCont
);
rpcFreeCont
(
p
Msg
->
rpcMsg
.
pCont
);
taosFreeQitem
(
pMsg
);
}
static
void
mmPutNodeMsgToWorker
(
SSingleWorker
*
pWorker
,
SNodeMsg
*
pMsg
)
{
dTrace
(
"msg:%p, put into worker %s
"
,
pMsg
,
pWorker
->
name
);
static
int32_t
mmPutNodeMsgToWorker
(
SSingleWorker
*
pWorker
,
SNodeMsg
*
pMsg
)
{
dTrace
(
"msg:%p, put into worker %s
, type:%s"
,
pMsg
,
pWorker
->
name
,
TMSG_INFO
(
pMsg
->
rpcMsg
.
msgType
)
);
taosWriteQitem
(
pWorker
->
queue
,
pMsg
);
}
int32_t
mmProcessWriteMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
mmPutNodeMsgToWorker
(
&
pMgmt
->
writeWorker
,
pMsg
);
return
0
;
}
int32_t
mmProcessSyncMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
mmPutNodeMsgToWorker
(
&
pMgmt
->
syncWorker
,
pMsg
);
return
0
;
}
int32_t
mmPutNodeMsgToWriteQueue
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
return
mmPutNodeMsgToWorker
(
&
pMgmt
->
writeWorker
,
pMsg
);
}
int32_t
mmProcessReadMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
mmPutNodeMsgToWorker
(
&
pMgmt
->
readWorker
,
pMsg
);
return
0
;
}
int32_t
mmPutNodeMsgToSyncQueue
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
return
mmPutNodeMsgToWorker
(
&
pMgmt
->
syncWorker
,
pMsg
);
}
int32_t
mmProcessQueryMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
mmPutNodeMsgToWorker
(
&
pMgmt
->
queryWorker
,
pMsg
);
return
0
;
int32_t
mmPutNodeMsgToReadQueue
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
return
mmPutNodeMsgToWorker
(
&
pMgmt
->
readWorker
,
pMsg
);
}
int32_t
mmPutNodeMsgToQueryQueue
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
return
mmPutNodeMsgToWorker
(
&
pMgmt
->
queryWorker
,
pMsg
);
}
int32_t
mmProcessMonitorMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
mmPutNodeMsgToWorker
(
&
pMgmt
->
monitorWorker
,
pMsg
);
return
0
;
int32_t
mmPutNodeMsgToMonitorQueue
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
return
mmPutNodeMsgToWorker
(
&
pMgmt
->
monitorWorker
,
pMsg
);
}
static
int32_t
mmPutRpcMsgToWorker
(
SSingleWorker
*
pWorker
,
SRpcMsg
*
pRpc
)
{
static
in
line
in
t32_t
mmPutRpcMsgToWorker
(
SSingleWorker
*
pWorker
,
SRpcMsg
*
pRpc
)
{
SNodeMsg
*
pMsg
=
taosAllocateQitem
(
sizeof
(
SNodeMsg
));
if
(
pMsg
==
NULL
)
return
-
1
;
...
...
@@ -129,25 +113,19 @@ static int32_t mmPutRpcMsgToWorker(SSingleWorker *pWorker, SRpcMsg *pRpc) {
return
0
;
}
int32_t
mmPutMsgToQueryQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
)
{
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
mmPutRpcMsgToQueryQueue
(
SMnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
)
{
return
mmPutRpcMsgToWorker
(
&
pMgmt
->
queryWorker
,
pRpc
);
}
int32_t
mmPutMsgToWriteQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
)
{
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
mmPutRpcMsgToWriteQueue
(
SMnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
)
{
return
mmPutRpcMsgToWorker
(
&
pMgmt
->
writeWorker
,
pRpc
);
}
int32_t
mmPutMsgToReadQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
)
{
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
mmPutRpcMsgToReadQueue
(
SMnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
)
{
return
mmPutRpcMsgToWorker
(
&
pMgmt
->
readWorker
,
pRpc
);
}
int32_t
mmPutMsgToSyncQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
)
{
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
return
mmPutRpcMsgToWorker
(
&
pMgmt
->
syncWorker
,
pRpc
);
}
int32_t
mmPutMsgToSyncQueue
(
SMnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
)
{
return
mmPutRpcMsgToWorker
(
&
pMgmt
->
syncWorker
,
pRpc
);
}
int32_t
mmStartWorker
(
SMnodeMgmt
*
pMgmt
)
{
SSingleWorkerCfg
qCfg
=
{
...
...
@@ -198,18 +176,16 @@ int32_t mmStartWorker(SMnodeMgmt *pMgmt) {
return
-
1
;
}
if
(
tsMultiProcess
)
{
SSingleWorkerCfg
mCfg
=
{
.
min
=
1
,
.
max
=
1
,
.
name
=
"mnode-monitor"
,
.
fp
=
(
FItem
)
mmProcessQueue
,
.
param
=
pMgmt
,
};
if
(
tSingleWorkerInit
(
&
pMgmt
->
monitorWorker
,
&
mCfg
)
!=
0
)
{
dError
(
"failed to start mnode mnode-monitor worker since %s"
,
terrstr
());
return
-
1
;
}
SSingleWorkerCfg
mCfg
=
{
.
min
=
1
,
.
max
=
1
,
.
name
=
"mnode-monitor"
,
.
fp
=
(
FItem
)
mmProcessQueue
,
.
param
=
pMgmt
,
};
if
(
tSingleWorkerInit
(
&
pMgmt
->
monitorWorker
,
&
mCfg
)
!=
0
)
{
dError
(
"failed to start mnode mnode-monitor worker since %s"
,
terrstr
());
return
-
1
;
}
dDebug
(
"mnode workers are initialized"
);
...
...
source/dnode/mgmt/mgmt_qnode/CMakeLists.txt
浏览文件 @
8e5b263d
...
...
@@ -5,5 +5,5 @@ target_include_directories(
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
)
target_link_libraries
(
mgmt_qnode
dnode_interface
mgmt_qnode
node_util
)
\ No newline at end of file
source/dnode/mgmt/mgmt_qnode/inc/qmInt.h
浏览文件 @
8e5b263d
...
...
@@ -16,7 +16,7 @@
#ifndef _TD_DND_QNODE_INT_H_
#define _TD_DND_QNODE_INT_H_
#include "dm
Int
.h"
#include "dm
Util
.h"
#include "qnode.h"
...
...
@@ -26,30 +26,31 @@ extern "C" {
typedef
struct
SQnodeMgmt
{
SQnode
*
pQnode
;
SDnode
*
pDnode
;
SMgmtWrapper
*
pWrapper
;
SMsgCb
msgCb
;
const
char
*
path
;
const
char
*
name
;
int32_t
dnodeId
;
SSingleWorker
queryWorker
;
SSingleWorker
fetchWorker
;
SSingleWorker
monitorWorker
;
}
SQnodeMgmt
;
// qmHandle.c
void
qmInitMsgHandle
(
SMgmtWrapper
*
pWrapper
);
int32_t
qmProcessCreateReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
qmProcessDropReq
(
S
MgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
qmProcessGetMon
QmInfoReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pReq
);
SArray
*
qmGetMsgHandles
(
);
int32_t
qmProcessCreateReq
(
const
SMgmtInputOpt
*
pInput
,
SNodeMsg
*
pMsg
);
int32_t
qmProcessDropReq
(
S
QnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
qmProcessGetMon
itorInfoReq
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
// qmWorker.c
int32_t
qmPut
MsgToQueryQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pMsg
);
int32_t
qmPut
MsgToFetchQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pMsg
);
int32_t
qmGetQueueSize
(
S
MgmtWrapper
*
pWrapper
,
int32_t
vgId
,
EQueueType
qtype
);
int32_t
qmPut
RpcMsgToQueryQueue
(
SQnodeMgmt
*
pMgmt
,
SRpcMsg
*
pMsg
);
int32_t
qmPut
RpcMsgToFetchQueue
(
SQnodeMgmt
*
pMgmt
,
SRpcMsg
*
pMsg
);
int32_t
qmGetQueueSize
(
S
QnodeMgmt
*
pMgmt
,
int32_t
vgId
,
EQueueType
qtype
);
int32_t
qmStartWorker
(
SQnodeMgmt
*
pMgmt
);
void
qmStopWorker
(
SQnodeMgmt
*
pMgmt
);
int32_t
qmP
rocessQueryMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
qmP
rocessFetchMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
qmP
rocessMonitorMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
qmP
utNodeMsgToQueryQueue
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
qmP
utNodeMsgToFetchQueue
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
qmP
utNodeMsgToMonitorQueue
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
#ifdef __cplusplus
}
...
...
source/dnode/mgmt/mgmt_qnode/src/qmHandle.c
浏览文件 @
8e5b263d
...
...
@@ -16,12 +16,12 @@
#define _DEFAULT_SOURCE
#include "qmInt.h"
void
qmGetMonitorInfo
(
SMgmtWrapper
*
pWrapper
,
SMonQmInfo
*
qmInfo
)
{}
static
void
qmGetMonitorInfo
(
SQnodeMgmt
*
pMgmt
,
SMonQmInfo
*
qmInfo
)
{}
int32_t
qmProcessGetMon
QmInfoReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pReq
)
{
int32_t
qmProcessGetMon
itorInfoReq
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pReq
)
{
SMonQmInfo
qmInfo
=
{
0
};
qmGetMonitorInfo
(
p
Wrapper
,
&
qmInfo
);
dmGetMonitorSysInfo
(
&
qmInfo
.
sys
);
qmGetMonitorInfo
(
p
Mgmt
,
&
qmInfo
);
dmGetMonitorSys
tem
Info
(
&
qmInfo
.
sys
);
monGetLogs
(
&
qmInfo
.
log
);
int32_t
rspLen
=
tSerializeSMonQmInfo
(
NULL
,
0
,
&
qmInfo
);
...
...
@@ -43,8 +43,7 @@ int32_t qmProcessGetMonQmInfoReq(SMgmtWrapper *pWrapper, SNodeMsg *pReq) {
return
0
;
}
int32_t
qmProcessCreateReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
int32_t
qmProcessCreateReq
(
const
SMgmtInputOpt
*
pInput
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SDCreateQnodeReq
createReq
=
{
0
};
...
...
@@ -53,14 +52,14 @@ int32_t qmProcessCreateReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
-
1
;
}
if
(
createReq
.
dnodeId
!=
pDnode
->
data
.
dnodeId
)
{
if
(
pInput
->
dnodeId
!=
0
&&
createReq
.
dnodeId
!=
pInput
->
dnodeId
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to create qnode since %s"
,
terrstr
());
return
-
1
;
}
bool
deployed
=
true
;
if
(
dmWriteFile
(
p
Wrapper
,
deployed
)
!=
0
)
{
if
(
dmWriteFile
(
p
Input
->
path
,
pInput
->
name
,
deployed
)
!=
0
)
{
dError
(
"failed to write qnode file since %s"
,
terrstr
());
return
-
1
;
}
...
...
@@ -68,8 +67,7 @@ int32_t qmProcessCreateReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
0
;
}
int32_t
qmProcessDropReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
int32_t
qmProcessDropReq
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SDDropQnodeReq
dropReq
=
{
0
};
...
...
@@ -78,14 +76,14 @@ int32_t qmProcessDropReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
-
1
;
}
if
(
dropReq
.
dnodeId
!=
pDnode
->
data
.
dnodeId
)
{
if
(
pMgmt
->
dnodeId
!=
0
&&
dropReq
.
dnodeId
!=
pMgmt
->
dnodeId
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to drop qnode since %s"
,
terrstr
());
return
-
1
;
}
bool
deployed
=
false
;
if
(
dmWriteFile
(
p
Wrapper
,
deployed
)
!=
0
)
{
if
(
dmWriteFile
(
p
Mgmt
->
path
,
pMgmt
->
name
,
deployed
)
!=
0
)
{
dError
(
"failed to write qnode file since %s"
,
terrstr
());
return
-
1
;
}
...
...
@@ -93,18 +91,31 @@ int32_t qmProcessDropReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
0
;
}
void
qmInitMsgHandle
(
SMgmtWrapper
*
pWrapper
)
{
dmSetMsgHandle
(
pWrapper
,
TDMT_MON_QM_INFO
,
qmProcessMonitorMsg
,
DEFAULT_HANDLE
);
SArray
*
qmGetMsgHandles
()
{
int32_t
code
=
-
1
;
SArray
*
pArray
=
taosArrayInit
(
16
,
sizeof
(
SMgmtHandle
));
if
(
pArray
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MON_QM_INFO
,
qmPutNodeMsgToMonitorQueue
,
0
)
==
NULL
)
goto
_OVER
;
// Requests handled by VNODE
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY
,
qmProcessQueryMsg
,
QNODE_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY_CONTINUE
,
qmProcessQueryMsg
,
QNODE_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_FETCH
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_FETCH_RSP
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY_HEARTBEAT
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_RES_READY
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_TASKS_STATUS
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_CANCEL_TASK
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_DROP_TASK
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_QUERY
,
qmPutNodeMsgToQueryQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_QUERY_CONTINUE
,
qmPutNodeMsgToQueryQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_FETCH
,
qmPutNodeMsgToFetchQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_FETCH_RSP
,
qmPutNodeMsgToFetchQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_QUERY_HEARTBEAT
,
qmPutNodeMsgToFetchQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_RES_READY
,
qmPutNodeMsgToFetchQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_TASKS_STATUS
,
qmPutNodeMsgToFetchQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_CANCEL_TASK
,
qmPutNodeMsgToFetchQueue
,
1
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_DROP_TASK
,
qmPutNodeMsgToFetchQueue
,
1
)
==
NULL
)
goto
_OVER
;
code
=
0
;
_OVER:
if
(
code
!=
0
)
{
taosArrayDestroy
(
pArray
);
return
NULL
;
}
else
{
return
pArray
;
}
}
source/dnode/mgmt/mgmt_qnode/src/qmInt.c
浏览文件 @
8e5b263d
...
...
@@ -16,21 +16,13 @@
#define _DEFAULT_SOURCE
#include "qmInt.h"
static
int32_t
qmRequire
(
SMgmtWrapper
*
pWrapper
,
bool
*
required
)
{
return
dmReadFile
(
pWrapper
,
required
);
}
static
void
qmInitOption
(
SQnodeMgmt
*
pMgmt
,
SQnodeOpt
*
pOption
)
{
SMsgCb
msgCb
=
pMgmt
->
pDnode
->
data
.
msgCb
;
msgCb
.
pWrapper
=
pMgmt
->
pWrapper
;
msgCb
.
queueFps
[
QUERY_QUEUE
]
=
qmPutMsgToQueryQueue
;
msgCb
.
queueFps
[
FETCH_QUEUE
]
=
qmPutMsgToFetchQueue
;
msgCb
.
qsizeFp
=
qmGetQueueSize
;
pOption
->
msgCb
=
msgCb
;
static
int32_t
qmRequire
(
const
SMgmtInputOpt
*
pInput
,
bool
*
required
)
{
return
dmReadFile
(
pInput
->
path
,
pInput
->
name
,
required
);
}
static
void
qmClose
(
SMgmtWrapper
*
pWrapper
)
{
SQnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
if
(
pMgmt
==
NULL
)
return
;
static
void
qmInitOption
(
SQnodeMgmt
*
pMgmt
,
SQnodeOpt
*
pOption
)
{
pOption
->
msgCb
=
pMgmt
->
msgCb
;
}
static
void
qmClose
(
SQnodeMgmt
*
pMgmt
)
{
dInfo
(
"qnode-mgmt start to cleanup"
);
if
(
pMgmt
->
pQnode
!=
NULL
)
{
qmStopWorker
(
pMgmt
);
...
...
@@ -38,12 +30,11 @@ static void qmClose(SMgmtWrapper *pWrapper) {
pMgmt
->
pQnode
=
NULL
;
}
pWrapper
->
pMgmt
=
NULL
;
taosMemoryFree
(
pMgmt
);
dInfo
(
"qnode-mgmt is cleaned up"
);
}
static
int32_t
qmOpen
(
SMgmtWrapper
*
pWrapper
)
{
static
int32_t
qmOpen
(
const
SMgmtInputOpt
*
pInput
,
SMgmtOutputOpt
*
pOutput
)
{
dInfo
(
"qnode-mgmt start to init"
);
SQnodeMgmt
*
pMgmt
=
taosMemoryCalloc
(
1
,
sizeof
(
SQnodeMgmt
));
if
(
pMgmt
==
NULL
)
{
...
...
@@ -51,41 +42,51 @@ static int32_t qmOpen(SMgmtWrapper *pWrapper) {
return
-
1
;
}
pMgmt
->
path
=
pWrapper
->
path
;
pMgmt
->
pDnode
=
pWrapper
->
pDnode
;
pMgmt
->
pWrapper
=
pWrapper
;
pWrapper
->
pMgmt
=
pMgmt
;
pMgmt
->
path
=
pInput
->
path
;
pMgmt
->
name
=
pInput
->
name
;
pMgmt
->
dnodeId
=
pInput
->
dnodeId
;
pMgmt
->
msgCb
=
pInput
->
msgCb
;
pMgmt
->
msgCb
.
queueFps
[
QUERY_QUEUE
]
=
(
PutToQueueFp
)
qmPutRpcMsgToQueryQueue
;
pMgmt
->
msgCb
.
queueFps
[
FETCH_QUEUE
]
=
(
PutToQueueFp
)
qmPutRpcMsgToFetchQueue
;
pMgmt
->
msgCb
.
qsizeFp
=
(
GetQueueSizeFp
)
qmGetQueueSize
;
pMgmt
->
msgCb
.
pMgmt
=
pMgmt
;
SQnodeOpt
option
=
{
0
};
qmInitOption
(
pMgmt
,
&
option
);
pMgmt
->
pQnode
=
qndOpen
(
&
option
);
if
(
pMgmt
->
pQnode
==
NULL
)
{
dError
(
"failed to open qnode since %s"
,
terrstr
());
qmClose
(
pWrapper
);
qmClose
(
pMgmt
);
return
-
1
;
}
tmsgReportStartup
(
"qnode-impl"
,
"initialized"
);
if
(
udfcOpen
()
!=
0
)
{
dError
(
"qnode can not open udfc"
);
qmClose
(
pMgmt
);
return
-
1
;
}
dmReportStartup
(
pWrapper
->
pDnode
,
"qnode-impl"
,
"initialized"
);
if
(
qmStartWorker
(
pMgmt
)
!=
0
)
{
dError
(
"failed to start qnode worker since %s"
,
terrstr
());
qmClose
(
p
Wrapper
);
qmClose
(
p
Mgmt
);
return
-
1
;
}
dmReportStartup
(
pWrapper
->
pDnode
,
"qnode-worker"
,
"initialized"
);
tmsgReportStartup
(
"qnode-worker"
,
"initialized"
);
pOutput
->
pMgmt
=
pMgmt
;
dInfo
(
"qnode-mgmt is initialized"
);
return
0
;
}
void
qmSetMgmtFp
(
SMgmtWrapper
*
pWrapper
)
{
SMgmtFp
mgmtFp
=
{
0
};
mgmtFp
.
openFp
=
qmOpen
;
mgmtFp
.
closeFp
=
qmClose
;
mgmtFp
.
createFp
=
qmProcessCreateReq
;
mgmtFp
.
dropFp
=
qmProcessDropReq
;
mgmtFp
.
requiredFp
=
qmRequire
;
SMgmtFunc
qmGetMgmtFunc
()
{
SMgmtFunc
mgmtFunc
=
{
0
};
mgmtFunc
.
openFp
=
qmOpen
;
mgmtFunc
.
closeFp
=
(
NodeCloseFp
)
qmClose
;
mgmtFunc
.
createFp
=
(
NodeCreateFp
)
qmProcessCreateReq
;
mgmtFunc
.
dropFp
=
(
NodeDropFp
)
qmProcessDropReq
;
mgmtFunc
.
requiredFp
=
qmRequire
;
mgmtFunc
.
getHandlesFp
=
qmGetMsgHandles
;
qmInitMsgHandle
(
pWrapper
);
pWrapper
->
name
=
"qnode"
;
pWrapper
->
fp
=
mgmtFp
;
return
mgmtFunc
;
}
source/dnode/mgmt/mgmt_qnode/src/qmWorker.c
浏览文件 @
8e5b263d
...
...
@@ -36,7 +36,7 @@ static void qmProcessMonitorQueue(SQueueInfo *pInfo, SNodeMsg *pMsg) {
int32_t
code
=
-
1
;
if
(
pMsg
->
rpcMsg
.
msgType
==
TDMT_MON_QM_INFO
)
{
code
=
qmProcessGetMon
QmInfoReq
(
pMgmt
->
pWrapper
,
pMsg
);
code
=
qmProcessGetMon
itorInfoReq
(
pMgmt
,
pMsg
);
}
else
{
terrno
=
TSDB_CODE_MSG_NOT_PROCESSED
;
}
...
...
@@ -83,27 +83,22 @@ static void qmProcessFetchQueue(SQueueInfo *pInfo, SNodeMsg *pMsg) {
taosFreeQitem
(
pMsg
);
}
static
void
qmPut
MsgToWorker
(
SSingleWorker
*
pWorker
,
SNodeMsg
*
pMsg
)
{
static
int32_t
qmPutNode
MsgToWorker
(
SSingleWorker
*
pWorker
,
SNodeMsg
*
pMsg
)
{
dTrace
(
"msg:%p, put into worker %s"
,
pMsg
,
pWorker
->
name
);
taosWriteQitem
(
pWorker
->
queue
,
pMsg
);
return
0
;
}
int32_t
qmProcessQueryMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SQnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
qmPutMsgToWorker
(
&
pMgmt
->
queryWorker
,
pMsg
);
return
0
;
int32_t
qmPutNodeMsgToQueryQueue
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
return
qmPutNodeMsgToWorker
(
&
pMgmt
->
queryWorker
,
pMsg
);
}
int32_t
qmProcessFetchMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SQnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
qmPutMsgToWorker
(
&
pMgmt
->
fetchWorker
,
pMsg
);
return
0
;
int32_t
qmPutNodeMsgToFetchQueue
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
return
qmPutNodeMsgToWorker
(
&
pMgmt
->
fetchWorker
,
pMsg
);
}
int32_t
qmProcessMonitorMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SQnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
qmPutMsgToWorker
(
&
pMgmt
->
monitorWorker
,
pMsg
);
return
0
;
int32_t
qmPutNodeMsgToMonitorQueue
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
return
qmPutNodeMsgToWorker
(
&
pMgmt
->
monitorWorker
,
pMsg
);
}
static
int32_t
qmPutRpcMsgToWorker
(
SQnodeMgmt
*
pMgmt
,
SSingleWorker
*
pWorker
,
SRpcMsg
*
pRpc
)
{
...
...
@@ -118,19 +113,16 @@ static int32_t qmPutRpcMsgToWorker(SQnodeMgmt *pMgmt, SSingleWorker *pWorker, SR
return
0
;
}
int32_t
qmPutMsgToQueryQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
)
{
SQnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
qmPutRpcMsgToQueryQueue
(
SQnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
)
{
return
qmPutRpcMsgToWorker
(
pMgmt
,
&
pMgmt
->
queryWorker
,
pRpc
);
}
int32_t
qmPutMsgToFetchQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
)
{
SQnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
qmPutRpcMsgToFetchQueue
(
SQnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
)
{
return
qmPutRpcMsgToWorker
(
pMgmt
,
&
pMgmt
->
fetchWorker
,
pRpc
);
}
int32_t
qmGetQueueSize
(
SMgmtWrapper
*
pWrapper
,
int32_t
vgId
,
EQueueType
qtype
)
{
int32_t
size
=
-
1
;
SQnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
qmGetQueueSize
(
SQnodeMgmt
*
pMgmt
,
int32_t
vgId
,
EQueueType
qtype
)
{
int32_t
size
=
-
1
;
switch
(
qtype
)
{
case
QUERY_QUEUE
:
...
...
@@ -173,18 +165,16 @@ int32_t qmStartWorker(SQnodeMgmt *pMgmt) {
return
-
1
;
}
if
(
tsMultiProcess
)
{
SSingleWorkerCfg
mCfg
=
{
.
min
=
1
,
.
max
=
1
,
.
name
=
"qnode-monitor"
,
.
fp
=
(
FItem
)
qmProcessMonitorQueue
,
.
param
=
pMgmt
,
};
if
(
tSingleWorkerInit
(
&
pMgmt
->
monitorWorker
,
&
mCfg
)
!=
0
)
{
dError
(
"failed to start qnode-monitor worker since %s"
,
terrstr
());
return
-
1
;
}
SSingleWorkerCfg
mCfg
=
{
.
min
=
1
,
.
max
=
1
,
.
name
=
"qnode-monitor"
,
.
fp
=
(
FItem
)
qmProcessMonitorQueue
,
.
param
=
pMgmt
,
};
if
(
tSingleWorkerInit
(
&
pMgmt
->
monitorWorker
,
&
mCfg
)
!=
0
)
{
dError
(
"failed to start qnode-monitor worker since %s"
,
terrstr
());
return
-
1
;
}
dDebug
(
"qnode workers are initialized"
);
...
...
source/dnode/mgmt/mgmt_snode/CMakeLists.txt
浏览文件 @
8e5b263d
...
...
@@ -5,5 +5,5 @@ target_include_directories(
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
)
target_link_libraries
(
mgmt_snode
dnode_interface
mgmt_snode
node_util
)
\ No newline at end of file
source/dnode/mgmt/mgmt_snode/inc/smInt.h
浏览文件 @
8e5b263d
...
...
@@ -16,7 +16,7 @@
#ifndef _TD_DND_SNODE_INT_H_
#define _TD_DND_SNODE_INT_H_
#include "dm
Int
.h"
#include "dm
Util
.h"
#include "snode.h"
...
...
@@ -26,9 +26,10 @@ extern "C" {
typedef
struct
SSnodeMgmt
{
SSnode
*
pSnode
;
SDnode
*
pDnode
;
SMgmtWrapper
*
pWrapper
;
SMsgCb
msgCb
;
const
char
*
path
;
const
char
*
name
;
int32_t
dnodeId
;
SRWLatch
latch
;
int8_t
uniqueWorkerInUse
;
SArray
*
uniqueWorkers
;
// SArray<SMultiWorker*>
...
...
@@ -37,19 +38,19 @@ typedef struct SSnodeMgmt {
}
SSnodeMgmt
;
// smHandle.c
void
smInitMsgHandle
(
SMgmtWrapper
*
pWrapper
);
int32_t
smProcessCreateReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
smProcessDropReq
(
S
MgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
smProcessGetMon
SmInfoReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pReq
);
SArray
*
smGetMsgHandles
(
);
int32_t
smProcessCreateReq
(
const
SMgmtInputOpt
*
pInput
,
SNodeMsg
*
pMsg
);
int32_t
smProcessDropReq
(
S
SnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
smProcessGetMon
itorInfoReq
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
// smWorker.c
int32_t
smStartWorker
(
SSnodeMgmt
*
pMgmt
);
void
smStopWorker
(
SSnodeMgmt
*
pMgmt
);
int32_t
smP
rocessMgmtMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
smP
rocessUniqueMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
smP
rocessSharedMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
smP
rocessExecMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
smP
rocessMonitorMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
smP
utNodeMsgToMgmtQueue
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
smP
utNodeMsgToUniqueQueue
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
smP
utNodeMsgToSharedQueue
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
smP
utNodeMsgToExecQueue
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
smP
utNodeMsgToMonitorQueue
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
#ifdef __cplusplus
}
...
...
source/dnode/mgmt/mgmt_snode/src/smHandle.c
浏览文件 @
8e5b263d
...
...
@@ -16,12 +16,12 @@
#define _DEFAULT_SOURCE
#include "smInt.h"
void
smGetMonitorInfo
(
SMgmtWrapper
*
pWrapper
,
SMonSmInfo
*
smInfo
)
{}
static
void
smGetMonitorInfo
(
SSnodeMgmt
*
pMgmt
,
SMonSmInfo
*
smInfo
)
{}
int32_t
smProcessGetMon
SmInfoReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pReq
)
{
int32_t
smProcessGetMon
itorInfoReq
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pReq
)
{
SMonSmInfo
smInfo
=
{
0
};
smGetMonitorInfo
(
p
Wrapper
,
&
smInfo
);
dmGetMonitorSysInfo
(
&
smInfo
.
sys
);
smGetMonitorInfo
(
p
Mgmt
,
&
smInfo
);
dmGetMonitorSys
tem
Info
(
&
smInfo
.
sys
);
monGetLogs
(
&
smInfo
.
log
);
int32_t
rspLen
=
tSerializeSMonSmInfo
(
NULL
,
0
,
&
smInfo
);
...
...
@@ -43,8 +43,7 @@ int32_t smProcessGetMonSmInfoReq(SMgmtWrapper *pWrapper, SNodeMsg *pReq) {
return
0
;
}
int32_t
smProcessCreateReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
int32_t
smProcessCreateReq
(
const
SMgmtInputOpt
*
pInput
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SDCreateSnodeReq
createReq
=
{
0
};
...
...
@@ -53,14 +52,14 @@ int32_t smProcessCreateReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
-
1
;
}
if
(
createReq
.
dnodeId
!=
pDnode
->
data
.
dnodeId
)
{
if
(
pInput
->
dnodeId
!=
0
&&
createReq
.
dnodeId
!=
pInput
->
dnodeId
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to create snode since %s"
,
terrstr
());
return
-
1
;
}
bool
deployed
=
true
;
if
(
dmWriteFile
(
p
Wrapper
,
deployed
)
!=
0
)
{
if
(
dmWriteFile
(
p
Input
->
path
,
pInput
->
name
,
deployed
)
!=
0
)
{
dError
(
"failed to write snode file since %s"
,
terrstr
());
return
-
1
;
}
...
...
@@ -68,8 +67,7 @@ int32_t smProcessCreateReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
0
;
}
int32_t
smProcessDropReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
int32_t
smProcessDropReq
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SDDropSnodeReq
dropReq
=
{
0
};
...
...
@@ -78,14 +76,14 @@ int32_t smProcessDropReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
-
1
;
}
if
(
dropReq
.
dnodeId
!=
pDnode
->
data
.
dnodeId
)
{
if
(
pMgmt
->
dnodeId
!=
0
&&
dropReq
.
dnodeId
!=
pMgmt
->
dnodeId
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to drop snode since %s"
,
terrstr
());
return
-
1
;
}
bool
deployed
=
false
;
if
(
dmWriteFile
(
p
Wrapper
,
deployed
)
!=
0
)
{
if
(
dmWriteFile
(
p
Mgmt
->
path
,
pMgmt
->
name
,
deployed
)
!=
0
)
{
dError
(
"failed to write snode file since %s"
,
terrstr
());
return
-
1
;
}
...
...
@@ -93,10 +91,23 @@ int32_t smProcessDropReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
0
;
}
void
smInitMsgHandle
(
SMgmtWrapper
*
pWrapper
)
{
dmSetMsgHandle
(
pWrapper
,
TDMT_MON_SM_INFO
,
smProcessMonitorMsg
,
DEFAULT_HANDLE
);
SArray
*
smGetMsgHandles
()
{
int32_t
code
=
-
1
;
SArray
*
pArray
=
taosArrayInit
(
4
,
sizeof
(
SMgmtHandle
));
if
(
pArray
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MON_SM_INFO
,
smPutNodeMsgToMonitorQueue
,
0
)
==
NULL
)
goto
_OVER
;
// Requests handled by SNODE
dmSetMsgHandle
(
pWrapper
,
TDMT_SND_TASK_DEPLOY
,
smProcessMgmtMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_SND_TASK_EXEC
,
smProcessExecMsg
,
DEFAULT_HANDLE
);
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_SND_TASK_DEPLOY
,
smPutNodeMsgToMgmtQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_SND_TASK_EXEC
,
smPutNodeMsgToExecQueue
,
0
)
==
NULL
)
goto
_OVER
;
code
=
0
;
_OVER:
if
(
code
!=
0
)
{
taosArrayDestroy
(
pArray
);
return
NULL
;
}
else
{
return
pArray
;
}
}
source/dnode/mgmt/mgmt_snode/src/smInt.c
浏览文件 @
8e5b263d
...
...
@@ -17,34 +17,25 @@
#include "smInt.h"
#include "libs/function/function.h"
static
int32_t
smRequire
(
SMgmtWrapper
*
pWrapper
,
bool
*
required
)
{
return
dmReadFile
(
pWrapper
,
required
);
}
static
void
smInitOption
(
SSnodeMgmt
*
pMgmt
,
SSnodeOpt
*
pOption
)
{
SMsgCb
msgCb
=
pMgmt
->
pDnode
->
data
.
msgCb
;
msgCb
.
pWrapper
=
pMgmt
->
pWrapper
;
pOption
->
msgCb
=
msgCb
;
static
int32_t
smRequire
(
const
SMgmtInputOpt
*
pInput
,
bool
*
required
)
{
return
dmReadFile
(
pInput
->
path
,
pInput
->
name
,
required
);
}
static
void
smClose
(
SMgmtWrapper
*
pWrapper
)
{
SSnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
if
(
pMgmt
==
NULL
)
return
;
static
void
smInitOption
(
SSnodeMgmt
*
pMgmt
,
SSnodeOpt
*
pOption
)
{
pOption
->
msgCb
=
pMgmt
->
msgCb
;
}
static
void
smClose
(
SSnodeMgmt
*
pMgmt
)
{
dInfo
(
"snode-mgmt start to cleanup"
);
udfcClose
();
if
(
pMgmt
->
pSnode
!=
NULL
)
{
smStopWorker
(
pMgmt
);
sndClose
(
pMgmt
->
pSnode
);
pMgmt
->
pSnode
=
NULL
;
}
pWrapper
->
pMgmt
=
NULL
;
taosMemoryFree
(
pMgmt
);
dInfo
(
"snode-mgmt is cleaned up"
);
}
int32_t
smOpen
(
SMgmtWrapper
*
pWrapper
)
{
int32_t
smOpen
(
const
SMgmtInputOpt
*
pInput
,
SMgmtOutputOpt
*
pOutput
)
{
dInfo
(
"snode-mgmt start to init"
);
SSnodeMgmt
*
pMgmt
=
taosMemoryCalloc
(
1
,
sizeof
(
SSnodeMgmt
));
if
(
pMgmt
==
NULL
)
{
...
...
@@ -52,42 +43,47 @@ int32_t smOpen(SMgmtWrapper *pWrapper) {
return
-
1
;
}
pMgmt
->
path
=
pWrapper
->
path
;
pMgmt
->
pDnode
=
pWrapper
->
pDnode
;
pMgmt
->
pWrapper
=
pWrapper
;
pWrapper
->
pMgmt
=
pMgmt
;
pMgmt
->
path
=
pInput
->
path
;
pMgmt
->
name
=
pInput
->
name
;
pMgmt
->
dnodeId
=
pInput
->
dnodeId
;
pMgmt
->
msgCb
=
pInput
->
msgCb
;
pMgmt
->
msgCb
.
pMgmt
=
pMgmt
;
SSnodeOpt
option
=
{
0
};
smInitOption
(
pMgmt
,
&
option
);
pMgmt
->
pSnode
=
sndOpen
(
pMgmt
->
path
,
&
option
);
if
(
pMgmt
->
pSnode
==
NULL
)
{
dError
(
"failed to open snode since %s"
,
terrstr
());
smClose
(
pMgmt
);
return
-
1
;
}
dmReportStartup
(
pWrapper
->
pDnode
,
"snode-impl"
,
"initialized"
);
tmsgReportStartup
(
"snode-impl"
,
"initialized"
);
if
(
smStartWorker
(
pMgmt
)
!=
0
)
{
dError
(
"failed to start snode worker since %s"
,
terrstr
());
smClose
(
pMgmt
);
return
-
1
;
}
dmReportStartup
(
pWrapper
->
pDnode
,
"snode-worker"
,
"initialized"
);
tmsgReportStartup
(
"snode-worker"
,
"initialized"
);
if
(
udfcOpen
()
!=
0
)
{
dError
(
"failed to open udfc in snode"
);
smClose
(
pMgmt
);
return
-
1
;
}
pOutput
->
pMgmt
=
pMgmt
;
return
0
;
}
void
smSetMgmtFp
(
SMgmtWrapper
*
pWrapper
)
{
SMgmtFp
mgmtFp
=
{
0
};
mgmtFp
.
openFp
=
smOpen
;
mgmtFp
.
closeFp
=
smClose
;
mgmtFp
.
createFp
=
smProcessCreateReq
;
mgmtFp
.
dropFp
=
smProcessDropReq
;
mgmtFp
.
requiredFp
=
smRequire
;
SMgmtFunc
smGetMgmtFunc
()
{
SMgmtFunc
mgmtFunc
=
{
0
};
mgmtFunc
.
openFp
=
smOpen
;
mgmtFunc
.
closeFp
=
(
NodeCloseFp
)
smClose
;
mgmtFunc
.
createFp
=
(
NodeCreateFp
)
smProcessCreateReq
;
mgmtFunc
.
dropFp
=
(
NodeDropFp
)
smProcessDropReq
;
mgmtFunc
.
requiredFp
=
smRequire
;
mgmtFunc
.
getHandlesFp
=
smGetMsgHandles
;
smInitMsgHandle
(
pWrapper
);
pWrapper
->
name
=
"snode"
;
pWrapper
->
fp
=
mgmtFp
;
return
mgmtFunc
;
}
source/dnode/mgmt/mgmt_snode/src/smWorker.c
浏览文件 @
8e5b263d
...
...
@@ -36,7 +36,7 @@ static void smProcessMonitorQueue(SQueueInfo *pInfo, SNodeMsg *pMsg) {
int32_t
code
=
-
1
;
if
(
pMsg
->
rpcMsg
.
msgType
==
TDMT_MON_SM_INFO
)
{
code
=
smProcessGetMon
SmInfoReq
(
pMgmt
->
pWrapper
,
pMsg
);
code
=
smProcessGetMon
itorInfoReq
(
pMgmt
,
pMsg
);
}
else
{
terrno
=
TSDB_CODE_MSG_NOT_PROCESSED
;
}
...
...
@@ -121,18 +121,16 @@ int32_t smStartWorker(SSnodeMgmt *pMgmt) {
return
-
1
;
}
if
(
tsMultiProcess
)
{
SSingleWorkerCfg
mCfg
=
{
.
min
=
1
,
.
max
=
1
,
.
name
=
"snode-monitor"
,
.
fp
=
(
FItem
)
smProcessMonitorQueue
,
.
param
=
pMgmt
,
};
if
(
tSingleWorkerInit
(
&
pMgmt
->
monitorWorker
,
&
mCfg
)
!=
0
)
{
dError
(
"failed to start snode-monitor worker since %s"
,
terrstr
());
return
-
1
;
}
SSingleWorkerCfg
mCfg
=
{
.
min
=
1
,
.
max
=
1
,
.
name
=
"snode-monitor"
,
.
fp
=
(
FItem
)
smProcessMonitorQueue
,
.
param
=
pMgmt
,
};
if
(
tSingleWorkerInit
(
&
pMgmt
->
monitorWorker
,
&
mCfg
)
!=
0
)
{
dError
(
"failed to start snode-monitor worker since %s"
,
terrstr
());
return
-
1
;
}
dDebug
(
"snode workers are initialized"
);
...
...
@@ -163,8 +161,7 @@ static FORCE_INLINE int32_t smGetSWTypeFromMsg(SRpcMsg *pMsg) {
return
0
;
}
int32_t
smProcessMgmtMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SSnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
smPutNodeMsgToMgmtQueue
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SMultiWorker
*
pWorker
=
taosArrayGetP
(
pMgmt
->
uniqueWorkers
,
0
);
if
(
pWorker
==
NULL
)
{
terrno
=
TSDB_CODE_INVALID_MSG
;
...
...
@@ -176,8 +173,7 @@ int32_t smProcessMgmtMsg(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
0
;
}
int32_t
smProcessMonitorMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SSnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
smPutNodeMsgToMonitorQueue
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SSingleWorker
*
pWorker
=
&
pMgmt
->
monitorWorker
;
dTrace
(
"msg:%p, put into worker:%s"
,
pMsg
,
pWorker
->
name
);
...
...
@@ -185,8 +181,7 @@ int32_t smProcessMonitorMsg(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
0
;
}
int32_t
smProcessUniqueMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SSnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
smPutNodeMsgToUniqueQueue
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
int32_t
index
=
smGetSWIdFromMsg
(
&
pMsg
->
rpcMsg
);
SMultiWorker
*
pWorker
=
taosArrayGetP
(
pMgmt
->
uniqueWorkers
,
index
);
if
(
pWorker
==
NULL
)
{
...
...
@@ -199,8 +194,7 @@ int32_t smProcessUniqueMsg(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
0
;
}
int32_t
smProcessSharedMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SSnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
smPutNodeMsgToSharedQueue
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SSingleWorker
*
pWorker
=
&
pMgmt
->
sharedWorker
;
dTrace
(
"msg:%p, put into worker:%s"
,
pMsg
,
pWorker
->
name
);
...
...
@@ -208,11 +202,11 @@ int32_t smProcessSharedMsg(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
0
;
}
int32_t
smP
rocessExecMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
int32_t
smP
utNodeMsgToExecQueue
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
int32_t
workerType
=
smGetSWTypeFromMsg
(
&
pMsg
->
rpcMsg
);
if
(
workerType
==
SND_WORKER_TYPE__SHARED
)
{
return
smP
rocessSharedMsg
(
pWrapper
,
pMsg
);
return
smP
utNodeMsgToSharedQueue
(
pMgmt
,
pMsg
);
}
else
{
return
smP
rocessUniqueMsg
(
pWrapper
,
pMsg
);
return
smP
utNodeMsgToUniqueQueue
(
pMgmt
,
pMsg
);
}
}
source/dnode/mgmt/mgmt_vnode/CMakeLists.txt
浏览文件 @
8e5b263d
...
...
@@ -5,5 +5,5 @@ target_include_directories(
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
)
target_link_libraries
(
mgmt_vnode
dnode_interface
mgmt_vnode
node_util
)
\ No newline at end of file
source/dnode/mgmt/mgmt_vnode/inc/vmInt.h
浏览文件 @
8e5b263d
...
...
@@ -16,7 +16,7 @@
#ifndef _TD_DND_VNODES_INT_H_
#define _TD_DND_VNODES_INT_H_
#include "dm
Int
.h"
#include "dm
Util
.h"
#include "sync.h"
#include "vnode.h"
...
...
@@ -25,14 +25,11 @@
extern
"C"
{
#endif
typedef
struct
SVnodesMgmt
{
SHashObj
*
hash
;
SRWLatch
latch
;
SVnodesStat
state
;
typedef
struct
SVnodeMgmt
{
SMsgCb
msgCb
;
const
char
*
path
;
SDnode
*
pDnode
;
SMgmtWrapper
*
pWrapper
;
STfs
*
pTfs
;
const
char
*
name
;
int32_t
dnodeId
;
SQWorkerPool
queryPool
;
SQWorkerPool
fetchPool
;
SWWorkerPool
syncPool
;
...
...
@@ -40,7 +37,11 @@ typedef struct SVnodesMgmt {
SWWorkerPool
mergePool
;
SSingleWorker
mgmtWorker
;
SSingleWorker
monitorWorker
;
}
SVnodesMgmt
;
SHashObj
*
hash
;
SRWLatch
latch
;
SVnodesStat
state
;
STfs
*
pTfs
;
}
SVnodeMgmt
;
typedef
struct
{
int32_t
vgId
;
...
...
@@ -63,7 +64,6 @@ typedef struct {
STaosQueue
*
pQueryQ
;
STaosQueue
*
pFetchQ
;
STaosQueue
*
pMergeQ
;
SMgmtWrapper
*
pWrapper
;
}
SVnodeObj
;
typedef
struct
{
...
...
@@ -72,50 +72,49 @@ typedef struct {
int32_t
failed
;
int32_t
threadIndex
;
TdThread
thread
;
SVnode
sMgmt
*
pMgmt
;
SVnode
Mgmt
*
pMgmt
;
SWrapperCfg
*
pCfgs
;
}
SVnodeThread
;
// vmInt.c
SVnodeObj
*
vmAcquireVnode
(
SVnode
s
Mgmt
*
pMgmt
,
int32_t
vgId
);
void
vmReleaseVnode
(
SVnode
s
Mgmt
*
pMgmt
,
SVnodeObj
*
pVnode
);
int32_t
vmOpenVnode
(
SVnode
s
Mgmt
*
pMgmt
,
SWrapperCfg
*
pCfg
,
SVnode
*
pImpl
);
void
vmCloseVnode
(
SVnode
s
Mgmt
*
pMgmt
,
SVnodeObj
*
pVnode
);
SVnodeObj
*
vmAcquireVnode
(
SVnodeMgmt
*
pMgmt
,
int32_t
vgId
);
void
vmReleaseVnode
(
SVnodeMgmt
*
pMgmt
,
SVnodeObj
*
pVnode
);
int32_t
vmOpenVnode
(
SVnodeMgmt
*
pMgmt
,
SWrapperCfg
*
pCfg
,
SVnode
*
pImpl
);
void
vmCloseVnode
(
SVnodeMgmt
*
pMgmt
,
SVnodeObj
*
pVnode
);
// vmHandle.c
void
vmInitMsgHandle
(
SMgmtWrapper
*
pWrapper
);
int32_t
vmProcessCreateVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
int32_t
vmProcessDropVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
int32_t
vmProcessGetMonVmInfoReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pReq
);
int32_t
vmProcessGetVnodeLoadsReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pReq
);
void
vmGetVnodeLoads
(
SMgmtWrapper
*
pWrapper
,
SMonVloadInfo
*
pInfo
);
SArray
*
vmGetMsgHandles
();
int32_t
vmProcessCreateVnodeReq
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
int32_t
vmProcessDropVnodeReq
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
int32_t
vmProcessGetMonitorInfoReq
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
int32_t
vmProcessGetLoadsReq
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
// vmFile.c
int32_t
vmGetVnodeListFromFile
(
SVnode
s
Mgmt
*
pMgmt
,
SWrapperCfg
**
ppCfgs
,
int32_t
*
numOfVnodes
);
int32_t
vmWriteVnodeListToFile
(
SVnode
s
Mgmt
*
pMgmt
);
SVnodeObj
**
vmGetVnodeListFromHash
(
SVnode
s
Mgmt
*
pMgmt
,
int32_t
*
numOfVnodes
);
int32_t
vmGetVnodeListFromFile
(
SVnodeMgmt
*
pMgmt
,
SWrapperCfg
**
ppCfgs
,
int32_t
*
numOfVnodes
);
int32_t
vmWriteVnodeListToFile
(
SVnodeMgmt
*
pMgmt
);
SVnodeObj
**
vmGetVnodeListFromHash
(
SVnodeMgmt
*
pMgmt
,
int32_t
*
numOfVnodes
);
// vmWorker.c
int32_t
vmStartWorker
(
SVnode
s
Mgmt
*
pMgmt
);
void
vmStopWorker
(
SVnode
s
Mgmt
*
pMgmt
);
int32_t
vmAllocQueue
(
SVnode
s
Mgmt
*
pMgmt
,
SVnodeObj
*
pVnode
);
void
vmFreeQueue
(
SVnode
s
Mgmt
*
pMgmt
,
SVnodeObj
*
pVnode
);
int32_t
vmPut
MsgToWriteQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pMsg
);
int32_t
vmPut
MsgToSyncQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pMsg
);
int32_t
vmPut
MsgToApplyQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pMsg
);
int32_t
vmPut
MsgToQueryQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pMsg
);
int32_t
vmPut
MsgToFetchQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pMsg
);
int32_t
vmPut
MsgToMergeQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pMsg
);
int32_t
vmGetQueueSize
(
S
MgmtWrapper
*
pWrapper
,
int32_t
vgId
,
EQueueType
qtype
);
int32_t
vmP
rocessWriteMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
vmP
rocessSyncMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
vmP
rocessQueryMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
vmP
rocessFetchMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
vmP
rocessMergeMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
vmP
rocessMgmtMsg
(
SMgmtWrapper
*
pWrapper
t
,
SNodeMsg
*
pMsg
);
int32_t
vmP
rocessMonitorMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
vmStartWorker
(
SVnodeMgmt
*
pMgmt
);
void
vmStopWorker
(
SVnodeMgmt
*
pMgmt
);
int32_t
vmAllocQueue
(
SVnodeMgmt
*
pMgmt
,
SVnodeObj
*
pVnode
);
void
vmFreeQueue
(
SVnodeMgmt
*
pMgmt
,
SVnodeObj
*
pVnode
);
int32_t
vmPut
RpcMsgToWriteQueue
(
SVnodeMgmt
*
pMgmt
,
SRpcMsg
*
pMsg
);
int32_t
vmPut
RpcMsgToSyncQueue
(
SVnodeMgmt
*
pMgmt
,
SRpcMsg
*
pMsg
);
int32_t
vmPut
RpcMsgToApplyQueue
(
SVnodeMgmt
*
pMgmt
,
SRpcMsg
*
pMsg
);
int32_t
vmPut
RpcMsgToQueryQueue
(
SVnodeMgmt
*
pMgmt
,
SRpcMsg
*
pMsg
);
int32_t
vmPut
RpcMsgToFetchQueue
(
SVnodeMgmt
*
pMgmt
,
SRpcMsg
*
pMsg
);
int32_t
vmPut
RpcMsgToMergeQueue
(
SVnodeMgmt
*
pMgmt
,
SRpcMsg
*
pMsg
);
int32_t
vmGetQueueSize
(
S
VnodeMgmt
*
pMgmt
,
int32_t
vgId
,
EQueueType
qtype
);
int32_t
vmP
utNodeMsgToWriteQueue
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
vmP
utNodeMsgToSyncQueue
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
vmP
utNodeMsgToQueryQueue
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
vmP
utNodeMsgToFetchQueue
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
vmP
utNodeMsgToMergeQueue
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
vmP
utNodeMsgToMgmtQueue
(
SVnodeMgmt
*
pMgm
t
,
SNodeMsg
*
pMsg
);
int32_t
vmP
utNodeMsgToMonitorQueue
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
#ifdef __cplusplus
}
...
...
source/dnode/mgmt/mgmt_vnode/src/vmFile.c
浏览文件 @
8e5b263d
...
...
@@ -16,7 +16,7 @@
#define _DEFAULT_SOURCE
#include "vmInt.h"
SVnodeObj
**
vmGetVnodeListFromHash
(
SVnode
s
Mgmt
*
pMgmt
,
int32_t
*
numOfVnodes
)
{
SVnodeObj
**
vmGetVnodeListFromHash
(
SVnodeMgmt
*
pMgmt
,
int32_t
*
numOfVnodes
)
{
taosRLockLatch
(
&
pMgmt
->
latch
);
int32_t
num
=
0
;
...
...
@@ -44,7 +44,7 @@ SVnodeObj **vmGetVnodeListFromHash(SVnodesMgmt *pMgmt, int32_t *numOfVnodes) {
return
pVnodes
;
}
int32_t
vmGetVnodeListFromFile
(
SVnode
s
Mgmt
*
pMgmt
,
SWrapperCfg
**
ppCfgs
,
int32_t
*
numOfVnodes
)
{
int32_t
vmGetVnodeListFromFile
(
SVnodeMgmt
*
pMgmt
,
SWrapperCfg
**
ppCfgs
,
int32_t
*
numOfVnodes
)
{
int32_t
code
=
TSDB_CODE_INVALID_JSON_FORMAT
;
int32_t
len
=
0
;
int32_t
maxLen
=
1024
*
1024
;
...
...
@@ -139,9 +139,9 @@ _OVER:
return
code
;
}
int32_t
vmWriteVnodeListToFile
(
SVnode
s
Mgmt
*
pMgmt
)
{
char
file
[
PATH_MAX
];
char
realfile
[
PATH_MAX
];
int32_t
vmWriteVnodeListToFile
(
SVnodeMgmt
*
pMgmt
)
{
char
file
[
PATH_MAX
]
=
{
0
}
;
char
realfile
[
PATH_MAX
]
=
{
0
}
;
snprintf
(
file
,
sizeof
(
file
),
"%s%svnodes.json.bak"
,
pMgmt
->
path
,
TD_DIRSEP
);
snprintf
(
realfile
,
sizeof
(
file
),
"%s%svnodes.json"
,
pMgmt
->
path
,
TD_DIRSEP
);
...
...
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
浏览文件 @
8e5b263d
...
...
@@ -16,9 +16,7 @@
#define _DEFAULT_SOURCE
#include "vmInt.h"
void
vmGetVnodeLoads
(
SMgmtWrapper
*
pWrapper
,
SMonVloadInfo
*
pInfo
)
{
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
static
void
vmGetVnodeLoads
(
SVnodeMgmt
*
pMgmt
,
SMonVloadInfo
*
pInfo
)
{
pInfo
->
pVloads
=
taosArrayInit
(
pMgmt
->
state
.
totalVnodes
,
sizeof
(
SVnodeLoad
));
if
(
pInfo
->
pVloads
==
NULL
)
return
;
...
...
@@ -39,11 +37,9 @@ void vmGetVnodeLoads(SMgmtWrapper *pWrapper, SMonVloadInfo *pInfo) {
taosRUnLockLatch
(
&
pMgmt
->
latch
);
}
void
vmGetMonitorInfo
(
SMgmtWrapper
*
pWrapper
,
SMonVmInfo
*
pInfo
)
{
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
static
void
vmGetMonitorInfo
(
SVnodeMgmt
*
pMgmt
,
SMonVmInfo
*
pInfo
)
{
SMonVloadInfo
vloads
=
{
0
};
vmGetVnodeLoads
(
p
Wrapper
,
&
vloads
);
vmGetVnodeLoads
(
p
Mgmt
,
&
vloads
);
SArray
*
pVloads
=
vloads
.
pVloads
;
if
(
pVloads
==
NULL
)
return
;
...
...
@@ -86,10 +82,10 @@ void vmGetMonitorInfo(SMgmtWrapper *pWrapper, SMonVmInfo *pInfo) {
taosArrayDestroy
(
pVloads
);
}
int32_t
vmProcessGetMon
VmInfoReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pReq
)
{
int32_t
vmProcessGetMon
itorInfoReq
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pReq
)
{
SMonVmInfo
vmInfo
=
{
0
};
vmGetMonitorInfo
(
p
Wrapper
,
&
vmInfo
);
dmGetMonitorSysInfo
(
&
vmInfo
.
sys
);
vmGetMonitorInfo
(
p
Mgmt
,
&
vmInfo
);
dmGetMonitorSys
tem
Info
(
&
vmInfo
.
sys
);
monGetLogs
(
&
vmInfo
.
log
);
int32_t
rspLen
=
tSerializeSMonVmInfo
(
NULL
,
0
,
&
vmInfo
);
...
...
@@ -111,9 +107,9 @@ int32_t vmProcessGetMonVmInfoReq(SMgmtWrapper *pWrapper, SNodeMsg *pReq) {
return
0
;
}
int32_t
vmProcessGet
VnodeLoadsReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pReq
)
{
int32_t
vmProcessGet
LoadsReq
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pReq
)
{
SMonVloadInfo
vloads
=
{
0
};
vmGetVnodeLoads
(
p
Wrapper
,
&
vloads
);
vmGetVnodeLoads
(
p
Mgmt
,
&
vloads
);
int32_t
rspLen
=
tSerializeSMonVloadInfo
(
NULL
,
0
,
&
vloads
);
if
(
rspLen
<
0
)
{
...
...
@@ -170,14 +166,14 @@ static void vmGenerateVnodeCfg(SCreateVnodeReq *pCreate, SVnodeCfg *pCfg) {
}
}
static
void
vmGenerateWrapperCfg
(
SVnode
s
Mgmt
*
pMgmt
,
SCreateVnodeReq
*
pCreate
,
SWrapperCfg
*
pCfg
)
{
static
void
vmGenerateWrapperCfg
(
SVnodeMgmt
*
pMgmt
,
SCreateVnodeReq
*
pCreate
,
SWrapperCfg
*
pCfg
)
{
pCfg
->
vgId
=
pCreate
->
vgId
;
pCfg
->
vgVersion
=
pCreate
->
vgVersion
;
pCfg
->
dropped
=
0
;
snprintf
(
pCfg
->
path
,
sizeof
(
pCfg
->
path
),
"%s%svnode%d"
,
pMgmt
->
path
,
TD_DIRSEP
,
pCreate
->
vgId
);
}
int32_t
vmProcessCreateVnodeReq
(
SVnode
s
Mgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
int32_t
vmProcessCreateVnodeReq
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SCreateVnodeReq
createReq
=
{
0
};
int32_t
code
=
-
1
;
...
...
@@ -212,17 +208,7 @@ int32_t vmProcessCreateVnodeReq(SVnodesMgmt *pMgmt, SNodeMsg *pMsg) {
return
-
1
;
}
SMsgCb
msgCb
=
pMgmt
->
pDnode
->
data
.
msgCb
;
msgCb
.
pWrapper
=
pMgmt
->
pWrapper
;
msgCb
.
queueFps
[
WRITE_QUEUE
]
=
vmPutMsgToWriteQueue
;
msgCb
.
queueFps
[
SYNC_QUEUE
]
=
vmPutMsgToSyncQueue
;
msgCb
.
queueFps
[
APPLY_QUEUE
]
=
vmPutMsgToApplyQueue
;
msgCb
.
queueFps
[
QUERY_QUEUE
]
=
vmPutMsgToQueryQueue
;
msgCb
.
queueFps
[
FETCH_QUEUE
]
=
vmPutMsgToFetchQueue
;
msgCb
.
queueFps
[
MERGE_QUEUE
]
=
vmPutMsgToMergeQueue
;
msgCb
.
qsizeFp
=
vmGetQueueSize
;
SVnode
*
pImpl
=
vnodeOpen
(
path
,
pMgmt
->
pTfs
,
msgCb
);
SVnode
*
pImpl
=
vnodeOpen
(
path
,
pMgmt
->
pTfs
,
pMgmt
->
msgCb
);
if
(
pImpl
==
NULL
)
{
dError
(
"vgId:%d, failed to create vnode since %s"
,
createReq
.
vgId
,
terrstr
());
code
=
terrno
;
...
...
@@ -255,7 +241,7 @@ _OVER:
return
code
;
}
int32_t
vmProcessDropVnodeReq
(
SVnode
s
Mgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
int32_t
vmProcessDropVnodeReq
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SDropVnodeReq
dropReq
=
{
0
};
if
(
tDeserializeSDropVnodeReq
(
pReq
->
pCont
,
pReq
->
contLen
,
&
dropReq
)
!=
0
)
{
...
...
@@ -286,57 +272,71 @@ int32_t vmProcessDropVnodeReq(SVnodesMgmt *pMgmt, SNodeMsg *pMsg) {
return
0
;
}
void
vmInitMsgHandle
(
SMgmtWrapper
*
pWrapper
)
{
dmSetMsgHandle
(
pWrapper
,
TDMT_MON_VM_INFO
,
vmProcessMonitorMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_MON_VM_LOAD
,
vmProcessMonitorMsg
,
DEFAULT_HANDLE
);
SArray
*
vmGetMsgHandles
()
{
int32_t
code
=
-
1
;
SArray
*
pArray
=
taosArrayInit
(
32
,
sizeof
(
SMgmtHandle
));
if
(
pArray
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MON_VM_INFO
,
vmPutNodeMsgToMonitorQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_MON_VM_LOAD
,
vmPutNodeMsgToMonitorQueue
,
0
)
==
NULL
)
goto
_OVER
;
// Requests handled by VNODE
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_SUBMIT
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY
,
vmProcessQueryMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY_CONTINUE
,
vmProcessQueryMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_FETCH
,
vmProcessFetchMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_ALTER_TABLE
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_UPDATE_TAG_VAL
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_TABLE_META
,
vmProcessFetchMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_TABLES_META
,
vmProcessFetchMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_MQ_CONSUME
,
vmProcessQueryMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_MQ_QUERY
,
vmProcessQueryMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_MQ_CONNECT
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_MQ_DISCONNECT
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
// dmSetMsgHandle(pWrapper, TDMT_VND_MQ_SET_CUR, vmProcessWriteMsg, DEFAULT_HANDLE);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_RES_READY
,
vmProcessFetchMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_TASKS_STATUS
,
vmProcessFetchMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_CANCEL_TASK
,
vmProcessFetchMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_DROP_TASK
,
vmProcessFetchMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_CREATE_STB
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_ALTER_STB
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_DROP_STB
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_CREATE_TABLE
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_DROP_TABLE
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_CREATE_SMA
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_CANCEL_SMA
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_DROP_SMA
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_SUBMIT_RSMA
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_MQ_VG_CHANGE
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_CONSUME
,
vmProcessFetchMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_TASK_DEPLOY
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY_HEARTBEAT
,
vmProcessFetchMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_TASK_PIPE_EXEC
,
vmProcessFetchMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_TASK_MERGE_EXEC
,
vmProcessMergeMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_TASK_WRITE_EXEC
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_STREAM_TRIGGER
,
vmProcessFetchMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_ALTER_VNODE
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_COMPACT_VNODE
,
vmProcessWriteMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_VNODE
,
vmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_VNODE
,
vmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_SYNC_TIMEOUT
,
vmProcessSyncMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_SYNC_PING
,
vmProcessSyncMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_SYNC_PING_REPLY
,
vmProcessSyncMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_SYNC_CLIENT_REQUEST
,
vmProcessSyncMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_SYNC_CLIENT_REQUEST_REPLY
,
vmProcessSyncMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_SYNC_REQUEST_VOTE
,
vmProcessSyncMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_SYNC_REQUEST_VOTE_REPLY
,
vmProcessSyncMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_SYNC_APPEND_ENTRIES
,
vmProcessSyncMsg
,
DEFAULT_HANDLE
);
dmSetMsgHandle
(
pWrapper
,
TDMT_VND_SYNC_APPEND_ENTRIES_REPLY
,
vmProcessSyncMsg
,
DEFAULT_HANDLE
);
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_SUBMIT
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_QUERY
,
vmPutNodeMsgToQueryQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_QUERY_CONTINUE
,
vmPutNodeMsgToQueryQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_FETCH
,
vmPutNodeMsgToFetchQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_ALTER_TABLE
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_UPDATE_TAG_VAL
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_TABLE_META
,
vmPutNodeMsgToFetchQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_TABLES_META
,
vmPutNodeMsgToFetchQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_MQ_CONSUME
,
vmPutNodeMsgToQueryQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_MQ_QUERY
,
vmPutNodeMsgToQueryQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_MQ_CONNECT
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_MQ_DISCONNECT
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
// if (dmSetMgmtHandle(pArray, TDMT_VND_MQ_SET_CUR, vmPutNodeMsgToWriteQueue, 0)== NULL) goto _OVER;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_RES_READY
,
vmPutNodeMsgToFetchQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_TASKS_STATUS
,
vmPutNodeMsgToFetchQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_CANCEL_TASK
,
vmPutNodeMsgToFetchQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_DROP_TASK
,
vmPutNodeMsgToFetchQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_CREATE_STB
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_ALTER_STB
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_DROP_STB
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_CREATE_TABLE
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_DROP_TABLE
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_CREATE_SMA
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_CANCEL_SMA
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_DROP_SMA
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_SUBMIT_RSMA
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_MQ_VG_CHANGE
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_CONSUME
,
vmPutNodeMsgToFetchQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_TASK_DEPLOY
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_QUERY_HEARTBEAT
,
vmPutNodeMsgToFetchQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_TASK_PIPE_EXEC
,
vmPutNodeMsgToFetchQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_TASK_MERGE_EXEC
,
vmPutNodeMsgToMergeQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_TASK_WRITE_EXEC
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_STREAM_TRIGGER
,
vmPutNodeMsgToFetchQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_ALTER_VNODE
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_COMPACT_VNODE
,
vmPutNodeMsgToWriteQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_CREATE_VNODE
,
vmPutNodeMsgToMgmtQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_DND_DROP_VNODE
,
vmPutNodeMsgToMgmtQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_SYNC_TIMEOUT
,
vmPutNodeMsgToSyncQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_SYNC_PING
,
vmPutNodeMsgToSyncQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_SYNC_PING_REPLY
,
vmPutNodeMsgToSyncQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_SYNC_CLIENT_REQUEST
,
vmPutNodeMsgToSyncQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_SYNC_CLIENT_REQUEST_REPLY
,
vmPutNodeMsgToSyncQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_SYNC_REQUEST_VOTE
,
vmPutNodeMsgToSyncQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_SYNC_REQUEST_VOTE_REPLY
,
vmPutNodeMsgToSyncQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_SYNC_APPEND_ENTRIES
,
vmPutNodeMsgToSyncQueue
,
0
)
==
NULL
)
goto
_OVER
;
if
(
dmSetMgmtHandle
(
pArray
,
TDMT_VND_SYNC_APPEND_ENTRIES_REPLY
,
vmPutNodeMsgToSyncQueue
,
0
)
==
NULL
)
goto
_OVER
;
code
=
0
;
_OVER:
if
(
code
!=
0
)
{
taosArrayDestroy
(
pArray
);
return
NULL
;
}
else
{
return
pArray
;
}
}
source/dnode/mgmt/mgmt_vnode/src/vmInt.c
浏览文件 @
8e5b263d
...
...
@@ -16,7 +16,7 @@
#define _DEFAULT_SOURCE
#include "vmInt.h"
SVnodeObj
*
vmAcquireVnode
(
SVnode
s
Mgmt
*
pMgmt
,
int32_t
vgId
)
{
SVnodeObj
*
vmAcquireVnode
(
SVnodeMgmt
*
pMgmt
,
int32_t
vgId
)
{
SVnodeObj
*
pVnode
=
NULL
;
int32_t
refCount
=
0
;
...
...
@@ -36,7 +36,7 @@ SVnodeObj *vmAcquireVnode(SVnodesMgmt *pMgmt, int32_t vgId) {
return
pVnode
;
}
void
vmReleaseVnode
(
SVnode
s
Mgmt
*
pMgmt
,
SVnodeObj
*
pVnode
)
{
void
vmReleaseVnode
(
SVnodeMgmt
*
pMgmt
,
SVnodeObj
*
pVnode
)
{
if
(
pVnode
==
NULL
)
return
;
taosRLockLatch
(
&
pMgmt
->
latch
);
...
...
@@ -45,7 +45,7 @@ void vmReleaseVnode(SVnodesMgmt *pMgmt, SVnodeObj *pVnode) {
dTrace
(
"vgId:%d, release vnode, refCount:%d"
,
pVnode
->
vgId
,
refCount
);
}
int32_t
vmOpenVnode
(
SVnode
s
Mgmt
*
pMgmt
,
SWrapperCfg
*
pCfg
,
SVnode
*
pImpl
)
{
int32_t
vmOpenVnode
(
SVnodeMgmt
*
pMgmt
,
SWrapperCfg
*
pCfg
,
SVnode
*
pImpl
)
{
SVnodeObj
*
pVnode
=
taosMemoryCalloc
(
1
,
sizeof
(
SVnodeObj
));
if
(
pVnode
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
...
...
@@ -59,7 +59,6 @@ int32_t vmOpenVnode(SVnodesMgmt *pMgmt, SWrapperCfg *pCfg, SVnode *pImpl) {
pVnode
->
accessState
=
TSDB_VN_ALL_ACCCESS
;
pVnode
->
path
=
tstrdup
(
pCfg
->
path
);
pVnode
->
pImpl
=
pImpl
;
pVnode
->
pWrapper
=
pMgmt
->
pWrapper
;
if
(
pVnode
->
path
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
...
...
@@ -78,7 +77,7 @@ int32_t vmOpenVnode(SVnodesMgmt *pMgmt, SWrapperCfg *pCfg, SVnode *pImpl) {
return
code
;
}
void
vmCloseVnode
(
SVnode
s
Mgmt
*
pMgmt
,
SVnodeObj
*
pVnode
)
{
void
vmCloseVnode
(
SVnodeMgmt
*
pMgmt
,
SVnodeObj
*
pVnode
)
{
char
path
[
TSDB_FILENAME_LEN
]
=
{
0
};
taosWLockLatch
(
&
pMgmt
->
latch
);
...
...
@@ -112,8 +111,7 @@ void vmCloseVnode(SVnodesMgmt *pMgmt, SVnodeObj *pVnode) {
static
void
*
vmOpenVnodeInThread
(
void
*
param
)
{
SVnodeThread
*
pThread
=
param
;
SVnodesMgmt
*
pMgmt
=
pThread
->
pMgmt
;
SDnode
*
pDnode
=
pMgmt
->
pDnode
;
SVnodeMgmt
*
pMgmt
=
pThread
->
pMgmt
;
char
path
[
TSDB_FILENAME_LEN
];
dDebug
(
"thread:%d, start to open %d vnodes"
,
pThread
->
threadIndex
,
pThread
->
vnodeNum
);
...
...
@@ -125,19 +123,10 @@ static void *vmOpenVnodeInThread(void *param) {
char
stepDesc
[
TSDB_STEP_DESC_LEN
]
=
{
0
};
snprintf
(
stepDesc
,
TSDB_STEP_DESC_LEN
,
"vgId:%d, start to restore, %d of %d have been opened"
,
pCfg
->
vgId
,
pMgmt
->
state
.
openVnodes
,
pMgmt
->
state
.
totalVnodes
);
dmReportStartup
(
pDnode
,
"vnode-open"
,
stepDesc
);
SMsgCb
msgCb
=
pMgmt
->
pDnode
->
data
.
msgCb
;
msgCb
.
pWrapper
=
pMgmt
->
pWrapper
;
msgCb
.
queueFps
[
WRITE_QUEUE
]
=
vmPutMsgToWriteQueue
;
msgCb
.
queueFps
[
SYNC_QUEUE
]
=
vmPutMsgToSyncQueue
;
msgCb
.
queueFps
[
APPLY_QUEUE
]
=
vmPutMsgToApplyQueue
;
msgCb
.
queueFps
[
QUERY_QUEUE
]
=
vmPutMsgToQueryQueue
;
msgCb
.
queueFps
[
FETCH_QUEUE
]
=
vmPutMsgToFetchQueue
;
msgCb
.
queueFps
[
MERGE_QUEUE
]
=
vmPutMsgToMergeQueue
;
msgCb
.
qsizeFp
=
vmGetQueueSize
;
tmsgReportStartup
(
"vnode-open"
,
stepDesc
);
snprintf
(
path
,
TSDB_FILENAME_LEN
,
"vnode%svnode%d"
,
TD_DIRSEP
,
pCfg
->
vgId
);
SVnode
*
pImpl
=
vnodeOpen
(
path
,
pMgmt
->
pTfs
,
msgCb
);
SVnode
*
pImpl
=
vnodeOpen
(
path
,
pMgmt
->
pTfs
,
pMgmt
->
msgCb
);
if
(
pImpl
==
NULL
)
{
dError
(
"vgId:%d, failed to open vnode by thread:%d"
,
pCfg
->
vgId
,
pThread
->
threadIndex
);
pThread
->
failed
++
;
...
...
@@ -154,9 +143,7 @@ static void *vmOpenVnodeInThread(void *param) {
return
NULL
;
}
static
int32_t
vmOpenVnodes
(
SVnodesMgmt
*
pMgmt
)
{
SDnode
*
pDnode
=
pMgmt
->
pDnode
;
static
int32_t
vmOpenVnodes
(
SVnodeMgmt
*
pMgmt
)
{
pMgmt
->
hash
=
taosHashInit
(
TSDB_MIN_VNODES
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_INT
),
true
,
HASH_NO_LOCK
);
if
(
pMgmt
->
hash
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
...
...
@@ -224,7 +211,7 @@ static int32_t vmOpenVnodes(SVnodesMgmt *pMgmt) {
}
}
static
void
vmCloseVnodes
(
SVnode
s
Mgmt
*
pMgmt
)
{
static
void
vmCloseVnodes
(
SVnodeMgmt
*
pMgmt
)
{
dInfo
(
"start to close all vnodes"
);
int32_t
numOfVnodes
=
0
;
...
...
@@ -246,40 +233,44 @@ static void vmCloseVnodes(SVnodesMgmt *pMgmt) {
dInfo
(
"total vnodes:%d are all closed"
,
numOfVnodes
);
}
static
void
vmCleanup
(
SMgmtWrapper
*
pWrapper
)
{
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
if
(
pMgmt
==
NULL
)
return
;
static
void
vmCleanup
(
SVnodeMgmt
*
pMgmt
)
{
dInfo
(
"vnode-mgmt start to cleanup"
);
vmCloseVnodes
(
pMgmt
);
vmStopWorker
(
pMgmt
);
vnodeCleanup
();
tfsClose
(
pMgmt
->
pTfs
);
taosMemoryFree
(
pMgmt
);
pWrapper
->
pMgmt
=
NULL
;
dInfo
(
"vnode-mgmt is cleaned up"
);
}
static
int32_t
vmInit
(
SMgmtWrapper
*
pWrapper
)
{
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
SVnodesMgmt
*
pMgmt
=
taosMemoryCalloc
(
1
,
sizeof
(
SVnodesMgmt
));
int32_t
code
=
-
1
;
static
int32_t
vmInit
(
const
SMgmtInputOpt
*
pInput
,
SMgmtOutputOpt
*
pOutput
)
{
dInfo
(
"vnode-mgmt start to init"
);
int32_t
code
=
-
1
;
SVnodeMgmt
*
pMgmt
=
taosMemoryCalloc
(
1
,
sizeof
(
SVnodeMgmt
));
if
(
pMgmt
==
NULL
)
goto
_OVER
;
pMgmt
->
path
=
pWrapper
->
path
;
pMgmt
->
pDnode
=
pWrapper
->
pDnode
;
pMgmt
->
pWrapper
=
pWrapper
;
pMgmt
->
path
=
pInput
->
path
;
pMgmt
->
name
=
pInput
->
name
;
pMgmt
->
dnodeId
=
pInput
->
dnodeId
;
pMgmt
->
msgCb
=
pInput
->
msgCb
;
pMgmt
->
msgCb
.
queueFps
[
WRITE_QUEUE
]
=
(
PutToQueueFp
)
vmPutRpcMsgToWriteQueue
;
pMgmt
->
msgCb
.
queueFps
[
SYNC_QUEUE
]
=
(
PutToQueueFp
)
vmPutRpcMsgToSyncQueue
;
pMgmt
->
msgCb
.
queueFps
[
APPLY_QUEUE
]
=
(
PutToQueueFp
)
vmPutRpcMsgToApplyQueue
;
pMgmt
->
msgCb
.
queueFps
[
QUERY_QUEUE
]
=
(
PutToQueueFp
)
vmPutRpcMsgToQueryQueue
;
pMgmt
->
msgCb
.
queueFps
[
FETCH_QUEUE
]
=
(
PutToQueueFp
)
vmPutRpcMsgToFetchQueue
;
pMgmt
->
msgCb
.
queueFps
[
MERGE_QUEUE
]
=
(
PutToQueueFp
)
vmPutRpcMsgToMergeQueue
;
pMgmt
->
msgCb
.
qsizeFp
=
(
GetQueueSizeFp
)
vmGetQueueSize
;
pMgmt
->
msgCb
.
pMgmt
=
pMgmt
;
taosInitRWLatch
(
&
pMgmt
->
latch
);
SDiskCfg
dCfg
=
{
0
};
tstrncpy
(
dCfg
.
dir
,
p
Dnode
->
data
.
dataDir
,
TSDB_FILENAME_LEN
);
tstrncpy
(
dCfg
.
dir
,
p
Input
->
dataDir
,
TSDB_FILENAME_LEN
);
dCfg
.
level
=
0
;
dCfg
.
primary
=
1
;
SDiskCfg
*
pDisks
=
p
Dnode
->
data
.
disks
;
int32_t
numOfDisks
=
p
Dnode
->
data
.
numOfDisks
;
SDiskCfg
*
pDisks
=
p
Input
->
disks
;
int32_t
numOfDisks
=
p
Input
->
numOfDisks
;
if
(
numOfDisks
<=
0
||
pDisks
==
NULL
)
{
pDisks
=
&
dCfg
;
numOfDisks
=
1
;
...
...
@@ -290,64 +281,64 @@ static int32_t vmInit(SMgmtWrapper *pWrapper) {
dError
(
"failed to init tfs since %s"
,
terrstr
());
goto
_OVER
;
}
dmReportStartup
(
pDnode
,
"vnode-tfs"
,
"initialized"
);
tmsgReportStartup
(
"vnode-tfs"
,
"initialized"
);
if
(
walInit
()
!=
0
)
{
dError
(
"failed to init wal since %s"
,
terrstr
());
goto
_OVER
;
}
dmReportStartup
(
pDnode
,
"vnode-wal"
,
"initialized"
);
tmsgReportStartup
(
"vnode-wal"
,
"initialized"
);
if
(
syncInit
()
!=
0
)
{
dError
(
"failed to open sync since %s"
,
terrstr
());
return
-
1
;
goto
_OVER
;
}
tmsgReportStartup
(
"vnode-sync"
,
"initialized"
);
if
(
vnodeInit
(
tsNumOfCommitThreads
)
!=
0
)
{
dError
(
"failed to init vnode since %s"
,
terrstr
());
goto
_OVER
;
}
dmReportStartup
(
pDnode
,
"vnode-commit"
,
"initialized"
);
tmsgReportStartup
(
"vnode-commit"
,
"initialized"
);
if
(
vmStartWorker
(
pMgmt
)
!=
0
)
{
dError
(
"failed to init workers since %s"
,
terrstr
())
goto
_OVER
;
dError
(
"failed to init workers since %s"
,
terrstr
());
goto
_OVER
;
}
dmReportStartup
(
pDnode
,
"vnode-worker"
,
"initialized"
);
tmsgReportStartup
(
"vnode-worker"
,
"initialized"
);
if
(
vmOpenVnodes
(
pMgmt
)
!=
0
)
{
dError
(
"failed to open vnode since %s"
,
terrstr
());
return
-
1
;
goto
_OVER
;
}
dmReportStartup
(
pDnode
,
"vnode-vnodes"
,
"initialized"
);
tmsgReportStartup
(
"vnode-vnodes"
,
"initialized"
);
if
(
udfcOpen
()
!=
0
)
{
dError
(
"failed to open udfc in vnode"
);
goto
_OVER
;
}
code
=
0
;
_OVER:
if
(
code
==
0
)
{
p
Wrapper
->
pMgmt
=
pMgmt
;
p
Output
->
pMgmt
=
pMgmt
;
dInfo
(
"vnodes-mgmt is initialized"
);
}
else
{
dError
(
"failed to init vnodes-mgmt since %s"
,
terrstr
());
vmCleanup
(
p
Wrapper
);
vmCleanup
(
p
Mgmt
);
}
return
0
;
return
code
;
}
static
int32_t
vmRequire
(
SMgmtWrapper
*
pWrapper
,
bool
*
required
)
{
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
*
required
=
pDnode
->
data
.
supportVnodes
>
0
;
static
int32_t
vmRequire
(
const
SMgmtInputOpt
*
pInput
,
bool
*
required
)
{
*
required
=
pInput
->
supportVnodes
>
0
;
return
0
;
}
static
int32_t
vmStart
(
S
MgmtWrapper
*
pWrapper
)
{
static
int32_t
vmStart
(
S
VnodeMgmt
*
pMgmt
)
{
dDebug
(
"vnode-mgmt start to run"
);
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
taosRLockLatch
(
&
pMgmt
->
latch
);
void
*
pIter
=
taosHashIterate
(
pMgmt
->
hash
,
NULL
);
...
...
@@ -364,20 +355,18 @@ static int32_t vmStart(SMgmtWrapper *pWrapper) {
return
0
;
}
static
void
vmStop
(
S
MgmtWrapper
*
pWrapper
)
{
static
void
vmStop
(
S
VnodeMgmt
*
pMgmt
)
{
// process inside the vnode
}
void
vmSetMgmtFp
(
SMgmtWrapper
*
pWrapper
)
{
SMgmtFp
mgmtFp
=
{
0
};
mgmtFp
.
openFp
=
vmInit
;
mgmtFp
.
closeFp
=
vmCleanup
;
mgmtFp
.
startFp
=
vmStart
;
mgmtFp
.
stopFp
=
vmStop
;
mgmtFp
.
requiredFp
=
vmRequire
;
vmInitMsgHandle
(
pWrapper
);
pWrapper
->
name
=
"vnode"
;
pWrapper
->
fp
=
mgmtFp
;
}
SMgmtFunc
vmGetMgmtFunc
()
{
SMgmtFunc
mgmtFunc
=
{
0
};
mgmtFunc
.
openFp
=
vmInit
;
mgmtFunc
.
closeFp
=
(
NodeCloseFp
)
vmCleanup
;
mgmtFunc
.
startFp
=
(
NodeStartFp
)
vmStart
;
mgmtFunc
.
stopFp
=
(
NodeStopFp
)
vmStop
;
mgmtFunc
.
requiredFp
=
vmRequire
;
mgmtFunc
.
getHandlesFp
=
vmGetMsgHandles
;
return
mgmtFunc
;
}
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
浏览文件 @
8e5b263d
...
...
@@ -32,7 +32,7 @@ static inline void vmSendRsp(SNodeMsg *pMsg, int32_t code) {
}
static
void
vmProcessMgmtMonitorQueue
(
SQueueInfo
*
pInfo
,
SNodeMsg
*
pMsg
)
{
SVnode
s
Mgmt
*
pMgmt
=
pInfo
->
ahandle
;
SVnodeMgmt
*
pMgmt
=
pInfo
->
ahandle
;
int32_t
code
=
-
1
;
tmsg_t
msgType
=
pMsg
->
rpcMsg
.
msgType
;
...
...
@@ -40,10 +40,10 @@ static void vmProcessMgmtMonitorQueue(SQueueInfo *pInfo, SNodeMsg *pMsg) {
switch
(
msgType
)
{
case
TDMT_MON_VM_INFO
:
code
=
vmProcessGetMon
VmInfoReq
(
pMgmt
->
pWrapper
,
pMsg
);
code
=
vmProcessGetMon
itorInfoReq
(
pMgmt
,
pMsg
);
break
;
case
TDMT_MON_VM_LOAD
:
code
=
vmProcessGet
VnodeLoadsReq
(
pMgmt
->
pWrapper
,
pMsg
);
code
=
vmProcessGet
LoadsReq
(
pMgmt
,
pMsg
);
break
;
case
TDMT_DND_CREATE_VNODE
:
code
=
vmProcessCreateVnodeReq
(
pMgmt
,
pMsg
);
...
...
@@ -240,7 +240,7 @@ static void vmProcessMergeQueue(SQueueInfo *pInfo, STaosQall *qall, int32_t numO
}
}
static
int32_t
vmPutNodeMsgToQueue
(
SVnode
s
Mgmt
*
pMgmt
,
SNodeMsg
*
pMsg
,
EQueueType
qtype
)
{
static
int32_t
vmPutNodeMsgToQueue
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
,
EQueueType
qtype
)
{
SRpcMsg
*
pRpc
=
&
pMsg
->
rpcMsg
;
SMsgHead
*
pHead
=
pRpc
->
pCont
;
int32_t
code
=
0
;
...
...
@@ -285,41 +285,34 @@ static int32_t vmPutNodeMsgToQueue(SVnodesMgmt *pMgmt, SNodeMsg *pMsg, EQueueTyp
return
code
;
}
int32_t
vmProcessSyncMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
vmPutNodeMsgToSyncQueue
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
return
vmPutNodeMsgToQueue
(
pMgmt
,
pMsg
,
SYNC_QUEUE
);
}
int32_t
vmProcessWriteMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
vmPutNodeMsgToWriteQueue
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
return
vmPutNodeMsgToQueue
(
pMgmt
,
pMsg
,
WRITE_QUEUE
);
}
int32_t
vmProcessQueryMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
vmPutNodeMsgToQueryQueue
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
return
vmPutNodeMsgToQueue
(
pMgmt
,
pMsg
,
QUERY_QUEUE
);
}
int32_t
vmProcessFetchMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
vmPutNodeMsgToFetchQueue
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
return
vmPutNodeMsgToQueue
(
pMgmt
,
pMsg
,
FETCH_QUEUE
);
}
int32_t
vmProcessMergeMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
vmPutNodeMsgToMergeQueue
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
return
vmPutNodeMsgToQueue
(
pMgmt
,
pMsg
,
MERGE_QUEUE
);
}
int32_t
vmProcessMgmtMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
vmPutNodeMsgToMgmtQueue
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SSingleWorker
*
pWorker
=
&
pMgmt
->
mgmtWorker
;
dTrace
(
"msg:%p, will be put into vnode-mgmt queue, worker:%s"
,
pMsg
,
pWorker
->
name
);
taosWriteQitem
(
pWorker
->
queue
,
pMsg
);
return
0
;
}
int32_t
vmProcessMonitorMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
int32_t
vmPutNodeMsgToMonitorQueue
(
SVnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SSingleWorker
*
pWorker
=
&
pMgmt
->
monitorWorker
;
dTrace
(
"msg:%p, will be put into vnode-monitor queue, worker:%s"
,
pMsg
,
pWorker
->
name
);
...
...
@@ -327,9 +320,8 @@ int32_t vmProcessMonitorMsg(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
0
;
}
static
int32_t
vmPutRpcMsgToQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
,
EQueueType
qtype
)
{
SVnodesMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
SMsgHead
*
pHead
=
pRpc
->
pCont
;
static
int32_t
vmPutRpcMsgToQueue
(
SVnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
,
EQueueType
qtype
)
{
SMsgHead
*
pHead
=
pRpc
->
pCont
;
SVnodeObj
*
pVnode
=
vmAcquireVnode
(
pMgmt
,
pHead
->
vgId
);
if
(
pVnode
==
NULL
)
return
-
1
;
...
...
@@ -377,33 +369,31 @@ static int32_t vmPutRpcMsgToQueue(SMgmtWrapper *pWrapper, SRpcMsg *pRpc, EQueueT
return
code
;
}
int32_t
vmPut
MsgToWriteQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
)
{
return
vmPutRpcMsgToQueue
(
p
Wrapper
,
pRpc
,
WRITE_QUEUE
);
int32_t
vmPut
RpcMsgToWriteQueue
(
SVnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
)
{
return
vmPutRpcMsgToQueue
(
p
Mgmt
,
pRpc
,
WRITE_QUEUE
);
}
int32_t
vmPutMsgToSyncQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
)
{
return
vmPutRpcMsgToQueue
(
pWrapper
,
pRpc
,
SYNC_QUEUE
);
}
int32_t
vmPutRpcMsgToSyncQueue
(
SVnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
)
{
return
vmPutRpcMsgToQueue
(
pMgmt
,
pRpc
,
SYNC_QUEUE
);
}
int32_t
vmPut
MsgToApplyQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
)
{
return
vmPutRpcMsgToQueue
(
p
Wrapper
,
pRpc
,
APPLY_QUEUE
);
int32_t
vmPut
RpcMsgToApplyQueue
(
SVnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
)
{
return
vmPutRpcMsgToQueue
(
p
Mgmt
,
pRpc
,
APPLY_QUEUE
);
}
int32_t
vmPut
MsgToQueryQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
)
{
return
vmPutRpcMsgToQueue
(
p
Wrapper
,
pRpc
,
QUERY_QUEUE
);
int32_t
vmPut
RpcMsgToQueryQueue
(
SVnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
)
{
return
vmPutRpcMsgToQueue
(
p
Mgmt
,
pRpc
,
QUERY_QUEUE
);
}
int32_t
vmPut
MsgToFetchQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
)
{
return
vmPutRpcMsgToQueue
(
p
Wrapper
,
pRpc
,
FETCH_QUEUE
);
int32_t
vmPut
RpcMsgToFetchQueue
(
SVnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
)
{
return
vmPutRpcMsgToQueue
(
p
Mgmt
,
pRpc
,
FETCH_QUEUE
);
}
int32_t
vmPut
MsgToMergeQueue
(
SMgmtWrapper
*
pWrapper
,
SRpcMsg
*
pRpc
)
{
return
vmPutRpcMsgToQueue
(
p
Wrapper
,
pRpc
,
MERGE_QUEUE
);
int32_t
vmPut
RpcMsgToMergeQueue
(
SVnodeMgmt
*
pMgmt
,
SRpcMsg
*
pRpc
)
{
return
vmPutRpcMsgToQueue
(
p
Mgmt
,
pRpc
,
MERGE_QUEUE
);
}
int32_t
vmGetQueueSize
(
S
MgmtWrapper
*
pWrapper
,
int32_t
vgId
,
EQueueType
qtype
)
{
int32_t
vmGetQueueSize
(
S
VnodeMgmt
*
pMgmt
,
int32_t
vgId
,
EQueueType
qtype
)
{
int32_t
size
=
-
1
;
SVnodeObj
*
pVnode
=
vmAcquireVnode
(
p
Wrapper
->
p
Mgmt
,
vgId
);
SVnodeObj
*
pVnode
=
vmAcquireVnode
(
pMgmt
,
vgId
);
if
(
pVnode
!=
NULL
)
{
switch
(
qtype
)
{
case
WRITE_QUEUE
:
...
...
@@ -428,11 +418,11 @@ int32_t vmGetQueueSize(SMgmtWrapper *pWrapper, int32_t vgId, EQueueType qtype) {
break
;
}
}
vmReleaseVnode
(
p
Wrapper
->
p
Mgmt
,
pVnode
);
vmReleaseVnode
(
pMgmt
,
pVnode
);
return
size
;
}
int32_t
vmAllocQueue
(
SVnode
s
Mgmt
*
pMgmt
,
SVnodeObj
*
pVnode
)
{
int32_t
vmAllocQueue
(
SVnodeMgmt
*
pMgmt
,
SVnodeObj
*
pVnode
)
{
pVnode
->
pWriteQ
=
tWWorkerAllocQueue
(
&
pMgmt
->
writePool
,
pVnode
,
(
FItems
)
vmProcessWriteQueue
);
pVnode
->
pSyncQ
=
tWWorkerAllocQueue
(
&
pMgmt
->
syncPool
,
pVnode
,
(
FItems
)
vmProcessSyncQueue
);
pVnode
->
pApplyQ
=
tWWorkerAllocQueue
(
&
pMgmt
->
writePool
,
pVnode
,
(
FItems
)
vmProcessApplyQueue
);
...
...
@@ -450,7 +440,7 @@ int32_t vmAllocQueue(SVnodesMgmt *pMgmt, SVnodeObj *pVnode) {
return
0
;
}
void
vmFreeQueue
(
SVnode
s
Mgmt
*
pMgmt
,
SVnodeObj
*
pVnode
)
{
void
vmFreeQueue
(
SVnodeMgmt
*
pMgmt
,
SVnodeObj
*
pVnode
)
{
tWWorkerFreeQueue
(
&
pMgmt
->
writePool
,
pVnode
->
pWriteQ
);
tWWorkerFreeQueue
(
&
pMgmt
->
syncPool
,
pVnode
->
pSyncQ
);
tWWorkerFreeQueue
(
&
pMgmt
->
writePool
,
pVnode
->
pApplyQ
);
...
...
@@ -466,7 +456,7 @@ void vmFreeQueue(SVnodesMgmt *pMgmt, SVnodeObj *pVnode) {
dDebug
(
"vgId:%d, vnode queue is freed"
,
pVnode
->
vgId
);
}
int32_t
vmStartWorker
(
SVnode
s
Mgmt
*
pMgmt
)
{
int32_t
vmStartWorker
(
SVnodeMgmt
*
pMgmt
)
{
SQWorkerPool
*
pQPool
=
&
pMgmt
->
queryPool
;
pQPool
->
name
=
"vnode-query"
;
pQPool
->
min
=
tsNumOfVnodeQueryThreads
;
...
...
@@ -506,25 +496,23 @@ int32_t vmStartWorker(SVnodesMgmt *pMgmt) {
return
-
1
;
}
if
(
tsMultiProcess
)
{
SSingleWorkerCfg
mCfg
=
{
.
min
=
1
,
.
max
=
1
,
.
name
=
"vnode-monitor"
,
.
fp
=
(
FItem
)
vmProcessMgmtMonitorQueue
,
.
param
=
pMgmt
,
};
if
(
tSingleWorkerInit
(
&
pMgmt
->
monitorWorker
,
&
mCfg
)
!=
0
)
{
dError
(
"failed to start mnode vnode-monitor worker since %s"
,
terrstr
());
return
-
1
;
}
SSingleWorkerCfg
mCfg
=
{
.
min
=
1
,
.
max
=
1
,
.
name
=
"vnode-monitor"
,
.
fp
=
(
FItem
)
vmProcessMgmtMonitorQueue
,
.
param
=
pMgmt
,
};
if
(
tSingleWorkerInit
(
&
pMgmt
->
monitorWorker
,
&
mCfg
)
!=
0
)
{
dError
(
"failed to start mnode vnode-monitor worker since %s"
,
terrstr
());
return
-
1
;
}
dDebug
(
"vnode workers are initialized"
);
return
0
;
}
void
vmStopWorker
(
SVnode
s
Mgmt
*
pMgmt
)
{
void
vmStopWorker
(
SVnodeMgmt
*
pMgmt
)
{
tSingleWorkerCleanup
(
&
pMgmt
->
monitorWorker
);
tSingleWorkerCleanup
(
&
pMgmt
->
mgmtWorker
);
tWWorkerCleanup
(
&
pMgmt
->
writePool
);
...
...
source/dnode/mgmt/
implemen
t/CMakeLists.txt
→
source/dnode/mgmt/
node_mgm
t/CMakeLists.txt
浏览文件 @
8e5b263d
aux_source_directory
(
src IMPLEMENT_SRC
)
add_library
(
dnode STATIC
${
IMPLEMENT_SRC
}
)
target_link_libraries
(
dnode mgmt_bnode mgmt_mnode mgmt_qnode mgmt_snode mgmt_vnode
dnode mgmt_bnode mgmt_mnode mgmt_qnode mgmt_snode mgmt_vnode
mgmt_dnode
)
target_include_directories
(
dnode
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
)
\ No newline at end of file
)
source/dnode/mgmt/
implement/inc/dmImp
.h
→
source/dnode/mgmt/
node_mgmt/inc/dmMgmt
.h
浏览文件 @
8e5b263d
...
...
@@ -16,15 +16,99 @@
#ifndef _TD_DND_IMP_H_
#define _TD_DND_IMP_H_
// tobe deleted
#include "uv.h"
#include "dmUtil.h"
#include "dmInt.h"
#ifdef __cplusplus
extern
"C"
{
#endif
typedef
struct
SMgmtWrapper
{
SDnode
*
pDnode
;
SMgmtFunc
func
;
void
*
pMgmt
;
const
char
*
name
;
char
*
path
;
int32_t
refCount
;
SRWLatch
latch
;
EDndNodeType
nodeType
;
bool
deployed
;
bool
required
;
EDndProcType
procType
;
int32_t
procId
;
SProcObj
*
procObj
;
SShm
procShm
;
NodeMsgFp
msgFps
[
TDMT_MAX
];
}
SMgmtWrapper
;
typedef
struct
{
EDndNodeType
defaultNtype
;
bool
needCheckVgId
;
}
SMsgHandle
;
typedef
struct
{
void
*
serverRpc
;
void
*
clientRpc
;
SMsgHandle
msgHandles
[
TDMT_MAX
];
}
SDnodeTrans
;
typedef
struct
{
char
name
[
TSDB_STEP_NAME_LEN
];
char
desc
[
TSDB_STEP_DESC_LEN
];
}
SStartupInfo
;
typedef
struct
SUdfdData
{
bool
startCalled
;
bool
needCleanUp
;
uv_loop_t
loop
;
uv_thread_t
thread
;
uv_barrier_t
barrier
;
uv_process_t
process
;
int
spawnErr
;
uv_pipe_t
ctrlPipe
;
uv_async_t
stopAsync
;
int32_t
stopCalled
;
int32_t
dnodeId
;
}
SUdfdData
;
typedef
struct
SDnode
{
EDndProcType
ptype
;
EDndNodeType
ntype
;
EDndEvent
event
;
EDndRunStatus
status
;
SStartupInfo
startup
;
SDnodeTrans
trans
;
SUdfdData
udfdData
;
TdThreadMutex
mutex
;
SRWLatch
latch
;
SEpSet
mnodeEps
;
TdFilePtr
lockfile
;
SMgmtInputOpt
input
;
SMgmtWrapper
wrappers
[
NODE_END
];
}
SDnode
;
// dmExec.c
int32_t
dmOpenNode
(
SMgmtWrapper
*
pWrapper
);
void
dmCloseNode
(
SMgmtWrapper
*
pWrapper
);
// dmObj.c
SMgmtWrapper
*
dmAcquireWrapper
(
SDnode
*
pDnode
,
EDndNodeType
nType
);
int32_t
dmMarkWrapper
(
SMgmtWrapper
*
pWrapper
);
void
dmReleaseWrapper
(
SMgmtWrapper
*
pWrapper
);
void
dmSetStatus
(
SDnode
*
pDnode
,
EDndRunStatus
stype
);
void
dmSetEvent
(
SDnode
*
pDnode
,
EDndEvent
event
);
void
dmReportStartup
(
SDnode
*
pDnode
,
const
char
*
pName
,
const
char
*
pDesc
);
void
dmReportStartupByWrapper
(
SMgmtWrapper
*
pWrapper
,
const
char
*
pName
,
const
char
*
pDesc
);
void
dmProcessServerStartupStatus
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
);
void
dmProcessNetTestReq
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
);
int32_t
dmProcessCreateNodeReq
(
SDnode
*
pDnode
,
EDndNodeType
ntype
,
SNodeMsg
*
pMsg
);
int32_t
dmProcessDropNodeReq
(
SDnode
*
pDnode
,
EDndNodeType
ntype
,
SNodeMsg
*
pMsg
);
// dmTransport.c
int32_t
dmInitServer
(
SDnode
*
pDnode
);
void
dmCleanupServer
(
SDnode
*
pDnode
);
...
...
@@ -33,52 +117,14 @@ void dmCleanupClient(SDnode *pDnode);
SProcCfg
dmGenProcCfg
(
SMgmtWrapper
*
pWrapper
);
SMsgCb
dmGetMsgcb
(
SMgmtWrapper
*
pWrapper
);
int32_t
dmInitMsgHandle
(
SDnode
*
pDnode
);
void
dmSendRecv
(
SDnode
*
pDnode
,
SEpSet
*
pEpSet
,
SRpcMsg
*
pReq
,
SRpcMsg
*
pRsp
);
void
dmSendToMnodeRecv
(
SDnode
*
pDnode
,
SRpcMsg
*
pReq
,
SRpcMsg
*
pRsp
);
// dmEps.c
int32_t
dmReadEps
(
SDnode
*
pDnode
);
int32_t
dmWriteEps
(
SDnode
*
pDnode
);
void
dmUpdateEps
(
SDnode
*
pDnode
,
SArray
*
pDnodeEps
);
// dmHandle.c
void
dmSendStatusReq
(
SDnode
*
pDnode
);
int32_t
dmProcessConfigReq
(
SDnode
*
pDnode
,
SNodeMsg
*
pMsg
);
int32_t
dmProcessAuthRsp
(
SDnode
*
pDnode
,
SNodeMsg
*
pMsg
);
int32_t
dmProcessGrantRsp
(
SDnode
*
pDnode
,
SNodeMsg
*
pMsg
);
int32_t
dmProcessCreateNodeReq
(
SDnode
*
pDnode
,
EDndNodeType
ntype
,
SNodeMsg
*
pMsg
);
int32_t
dmProcessDropNodeReq
(
SDnode
*
pDnode
,
EDndNodeType
ntype
,
SNodeMsg
*
pMsg
);
// dmMonitor.c
void
dmGetVnodeLoads
(
SDnode
*
pDnode
,
SMonVloadInfo
*
pInfo
);
void
dmGetMnodeLoads
(
SDnode
*
pDnode
,
SMonMloadInfo
*
pInfo
);
void
dmSendMonitorReport
(
SDnode
*
pDnode
);
// dmWorker.c
int32_t
dmStartStatusThread
(
SDnode
*
pDnode
);
void
dmStopStatusThread
(
SDnode
*
pDnode
);
int32_t
dmStartMonitorThread
(
SDnode
*
pDnode
);
void
dmStopMonitorThread
(
SDnode
*
pDnode
);
int32_t
dmStartWorker
(
SDnode
*
pDnode
);
void
dmStopWorker
(
SDnode
*
pDnode
);
int32_t
dmProcessMgmtMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
dmProcessStatusMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
// mgmt nodes
void
dmSetMgmtFp
(
SMgmtWrapper
*
pWrapper
);
void
bmSetMgmtFp
(
SMgmtWrapper
*
pWrapper
);
void
qmSetMgmtFp
(
SMgmtWrapper
*
pWrapper
);
void
smSetMgmtFp
(
SMgmtWrapper
*
pWrapper
);
void
vmSetMgmtFp
(
SMgmtWrapper
*
pWrapper
);
void
mmSetMgmtFp
(
SMgmtWrapper
*
pWrapper
);
void
vmGetVnodeLoads
(
SMgmtWrapper
*
pWrapper
,
SMonVloadInfo
*
pInfo
);
void
mmGetMnodeLoads
(
SMgmtWrapper
*
pWrapper
,
SMonMloadInfo
*
pInfo
);
void
mmGetMonitorInfo
(
SMgmtWrapper
*
pWrapper
,
SMonMmInfo
*
mmInfo
);
void
vmGetMonitorInfo
(
SMgmtWrapper
*
pWrapper
,
SMonVmInfo
*
vmInfo
);
void
qmGetMonitorInfo
(
SMgmtWrapper
*
pWrapper
,
SMonQmInfo
*
qmInfo
);
void
smGetMonitorInfo
(
SMgmtWrapper
*
pWrapper
,
SMonSmInfo
*
smInfo
);
void
bmGetMonitorInfo
(
SMgmtWrapper
*
pWrapper
,
SMonBmInfo
*
bmInfo
);
SMgmtFunc
dmGetMgmtFunc
();
SMgmtFunc
bmGetMgmtFunc
();
SMgmtFunc
qmGetMgmtFunc
();
SMgmtFunc
smGetMgmtFunc
();
SMgmtFunc
vmGetMgmtFunc
();
SMgmtFunc
mmGetMgmtFunc
();
#ifdef __cplusplus
}
...
...
source/dnode/mgmt/
interface/src/dmIn
t.c
→
source/dnode/mgmt/
node_mgmt/src/dmMgm
t.c
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
source/dnode/mgmt/
implement/src/dmExec
.c
→
source/dnode/mgmt/
node_mgmt/src/dmRun
.c
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
source/dnode/mgmt/
implemen
t/src/dmTransport.c
→
source/dnode/mgmt/
node_mgm
t/src/dmTransport.c
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
source/dnode/mgmt/
interface
/CMakeLists.txt
→
source/dnode/mgmt/
node_util
/CMakeLists.txt
浏览文件 @
8e5b263d
aux_source_directory
(
src
DNODE_INTERFACE
)
add_library
(
dnode_interface STATIC
${
DNODE_INTERFACE
}
)
aux_source_directory
(
src
NODE_UTIL
)
add_library
(
node_util STATIC
${
NODE_UTIL
}
)
target_include_directories
(
dnode_interface
node_util
PUBLIC
"
${
TD_SOURCE_DIR
}
/include/dnode/mgmt"
PUBLIC
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
)
target_link_libraries
(
dnode_interface
cjson mnode vnode qnode snode bnode wal sync taos_static tfs monitor
node_util
cjson mnode vnode qnode snode bnode wal sync taos_static tfs monitor
)
\ No newline at end of file
source/dnode/mgmt/node_util/inc/dmUtil.h
0 → 100644
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
source/dnode/mgmt/
interface
/src/dmEnv.c
→
source/dnode/mgmt/
node_util
/src/dmEnv.c
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
source/dnode/mgmt/
interface
/src/dmFile.c
→
source/dnode/mgmt/
node_util
/src/dmFile.c
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
source/dnode/mgmt/node_util/src/dmUtil.c
0 → 100644
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
source/dnode/mgmt/test/CMakeLists.txt
浏览文件 @
8e5b263d
...
...
@@ -3,7 +3,7 @@ if(${BUILD_TEST})
add_subdirectory
(
qnode
)
add_subdirectory
(
bnode
)
add_subdirectory
(
snode
)
add_subdirectory
(
mnode
)
#
add_subdirectory(mnode)
add_subdirectory
(
vnode
)
add_subdirectory
(
sut
)
endif
(
${
BUILD_TEST
}
)
source/dnode/mgmt/test/bnode/dbnode.cpp
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
source/dnode/mgmt/test/qnode/dqnode.cpp
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
source/dnode/mgmt/test/snode/dsnode.cpp
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
source/dnode/mnode/impl/inc/mndInt.h
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
source/dnode/mnode/impl/src/mnode.c
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
source/dnode/mnode/impl/test/CMakeLists.txt
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
source/dnode/qnode/src/qnode.c
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
source/libs/function/inc/fnLog.h
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
source/libs/function/src/tudf.c
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
source/libs/qcom/src/queryUtil.c
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
tests/pytest/util/dnodes.py
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
tests/script/jenkins/basic.txt
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
tests/system-test/fulltest.sh
浏览文件 @
8e5b263d
...
...
@@ -54,4 +54,4 @@ python3 ./test.py -f 2-query/arccos.py
python3 ./test.py
-f
2-query/arctan.py
# python3 ./test.py -f 2-query/query_cols_tags_and_or.py
python3 ./test.py
-f
7-tmq/basic5.py
#
python3 ./test.py -f 7-tmq/basic5.py
tools/shell/src/shellNettest.c
浏览文件 @
8e5b263d
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录