Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
2a95c8ef
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
未验证
提交
2a95c8ef
编写于
4月 14, 2022
作者:
S
Shengliang Guan
提交者:
GitHub
4月 14, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #11497 from taosdata/feature/node
refact(cluster): node mgmt
上级
a654ece8
a9a24a14
变更
71
展开全部
隐藏空白更改
内联
并排
Showing
71 changed file
with
2577 addition
and
1378 deletion
+2577
-1378
include/common/tmsg.h
include/common/tmsg.h
+4
-3
include/dnode/mgmt/dnode.h
include/dnode/mgmt/dnode.h
+7
-7
include/dnode/mnode/mnode.h
include/dnode/mnode/mnode.h
+7
-0
include/util/tprocess.h
include/util/tprocess.h
+4
-4
source/common/src/tglobal.c
source/common/src/tglobal.c
+4
-4
source/common/src/tmsg.c
source/common/src/tmsg.c
+6
-4
source/dnode/mgmt/CMakeLists.txt
source/dnode/mgmt/CMakeLists.txt
+9
-22
source/dnode/mgmt/dm/dmInt.c
source/dnode/mgmt/dm/dmInt.c
+0
-171
source/dnode/mgmt/exe/dmMain.c
source/dnode/mgmt/exe/dmMain.c
+48
-51
source/dnode/mgmt/implement/CMakeLists.txt
source/dnode/mgmt/implement/CMakeLists.txt
+17
-0
source/dnode/mgmt/implement/inc/dmImp.h
source/dnode/mgmt/implement/inc/dmImp.h
+83
-0
source/dnode/mgmt/implement/src/dmEps.c
source/dnode/mgmt/implement/src/dmEps.c
+78
-63
source/dnode/mgmt/implement/src/dmExec.c
source/dnode/mgmt/implement/src/dmExec.c
+339
-0
source/dnode/mgmt/implement/src/dmHandle.c
source/dnode/mgmt/implement/src/dmHandle.c
+274
-0
source/dnode/mgmt/implement/src/dmMonitor.c
source/dnode/mgmt/implement/src/dmMonitor.c
+28
-37
source/dnode/mgmt/implement/src/dmObj.c
source/dnode/mgmt/implement/src/dmObj.c
+147
-0
source/dnode/mgmt/implement/src/dmTransport.c
source/dnode/mgmt/implement/src/dmTransport.c
+264
-234
source/dnode/mgmt/implement/src/dmWorker.c
source/dnode/mgmt/implement/src/dmWorker.c
+181
-0
source/dnode/mgmt/inc/dndInt.h
source/dnode/mgmt/inc/dndInt.h
+0
-199
source/dnode/mgmt/interface/CMakeLists.txt
source/dnode/mgmt/interface/CMakeLists.txt
+10
-0
source/dnode/mgmt/interface/inc/dmDef.h
source/dnode/mgmt/interface/inc/dmDef.h
+151
-0
source/dnode/mgmt/interface/inc/dmInt.h
source/dnode/mgmt/interface/inc/dmInt.h
+52
-0
source/dnode/mgmt/interface/inc/dmLog.h
source/dnode/mgmt/interface/inc/dmLog.h
+36
-0
source/dnode/mgmt/interface/src/dmEnv.c
source/dnode/mgmt/interface/src/dmEnv.c
+3
-63
source/dnode/mgmt/interface/src/dmFile.c
source/dnode/mgmt/interface/src/dmFile.c
+36
-52
source/dnode/mgmt/interface/src/dmInt.c
source/dnode/mgmt/interface/src/dmInt.c
+173
-0
source/dnode/mgmt/mgmt_bnode/CMakeLists.txt
source/dnode/mgmt/mgmt_bnode/CMakeLists.txt
+9
-0
source/dnode/mgmt/mgmt_bnode/inc/bmInt.h
source/dnode/mgmt/mgmt_bnode/inc/bmInt.h
+1
-5
source/dnode/mgmt/mgmt_bnode/src/bmHandle.c
source/dnode/mgmt/mgmt_bnode/src/bmHandle.c
+20
-9
source/dnode/mgmt/mgmt_bnode/src/bmInt.c
source/dnode/mgmt/mgmt_bnode/src/bmInt.c
+22
-60
source/dnode/mgmt/mgmt_bnode/src/bmWorker.c
source/dnode/mgmt/mgmt_bnode/src/bmWorker.c
+0
-0
source/dnode/mgmt/mgmt_mnode/CMakeLists.txt
source/dnode/mgmt/mgmt_mnode/CMakeLists.txt
+9
-0
source/dnode/mgmt/mgmt_mnode/inc/mmInt.h
source/dnode/mgmt/mgmt_mnode/inc/mmInt.h
+3
-4
source/dnode/mgmt/mgmt_mnode/src/mmFile.c
source/dnode/mgmt/mgmt_mnode/src/mmFile.c
+26
-18
source/dnode/mgmt/mgmt_mnode/src/mmHandle.c
source/dnode/mgmt/mgmt_mnode/src/mmHandle.c
+210
-0
source/dnode/mgmt/mgmt_mnode/src/mmInt.c
source/dnode/mgmt/mgmt_mnode/src/mmInt.c
+67
-82
source/dnode/mgmt/mgmt_mnode/src/mmWorker.c
source/dnode/mgmt/mgmt_mnode/src/mmWorker.c
+0
-0
source/dnode/mgmt/mgmt_qnode/CMakeLists.txt
source/dnode/mgmt/mgmt_qnode/CMakeLists.txt
+9
-0
source/dnode/mgmt/mgmt_qnode/inc/qmInt.h
source/dnode/mgmt/mgmt_qnode/inc/qmInt.h
+2
-5
source/dnode/mgmt/mgmt_qnode/src/qmHandle.c
source/dnode/mgmt/mgmt_qnode/src/qmHandle.c
+28
-17
source/dnode/mgmt/mgmt_qnode/src/qmInt.c
source/dnode/mgmt/mgmt_qnode/src/qmInt.c
+24
-61
source/dnode/mgmt/mgmt_qnode/src/qmWorker.c
source/dnode/mgmt/mgmt_qnode/src/qmWorker.c
+0
-0
source/dnode/mgmt/mgmt_snode/CMakeLists.txt
source/dnode/mgmt/mgmt_snode/CMakeLists.txt
+9
-0
source/dnode/mgmt/mgmt_snode/inc/smInt.h
source/dnode/mgmt/mgmt_snode/inc/smInt.h
+2
-5
source/dnode/mgmt/mgmt_snode/src/smHandle.c
source/dnode/mgmt/mgmt_snode/src/smHandle.c
+21
-10
source/dnode/mgmt/mgmt_snode/src/smInt.c
source/dnode/mgmt/mgmt_snode/src/smInt.c
+21
-61
source/dnode/mgmt/mgmt_snode/src/smWorker.c
source/dnode/mgmt/mgmt_snode/src/smWorker.c
+0
-0
source/dnode/mgmt/mgmt_vnode/CMakeLists.txt
source/dnode/mgmt/mgmt_vnode/CMakeLists.txt
+9
-0
source/dnode/mgmt/mgmt_vnode/inc/vmInt.h
source/dnode/mgmt/mgmt_vnode/inc/vmInt.h
+3
-1
source/dnode/mgmt/mgmt_vnode/src/vmFile.c
source/dnode/mgmt/mgmt_vnode/src/vmFile.c
+0
-0
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
+46
-47
source/dnode/mgmt/mgmt_vnode/src/vmInt.c
source/dnode/mgmt/mgmt_vnode/src/vmInt.c
+6
-6
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
source/dnode/mgmt/mgmt_vnode/src/vmWorker.c
+0
-0
source/dnode/mgmt/test/CMakeLists.txt
source/dnode/mgmt/test/CMakeLists.txt
+9
-8
source/dnode/mgmt/test/bnode/CMakeLists.txt
source/dnode/mgmt/test/bnode/CMakeLists.txt
+3
-4
source/dnode/mgmt/test/mnode/CMakeLists.txt
source/dnode/mgmt/test/mnode/CMakeLists.txt
+3
-4
source/dnode/mgmt/test/qnode/CMakeLists.txt
source/dnode/mgmt/test/qnode/CMakeLists.txt
+2
-2
source/dnode/mgmt/test/snode/CMakeLists.txt
source/dnode/mgmt/test/snode/CMakeLists.txt
+2
-2
source/dnode/mgmt/test/sut/CMakeLists.txt
source/dnode/mgmt/test/sut/CMakeLists.txt
+6
-10
source/dnode/mgmt/test/sut/src/server.cpp
source/dnode/mgmt/test/sut/src/server.cpp
+4
-4
source/dnode/mgmt/test/sut/src/sut.cpp
source/dnode/mgmt/test/sut/src/sut.cpp
+2
-2
source/dnode/mgmt/test/vnode/CMakeLists.txt
source/dnode/mgmt/test/vnode/CMakeLists.txt
+2
-2
source/dnode/mnode/impl/inc/mndGrant.h
source/dnode/mnode/impl/inc/mndGrant.h
+0
-1
source/dnode/mnode/impl/src/mndDnode.c
source/dnode/mnode/impl/src/mndDnode.c
+2
-2
source/dnode/mnode/impl/src/mndGrant.c
source/dnode/mnode/impl/src/mndGrant.c
+1
-1
source/dnode/mnode/impl/src/mnode.c
source/dnode/mnode/impl/src/mnode.c
+2
-1
source/libs/transport/src/transSrv.c
source/libs/transport/src/transSrv.c
+6
-6
source/util/src/tprocess.c
source/util/src/tprocess.c
+8
-8
source/util/test/procTest.cpp
source/util/test/procTest.cpp
+14
-14
tests/script/jenkins/basic.txt
tests/script/jenkins/basic.txt
+2
-1
tests/script/tsim/db/error1.sim
tests/script/tsim/db/error1.sim
+1
-1
未找到文件。
include/common/tmsg.h
浏览文件 @
2a95c8ef
...
...
@@ -747,8 +747,8 @@ typedef struct {
}
SVnodeLoad
;
typedef
struct
{
int32_t
sver
;
// software version
int64_t
d
v
er
;
// dnode table version in sdb
int32_t
sver
;
// software version
int64_t
d
nodeV
er
;
// dnode table version in sdb
int32_t
dnodeId
;
int64_t
clusterId
;
int64_t
rebootTime
;
...
...
@@ -762,6 +762,7 @@ typedef struct {
int32_t
tSerializeSStatusReq
(
void
*
buf
,
int32_t
bufLen
,
SStatusReq
*
pReq
);
int32_t
tDeserializeSStatusReq
(
void
*
buf
,
int32_t
bufLen
,
SStatusReq
*
pReq
);
void
tFreeSStatusReq
(
SStatusReq
*
pReq
);
typedef
struct
{
int32_t
dnodeId
;
...
...
@@ -775,7 +776,7 @@ typedef struct {
}
SDnodeEp
;
typedef
struct
{
int64_t
d
v
er
;
int64_t
d
nodeV
er
;
SDnodeCfg
dnodeCfg
;
SArray
*
pDnodeEps
;
// Array of SDnodeEp
}
SStatusRsp
;
...
...
include/dnode/mgmt/dnode.h
浏览文件 @
2a95c8ef
...
...
@@ -30,12 +30,12 @@ typedef struct SDnode SDnode;
*
* @return int32_t 0 for success and -1 for failure
*/
int32_t
d
nd
Init
();
int32_t
d
m
Init
();
/**
* @brief Clear the environment
*/
void
d
nd
Cleanup
();
void
d
m
Cleanup
();
/* ------------------------ SDnode ----------------------- */
typedef
struct
{
...
...
@@ -51,7 +51,7 @@ typedef struct {
int8_t
ntype
;
}
SDnodeOpt
;
typedef
enum
{
DND_EVENT_START
,
DND_EVENT_STOP
=
1
,
DND_EVENT_CHILD
}
EDndEvent
;
typedef
enum
{
DND_EVENT_START
=
0
,
DND_EVENT_STOP
=
1
,
DND_EVENT_CHILD
=
2
}
EDndEvent
;
/**
* @brief Initialize and start the dnode.
...
...
@@ -59,21 +59,21 @@ typedef enum { DND_EVENT_START, DND_EVENT_STOP = 1, DND_EVENT_CHILD } EDndEvent;
* @param pOption Option of the dnode.
* @return SDnode* The dnode object.
*/
SDnode
*
d
nd
Create
(
const
SDnodeOpt
*
pOption
);
SDnode
*
d
m
Create
(
const
SDnodeOpt
*
pOption
);
/**
* @brief Stop and cleanup the dnode.
*
* @param pDnode The dnode object to close.
*/
void
d
nd
Close
(
SDnode
*
pDnode
);
void
d
m
Close
(
SDnode
*
pDnode
);
/**
* @brief Run dnode until specific event is receive.
*
* @param pDnode The dnode object to run.
*/
int32_t
d
nd
Run
(
SDnode
*
pDnode
);
int32_t
d
m
Run
(
SDnode
*
pDnode
);
/**
* @brief Handle event in the dnode.
...
...
@@ -81,7 +81,7 @@ int32_t dndRun(SDnode *pDnode);
* @param pDnode The dnode object to close.
* @param event The event to handle.
*/
void
d
ndHandle
Event
(
SDnode
*
pDnode
,
EDndEvent
event
);
void
d
mSet
Event
(
SDnode
*
pDnode
,
EDndEvent
event
);
#ifdef __cplusplus
}
...
...
include/dnode/mnode/mnode.h
浏览文件 @
2a95c8ef
...
...
@@ -68,6 +68,7 @@ int32_t mndAlter(SMnode *pMnode, const SMnodeOpt *pOption);
* @param pMnode The mnode object.
*/
int32_t
mndStart
(
SMnode
*
pMnode
);
void
mndStop
(
SMnode
*
pMnode
);
/**
* @brief Get mnode monitor info.
...
...
@@ -102,6 +103,12 @@ int32_t mndRetriveAuth(SMnode *pMnode, char *user, char *spi, char *encrypt, cha
*/
int32_t
mndProcessMsg
(
SNodeMsg
*
pMsg
);
/**
* @brief Generate machine code
*
*/
void
mndGenerateMachineCode
();
#ifdef __cplusplus
}
#endif
...
...
include/util/tprocess.h
浏览文件 @
2a95c8ef
...
...
@@ -22,13 +22,13 @@
extern
"C"
{
#endif
typedef
enum
{
PROC_
REQ
=
1
,
PROC_RSP
,
PROC_REGIST
,
PROC_RELEASE
}
ProcFuncType
;
typedef
enum
{
PROC_
FUNC_REQ
=
1
,
PROC_FUNC_RSP
,
PROC_FUNC_REGIST
,
PROC_FUNC_RELEASE
}
E
ProcFuncType
;
typedef
struct
SProcObj
SProcObj
;
typedef
void
*
(
*
ProcMallocFp
)(
int32_t
contLen
);
typedef
void
*
(
*
ProcFreeFp
)(
void
*
pCont
);
typedef
void
(
*
ProcConsumeFp
)(
void
*
parent
,
void
*
pHead
,
int16_t
headLen
,
void
*
pBody
,
int32_t
bodyLen
,
ProcFuncType
ftype
);
E
ProcFuncType
ftype
);
typedef
struct
{
ProcConsumeFp
childConsumeFp
;
...
...
@@ -53,11 +53,11 @@ int32_t taosProcRun(SProcObj *pProc);
void
taosProcStop
(
SProcObj
*
pProc
);
int32_t
taosProcPutToChildQ
(
SProcObj
*
pProc
,
const
void
*
pHead
,
int16_t
headLen
,
const
void
*
pBody
,
int32_t
bodyLen
,
void
*
handle
,
ProcFuncType
ftype
);
void
*
handle
,
E
ProcFuncType
ftype
);
void
taosProcRemoveHandle
(
SProcObj
*
pProc
,
void
*
handle
);
void
taosProcCloseHandles
(
SProcObj
*
pProc
,
void
(
*
HandleFp
)(
void
*
handle
));
void
taosProcPutToParentQ
(
SProcObj
*
pProc
,
const
void
*
pHead
,
int16_t
headLen
,
const
void
*
pBody
,
int32_t
bodyLen
,
ProcFuncType
ftype
);
E
ProcFuncType
ftype
);
#ifdef __cplusplus
}
...
...
source/common/src/tglobal.c
浏览文件 @
2a95c8ef
...
...
@@ -189,7 +189,7 @@ static int32_t taosSetTfsCfg(SConfig *pCfg) {
tsDiskCfgNum
=
1
;
taosAddDataDir
(
0
,
pItem
->
str
,
0
,
1
);
tstrncpy
(
tsDataDir
,
pItem
->
str
,
PATH_MAX
);
if
(
taosMkDir
(
tsDataDir
)
!=
0
)
{
if
(
taosM
ulM
kDir
(
tsDataDir
)
!=
0
)
{
uError
(
"failed to create dataDir:%s since %s"
,
tsDataDir
,
terrstr
());
return
-
1
;
}
...
...
@@ -200,12 +200,12 @@ static int32_t taosSetTfsCfg(SConfig *pCfg) {
memcpy
(
&
tsDiskCfg
[
index
],
pCfg
,
sizeof
(
SDiskCfg
));
if
(
pCfg
->
level
==
0
&&
pCfg
->
primary
==
1
)
{
tstrncpy
(
tsDataDir
,
pCfg
->
dir
,
PATH_MAX
);
if
(
taosMkDir
(
tsDataDir
)
!=
0
)
{
if
(
taosM
ulM
kDir
(
tsDataDir
)
!=
0
)
{
uError
(
"failed to create dataDir:%s since %s"
,
tsDataDir
,
terrstr
());
return
-
1
;
}
}
if
(
taosMkDir
(
pCfg
->
dir
)
!=
0
)
{
if
(
taosM
ulM
kDir
(
pCfg
->
dir
)
!=
0
)
{
uError
(
"failed to create tfsDir:%s since %s"
,
tsDataDir
,
terrstr
());
return
-
1
;
}
...
...
@@ -486,7 +486,7 @@ static int32_t taosSetClientCfg(SConfig *pCfg) {
tstrncpy
(
tsTempDir
,
cfgGetItem
(
pCfg
,
"tempDir"
)
->
str
,
PATH_MAX
);
taosExpandDir
(
tsTempDir
,
tsTempDir
,
PATH_MAX
);
tsTempSpace
.
reserved
=
cfgGetItem
(
pCfg
,
"minimalTempDirGB"
)
->
fval
;
if
(
taosMkDir
(
tsTempDir
)
!=
0
)
{
if
(
taosM
ulM
kDir
(
tsTempDir
)
!=
0
)
{
uError
(
"failed to create tempDir:%s since %s"
,
tsTempDir
,
terrstr
());
return
-
1
;
}
...
...
source/common/src/tmsg.c
浏览文件 @
2a95c8ef
...
...
@@ -870,7 +870,7 @@ int32_t tSerializeSStatusReq(void *buf, int32_t bufLen, SStatusReq *pReq) {
// status
if
(
tEncodeI32
(
&
encoder
,
pReq
->
sver
)
<
0
)
return
-
1
;
if
(
tEncodeI64
(
&
encoder
,
pReq
->
d
v
er
)
<
0
)
return
-
1
;
if
(
tEncodeI64
(
&
encoder
,
pReq
->
d
nodeV
er
)
<
0
)
return
-
1
;
if
(
tEncodeI32
(
&
encoder
,
pReq
->
dnodeId
)
<
0
)
return
-
1
;
if
(
tEncodeI64
(
&
encoder
,
pReq
->
clusterId
)
<
0
)
return
-
1
;
if
(
tEncodeI64
(
&
encoder
,
pReq
->
rebootTime
)
<
0
)
return
-
1
;
...
...
@@ -915,7 +915,7 @@ int32_t tDeserializeSStatusReq(void *buf, int32_t bufLen, SStatusReq *pReq) {
// status
if
(
tDecodeI32
(
&
decoder
,
&
pReq
->
sver
)
<
0
)
return
-
1
;
if
(
tDecodeI64
(
&
decoder
,
&
pReq
->
d
v
er
)
<
0
)
return
-
1
;
if
(
tDecodeI64
(
&
decoder
,
&
pReq
->
d
nodeV
er
)
<
0
)
return
-
1
;
if
(
tDecodeI32
(
&
decoder
,
&
pReq
->
dnodeId
)
<
0
)
return
-
1
;
if
(
tDecodeI64
(
&
decoder
,
&
pReq
->
clusterId
)
<
0
)
return
-
1
;
if
(
tDecodeI64
(
&
decoder
,
&
pReq
->
rebootTime
)
<
0
)
return
-
1
;
...
...
@@ -960,6 +960,8 @@ int32_t tDeserializeSStatusReq(void *buf, int32_t bufLen, SStatusReq *pReq) {
return
0
;
}
void
tFreeSStatusReq
(
SStatusReq
*
pReq
)
{
taosArrayDestroy
(
pReq
->
pVloads
);
}
int32_t
tSerializeSStatusRsp
(
void
*
buf
,
int32_t
bufLen
,
SStatusRsp
*
pRsp
)
{
SCoder
encoder
=
{
0
};
tCoderInit
(
&
encoder
,
TD_LITTLE_ENDIAN
,
buf
,
bufLen
,
TD_ENCODER
);
...
...
@@ -967,7 +969,7 @@ int32_t tSerializeSStatusRsp(void *buf, int32_t bufLen, SStatusRsp *pRsp) {
if
(
tStartEncode
(
&
encoder
)
<
0
)
return
-
1
;
// status
if
(
tEncodeI64
(
&
encoder
,
pRsp
->
d
v
er
)
<
0
)
return
-
1
;
if
(
tEncodeI64
(
&
encoder
,
pRsp
->
d
nodeV
er
)
<
0
)
return
-
1
;
// dnode cfg
if
(
tEncodeI32
(
&
encoder
,
pRsp
->
dnodeCfg
.
dnodeId
)
<
0
)
return
-
1
;
...
...
@@ -998,7 +1000,7 @@ int32_t tDeserializeSStatusRsp(void *buf, int32_t bufLen, SStatusRsp *pRsp) {
if
(
tStartDecode
(
&
decoder
)
<
0
)
return
-
1
;
// status
if
(
tDecodeI64
(
&
decoder
,
&
pRsp
->
d
v
er
)
<
0
)
return
-
1
;
if
(
tDecodeI64
(
&
decoder
,
&
pRsp
->
d
nodeV
er
)
<
0
)
return
-
1
;
// cluster cfg
if
(
tDecodeI32
(
&
decoder
,
&
pRsp
->
dnodeCfg
.
dnodeId
)
<
0
)
return
-
1
;
...
...
source/dnode/mgmt/CMakeLists.txt
浏览文件 @
2a95c8ef
aux_source_directory
(
dm DNODE_SRC
)
aux_source_directory
(
qm DNODE_SRC
)
aux_source_directory
(
bm DNODE_SRC
)
aux_source_directory
(
sm DNODE_SRC
)
aux_source_directory
(
vm DNODE_SRC
)
aux_source_directory
(
mm DNODE_SRC
)
aux_source_directory
(
main DNODE_SRC
)
add_library
(
dnode STATIC
${
DNODE_SRC
}
)
target_link_libraries
(
dnode cjson mnode vnode qnode snode bnode wal sync taos tfs monitor
)
target_include_directories
(
dnode
PUBLIC
"
${
TD_SOURCE_DIR
}
/include/dnode/mgmt"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
)
add_subdirectory
(
interface
)
add_subdirectory
(
implement
)
add_subdirectory
(
mgmt_bnode
)
add_subdirectory
(
mgmt_mnode
)
add_subdirectory
(
mgmt_qnode
)
add_subdirectory
(
mgmt_snode
)
add_subdirectory
(
mgmt_vnode
)
add_subdirectory
(
test
)
aux_source_directory
(
exe EXEC_SRC
)
add_executable
(
taosd
${
EXEC_SRC
}
)
target_include_directories
(
taosd
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
PRIVATE
"
${
TD_SOURCE_DIR
}
/source/dnode/mnode/impl/inc"
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/implement/inc"
)
target_link_libraries
(
taosd dnode
)
if
(
${
BUILD_TEST
}
)
add_subdirectory
(
test
)
endif
(
${
BUILD_TEST
}
)
source/dnode/mgmt/dm/dmInt.c
已删除
100644 → 0
浏览文件 @
a654ece8
/*
* 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"
void
dmGetMnodeEpSet
(
SDnodeMgmt
*
pMgmt
,
SEpSet
*
pEpSet
)
{
taosRLockLatch
(
&
pMgmt
->
latch
);
*
pEpSet
=
pMgmt
->
mnodeEpSet
;
taosRUnLockLatch
(
&
pMgmt
->
latch
);
}
void
dmUpdateMnodeEpSet
(
SDnodeMgmt
*
pMgmt
,
SEpSet
*
pEpSet
)
{
dInfo
(
"mnode is changed, num:%d use:%d"
,
pEpSet
->
numOfEps
,
pEpSet
->
inUse
);
taosWLockLatch
(
&
pMgmt
->
latch
);
pMgmt
->
mnodeEpSet
=
*
pEpSet
;
for
(
int32_t
i
=
0
;
i
<
pEpSet
->
numOfEps
;
++
i
)
{
dInfo
(
"mnode index:%d %s:%u"
,
i
,
pEpSet
->
eps
[
i
].
fqdn
,
pEpSet
->
eps
[
i
].
port
);
}
taosWUnLockLatch
(
&
pMgmt
->
latch
);
}
void
dmGetDnodeEp
(
SMgmtWrapper
*
pWrapper
,
int32_t
dnodeId
,
char
*
pEp
,
char
*
pFqdn
,
uint16_t
*
pPort
)
{
SDnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
taosRLockLatch
(
&
pMgmt
->
latch
);
SDnodeEp
*
pDnodeEp
=
taosHashGet
(
pMgmt
->
dnodeHash
,
&
dnodeId
,
sizeof
(
int32_t
));
if
(
pDnodeEp
!=
NULL
)
{
if
(
pPort
!=
NULL
)
{
*
pPort
=
pDnodeEp
->
ep
.
port
;
}
if
(
pFqdn
!=
NULL
)
{
tstrncpy
(
pFqdn
,
pDnodeEp
->
ep
.
fqdn
,
TSDB_FQDN_LEN
);
}
if
(
pEp
!=
NULL
)
{
snprintf
(
pEp
,
TSDB_EP_LEN
,
"%s:%u"
,
pDnodeEp
->
ep
.
fqdn
,
pDnodeEp
->
ep
.
port
);
}
}
taosRUnLockLatch
(
&
pMgmt
->
latch
);
}
void
dmSendRedirectRsp
(
SDnodeMgmt
*
pMgmt
,
const
SRpcMsg
*
pReq
)
{
SDnode
*
pDnode
=
pMgmt
->
pDnode
;
SEpSet
epSet
=
{
0
};
dmGetMnodeEpSet
(
pMgmt
,
&
epSet
);
dDebug
(
"RPC %p, req is redirected, num:%d use:%d"
,
pReq
->
handle
,
epSet
.
numOfEps
,
epSet
.
inUse
);
for
(
int32_t
i
=
0
;
i
<
epSet
.
numOfEps
;
++
i
)
{
dDebug
(
"mnode index:%d %s:%u"
,
i
,
epSet
.
eps
[
i
].
fqdn
,
epSet
.
eps
[
i
].
port
);
if
(
strcmp
(
epSet
.
eps
[
i
].
fqdn
,
pDnode
->
localFqdn
)
==
0
&&
epSet
.
eps
[
i
].
port
==
pDnode
->
serverPort
)
{
epSet
.
inUse
=
(
i
+
1
)
%
epSet
.
numOfEps
;
}
epSet
.
eps
[
i
].
port
=
htons
(
epSet
.
eps
[
i
].
port
);
}
rpcSendRedirectRsp
(
pReq
->
handle
,
&
epSet
);
}
static
int32_t
dmStart
(
SMgmtWrapper
*
pWrapper
)
{
dDebug
(
"dnode-mgmt start to run"
);
return
dmStartThread
(
pWrapper
->
pMgmt
);
}
static
int32_t
dmInit
(
SMgmtWrapper
*
pWrapper
)
{
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
SDnodeMgmt
*
pMgmt
=
taosMemoryCalloc
(
1
,
sizeof
(
SDnodeMgmt
));
dInfo
(
"dnode-mgmt start to init"
);
pDnode
->
dnodeId
=
0
;
pDnode
->
dropped
=
0
;
pDnode
->
clusterId
=
0
;
pMgmt
->
path
=
pWrapper
->
path
;
pMgmt
->
pDnode
=
pDnode
;
pMgmt
->
pWrapper
=
pWrapper
;
taosInitRWLatch
(
&
pMgmt
->
latch
);
pMgmt
->
dnodeHash
=
taosHashInit
(
4
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_INT
),
true
,
HASH_NO_LOCK
);
if
(
pMgmt
->
dnodeHash
==
NULL
)
{
dError
(
"failed to init dnode hash"
);
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
return
-
1
;
}
if
(
dmReadFile
(
pMgmt
)
!=
0
)
{
dError
(
"failed to read file since %s"
,
terrstr
());
return
-
1
;
}
if
(
pDnode
->
dropped
)
{
dError
(
"dnode will not start since its already dropped"
);
return
-
1
;
}
if
(
dmStartWorker
(
pMgmt
)
!=
0
)
{
return
-
1
;
}
if
(
dndInitTrans
(
pDnode
)
!=
0
)
{
dError
(
"failed to init transport since %s"
,
terrstr
());
return
-
1
;
}
pWrapper
->
pMgmt
=
pMgmt
;
pMgmt
->
msgCb
=
dndCreateMsgcb
(
pWrapper
);
dInfo
(
"dnode-mgmt is initialized"
);
return
0
;
}
static
void
dmCleanup
(
SMgmtWrapper
*
pWrapper
)
{
SDnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
if
(
pMgmt
==
NULL
)
return
;
dInfo
(
"dnode-mgmt start to clean up"
);
SDnode
*
pDnode
=
pMgmt
->
pDnode
;
dmStopWorker
(
pMgmt
);
taosWLockLatch
(
&
pMgmt
->
latch
);
if
(
pMgmt
->
dnodeEps
!=
NULL
)
{
taosArrayDestroy
(
pMgmt
->
dnodeEps
);
pMgmt
->
dnodeEps
=
NULL
;
}
if
(
pMgmt
->
dnodeHash
!=
NULL
)
{
taosHashCleanup
(
pMgmt
->
dnodeHash
);
pMgmt
->
dnodeHash
=
NULL
;
}
taosWUnLockLatch
(
&
pMgmt
->
latch
);
taosMemoryFree
(
pMgmt
);
pWrapper
->
pMgmt
=
NULL
;
dndCleanupTrans
(
pDnode
);
dInfo
(
"dnode-mgmt is cleaned up"
);
}
static
int32_t
dmRequire
(
SMgmtWrapper
*
pWrapper
,
bool
*
required
)
{
*
required
=
true
;
return
0
;
}
void
dmSetMgmtFp
(
SMgmtWrapper
*
pWrapper
)
{
SMgmtFp
mgmtFp
=
{
0
};
mgmtFp
.
openFp
=
dmInit
;
mgmtFp
.
closeFp
=
dmCleanup
;
mgmtFp
.
startFp
=
dmStart
;
mgmtFp
.
requiredFp
=
dmRequire
;
dmInitMsgHandle
(
pWrapper
);
pWrapper
->
name
=
"dnode"
;
pWrapper
->
fp
=
mgmtFp
;
}
source/dnode/mgmt/exe/d
nd
Main.c
→
source/dnode/mgmt/exe/d
m
Main.c
浏览文件 @
2a95c8ef
...
...
@@ -14,47 +14,46 @@
*/
#define _DEFAULT_SOURCE
#include "d
ndInt
.h"
#include "d
mImp
.h"
#include "tconfig.h"
#include "mndGrant.h"
static
struct
{
bool
dumpConfig
;
bool
generateGrant
;
bool
printAuth
;
bool
printVersion
;
char
envFile
[
PATH_MAX
];
char
apolloUrl
[
PATH_MAX
];
SArray
*
pArgs
;
// SConfigPair
SDnode
*
pDnode
;
EDndType
ntype
;
bool
dumpConfig
;
bool
generateGrant
;
bool
printAuth
;
bool
printVersion
;
char
envFile
[
PATH_MAX
];
char
apolloUrl
[
PATH_MAX
];
SArray
*
pArgs
;
// SConfigPair
SDnode
*
pDnode
;
EDnd
Node
Type
ntype
;
}
global
=
{
0
};
static
void
d
nd
StopDnode
(
int
signum
,
void
*
info
,
void
*
ctx
)
{
static
void
d
m
StopDnode
(
int
signum
,
void
*
info
,
void
*
ctx
)
{
SDnode
*
pDnode
=
atomic_val_compare_exchange_ptr
(
&
global
.
pDnode
,
0
,
global
.
pDnode
);
if
(
pDnode
!=
NULL
)
{
d
ndHandle
Event
(
pDnode
,
DND_EVENT_STOP
);
d
mSet
Event
(
pDnode
,
DND_EVENT_STOP
);
}
}
static
void
d
nd
SetSignalHandle
()
{
taosSetSignal
(
SIGTERM
,
d
nd
StopDnode
);
taosSetSignal
(
SIGHUP
,
d
nd
StopDnode
);
taosSetSignal
(
SIGINT
,
d
nd
StopDnode
);
taosSetSignal
(
SIGTSTP
,
d
nd
StopDnode
);
taosSetSignal
(
SIGABRT
,
d
nd
StopDnode
);
taosSetSignal
(
SIGBREAK
,
d
nd
StopDnode
);
taosSetSignal
(
SIGQUIT
,
d
nd
StopDnode
);
static
void
d
m
SetSignalHandle
()
{
taosSetSignal
(
SIGTERM
,
d
m
StopDnode
);
taosSetSignal
(
SIGHUP
,
d
m
StopDnode
);
taosSetSignal
(
SIGINT
,
d
m
StopDnode
);
taosSetSignal
(
SIGTSTP
,
d
m
StopDnode
);
taosSetSignal
(
SIGABRT
,
d
m
StopDnode
);
taosSetSignal
(
SIGBREAK
,
d
m
StopDnode
);
taosSetSignal
(
SIGQUIT
,
d
m
StopDnode
);
if
(
!
tsMultiProcess
)
{
}
else
if
(
global
.
ntype
==
DNODE
||
global
.
ntype
==
NODE_
MAX
)
{
}
else
if
(
global
.
ntype
==
DNODE
||
global
.
ntype
==
NODE_
END
)
{
taosIgnSignal
(
SIGCHLD
);
}
else
{
taosKillChildOnParentStopped
();
}
}
static
int32_t
d
nd
ParseArgs
(
int32_t
argc
,
char
const
*
argv
[])
{
static
int32_t
d
m
ParseArgs
(
int32_t
argc
,
char
const
*
argv
[])
{
for
(
int32_t
i
=
1
;
i
<
argc
;
++
i
)
{
if
(
strcmp
(
argv
[
i
],
"-c"
)
==
0
)
{
if
(
i
<
argc
-
1
)
{
...
...
@@ -73,8 +72,8 @@ static int32_t dndParseArgs(int32_t argc, char const *argv[]) {
tstrncpy
(
global
.
envFile
,
argv
[
++
i
],
PATH_MAX
);
}
else
if
(
strcmp
(
argv
[
i
],
"-n"
)
==
0
)
{
global
.
ntype
=
atoi
(
argv
[
++
i
]);
if
(
global
.
ntype
<=
DNODE
||
global
.
ntype
>
NODE_
MAX
)
{
printf
(
"'-n' range is [1 - %d], default is 0
\n
"
,
NODE_
MAX
-
1
);
if
(
global
.
ntype
<=
DNODE
||
global
.
ntype
>
NODE_
END
)
{
printf
(
"'-n' range is [1 - %d], default is 0
\n
"
,
NODE_
END
-
1
);
return
-
1
;
}
}
else
if
(
strcmp
(
argv
[
i
],
"-k"
)
==
0
)
{
...
...
@@ -90,11 +89,9 @@ static int32_t dndParseArgs(int32_t argc, char const *argv[]) {
return
0
;
}
static
void
dndGenerateGrant
()
{
parseGrantParameter
();
}
static
void
dmGenerateGrant
()
{
mndGenerateMachineCode
();
}
static
void
d
nd
PrintVersion
()
{
static
void
d
m
PrintVersion
()
{
#ifdef TD_ENTERPRISE
char
*
releaseName
=
"enterprise"
;
#else
...
...
@@ -105,12 +102,12 @@ static void dndPrintVersion() {
printf
(
"buildInfo: %s
\n
"
,
buildinfo
);
}
static
void
d
nd
DumpCfg
()
{
static
void
d
m
DumpCfg
()
{
SConfig
*
pCfg
=
taosGetCfg
();
cfgDumpCfg
(
pCfg
,
0
,
1
);
}
static
SDnodeOpt
d
nd
GetOpt
()
{
static
SDnodeOpt
d
m
GetOpt
()
{
SConfig
*
pCfg
=
taosGetCfg
();
SDnodeOpt
option
=
{
0
};
...
...
@@ -127,43 +124,43 @@ static SDnodeOpt dndGetOpt() {
return
option
;
}
static
int32_t
d
nd
InitLog
()
{
static
int32_t
d
m
InitLog
()
{
char
logName
[
12
]
=
{
0
};
snprintf
(
logName
,
sizeof
(
logName
),
"%slog"
,
d
ndNodeLogStr
(
global
.
ntype
));
snprintf
(
logName
,
sizeof
(
logName
),
"%slog"
,
d
mLogName
(
global
.
ntype
));
return
taosCreateLog
(
logName
,
1
,
configDir
,
global
.
envFile
,
global
.
apolloUrl
,
global
.
pArgs
,
0
);
}
static
void
d
nd
SetProcInfo
(
int32_t
argc
,
char
**
argv
)
{
static
void
d
m
SetProcInfo
(
int32_t
argc
,
char
**
argv
)
{
taosSetProcPath
(
argc
,
argv
);
if
(
global
.
ntype
!=
DNODE
&&
global
.
ntype
!=
NODE_
MAX
)
{
const
char
*
name
=
d
ndNodeProcStr
(
global
.
ntype
);
if
(
global
.
ntype
!=
DNODE
&&
global
.
ntype
!=
NODE_
END
)
{
const
char
*
name
=
d
mProcName
(
global
.
ntype
);
taosSetProcName
(
argc
,
argv
,
name
);
}
}
static
int32_t
d
nd
RunDnode
()
{
if
(
d
nd
Init
()
!=
0
)
{
static
int32_t
d
m
RunDnode
()
{
if
(
d
m
Init
()
!=
0
)
{
dError
(
"failed to init environment since %s"
,
terrstr
());
return
-
1
;
}
SDnodeOpt
option
=
d
nd
GetOpt
();
SDnode
*
pDnode
=
d
nd
Create
(
&
option
);
SDnodeOpt
option
=
d
m
GetOpt
();
SDnode
*
pDnode
=
d
m
Create
(
&
option
);
if
(
pDnode
==
NULL
)
{
dError
(
"failed to to create dnode since %s"
,
terrstr
());
return
-
1
;
}
else
{
global
.
pDnode
=
pDnode
;
d
nd
SetSignalHandle
();
d
m
SetSignalHandle
();
}
dInfo
(
"start the service"
);
int32_t
code
=
d
nd
Run
(
pDnode
);
int32_t
code
=
d
m
Run
(
pDnode
);
dInfo
(
"start shutting down the service"
);
global
.
pDnode
=
NULL
;
d
nd
Close
(
pDnode
);
d
nd
Cleanup
();
d
m
Close
(
pDnode
);
d
m
Cleanup
();
taosCloseLog
();
taosCleanupCfg
();
return
code
;
...
...
@@ -175,22 +172,22 @@ int main(int argc, char const *argv[]) {
return
-
1
;
}
if
(
d
nd
ParseArgs
(
argc
,
argv
)
!=
0
)
{
if
(
d
m
ParseArgs
(
argc
,
argv
)
!=
0
)
{
printf
(
"failed to start since parse args error
\n
"
);
return
-
1
;
}
if
(
global
.
generateGrant
)
{
d
nd
GenerateGrant
();
d
m
GenerateGrant
();
return
0
;
}
if
(
global
.
printVersion
)
{
d
nd
PrintVersion
();
d
m
PrintVersion
();
return
0
;
}
if
(
d
nd
InitLog
()
!=
0
)
{
if
(
d
m
InitLog
()
!=
0
)
{
printf
(
"failed to start since init log error
\n
"
);
return
-
1
;
}
...
...
@@ -201,12 +198,12 @@ int main(int argc, char const *argv[]) {
}
if
(
global
.
dumpConfig
)
{
d
nd
DumpCfg
();
d
m
DumpCfg
();
taosCleanupCfg
();
taosCloseLog
();
return
0
;
}
d
nd
SetProcInfo
(
argc
,
(
char
**
)
argv
);
return
d
nd
RunDnode
();
d
m
SetProcInfo
(
argc
,
(
char
**
)
argv
);
return
d
m
RunDnode
();
}
source/dnode/mgmt/implement/CMakeLists.txt
0 → 100644
浏览文件 @
2a95c8ef
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
)
target_include_directories
(
dnode
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
)
IF
(
TD_GRANT
)
TARGET_LINK_LIBRARIES
(
dnode grant
)
ENDIF
()
IF
(
TD_USB_DONGLE
)
TARGET_LINK_LIBRARIES
(
dnode usb_dongle
)
else
()
ENDIF
()
\ No newline at end of file
source/dnode/mgmt/implement/inc/dmImp.h
0 → 100644
浏览文件 @
2a95c8ef
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _TD_DND_IMP_H_
#define _TD_DND_IMP_H_
#include "dmInt.h"
#ifdef __cplusplus
extern
"C"
{
#endif
int32_t
dmOpenNode
(
SMgmtWrapper
*
pWrapper
);
void
dmCloseNode
(
SMgmtWrapper
*
pWrapper
);
// dmTransport.c
int32_t
dmInitTrans
(
SDnode
*
pDnode
);
void
dmCleanupTrans
(
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
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
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
);
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DND_IMP_H_*/
\ No newline at end of file
source/dnode/mgmt/
dm/dmFile
.c
→
source/dnode/mgmt/
implement/src/dmEps
.c
浏览文件 @
2a95c8ef
...
...
@@ -14,32 +14,50 @@
*/
#define _DEFAULT_SOURCE
#include "dmI
nt
.h"
#include "dmI
mp
.h"
static
void
dmPrint
Dnodes
(
SDnodeMgmt
*
pMgmt
);
static
bool
dmIsEpChanged
(
SDnode
Mgmt
*
pMgmt
,
int32_t
dnodeId
,
const
char
*
ep
);
static
void
dmReset
Dnodes
(
SDnodeMgmt
*
pMgmt
,
SArray
*
dnodeEps
);
static
void
dmPrint
Eps
(
SDnode
*
pDnode
);
static
bool
dmIsEpChanged
(
SDnode
*
pDnode
,
int32_t
dnodeId
,
const
char
*
ep
);
static
void
dmReset
Eps
(
SDnode
*
pDnode
,
SArray
*
dnodeEps
);
int32_t
dmReadFile
(
SDnodeMgmt
*
pMgmt
)
{
static
void
dmGetDnodeEp
(
SDnode
*
pDnode
,
int32_t
dnodeId
,
char
*
pEp
,
char
*
pFqdn
,
uint16_t
*
pPort
)
{
taosRLockLatch
(
&
pDnode
->
data
.
latch
);
SDnodeEp
*
pDnodeEp
=
taosHashGet
(
pDnode
->
data
.
dnodeHash
,
&
dnodeId
,
sizeof
(
int32_t
));
if
(
pDnodeEp
!=
NULL
)
{
if
(
pPort
!=
NULL
)
{
*
pPort
=
pDnodeEp
->
ep
.
port
;
}
if
(
pFqdn
!=
NULL
)
{
tstrncpy
(
pFqdn
,
pDnodeEp
->
ep
.
fqdn
,
TSDB_FQDN_LEN
);
}
if
(
pEp
!=
NULL
)
{
snprintf
(
pEp
,
TSDB_EP_LEN
,
"%s:%u"
,
pDnodeEp
->
ep
.
fqdn
,
pDnodeEp
->
ep
.
port
);
}
}
taosRUnLockLatch
(
&
pDnode
->
data
.
latch
);
}
int32_t
dmReadEps
(
SDnode
*
pDnode
)
{
int32_t
code
=
TSDB_CODE_INVALID_JSON_FORMAT
;
int32_t
len
=
0
;
int32_t
maxLen
=
256
*
1024
;
char
*
content
=
taosMemoryCalloc
(
1
,
maxLen
+
1
);
cJSON
*
root
=
NULL
;
char
file
[
PATH_MAX
];
char
file
[
PATH_MAX
]
=
{
0
}
;
TdFilePtr
pFile
=
NULL
;
SDnode
*
pDnode
=
pMgmt
->
pDnode
;
p
Mgmt
->
dnodeEps
=
taosArrayInit
(
1
,
sizeof
(
SDnodeEp
));
if
(
p
Mgmt
->
dnodeEps
==
NULL
)
{
p
Dnode
->
data
.
dnodeEps
=
taosArrayInit
(
1
,
sizeof
(
SDnodeEp
));
if
(
p
Dnode
->
data
.
dnodeEps
==
NULL
)
{
dError
(
"failed to calloc dnodeEp array since %s"
,
strerror
(
errno
));
goto
PRASE_DNODE_OVER
;
}
snprintf
(
file
,
sizeof
(
file
),
"%s%sdnode.json"
,
p
Mgmt
->
path
,
TD_DIRSEP
);
snprintf
(
file
,
sizeof
(
file
),
"%s%sdnode.json"
,
p
Dnode
->
wrappers
[
DNODE
].
path
,
TD_DIRSEP
);
pFile
=
taosOpenFile
(
file
,
TD_FILE_READ
);
if
(
pFile
==
NULL
)
{
dDebug
(
"file %s not exist"
,
file
);
//
dDebug("file %s not exist", file);
code
=
0
;
goto
PRASE_DNODE_OVER
;
}
...
...
@@ -62,21 +80,21 @@ int32_t dmReadFile(SDnodeMgmt *pMgmt) {
dError
(
"failed to read %s since dnodeId not found"
,
file
);
goto
PRASE_DNODE_OVER
;
}
pDnode
->
dnodeId
=
dnodeId
->
valueint
;
pDnode
->
d
ata
.
d
nodeId
=
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
PRASE_DNODE_OVER
;
}
pDnode
->
clusterId
=
atoll
(
clusterId
->
valuestring
);
pDnode
->
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
PRASE_DNODE_OVER
;
}
pDnode
->
dropped
=
dropped
->
valueint
;
pDnode
->
d
ata
.
d
ropped
=
dropped
->
valueint
;
cJSON
*
dnodes
=
cJSON_GetObjectItem
(
root
,
"dnodes"
);
if
(
!
dnodes
||
dnodes
->
type
!=
cJSON_Array
)
{
...
...
@@ -126,41 +144,41 @@ int32_t dmReadFile(SDnodeMgmt *pMgmt) {
}
dnodeEp
.
isMnode
=
isMnode
->
valueint
;
taosArrayPush
(
p
Mgmt
->
dnodeEps
,
&
dnodeEp
);
taosArrayPush
(
p
Dnode
->
data
.
dnodeEps
,
&
dnodeEp
);
}
code
=
0
;
dDebug
(
"succcessed to read file %s"
,
file
);
dmPrint
Dnodes
(
pMgmt
);
dmPrint
Eps
(
pDnode
);
PRASE_DNODE_OVER:
if
(
content
!=
NULL
)
taosMemoryFree
(
content
);
if
(
root
!=
NULL
)
cJSON_Delete
(
root
);
if
(
pFile
!=
NULL
)
taosCloseFile
(
&
pFile
);
if
(
dmIsEpChanged
(
p
Mgmt
,
pDnode
->
dnodeId
,
pDnode
->
localEp
))
{
dError
(
"localEp %s different with %s and need reconfigured"
,
pDnode
->
localEp
,
file
);
if
(
dmIsEpChanged
(
p
Dnode
,
pDnode
->
data
.
dnodeId
,
pDnode
->
data
.
localEp
))
{
dError
(
"localEp %s different with %s and need reconfigured"
,
pDnode
->
data
.
localEp
,
file
);
return
-
1
;
}
if
(
taosArrayGetSize
(
p
Mgmt
->
dnodeEps
)
==
0
)
{
if
(
taosArrayGetSize
(
p
Dnode
->
data
.
dnodeEps
)
==
0
)
{
SDnodeEp
dnodeEp
=
{
0
};
dnodeEp
.
isMnode
=
1
;
taosGetFqdnPortFromEp
(
pDnode
->
firstEp
,
&
dnodeEp
.
ep
);
taosArrayPush
(
p
Mgmt
->
dnodeEps
,
&
dnodeEp
);
taosGetFqdnPortFromEp
(
pDnode
->
data
.
firstEp
,
&
dnodeEp
.
ep
);
taosArrayPush
(
p
Dnode
->
data
.
dnodeEps
,
&
dnodeEp
);
}
dmReset
Dnodes
(
pMgmt
,
pMgmt
->
dnodeEps
);
dmReset
Eps
(
pDnode
,
pDnode
->
data
.
dnodeEps
);
terrno
=
code
;
return
code
;
}
int32_t
dmWrite
File
(
SDnodeMgmt
*
pMgmt
)
{
SDnode
*
pDnode
=
pMgmt
->
pDnode
;
char
file
[
PATH_MAX
]
;
snprintf
(
file
,
sizeof
(
file
),
"%s%sdnode.json.bak"
,
pMgmt
->
path
,
TD_DIRSEP
);
int32_t
dmWrite
Eps
(
SDnode
*
pDnode
)
{
char
file
[
PATH_MAX
]
=
{
0
}
;
char
realfile
[
PATH_MAX
];
snprintf
(
file
,
sizeof
(
file
),
"%s%sdnode.json.bak"
,
pDnode
->
wrappers
[
DNODE
].
path
,
TD_DIRSEP
)
;
snprintf
(
realfile
,
sizeof
(
realfile
),
"%s%sdnode.json"
,
pDnode
->
wrappers
[
DNODE
].
path
,
TD_DIRSEP
);
TdFilePtr
pFile
=
taosOpenFile
(
file
,
TD_FILE_CREATE
|
TD_FILE_WRITE
|
TD_FILE_TRUNC
);
if
(
pFile
==
NULL
)
{
...
...
@@ -174,14 +192,14 @@ int32_t dmWriteFile(SDnodeMgmt *pMgmt) {
char
*
content
=
taosMemoryCalloc
(
1
,
maxLen
+
1
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"{
\n
"
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
dnodeId
\"
: %d,
\n
"
,
pDnode
->
dnodeId
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
clusterId
\"
:
\"
%"
PRId64
"
\"
,
\n
"
,
pDnode
->
clusterId
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
dropped
\"
: %d,
\n
"
,
pDnode
->
dropped
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
dnodeId
\"
: %d,
\n
"
,
pDnode
->
d
ata
.
d
nodeId
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
clusterId
\"
:
\"
%"
PRId64
"
\"
,
\n
"
,
pDnode
->
data
.
clusterId
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
dropped
\"
: %d,
\n
"
,
pDnode
->
d
ata
.
d
ropped
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
dnodes
\"
: [{
\n
"
);
int32_t
numOfEps
=
(
int32_t
)
taosArrayGetSize
(
p
Mgmt
->
dnodeEps
);
int32_t
numOfEps
=
(
int32_t
)
taosArrayGetSize
(
p
Dnode
->
data
.
dnodeEps
);
for
(
int32_t
i
=
0
;
i
<
numOfEps
;
++
i
)
{
SDnodeEp
*
pDnodeEp
=
taosArrayGet
(
p
Mgmt
->
dnodeEps
,
i
);
SDnodeEp
*
pDnodeEp
=
taosArrayGet
(
p
Dnode
->
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
);
...
...
@@ -199,50 +217,47 @@ int32_t dmWriteFile(SDnodeMgmt *pMgmt) {
taosCloseFile
(
&
pFile
);
taosMemoryFree
(
content
);
char
realfile
[
PATH_MAX
];
snprintf
(
realfile
,
sizeof
(
realfile
),
"%s%sdnode.json"
,
pMgmt
->
path
,
TD_DIRSEP
);
if
(
taosRenameFile
(
file
,
realfile
)
!=
0
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
dError
(
"failed to rename %s since %s"
,
file
,
terrstr
());
return
-
1
;
}
p
Mgmt
->
updateTime
=
taosGetTimestampMs
();
p
Dnode
->
data
.
updateTime
=
taosGetTimestampMs
();
dDebug
(
"successed to write %s"
,
realfile
);
return
0
;
}
void
dmUpdate
DnodeEps
(
SDnodeMgmt
*
pMgmt
,
SArray
*
dnodeE
ps
)
{
int32_t
numOfEps
=
taosArrayGetSize
(
dnodeE
ps
);
void
dmUpdate
Eps
(
SDnode
*
pDnode
,
SArray
*
e
ps
)
{
int32_t
numOfEps
=
taosArrayGetSize
(
e
ps
);
if
(
numOfEps
<=
0
)
return
;
taosWLockLatch
(
&
p
Mgmt
->
latch
);
taosWLockLatch
(
&
p
Dnode
->
data
.
latch
);
int32_t
numOfEpsOld
=
(
int32_t
)
taosArrayGetSize
(
p
Mgmt
->
dnodeEps
);
int32_t
numOfEpsOld
=
(
int32_t
)
taosArrayGetSize
(
p
Dnode
->
data
.
dnodeEps
);
if
(
numOfEps
!=
numOfEpsOld
)
{
dmReset
Dnodes
(
pMgmt
,
dnodeE
ps
);
dmWrite
File
(
pMgmt
);
dmReset
Eps
(
pDnode
,
e
ps
);
dmWrite
Eps
(
pDnode
);
}
else
{
int32_t
size
=
numOfEps
*
sizeof
(
SDnodeEp
);
if
(
memcmp
(
p
Mgmt
->
dnodeEps
->
pData
,
dnodeE
ps
->
pData
,
size
)
!=
0
)
{
dmReset
Dnodes
(
pMgmt
,
dnodeE
ps
);
dmWrite
File
(
pMgmt
);
if
(
memcmp
(
p
Dnode
->
data
.
dnodeEps
->
pData
,
e
ps
->
pData
,
size
)
!=
0
)
{
dmReset
Eps
(
pDnode
,
e
ps
);
dmWrite
Eps
(
pDnode
);
}
}
taosWUnLockLatch
(
&
p
Mgmt
->
latch
);
taosWUnLockLatch
(
&
p
Dnode
->
data
.
latch
);
}
static
void
dmReset
Dnodes
(
SDnodeMgmt
*
pMgmt
,
SArray
*
dnodeEps
)
{
if
(
p
Mgmt
->
dnodeEps
!=
dnodeEps
)
{
SArray
*
tmp
=
p
Mgmt
->
dnodeEps
;
p
Mgmt
->
dnodeEps
=
taosArrayDup
(
dnodeEps
);
static
void
dmReset
Eps
(
SDnode
*
pDnode
,
SArray
*
dnodeEps
)
{
if
(
p
Dnode
->
data
.
dnodeEps
!=
dnodeEps
)
{
SArray
*
tmp
=
p
Dnode
->
data
.
dnodeEps
;
p
Dnode
->
data
.
dnodeEps
=
taosArrayDup
(
dnodeEps
);
taosArrayDestroy
(
tmp
);
}
p
Mgmt
->
mnodeEpSet
.
inUse
=
0
;
p
Mgmt
->
mnodeEpSet
.
numOfEps
=
0
;
p
Dnode
->
data
.
mnodeEps
.
inUse
=
0
;
p
Dnode
->
data
.
mnodeEps
.
numOfEps
=
0
;
int32_t
mIndex
=
0
;
int32_t
numOfEps
=
(
int32_t
)
taosArrayGetSize
(
dnodeEps
);
...
...
@@ -251,40 +266,40 @@ static void dmResetDnodes(SDnodeMgmt *pMgmt, SArray *dnodeEps) {
SDnodeEp
*
pDnodeEp
=
taosArrayGet
(
dnodeEps
,
i
);
if
(
!
pDnodeEp
->
isMnode
)
continue
;
if
(
mIndex
>=
TSDB_MAX_REPLICA
)
continue
;
p
Mgmt
->
mnodeEpSet
.
numOfEps
++
;
p
Dnode
->
data
.
mnodeEps
.
numOfEps
++
;
p
Mgmt
->
mnodeEpSet
.
eps
[
mIndex
]
=
pDnodeEp
->
ep
;
p
Dnode
->
data
.
mnodeEps
.
eps
[
mIndex
]
=
pDnodeEp
->
ep
;
mIndex
++
;
}
for
(
int32_t
i
=
0
;
i
<
numOfEps
;
i
++
)
{
SDnodeEp
*
pDnodeEp
=
taosArrayGet
(
dnodeEps
,
i
);
taosHashPut
(
p
Mgmt
->
dnodeHash
,
&
pDnodeEp
->
id
,
sizeof
(
int32_t
),
pDnodeEp
,
sizeof
(
SDnodeEp
));
taosHashPut
(
p
Dnode
->
data
.
dnodeHash
,
&
pDnodeEp
->
id
,
sizeof
(
int32_t
),
pDnodeEp
,
sizeof
(
SDnodeEp
));
}
dmPrint
Dnodes
(
pMgmt
);
dmPrint
Eps
(
pDnode
);
}
static
void
dmPrint
Dnodes
(
SDnodeMgmt
*
pMgmt
)
{
int32_t
numOfEps
=
(
int32_t
)
taosArrayGetSize
(
p
Mgmt
->
dnodeEps
);
static
void
dmPrint
Eps
(
SDnode
*
pDnode
)
{
int32_t
numOfEps
=
(
int32_t
)
taosArrayGetSize
(
p
Dnode
->
data
.
dnodeEps
);
dDebug
(
"print dnode ep list, num:%d"
,
numOfEps
);
for
(
int32_t
i
=
0
;
i
<
numOfEps
;
i
++
)
{
SDnodeEp
*
pEp
=
taosArrayGet
(
p
Mgmt
->
dnodeEps
,
i
);
SDnodeEp
*
pEp
=
taosArrayGet
(
p
Dnode
->
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
Mgmt
*
pMgmt
,
int32_t
dnodeId
,
const
char
*
ep
)
{
static
bool
dmIsEpChanged
(
SDnode
*
pDnode
,
int32_t
dnodeId
,
const
char
*
ep
)
{
bool
changed
=
false
;
taosRLockLatch
(
&
p
Mgmt
->
latch
);
taosRLockLatch
(
&
p
Dnode
->
data
.
latch
);
SDnodeEp
*
pDnodeEp
=
taosHashGet
(
p
Mgmt
->
dnodeHash
,
&
dnodeId
,
sizeof
(
int32_t
));
SDnodeEp
*
pDnodeEp
=
taosHashGet
(
p
Dnode
->
data
.
dnodeHash
,
&
dnodeId
,
sizeof
(
int32_t
));
if
(
pDnodeEp
!=
NULL
)
{
char
epstr
[
TSDB_EP_LEN
+
1
];
snprintf
(
epstr
,
TSDB_EP_LEN
,
"%s:%u"
,
pDnodeEp
->
ep
.
fqdn
,
pDnodeEp
->
ep
.
port
);
changed
=
strcmp
(
ep
,
epstr
)
!=
0
;
}
taosRUnLockLatch
(
&
p
Mgmt
->
latch
);
taosRUnLockLatch
(
&
p
Dnode
->
data
.
latch
);
return
changed
;
}
source/dnode/mgmt/
main/dnd
Exec.c
→
source/dnode/mgmt/
implement/src/dm
Exec.c
浏览文件 @
2a95c8ef
...
...
@@ -14,22 +14,20 @@
*/
#define _DEFAULT_SOURCE
#include "d
ndInt
.h"
#include "d
mImp
.h"
static
bool
d
nd
RequireNode
(
SMgmtWrapper
*
pWrapper
)
{
static
bool
d
m
RequireNode
(
SMgmtWrapper
*
pWrapper
)
{
bool
required
=
false
;
int32_t
code
=
(
*
pWrapper
->
fp
.
requiredFp
)(
pWrapper
,
&
required
);
if
(
!
required
)
{
dDebug
(
"node:%s, does not require startup"
,
pWrapper
->
name
);
}
else
{
dDebug
(
"node:%s, needs to be started"
,
pWrapper
->
name
);
}
return
required
;
}
static
int32_t
d
ndInitNode
Proc
(
SMgmtWrapper
*
pWrapper
)
{
static
int32_t
d
mInitParent
Proc
(
SMgmtWrapper
*
pWrapper
)
{
int32_t
shmsize
=
tsMnodeShmSize
;
if
(
pWrapper
->
ntype
==
VNODE
S
)
{
if
(
pWrapper
->
ntype
==
VNODE
)
{
shmsize
=
tsVnodeShmSize
;
}
else
if
(
pWrapper
->
ntype
==
QNODE
)
{
shmsize
=
tsQnodeShmSize
;
...
...
@@ -43,18 +41,18 @@ static int32_t dndInitNodeProc(SMgmtWrapper *pWrapper) {
return
-
1
;
}
if
(
taosCreateShm
(
&
pWrapper
->
s
hm
,
pWrapper
->
ntype
,
shmsize
)
!=
0
)
{
if
(
taosCreateShm
(
&
pWrapper
->
procS
hm
,
pWrapper
->
ntype
,
shmsize
)
!=
0
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
terrno
);
dError
(
"node:%s, failed to create shm size:%d since %s"
,
pWrapper
->
name
,
shmsize
,
terrstr
());
return
-
1
;
}
dInfo
(
"node:%s, shm:%d is created, size:%d"
,
pWrapper
->
name
,
pWrapper
->
s
hm
.
id
,
shmsize
);
dInfo
(
"node:%s, shm:%d is created, size:%d"
,
pWrapper
->
name
,
pWrapper
->
procS
hm
.
id
,
shmsize
);
SProcCfg
cfg
=
d
nd
GenProcCfg
(
pWrapper
);
SProcCfg
cfg
=
d
m
GenProcCfg
(
pWrapper
);
cfg
.
isChild
=
false
;
pWrapper
->
procType
=
PROC_PARENT
;
pWrapper
->
p
Proc
=
taosProcInit
(
&
cfg
);
if
(
pWrapper
->
p
Proc
==
NULL
)
{
pWrapper
->
procType
=
DND_
PROC_PARENT
;
pWrapper
->
p
rocObj
=
taosProcInit
(
&
cfg
);
if
(
pWrapper
->
p
rocObj
==
NULL
)
{
dError
(
"node:%s, failed to create proc since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
}
...
...
@@ -62,7 +60,7 @@ static int32_t dndInitNodeProc(SMgmtWrapper *pWrapper) {
return
0
;
}
static
int32_t
d
ndNewNodeProc
(
SMgmtWrapper
*
pWrapper
,
EDnd
Type
n
)
{
static
int32_t
d
mNewNodeProc
(
SMgmtWrapper
*
pWrapper
,
EDndNode
Type
n
)
{
char
tstr
[
8
]
=
{
0
};
char
*
args
[
6
]
=
{
0
};
snprintf
(
tstr
,
sizeof
(
tstr
),
"%d"
,
n
);
...
...
@@ -84,54 +82,108 @@ static int32_t dndNewNodeProc(SMgmtWrapper *pWrapper, EDndType n) {
return
0
;
}
static
int32_t
d
ndRunNode
Proc
(
SMgmtWrapper
*
pWrapper
)
{
if
(
pWrapper
->
pDnode
->
ntype
==
NODE_
MAX
)
{
dInfo
(
"node:%s, should be started manually"
,
pWrapper
->
name
);
static
int32_t
d
mRunParent
Proc
(
SMgmtWrapper
*
pWrapper
)
{
if
(
pWrapper
->
pDnode
->
ntype
==
NODE_
END
)
{
dInfo
(
"node:%s, should be started manually
in child process
"
,
pWrapper
->
name
);
}
else
{
if
(
d
nd
NewNodeProc
(
pWrapper
,
pWrapper
->
ntype
)
!=
0
)
{
if
(
d
m
NewNodeProc
(
pWrapper
,
pWrapper
->
ntype
)
!=
0
)
{
return
-
1
;
}
}
if
(
taosProcRun
(
pWrapper
->
pProc
)
!=
0
)
{
if
(
taosProcRun
(
pWrapper
->
procObj
)
!=
0
)
{
dError
(
"node:%s, failed to run proc since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
}
return
0
;
}
static
int32_t
dmInitChildProc
(
SMgmtWrapper
*
pWrapper
)
{
SProcCfg
cfg
=
dmGenProcCfg
(
pWrapper
);
cfg
.
isChild
=
true
;
pWrapper
->
procObj
=
taosProcInit
(
&
cfg
);
if
(
pWrapper
->
procObj
==
NULL
)
{
dError
(
"node:%s, failed to create proc since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
}
return
0
;
}
static
int32_t
dndOpenNodeImp
(
SMgmtWrapper
*
pWrapper
)
{
static
int32_t
dmRunChildProc
(
SMgmtWrapper
*
pWrapper
)
{
if
(
taosProcRun
(
pWrapper
->
procObj
)
!=
0
)
{
dError
(
"node:%s, failed to run proc since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
}
return
0
;
}
int32_t
dmOpenNode
(
SMgmtWrapper
*
pWrapper
)
{
if
(
taosMkDir
(
pWrapper
->
path
)
!=
0
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
dError
(
"node:%s, failed to create dir:%s since %s"
,
pWrapper
->
name
,
pWrapper
->
path
,
terrstr
());
return
-
1
;
}
if
((
*
pWrapper
->
fp
.
openFp
)(
pWrapper
)
!=
0
)
{
dError
(
"node:%s, failed to open since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
if
(
pWrapper
->
procType
==
DND_PROC_SINGLE
||
pWrapper
->
procType
==
DND_PROC_CHILD
)
{
if
((
*
pWrapper
->
fp
.
openFp
)(
pWrapper
)
!=
0
)
{
dError
(
"node:%s, failed to open since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
}
if
(
pWrapper
->
procType
==
DND_PROC_CHILD
)
{
if
(
dmInitChildProc
(
pWrapper
)
!=
0
)
return
-
1
;
if
(
dmRunChildProc
(
pWrapper
)
!=
0
)
return
-
1
;
}
dDebug
(
"node:%s, has been opened"
,
pWrapper
->
name
);
pWrapper
->
deployed
=
true
;
}
else
{
if
(
dmInitParentProc
(
pWrapper
)
!=
0
)
return
-
1
;
if
(
dmWriteShmFile
(
pWrapper
)
!=
0
)
return
-
1
;
if
(
dmRunParentProc
(
pWrapper
)
!=
0
)
return
-
1
;
}
dDebug
(
"node:%s, has been opened"
,
pWrapper
->
name
);
pWrapper
->
deployed
=
true
;
return
0
;
}
int32_t
dndOpenNode
(
SMgmtWrapper
*
pWrapper
)
{
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
if
(
pDnode
->
procType
==
PROC_SINGLE
)
{
return
dndOpenNodeImp
(
pWrapper
);
}
else
if
(
pDnode
->
procType
==
PROC_PARENT
)
{
if
(
dndInitNodeProc
(
pWrapper
)
!=
0
)
return
-
1
;
if
(
dndWriteShmFile
(
pDnode
)
!=
0
)
return
-
1
;
if
(
dndRunNodeProc
(
pWrapper
)
!=
0
)
return
-
1
;
int32_t
dmStartNode
(
SMgmtWrapper
*
pWrapper
)
{
if
(
pWrapper
->
procType
==
DND_PROC_PARENT
)
{
dInfo
(
"node:%s, not start in parent process"
,
pWrapper
->
name
);
}
else
if
(
pWrapper
->
procType
==
DND_PROC_CHILD
)
{
dInfo
(
"node:%s, start in child process"
,
pWrapper
->
name
);
if
(
pWrapper
->
ntype
!=
DNODE
)
{
if
(
pWrapper
->
fp
.
startFp
!=
NULL
&&
(
*
pWrapper
->
fp
.
startFp
)(
pWrapper
)
!=
0
)
{
dError
(
"node:%s, failed to start since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
}
}
}
else
{
if
(
pWrapper
->
fp
.
startFp
!=
NULL
&&
(
*
pWrapper
->
fp
.
startFp
)(
pWrapper
)
!=
0
)
{
dError
(
"node:%s, failed to start since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
}
}
return
0
;
}
static
void
dndCloseNodeImp
(
SMgmtWrapper
*
pWrapper
)
{
dDebug
(
"node:%s, mgmt start to close"
,
pWrapper
->
name
);
void
dmStopNode
(
SMgmtWrapper
*
pWrapper
)
{
if
(
pWrapper
->
fp
.
stopFp
!=
NULL
)
{
(
*
pWrapper
->
fp
.
stopFp
)(
pWrapper
);
}
}
void
dmCloseNode
(
SMgmtWrapper
*
pWrapper
)
{
dInfo
(
"node:%s, start to close"
,
pWrapper
->
name
);
if
(
pWrapper
->
procType
==
DND_PROC_PARENT
)
{
if
(
pWrapper
->
procId
>
0
&&
taosProcExist
(
pWrapper
->
procId
))
{
dInfo
(
"node:%s, send kill signal to the child process:%d"
,
pWrapper
->
name
,
pWrapper
->
procId
);
taosKillProc
(
pWrapper
->
procId
);
dInfo
(
"node:%s, wait for child process:%d to stop"
,
pWrapper
->
name
,
pWrapper
->
procId
);
taosWaitProc
(
pWrapper
->
procId
);
dInfo
(
"node:%s, child process:%d is stopped"
,
pWrapper
->
name
,
pWrapper
->
procId
);
}
}
dmStopNode
(
pWrapper
);
pWrapper
->
required
=
false
;
taosWLockLatch
(
&
pWrapper
->
latch
);
if
(
pWrapper
->
deployed
)
{
...
...
@@ -144,214 +196,144 @@ static void dndCloseNodeImp(SMgmtWrapper *pWrapper) {
taosMsleep
(
10
);
}
if
(
pWrapper
->
p
Proc
)
{
taosProcCleanup
(
pWrapper
->
p
Proc
);
pWrapper
->
p
Proc
=
NULL
;
if
(
pWrapper
->
p
rocObj
)
{
taosProcCleanup
(
pWrapper
->
p
rocObj
);
pWrapper
->
p
rocObj
=
NULL
;
}
dDebug
(
"node:%s, mgmt has been closed"
,
pWrapper
->
name
);
}
void
dndCloseNode
(
SMgmtWrapper
*
pWrapper
)
{
if
(
pWrapper
->
pDnode
->
procType
==
PROC_PARENT
)
{
if
(
pWrapper
->
procId
>
0
&&
taosProcExist
(
pWrapper
->
procId
))
{
dInfo
(
"node:%s, send kill signal to the child process:%d"
,
pWrapper
->
name
,
pWrapper
->
procId
);
taosKillProc
(
pWrapper
->
procId
);
dInfo
(
"node:%s, wait for child process:%d to stop"
,
pWrapper
->
name
,
pWrapper
->
procId
);
taosWaitProc
(
pWrapper
->
procId
);
dInfo
(
"node:%s, child process:%d is stopped"
,
pWrapper
->
name
,
pWrapper
->
procId
);
}
}
dndCloseNodeImp
(
pWrapper
);
dInfo
(
"node:%s, has been closed"
,
pWrapper
->
name
);
}
static
void
dndProcessProcHandle
(
void
*
handle
)
{
dWarn
(
"handle:%p, the child process dies and send an offline rsp"
,
handle
);
SRpcMsg
rpcMsg
=
{.
handle
=
handle
,
.
code
=
TSDB_CODE_NODE_OFFLINE
};
rpcSendResponse
(
&
rpcMsg
);
}
static
int32_t
dmOpenNodes
(
SDnode
*
pDnode
)
{
if
(
pDnode
->
ptype
==
DND_PROC_CHILD
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
pDnode
->
ntype
];
pWrapper
->
required
=
dmRequireNode
(
pWrapper
);
if
(
!
pWrapper
->
required
)
{
dError
(
"dnode:%s, failed to open since not required"
,
pWrapper
->
name
);
}
static
int32_t
dndRunInSingleProcess
(
SDnode
*
pDnode
)
{
dInfo
(
"dnode run in single process"
);
pDnode
->
procType
=
PROC_SINGLE
;
pWrapper
->
procType
=
DND_PROC_CHILD
;
for
(
EDndType
n
=
DNODE
;
n
<
NODE_MAX
;
++
n
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
pWrapper
->
required
=
dndRequireNode
(
pWrapper
);
if
(
!
pWrapper
->
required
)
continue
;
SMsgCb
msgCb
=
pDnode
->
data
.
msgCb
;
msgCb
.
pWrapper
=
pWrapper
;
tmsgSetDefaultMsgCb
(
&
msgCb
);
if
(
d
ndOpenNodeImp
(
pWrapper
)
!=
0
)
{
dError
(
"node:%s, failed to
start
since %s"
,
pWrapper
->
name
,
terrstr
());
if
(
d
mOpenNode
(
pWrapper
)
!=
0
)
{
dError
(
"node:%s, failed to
open
since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
}
}
else
{
for
(
EDndNodeType
n
=
DNODE
;
n
<
NODE_END
;
++
n
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
pWrapper
->
required
=
dmRequireNode
(
pWrapper
);
if
(
!
pWrapper
->
required
)
continue
;
if
(
pDnode
->
ptype
==
DND_PROC_PARENT
&&
n
!=
DNODE
)
{
pWrapper
->
procType
=
DND_PROC_PARENT
;
}
else
{
pWrapper
->
procType
=
DND_PROC_SINGLE
;
}
if
(
dmOpenNode
(
pWrapper
)
!=
0
)
{
dError
(
"node:%s, failed to open since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
}
}
}
dndSetStatus
(
pDnode
,
DND_STAT_RUNNING
);
dmSetStatus
(
pDnode
,
DND_STAT_RUNNING
);
return
0
;
}
for
(
EDndType
n
=
0
;
n
<
NODE_MAX
;
++
n
)
{
static
int32_t
dmStartNodes
(
SDnode
*
pDnode
)
{
for
(
EDndNodeType
n
=
DNODE
;
n
<
NODE_END
;
++
n
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
if
(
!
pWrapper
->
required
)
continue
;
if
(
pWrapper
->
fp
.
startFp
==
NULL
)
continue
;
if
((
*
pWrapper
->
fp
.
startFp
)(
pWrapper
)
!=
0
)
{
if
(
dmStartNode
(
pWrapper
)
!=
0
)
{
dError
(
"node:%s, failed to start since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
}
}
dInfo
(
"TDengine initialized successfully"
);
dndReportStartup
(
pDnode
,
"TDengine"
,
"initialized successfully"
);
while
(
1
)
{
if
(
pDnode
->
event
==
DND_EVENT_STOP
)
{
dInfo
(
"dnode is about to stop"
);
dndSetStatus
(
pDnode
,
DND_STAT_STOPPED
);
break
;
}
taosMsleep
(
100
);
}
dmReportStartup
(
pDnode
,
"TDengine"
,
"initialized successfully"
);
return
0
;
}
static
int32_t
dndRunInParentProcess
(
SDnode
*
pDnode
)
{
dInfo
(
"dnode run in parent process"
);
pDnode
->
procType
=
PROC_PARENT
;
SMgmtWrapper
*
pDWrapper
=
&
pDnode
->
wrappers
[
DNODE
];
if
(
dndOpenNodeImp
(
pDWrapper
)
!=
0
)
{
dError
(
"node:%s, failed to start since %s"
,
pDWrapper
->
name
,
terrstr
());
return
-
1
;
}
for
(
EDndType
n
=
DNODE
+
1
;
n
<
NODE_MAX
;
++
n
)
{
static
void
dmStopNodes
(
SDnode
*
pDnode
)
{
for
(
EDndNodeType
n
=
DNODE
;
n
<
NODE_END
;
++
n
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
pWrapper
->
required
=
dndRequireNode
(
pWrapper
);
if
(
!
pWrapper
->
required
)
continue
;
if
(
dndInitNodeProc
(
pWrapper
)
!=
0
)
return
-
1
;
}
if
(
dndWriteShmFile
(
pDnode
)
!=
0
)
{
dError
(
"failed to write runtime file since %s"
,
terrstr
());
return
-
1
;
dmStopNode
(
pWrapper
);
}
}
for
(
EDndType
n
=
DNODE
+
1
;
n
<
NODE_MAX
;
++
n
)
{
static
void
dmCloseNodes
(
SDnode
*
pDnode
)
{
for
(
EDndNodeType
n
=
DNODE
;
n
<
NODE_END
;
++
n
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
if
(
!
pWrapper
->
required
)
continue
;
if
(
dndRunNodeProc
(
pWrapper
)
!=
0
)
return
-
1
;
}
dndSetStatus
(
pDnode
,
DND_STAT_RUNNING
);
if
((
*
pDWrapper
->
fp
.
startFp
)(
pDWrapper
)
!=
0
)
{
dError
(
"node:%s, failed to start since %s"
,
pDWrapper
->
name
,
terrstr
());
return
-
1
;
dmCloseNode
(
pWrapper
);
}
}
dInfo
(
"TDengine initialized successfully"
);
dndReportStartup
(
pDnode
,
"TDengine"
,
"initialized successfully"
);
static
void
dmProcessProcHandle
(
void
*
handle
)
{
dWarn
(
"handle:%p, the child process dies and send an offline rsp"
,
handle
);
SRpcMsg
rpcMsg
=
{.
handle
=
handle
,
.
code
=
TSDB_CODE_NODE_OFFLINE
};
rpcSendResponse
(
&
rpcMsg
);
}
while
(
1
)
{
if
(
pDnode
->
event
==
DND_EVENT_STOP
)
{
dInfo
(
"dnode is about to stop"
);
dndSetStatus
(
pDnode
,
DND_STAT_STOPPED
);
for
(
EDndType
n
=
DNODE
+
1
;
n
<
NODE_MAX
;
++
n
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
if
(
!
pWrapper
->
required
)
continue
;
if
(
pDnode
->
ntype
==
NODE_MAX
)
continue
;
if
(
pWrapper
->
procId
>
0
&&
taosProcExist
(
pWrapper
->
procId
))
{
dInfo
(
"node:%s, send kill signal to the child process:%d"
,
pWrapper
->
name
,
pWrapper
->
procId
);
taosKillProc
(
pWrapper
->
procId
);
dInfo
(
"node:%s, wait for child process:%d to stop"
,
pWrapper
->
name
,
pWrapper
->
procId
);
taosWaitProc
(
pWrapper
->
procId
);
dInfo
(
"node:%s, child process:%d is stopped"
,
pWrapper
->
name
,
pWrapper
->
procId
);
}
}
break
;
}
else
{
for
(
EDndType
n
=
DNODE
+
1
;
n
<
NODE_MAX
;
++
n
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
if
(
!
pWrapper
->
required
)
continue
;
if
(
pDnode
->
ntype
==
NODE_MAX
)
continue
;
if
(
pWrapper
->
procId
<=
0
||
!
taosProcExist
(
pWrapper
->
procId
))
{
dWarn
(
"node:%s, process:%d is killed and needs to be restarted"
,
pWrapper
->
name
,
pWrapper
->
procId
);
taosProcCloseHandles
(
pWrapper
->
pProc
,
dndProcessProcHandle
);
dndNewNodeProc
(
pWrapper
,
n
);
static
void
dmWatchNodes
(
SDnode
*
pDnode
)
{
taosThreadMutexLock
(
&
pDnode
->
mutex
);
if
(
pDnode
->
ptype
==
DND_PROC_PARENT
)
{
for
(
EDndNodeType
n
=
DNODE
+
1
;
n
<
NODE_END
;
++
n
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
if
(
!
pWrapper
->
required
)
continue
;
if
(
pWrapper
->
procType
!=
DND_PROC_PARENT
)
continue
;
if
(
pDnode
->
ntype
==
NODE_END
)
continue
;
if
(
pWrapper
->
procId
<=
0
||
!
taosProcExist
(
pWrapper
->
procId
))
{
dWarn
(
"node:%s, process:%d is killed and needs to be restarted"
,
pWrapper
->
name
,
pWrapper
->
procId
);
if
(
pWrapper
->
procObj
)
{
taosProcCloseHandles
(
pWrapper
->
procObj
,
dmProcessProcHandle
);
}
dmNewNodeProc
(
pWrapper
,
n
);
}
}
taosMsleep
(
100
);
}
return
0
;
taosThreadMutexUnlock
(
&
pDnode
->
mutex
);
}
static
int32_t
dndRunInChildProcess
(
SDnode
*
pDnode
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
pDnode
->
ntype
];
dInfo
(
"%s run in child process"
,
pWrapper
->
name
);
pDnode
->
procType
=
PROC_CHILD
;
pWrapper
->
required
=
dndRequireNode
(
pWrapper
);
if
(
!
pWrapper
->
required
)
{
dError
(
"%s does not require startup"
,
pWrapper
->
name
);
return
-
1
;
}
SMsgCb
msgCb
=
dndCreateMsgcb
(
pWrapper
);
tmsgSetDefaultMsgCb
(
&
msgCb
);
pWrapper
->
procType
=
PROC_CHILD
;
if
(
dndOpenNodeImp
(
pWrapper
)
!=
0
)
{
dError
(
"node:%s, failed to start since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
int32_t
dmRun
(
SDnode
*
pDnode
)
{
if
(
!
tsMultiProcess
)
{
pDnode
->
ptype
=
DND_PROC_SINGLE
;
dInfo
(
"dnode run in single process"
);
}
else
if
(
pDnode
->
ntype
==
DNODE
||
pDnode
->
ntype
==
NODE_END
)
{
pDnode
->
ptype
=
DND_PROC_PARENT
;
dInfo
(
"dnode run in parent process"
);
}
else
{
pDnode
->
ptype
=
DND_PROC_CHILD
;
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
pDnode
->
ntype
];
dInfo
(
"%s run in child process"
,
pWrapper
->
name
);
}
SProcCfg
cfg
=
dndGenProcCfg
(
pWrapper
);
cfg
.
isChild
=
true
;
pWrapper
->
pProc
=
taosProcInit
(
&
cfg
);
if
(
pWrapper
->
pProc
==
NULL
)
{
dError
(
"node:%s, failed to create proc since %s"
,
pWrapper
->
name
,
terrstr
());
if
(
dmOpenNodes
(
pDnode
)
!=
0
)
{
dError
(
"failed to open nodes since %s"
,
terrstr
());
return
-
1
;
}
if
(
pWrapper
->
fp
.
startFp
!=
NULL
)
{
if
((
*
pWrapper
->
fp
.
startFp
)(
pWrapper
)
!=
0
)
{
dError
(
"node:%s, failed to start since %s"
,
pWrapper
->
name
,
terrstr
());
return
-
1
;
}
}
dndSetStatus
(
pDnode
,
DND_STAT_RUNNING
);
if
(
taosProcRun
(
pWrapper
->
pProc
)
!=
0
)
{
dError
(
"node:%s, failed to run proc since %s"
,
pWrapper
->
name
,
terrstr
());
if
(
dmStartNodes
(
pDnode
)
!=
0
)
{
dError
(
"failed to start nodes since %s"
,
terrstr
());
return
-
1
;
}
dInfo
(
"TDengine initialized successfully"
);
dndReportStartup
(
pDnode
,
"TDengine"
,
"initialized successfully"
);
while
(
1
)
{
if
(
pDnode
->
event
==
DND_EVENT_STOP
)
{
dInfo
(
"%s is about to stop"
,
pWrapper
->
name
);
dndSetStatus
(
pDnode
,
DND_STAT_STOPPED
);
break
;
}
taosMsleep
(
100
);
if
(
pDnode
->
event
&
DND_EVENT_STOP
)
{
dInfo
(
"dnode is about to stop"
);
dmSetStatus
(
pDnode
,
DND_STAT_STOPPED
);
dmStopNodes
(
pDnode
);
dmCloseNodes
(
pDnode
);
return
0
;
}
else
{
dmWatchNodes
(
pDnode
);
}
}
return
0
;
}
int32_t
dndRun
(
SDnode
*
pDnode
)
{
if
(
!
tsMultiProcess
)
{
return
dndRunInSingleProcess
(
pDnode
);
}
else
if
(
pDnode
->
ntype
==
DNODE
||
pDnode
->
ntype
==
NODE_MAX
)
{
return
dndRunInParentProcess
(
pDnode
);
}
else
{
return
dndRunInChildProcess
(
pDnode
);
}
return
0
;
}
source/dnode/mgmt/
dm
/dmHandle.c
→
source/dnode/mgmt/
implement/src
/dmHandle.c
浏览文件 @
2a95c8ef
...
...
@@ -14,22 +14,53 @@
*/
#define _DEFAULT_SOURCE
#include "dmI
nt
.h"
#include "dmI
mp
.h"
void
dmSendStatusReq
(
SDnodeMgmt
*
pMgmt
)
{
SDnode
*
pDnode
=
pMgmt
->
pDnode
;
static
void
dmUpdateDnodeCfg
(
SDnode
*
pDnode
,
SDnodeCfg
*
pCfg
)
{
if
(
pDnode
->
data
.
dnodeId
==
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
);
}
tFreeSStatusRsp
(
&
statusRsp
);
}
return
TSDB_CODE_SUCCESS
;
}
void
dmSendStatusReq
(
SDnode
*
pDnode
)
{
SStatusReq
req
=
{
0
};
taosRLockLatch
(
&
p
Mgmt
->
latch
);
taosRLockLatch
(
&
p
Dnode
->
data
.
latch
);
req
.
sver
=
tsVersion
;
req
.
d
ver
=
pMgmt
->
dv
er
;
req
.
dnodeId
=
pDnode
->
dnodeId
;
req
.
clusterId
=
pDnode
->
clusterId
;
req
.
rebootTime
=
pDnode
->
rebootTime
;
req
.
updateTime
=
p
Mgmt
->
updateTime
;
req
.
d
nodeVer
=
pDnode
->
data
.
dnodeV
er
;
req
.
dnodeId
=
pDnode
->
d
ata
.
d
nodeId
;
req
.
clusterId
=
pDnode
->
data
.
clusterId
;
req
.
rebootTime
=
pDnode
->
data
.
rebootTime
;
req
.
updateTime
=
p
Dnode
->
data
.
updateTime
;
req
.
numOfCores
=
tsNumOfCores
;
req
.
numOfSupportVnodes
=
pDnode
->
numOfS
upportVnodes
;
tstrncpy
(
req
.
dnodeEp
,
pDnode
->
localEp
,
TSDB_EP_LEN
);
req
.
numOfSupportVnodes
=
pDnode
->
data
.
s
upportVnodes
;
tstrncpy
(
req
.
dnodeEp
,
pDnode
->
data
.
localEp
,
TSDB_EP_LEN
);
req
.
clusterCfg
.
statusInterval
=
tsStatusInterval
;
req
.
clusterCfg
.
checkTime
=
0
;
...
...
@@ -38,96 +69,54 @@ void dmSendStatusReq(SDnodeMgmt *pMgmt) {
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
(
&
p
Mgmt
->
latch
);
taosRUnLockLatch
(
&
p
Dnode
->
data
.
latch
);
SMgmtWrapper
*
pWrapper
=
dndAcquireWrapper
(
pDnode
,
VNODES
);
if
(
pWrapper
!=
NULL
)
{
SMonVloadInfo
info
=
{
0
};
dmGetVnodeLoads
(
pWrapper
,
&
info
);
req
.
pVloads
=
info
.
pVloads
;
dndReleaseWrapper
(
pWrapper
);
}
SMonVloadInfo
info
=
{
0
};
dmGetVnodeLoads
(
pDnode
,
&
info
);
req
.
pVloads
=
info
.
pVloads
;
int32_t
contLen
=
tSerializeSStatusReq
(
NULL
,
0
,
&
req
);
void
*
pHead
=
rpcMallocCont
(
contLen
);
tSerializeSStatusReq
(
pHead
,
contLen
,
&
req
);
t
aosArrayDestroy
(
req
.
pVloads
);
t
FreeSStatusReq
(
&
req
);
SRpcMsg
rpcMsg
=
{.
pCont
=
pHead
,
.
contLen
=
contLen
,
.
msgType
=
TDMT_MND_STATUS
,
.
ahandle
=
(
void
*
)
0x9527
};
pMgmt
->
statusSent
=
1
;
SRpcMsg
rpcRsp
=
{
0
}
;
dTrace
(
"send req:%s to mnode, app:%p"
,
TMSG_INFO
(
rpcMsg
.
msgType
),
rpcMsg
.
ahandle
);
SEpSet
epSet
=
{
0
};
dmGetMnodeEpSet
(
pMgmt
,
&
epSet
);
tmsgSendReq
(
&
pMgmt
->
msgCb
,
&
epSet
,
&
rpcMsg
);
}
static
void
dmUpdateDnodeCfg
(
SDnodeMgmt
*
pMgmt
,
SDnodeCfg
*
pCfg
)
{
SDnode
*
pDnode
=
pMgmt
->
pDnode
;
if
(
pDnode
->
dnodeId
==
0
)
{
dInfo
(
"set dnodeId:%d clusterId:%"
PRId64
,
pCfg
->
dnodeId
,
pCfg
->
clusterId
);
taosWLockLatch
(
&
pMgmt
->
latch
);
pDnode
->
dnodeId
=
pCfg
->
dnodeId
;
pDnode
->
clusterId
=
pCfg
->
clusterId
;
dmWriteFile
(
pMgmt
);
taosWUnLockLatch
(
&
pMgmt
->
latch
);
}
dmSendToMnodeRecv
(
pDnode
,
&
rpcMsg
,
&
rpcRsp
);
dmProcessStatusRsp
(
pDnode
,
&
rpcRsp
);
}
int32_t
dmProcessStatusRsp
(
SDnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SDnode
*
pDnode
=
pMgmt
->
pDnode
;
SRpcMsg
*
pRsp
=
&
pMsg
->
rpcMsg
;
if
(
pRsp
->
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
pRsp
->
code
==
TSDB_CODE_MND_DNODE_NOT_EXIST
&&
!
pDnode
->
dropped
&&
pDnode
->
dnodeId
>
0
)
{
dInfo
(
"dnode:%d, set to dropped since not exist in mnode"
,
pDnode
->
dnodeId
);
pDnode
->
dropped
=
1
;
dmWriteFile
(
pMgmt
);
}
}
else
{
SStatusRsp
statusRsp
=
{
0
};
if
(
pRsp
->
pCont
!=
NULL
&&
pRsp
->
contLen
!=
0
&&
tDeserializeSStatusRsp
(
pRsp
->
pCont
,
pRsp
->
contLen
,
&
statusRsp
)
==
0
)
{
pMgmt
->
dver
=
statusRsp
.
dver
;
dmUpdateDnodeCfg
(
pMgmt
,
&
statusRsp
.
dnodeCfg
);
dmUpdateDnodeEps
(
pMgmt
,
statusRsp
.
pDnodeEps
);
}
tFreeSStatusRsp
(
&
statusRsp
);
}
pMgmt
->
statusSent
=
0
;
return
TSDB_CODE_SUCCESS
;
}
int32_t
dmProcessAuthRsp
(
SDnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
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
Mgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
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
Mgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
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
;
}
static
int32_t
dmProcessCreateNodeMsg
(
SDnode
*
pDnode
,
EDnd
Type
ntype
,
SNodeMsg
*
pMsg
)
{
SMgmtWrapper
*
pWrapper
=
d
nd
AcquireWrapper
(
pDnode
,
ntype
);
int32_t
dmProcessCreateNodeReq
(
SDnode
*
pDnode
,
EDndNode
Type
ntype
,
SNodeMsg
*
pMsg
)
{
SMgmtWrapper
*
pWrapper
=
d
m
AcquireWrapper
(
pDnode
,
ntype
);
if
(
pWrapper
!=
NULL
)
{
d
nd
ReleaseWrapper
(
pWrapper
);
d
m
ReleaseWrapper
(
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
)
{
...
...
@@ -136,81 +125,150 @@ static int32_t dmProcessCreateNodeMsg(SDnode *pDnode, EDndType ntype, SNodeMsg *
return
-
1
;
}
int32_t
code
=
(
*
pWrapper
->
fp
.
create
Msg
Fp
)(
pWrapper
,
pMsg
);
int32_t
code
=
(
*
pWrapper
->
fp
.
createFp
)(
pWrapper
,
pMsg
);
if
(
code
!=
0
)
{
dError
(
"node:%s, failed to
open
since %s"
,
pWrapper
->
name
,
terrstr
());
dError
(
"node:%s, failed to
create
since %s"
,
pWrapper
->
name
,
terrstr
());
}
else
{
dDebug
(
"node:%s, has been opened"
,
pWrapper
->
name
);
dDebug
(
"node:%s, has been created"
,
pWrapper
->
name
);
pWrapper
->
required
=
true
;
pWrapper
->
deployed
=
true
;
pWrapper
->
procType
=
pDnode
->
ptype
;
(
void
)
dmOpenNode
(
pWrapper
);
}
taosThreadMutexUnlock
(
&
pDnode
->
mutex
);
return
code
;
}
static
int32_t
dmProcessDropNodeMsg
(
SDnode
*
pDnode
,
EDnd
Type
ntype
,
SNodeMsg
*
pMsg
)
{
SMgmtWrapper
*
pWrapper
=
d
nd
AcquireWrapper
(
pDnode
,
ntype
);
int32_t
dmProcessDropNodeReq
(
SDnode
*
pDnode
,
EDndNode
Type
ntype
,
SNodeMsg
*
pMsg
)
{
SMgmtWrapper
*
pWrapper
=
d
m
AcquireWrapper
(
pDnode
,
ntype
);
if
(
pWrapper
==
NULL
)
{
terrno
=
TSDB_CODE_NODE_NOT_DEPLOYED
;
dError
(
"failed to drop node since %s"
,
terrstr
());
return
-
1
;
}
taosWLockLatch
(
&
pWrapper
->
latch
);
pWrapper
->
deployed
=
false
;
taosThreadMutexLock
(
&
pDnode
->
mutex
);
int32_t
code
=
(
*
pWrapper
->
fp
.
drop
Msg
Fp
)(
pWrapper
,
pMsg
);
int32_t
code
=
(
*
pWrapper
->
fp
.
dropFp
)(
pWrapper
,
pMsg
);
if
(
code
!=
0
)
{
pWrapper
->
deployed
=
true
;
dError
(
"node:%s, failed to drop since %s"
,
pWrapper
->
name
,
terrstr
());
}
else
{
pWrapper
->
deployed
=
false
;
dDebug
(
"node:%s, has been dropped"
,
pWrapper
->
name
);
}
taosWUnLockLatch
(
&
pWrapper
->
latch
);
dndReleaseWrapper
(
pWrapper
);
return
code
;
}
dmReleaseWrapper
(
pWrapper
);
int32_t
dmProcessCDnodeReq
(
SDnode
*
pDnode
,
SNodeMsg
*
pMsg
)
{
switch
(
pMsg
->
rpcMsg
.
msgType
)
{
case
TDMT_DND_CREATE_MNODE
:
return
dmProcessCreateNodeMsg
(
pDnode
,
MNODE
,
pMsg
);
case
TDMT_DND_DROP_MNODE
:
return
dmProcessDropNodeMsg
(
pDnode
,
MNODE
,
pMsg
);
case
TDMT_DND_CREATE_QNODE
:
return
dmProcessCreateNodeMsg
(
pDnode
,
QNODE
,
pMsg
);
case
TDMT_DND_DROP_QNODE
:
return
dmProcessDropNodeMsg
(
pDnode
,
QNODE
,
pMsg
);
case
TDMT_DND_CREATE_SNODE
:
return
dmProcessCreateNodeMsg
(
pDnode
,
SNODE
,
pMsg
);
case
TDMT_DND_DROP_SNODE
:
return
dmProcessDropNodeMsg
(
pDnode
,
SNODE
,
pMsg
);
case
TDMT_DND_CREATE_BNODE
:
return
dmProcessCreateNodeMsg
(
pDnode
,
BNODE
,
pMsg
);
case
TDMT_DND_DROP_BNODE
:
return
dmProcessDropNodeMsg
(
pDnode
,
BNODE
,
pMsg
);
default:
terrno
=
TSDB_CODE_MSG_NOT_PROCESSED
;
return
-
1
;
if
(
code
==
0
)
{
dmCloseNode
(
pWrapper
);
pWrapper
->
required
=
false
;
pWrapper
->
deployed
=
false
;
taosRemoveDir
(
pWrapper
->
path
);
}
taosThreadMutexUnlock
(
&
pDnode
->
mutex
);
return
code
;
}
void
dmIni
tMsgHandle
(
SMgmtWrapper
*
pWrapper
)
{
static
void
dmSetMgm
tMsgHandle
(
SMgmtWrapper
*
pWrapper
)
{
// Requests handled by DNODE
dndSetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_MNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dndSetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_MNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dndSetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_QNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dndSetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_QNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dndSetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_SNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dndSetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_SNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dndSetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_BNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dndSetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_BNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dndSetMsgHandle
(
pWrapper
,
TDMT_DND_CONFIG_DNODE
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dndSetMsgHandle
(
pWrapper
,
TDMT_DND_NETWORK_TEST
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
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
dndSetMsgHandle
(
pWrapper
,
TDMT_MND_STATUS_RSP
,
dmProcessMonitorMsg
,
DEFAULT_HANDLE
);
dndSetMsgHandle
(
pWrapper
,
TDMT_MND_GRANT_RSP
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
dndSetMsgHandle
(
pWrapper
,
TDMT_MND_AUTH_RSP
,
dmProcessMgmtMsg
,
DEFAULT_HANDLE
);
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
(
dmInitTrans
(
pDnode
)
!=
0
)
{
dError
(
"failed to init transport since %s"
,
terrstr
());
return
-
1
;
}
dInfo
(
"dnode-mgmt is initialized"
);
return
0
;
}
static
void
dmCleanupMgmt
(
SMgmtWrapper
*
pWrapper
)
{
dInfo
(
"dnode-mgmt start to clean up"
);
SDnode
*
pDnode
=
pWrapper
->
pDnode
;
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
);
dmCleanupTrans
(
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/
dm
/dmMonitor.c
→
source/dnode/mgmt/
implement/src
/dmMonitor.c
浏览文件 @
2a95c8ef
...
...
@@ -14,17 +14,17 @@
*/
#define _DEFAULT_SOURCE
#include "dmI
nt
.h"
#include "dmI
mp
.h"
static
void
dmGetMonitorBasicInfo
(
SDnode
*
pDnode
,
SMonBasicInfo
*
pInfo
)
{
pInfo
->
protocol
=
1
;
pInfo
->
dnode_id
=
pDnode
->
dnodeId
;
pInfo
->
cluster_id
=
pDnode
->
clusterId
;
pInfo
->
dnode_id
=
pDnode
->
d
ata
.
d
nodeId
;
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
->
rebootTime
)
/
(
86400000
.
0
f
);
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
;
...
...
@@ -55,7 +55,7 @@ void dmSendMonitorReport(SDnode *pDnode) {
SRpcMsg
req
=
{
0
};
SRpcMsg
rsp
;
SEpSet
epset
=
{.
inUse
=
0
,
.
numOfEps
=
1
};
tstrncpy
(
epset
.
eps
[
0
].
fqdn
,
tsL
ocalFqdn
,
TSDB_FQDN_LEN
);
tstrncpy
(
epset
.
eps
[
0
].
fqdn
,
pDnode
->
data
.
l
ocalFqdn
,
TSDB_FQDN_LEN
);
epset
.
eps
[
0
].
port
=
tsServerPort
;
SMgmtWrapper
*
pWrapper
=
NULL
;
...
...
@@ -64,14 +64,14 @@ void dmSendMonitorReport(SDnode *pDnode) {
bool
getFromAPI
=
!
tsMultiProcess
;
pWrapper
=
&
pDnode
->
wrappers
[
MNODE
];
if
(
getFromAPI
)
{
if
(
d
nd
MarkWrapper
(
pWrapper
)
==
0
)
{
if
(
d
m
MarkWrapper
(
pWrapper
)
==
0
)
{
mmGetMonitorInfo
(
pWrapper
,
&
mmInfo
);
d
nd
ReleaseWrapper
(
pWrapper
);
d
m
ReleaseWrapper
(
pWrapper
);
}
}
else
{
if
(
pWrapper
->
required
)
{
req
.
msgType
=
TDMT_MON_MM_INFO
;
d
nd
SendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
d
m
SendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
if
(
rsp
.
code
==
0
&&
rsp
.
contLen
>
0
)
{
tDeserializeSMonMmInfo
(
rsp
.
pCont
,
rsp
.
contLen
,
&
mmInfo
);
}
...
...
@@ -79,16 +79,16 @@ void dmSendMonitorReport(SDnode *pDnode) {
}
}
pWrapper
=
&
pDnode
->
wrappers
[
VNODE
S
];
pWrapper
=
&
pDnode
->
wrappers
[
VNODE
];
if
(
getFromAPI
)
{
if
(
d
nd
MarkWrapper
(
pWrapper
)
==
0
)
{
if
(
d
m
MarkWrapper
(
pWrapper
)
==
0
)
{
vmGetMonitorInfo
(
pWrapper
,
&
vmInfo
);
d
nd
ReleaseWrapper
(
pWrapper
);
d
m
ReleaseWrapper
(
pWrapper
);
}
}
else
{
if
(
pWrapper
->
required
)
{
req
.
msgType
=
TDMT_MON_VM_INFO
;
d
nd
SendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
d
m
SendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
if
(
rsp
.
code
==
0
&&
rsp
.
contLen
>
0
)
{
tDeserializeSMonVmInfo
(
rsp
.
pCont
,
rsp
.
contLen
,
&
vmInfo
);
}
...
...
@@ -98,14 +98,14 @@ void dmSendMonitorReport(SDnode *pDnode) {
pWrapper
=
&
pDnode
->
wrappers
[
QNODE
];
if
(
getFromAPI
)
{
if
(
d
nd
MarkWrapper
(
pWrapper
)
==
0
)
{
if
(
d
m
MarkWrapper
(
pWrapper
)
==
0
)
{
qmGetMonitorInfo
(
pWrapper
,
&
qmInfo
);
d
nd
ReleaseWrapper
(
pWrapper
);
d
m
ReleaseWrapper
(
pWrapper
);
}
}
else
{
if
(
pWrapper
->
required
)
{
req
.
msgType
=
TDMT_MON_QM_INFO
;
d
nd
SendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
d
m
SendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
if
(
rsp
.
code
==
0
&&
rsp
.
contLen
>
0
)
{
tDeserializeSMonQmInfo
(
rsp
.
pCont
,
rsp
.
contLen
,
&
qmInfo
);
}
...
...
@@ -115,14 +115,14 @@ void dmSendMonitorReport(SDnode *pDnode) {
pWrapper
=
&
pDnode
->
wrappers
[
SNODE
];
if
(
getFromAPI
)
{
if
(
d
nd
MarkWrapper
(
pWrapper
)
==
0
)
{
if
(
d
m
MarkWrapper
(
pWrapper
)
==
0
)
{
smGetMonitorInfo
(
pWrapper
,
&
smInfo
);
d
nd
ReleaseWrapper
(
pWrapper
);
d
m
ReleaseWrapper
(
pWrapper
);
}
}
else
{
if
(
pWrapper
->
required
)
{
req
.
msgType
=
TDMT_MON_SM_INFO
;
d
nd
SendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
d
m
SendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
if
(
rsp
.
code
==
0
&&
rsp
.
contLen
>
0
)
{
tDeserializeSMonSmInfo
(
rsp
.
pCont
,
rsp
.
contLen
,
&
smInfo
);
}
...
...
@@ -132,14 +132,14 @@ void dmSendMonitorReport(SDnode *pDnode) {
pWrapper
=
&
pDnode
->
wrappers
[
BNODE
];
if
(
getFromAPI
)
{
if
(
d
nd
MarkWrapper
(
pWrapper
)
==
0
)
{
if
(
d
m
MarkWrapper
(
pWrapper
)
==
0
)
{
bmGetMonitorInfo
(
pWrapper
,
&
bmInfo
);
d
nd
ReleaseWrapper
(
pWrapper
);
d
m
ReleaseWrapper
(
pWrapper
);
}
}
else
{
if
(
pWrapper
->
required
)
{
req
.
msgType
=
TDMT_MON_BM_INFO
;
d
nd
SendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
d
m
SendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
if
(
rsp
.
code
==
0
&&
rsp
.
contLen
>
0
)
{
tDeserializeSMonBmInfo
(
rsp
.
pCont
,
rsp
.
contLen
,
&
bmInfo
);
}
...
...
@@ -161,7 +161,10 @@ void dmSendMonitorReport(SDnode *pDnode) {
monSendReport
();
}
void
dmGetVnodeLoads
(
SMgmtWrapper
*
pWrapper
,
SMonVloadInfo
*
pInfo
)
{
void
dmGetVnodeLoads
(
SDnode
*
pDnode
,
SMonVloadInfo
*
pInfo
)
{
SMgmtWrapper
*
pWrapper
=
dmAcquireWrapper
(
pDnode
,
VNODE
);
if
(
pWrapper
==
NULL
)
return
;
bool
getFromAPI
=
!
tsMultiProcess
;
if
(
getFromAPI
)
{
vmGetVnodeLoads
(
pWrapper
,
pInfo
);
...
...
@@ -169,26 +172,14 @@ void dmGetVnodeLoads(SMgmtWrapper *pWrapper, SMonVloadInfo *pInfo) {
SRpcMsg
req
=
{.
msgType
=
TDMT_MON_VM_LOAD
};
SRpcMsg
rsp
=
{
0
};
SEpSet
epset
=
{.
inUse
=
0
,
.
numOfEps
=
1
};
tstrncpy
(
epset
.
eps
[
0
].
fqdn
,
tsL
ocalFqdn
,
TSDB_FQDN_LEN
);
tstrncpy
(
epset
.
eps
[
0
].
fqdn
,
pDnode
->
data
.
l
ocalFqdn
,
TSDB_FQDN_LEN
);
epset
.
eps
[
0
].
port
=
tsServerPort
;
d
ndSendRecv
(
pWrapper
->
pDnode
,
&
epset
,
&
req
,
&
rsp
);
d
mSendRecv
(
pDnode
,
&
epset
,
&
req
,
&
rsp
);
if
(
rsp
.
code
==
0
&&
rsp
.
contLen
>
0
)
{
tDeserializeSMonVloadInfo
(
rsp
.
pCont
,
rsp
.
contLen
,
pInfo
);
}
rpcFreeCont
(
rsp
.
pCont
);
}
}
void
dmGetMonitorSysInfo
(
SMonSysInfo
*
pInfo
)
{
taosGetCpuUsage
(
&
pInfo
->
cpu_engine
,
&
pInfo
->
cpu_system
);
taosGetCpuCores
(
&
pInfo
->
cpu_cores
);
taosGetProcMemory
(
&
pInfo
->
mem_engine
);
taosGetSysMemory
(
&
pInfo
->
mem_system
);
pInfo
->
mem_total
=
tsTotalMemoryKB
;
pInfo
->
disk_engine
=
0
;
pInfo
->
disk_used
=
tsDataSpace
.
size
.
used
;
pInfo
->
disk_total
=
tsDataSpace
.
size
.
total
;
taosGetCardInfoDelta
(
&
pInfo
->
net_in
,
&
pInfo
->
net_out
);
taosGetProcIODelta
(
&
pInfo
->
io_read
,
&
pInfo
->
io_write
,
&
pInfo
->
io_read_disk
,
&
pInfo
->
io_write_disk
);
dmReleaseWrapper
(
pWrapper
);
}
source/dnode/mgmt/implement/src/dmObj.c
0 → 100644
浏览文件 @
2a95c8ef
/*
* 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
;
}
pDnode
->
data
.
msgCb
=
dmGetMsgcb
(
&
pDnode
->
wrappers
[
DNODE
]);
tmsgSetDefaultMsgCb
(
&
pDnode
->
data
.
msgCb
);
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/
main/dnd
Transport.c
→
source/dnode/mgmt/
implement/src/dm
Transport.c
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mgmt/
dm
/dmWorker.c
→
source/dnode/mgmt/
implement/src
/dmWorker.c
浏览文件 @
2a95c8ef
...
...
@@ -14,43 +14,62 @@
*/
#define _DEFAULT_SOURCE
#include "dmI
nt
.h"
#include "dmI
mp
.h"
static
void
*
dmThreadRoutine
(
void
*
param
)
{
SDnodeMgmt
*
pMgmt
=
param
;
SDnode
*
pDnode
=
pMgmt
->
pDnode
;
int64_t
lastStatusTime
=
taosGetTimestampMs
();
int64_t
lastMonitorTime
=
lastStatusTime
;
static
void
*
dmStatusThreadFp
(
void
*
param
)
{
SDnode
*
pDnode
=
param
;
int64_t
lastTime
=
taosGetTimestampMs
();
setThreadName
(
"dnode-
hb
"
);
setThreadName
(
"dnode-
status
"
);
while
(
true
)
{
while
(
1
)
{
taosThreadTestCancel
();
taosMsleep
(
200
);
if
(
dndGetStatus
(
pDnode
)
!=
DND_STAT_RUNNING
||
pDnode
->
dropped
)
{
if
(
pDnode
->
status
!=
DND_STAT_RUNNING
||
pDnode
->
data
.
dropped
)
{
continue
;
}
int64_t
curTime
=
taosGetTimestampMs
();
float
statusInterval
=
(
curTime
-
lastStatusTime
)
/
1000
.
0
f
;
if
(
statusInterval
>=
tsStatusInterval
&&
!
pMgmt
->
statusSent
)
{
dmSendStatusReq
(
pMgmt
);
lastStatusTime
=
curTime
;
float
interval
=
(
curTime
-
lastTime
)
/
1000
.
0
f
;
if
(
interval
>=
tsStatusInterval
)
{
dmSendStatusReq
(
pDnode
);
lastTime
=
curTime
;
}
}
return
NULL
;
}
static
void
*
dmMonitorThreadFp
(
void
*
param
)
{
SDnode
*
pDnode
=
param
;
int64_t
lastTime
=
taosGetTimestampMs
();
setThreadName
(
"dnode-monitor"
);
while
(
1
)
{
taosThreadTestCancel
();
taosMsleep
(
200
);
if
(
pDnode
->
status
!=
DND_STAT_RUNNING
||
pDnode
->
data
.
dropped
)
{
continue
;
}
float
monitorInterval
=
(
curTime
-
lastMonitorTime
)
/
1000
.
0
f
;
if
(
monitorInterval
>=
tsMonitorInterval
)
{
int64_t
curTime
=
taosGetTimestampMs
();
float
interval
=
(
curTime
-
lastTime
)
/
1000
.
0
f
;
if
(
interval
>=
tsMonitorInterval
)
{
dmSendMonitorReport
(
pDnode
);
last
Monitor
Time
=
curTime
;
lastTime
=
curTime
;
}
}
return
TSDB_CODE_SUCCESS
;
return
NULL
;
}
int32_t
dmStart
Thread
(
SDnodeMgmt
*
pMgmt
)
{
p
Mgmt
->
threadId
=
taosCreateThread
(
dmThreadRoutine
,
pMgmt
);
if
(
p
Mgmt
->
t
hreadId
==
NULL
)
{
dError
(
"failed to init dnode thread"
);
int32_t
dmStart
StatusThread
(
SDnode
*
pDnode
)
{
p
Dnode
->
data
.
statusThreadId
=
taosCreateThread
(
dmStatusThreadFp
,
pDnode
);
if
(
p
Dnode
->
data
.
statusT
hreadId
==
NULL
)
{
dError
(
"failed to init dnode
status
thread"
);
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
return
-
1
;
}
...
...
@@ -58,29 +77,72 @@ int32_t dmStartThread(SDnodeMgmt *pMgmt) {
return
0
;
}
static
void
dmProcessQueue
(
SQueueInfo
*
pInfo
,
SNodeMsg
*
pMsg
)
{
SDnodeMgmt
*
pMgmt
=
pInfo
->
ahandle
;
void
dmStopStatusThread
(
SDnode
*
pDnode
)
{
if
(
pDnode
->
data
.
statusThreadId
!=
NULL
)
{
taosDestoryThread
(
pDnode
->
data
.
statusThreadId
);
pDnode
->
data
.
statusThreadId
=
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
;
return
-
1
;
}
return
0
;
}
SDnode
*
pDnode
=
pMgmt
->
pDnode
;
void
dmStopMonitorThread
(
SDnode
*
pDnode
)
{
if
(
pDnode
->
data
.
monitorThreadId
!=
NULL
)
{
taosDestoryThread
(
pDnode
->
data
.
monitorThreadId
);
pDnode
->
data
.
monitorThreadId
=
NULL
;
}
}
static
void
dmProcessMgmtQueue
(
SQueueInfo
*
pInfo
,
SNodeMsg
*
pMsg
)
{
SDnode
*
pDnode
=
pInfo
->
ahandle
;
SRpcMsg
*
pRpc
=
&
pMsg
->
rpcMsg
;
int32_t
code
=
-
1
;
dTrace
(
"msg:%p, will be processed in dnode queue"
,
pMsg
);
dTrace
(
"msg:%p, will be processed in dnode
-mgmt
queue"
,
pMsg
);
switch
(
pRpc
->
msgType
)
{
case
TDMT_DND_CONFIG_DNODE
:
code
=
dmProcessConfigReq
(
pMgmt
,
pMsg
);
break
;
case
TDMT_MND_STATUS_RSP
:
code
=
dmProcessStatusRsp
(
pMgmt
,
pMsg
);
code
=
dmProcessConfigReq
(
pDnode
,
pMsg
);
break
;
case
TDMT_MND_AUTH_RSP
:
code
=
dmProcessAuthRsp
(
p
Mgmt
,
pMsg
);
code
=
dmProcessAuthRsp
(
p
Dnode
,
pMsg
);
break
;
case
TDMT_MND_GRANT_RSP
:
code
=
dmProcessGrantRsp
(
pMgmt
,
pMsg
);
code
=
dmProcessGrantRsp
(
pDnode
,
pMsg
);
break
;
case
TDMT_DND_CREATE_MNODE
:
code
=
dmProcessCreateNodeReq
(
pDnode
,
MNODE
,
pMsg
);
break
;
case
TDMT_DND_DROP_MNODE
:
code
=
dmProcessDropNodeReq
(
pDnode
,
MNODE
,
pMsg
);
break
;
case
TDMT_DND_CREATE_QNODE
:
code
=
dmProcessCreateNodeReq
(
pDnode
,
QNODE
,
pMsg
);
break
;
case
TDMT_DND_DROP_QNODE
:
code
=
dmProcessDropNodeReq
(
pDnode
,
QNODE
,
pMsg
);
break
;
case
TDMT_DND_CREATE_SNODE
:
code
=
dmProcessCreateNodeReq
(
pDnode
,
SNODE
,
pMsg
);
break
;
case
TDMT_DND_DROP_SNODE
:
code
=
dmProcessDropNodeReq
(
pDnode
,
SNODE
,
pMsg
);
break
;
case
TDMT_DND_CREATE_BNODE
:
code
=
dmProcessCreateNodeReq
(
pDnode
,
BNODE
,
pMsg
);
break
;
case
TDMT_DND_DROP_BNODE
:
code
=
dmProcessDropNodeReq
(
pDnode
,
BNODE
,
pMsg
);
break
;
default:
code
=
dmProcessCDnodeReq
(
pMgmt
->
pDnode
,
pMsg
);
break
;
}
...
...
@@ -95,16 +157,10 @@ static void dmProcessQueue(SQueueInfo *pInfo, SNodeMsg *pMsg) {
taosFreeQitem
(
pMsg
);
}
int32_t
dmStartWorker
(
SDnodeMgmt
*
pMgmt
)
{
SSingleWorkerCfg
mcfg
=
{.
min
=
1
,
.
max
=
1
,
.
name
=
"dnode-mgmt"
,
.
fp
=
(
FItem
)
dmProcessQueue
,
.
param
=
pMgmt
};
if
(
tSingleWorkerInit
(
&
pMgmt
->
mgmtWorker
,
&
mcfg
)
!=
0
)
{
dError
(
"failed to start dnode mgmt worker since %s"
,
terrstr
());
return
-
1
;
}
SSingleWorkerCfg
scfg
=
{.
min
=
1
,
.
max
=
1
,
.
name
=
"dnode-monitor"
,
.
fp
=
(
FItem
)
dmProcessQueue
,
.
param
=
pMgmt
};
if
(
tSingleWorkerInit
(
&
pMgmt
->
monitorWorker
,
&
scfg
)
!=
0
)
{
dError
(
"failed to start dnode monitor worker since %s"
,
terrstr
());
int32_t
dmStartWorker
(
SDnode
*
pDnode
)
{
SSingleWorkerCfg
cfg
=
{.
min
=
1
,
.
max
=
1
,
.
name
=
"dnode-mgmt"
,
.
fp
=
(
FItem
)
dmProcessMgmtQueue
,
.
param
=
pDnode
};
if
(
tSingleWorkerInit
(
&
pDnode
->
data
.
mgmtWorker
,
&
cfg
)
!=
0
)
{
dError
(
"failed to start dnode-mgmt worker since %s"
,
terrstr
());
return
-
1
;
}
...
...
@@ -112,30 +168,13 @@ int32_t dmStartWorker(SDnodeMgmt *pMgmt) {
return
0
;
}
void
dmStopWorker
(
SDnodeMgmt
*
pMgmt
)
{
tSingleWorkerCleanup
(
&
pMgmt
->
mgmtWorker
);
tSingleWorkerCleanup
(
&
pMgmt
->
monitorWorker
);
if
(
pMgmt
->
threadId
!=
NULL
)
{
taosDestoryThread
(
pMgmt
->
threadId
);
pMgmt
->
threadId
=
NULL
;
}
void
dmStopWorker
(
SDnode
*
pDnode
)
{
tSingleWorkerCleanup
(
&
pDnode
->
data
.
mgmtWorker
);
dDebug
(
"dnode workers are closed"
);
}
int32_t
dmProcessMgmtMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SDnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
SSingleWorker
*
pWorker
=
&
pMgmt
->
mgmtWorker
;
dTrace
(
"msg:%p, put into worker %s"
,
pMsg
,
pWorker
->
name
);
taosWriteQitem
(
pWorker
->
queue
,
pMsg
);
return
0
;
}
int32_t
dmProcessMonitorMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
SDnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
SSingleWorker
*
pWorker
=
&
pMgmt
->
monitorWorker
;
SSingleWorker
*
pWorker
=
&
pWrapper
->
pDnode
->
data
.
mgmtWorker
;
dTrace
(
"msg:%p, put into worker %s"
,
pMsg
,
pWorker
->
name
);
taosWriteQitem
(
pWorker
->
queue
,
pMsg
);
return
0
;
...
...
source/dnode/mgmt/inc/dndInt.h
已删除
100644 → 0
浏览文件 @
a654ece8
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _TD_DND_INT_H_
#define _TD_DND_INT_H_
#include "os.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 "monitor.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__); }}
typedef
enum
{
DNODE
,
VNODES
,
QNODE
,
SNODE
,
MNODE
,
BNODE
,
NODE_MAX
}
EDndType
;
typedef
enum
{
DND_STAT_INIT
,
DND_STAT_RUNNING
,
DND_STAT_STOPPED
}
EDndStatus
;
typedef
enum
{
DND_ENV_INIT
,
DND_ENV_READY
,
DND_ENV_CLEANUP
}
EEnvStatus
;
typedef
enum
{
PROC_SINGLE
,
PROC_CHILD
,
PROC_PARENT
}
EProcType
;
typedef
struct
SMgmtFp
SMgmtFp
;
typedef
struct
SMgmtWrapper
SMgmtWrapper
;
typedef
struct
SMsgHandle
SMsgHandle
;
typedef
struct
SDnodeMgmt
SDnodeMgmt
;
typedef
struct
SVnodesMgmt
SVnodesMgmt
;
typedef
struct
SMnodeMgmt
SMnodeMgmt
;
typedef
struct
SQnodeMgmt
SQnodeMgmt
;
typedef
struct
SSnodeMgmt
SSnodeMgmt
;
typedef
struct
SBnodeMgmt
SBnodeMgmt
;
typedef
int32_t
(
*
NodeMsgFp
)(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
typedef
int32_t
(
*
OpenNodeFp
)(
SMgmtWrapper
*
pWrapper
);
typedef
void
(
*
CloseNodeFp
)(
SMgmtWrapper
*
pWrapper
);
typedef
int32_t
(
*
StartNodeFp
)(
SMgmtWrapper
*
pWrapper
);
typedef
int32_t
(
*
CreateNodeFp
)(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
typedef
int32_t
(
*
DropNodeFp
)(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
typedef
int32_t
(
*
RequireNodeFp
)(
SMgmtWrapper
*
pWrapper
,
bool
*
required
);
typedef
struct
SMsgHandle
{
SMgmtWrapper
*
pQndWrapper
;
SMgmtWrapper
*
pMndWrapper
;
SMgmtWrapper
*
pWrapper
;
}
SMsgHandle
;
typedef
struct
SMgmtFp
{
OpenNodeFp
openFp
;
CloseNodeFp
closeFp
;
StartNodeFp
startFp
;
CreateNodeFp
createMsgFp
;
DropNodeFp
dropMsgFp
;
RequireNodeFp
requiredFp
;
}
SMgmtFp
;
typedef
struct
SMgmtWrapper
{
const
char
*
name
;
char
*
path
;
int32_t
refCount
;
SRWLatch
latch
;
EDndType
ntype
;
bool
deployed
;
bool
required
;
EProcType
procType
;
int32_t
procId
;
SProcObj
*
pProc
;
SShm
shm
;
void
*
pMgmt
;
SDnode
*
pDnode
;
SMgmtFp
fp
;
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
];
}
STransMgmt
;
typedef
struct
SDnode
{
int64_t
clusterId
;
int32_t
dnodeId
;
int32_t
numOfSupportVnodes
;
int64_t
rebootTime
;
char
*
localEp
;
char
*
localFqdn
;
char
*
firstEp
;
char
*
secondEp
;
char
*
dataDir
;
SDiskCfg
*
disks
;
int32_t
numOfDisks
;
uint16_t
serverPort
;
bool
dropped
;
EProcType
procType
;
EDndType
ntype
;
EDndStatus
status
;
EDndEvent
event
;
SStartupReq
startup
;
TdFilePtr
lockfile
;
STransMgmt
trans
;
SMgmtWrapper
wrappers
[
NODE_MAX
];
}
SDnode
;
// dndEnv.c
const
char
*
dndStatStr
(
EDndStatus
stat
);
const
char
*
dndNodeLogStr
(
EDndType
ntype
);
const
char
*
dndNodeProcStr
(
EDndType
ntype
);
const
char
*
dndEventStr
(
EDndEvent
ev
);
// dndExec.c
int32_t
dndOpenNode
(
SMgmtWrapper
*
pWrapper
);
void
dndCloseNode
(
SMgmtWrapper
*
pWrapper
);
// dndFile.c
int32_t
dndReadFile
(
SMgmtWrapper
*
pWrapper
,
bool
*
pDeployed
);
int32_t
dndWriteFile
(
SMgmtWrapper
*
pWrapper
,
bool
deployed
);
TdFilePtr
dndCheckRunning
(
const
char
*
dataDir
);
int32_t
dndReadShmFile
(
SDnode
*
pDnode
);
int32_t
dndWriteShmFile
(
SDnode
*
pDnode
);
// dndInt.c
EDndStatus
dndGetStatus
(
SDnode
*
pDnode
);
void
dndSetStatus
(
SDnode
*
pDnode
,
EDndStatus
stat
);
void
dndSetMsgHandle
(
SMgmtWrapper
*
pWrapper
,
tmsg_t
msgType
,
NodeMsgFp
nodeMsgFp
,
int8_t
vgId
);
SMgmtWrapper
*
dndAcquireWrapper
(
SDnode
*
pDnode
,
EDndType
nType
);
int32_t
dndMarkWrapper
(
SMgmtWrapper
*
pWrapper
);
void
dndReleaseWrapper
(
SMgmtWrapper
*
pWrapper
);
void
dndHandleEvent
(
SDnode
*
pDnode
,
EDndEvent
event
);
void
dndReportStartup
(
SDnode
*
pDnode
,
const
char
*
pName
,
const
char
*
pDesc
);
void
dndProcessStartupReq
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
);
// dndTransport.c
int32_t
dndInitTrans
(
SDnode
*
pDnode
);
void
dndCleanupTrans
(
SDnode
*
pDnode
);
SMsgCb
dndCreateMsgcb
(
SMgmtWrapper
*
pWrapper
);
SProcCfg
dndGenProcCfg
(
SMgmtWrapper
*
pWrapper
);
int32_t
dndInitMsgHandle
(
SDnode
*
pDnode
);
void
dndSendRecv
(
SDnode
*
pDnode
,
SEpSet
*
pEpSet
,
SRpcMsg
*
pReq
,
SRpcMsg
*
pRsp
);
// mgmt
void
dmSetMgmtFp
(
SMgmtWrapper
*
pWrapper
);
void
bmSetMgmtFp
(
SMgmtWrapper
*
pWrapper
);
void
qmSetMgmtFp
(
SMgmtWrapper
*
pMgmt
);
void
smSetMgmtFp
(
SMgmtWrapper
*
pWrapper
);
void
vmSetMgmtFp
(
SMgmtWrapper
*
pWrapper
);
void
mmSetMgmtFp
(
SMgmtWrapper
*
pMgmt
);
void
dmGetMnodeEpSet
(
SDnodeMgmt
*
pMgmt
,
SEpSet
*
pEpSet
);
void
dmUpdateMnodeEpSet
(
SDnodeMgmt
*
pMgmt
,
SEpSet
*
pEpSet
);
void
dmSendRedirectRsp
(
SDnodeMgmt
*
pMgmt
,
const
SRpcMsg
*
pMsg
);
void
dmGetMonitorSysInfo
(
SMonSysInfo
*
pInfo
);
void
vmGetVnodeLoads
(
SMgmtWrapper
*
pWrapper
,
SMonVloadInfo
*
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
);
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DND_INT_H_*/
\ No newline at end of file
source/dnode/mgmt/interface/CMakeLists.txt
0 → 100644
浏览文件 @
2a95c8ef
aux_source_directory
(
src DNODE_INTERFACE
)
add_library
(
dnode_interface STATIC
${
DNODE_INTERFACE
}
)
target_include_directories
(
dnode_interface
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 tfs monitor
)
\ No newline at end of file
source/dnode/mgmt/interface/inc/dmDef.h
0 → 100644
浏览文件 @
2a95c8ef
/*
* 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 "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"
#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
;
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
SDnode
{
EDndProcType
ptype
;
EDndNodeType
ntype
;
EDndRunStatus
status
;
EDndEvent
event
;
SStartupReq
startup
;
SDnodeTrans
trans
;
SDnodeData
data
;
TdThreadMutex
mutex
;
SMgmtWrapper
wrappers
[
NODE_END
];
}
SDnode
;
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DM_DEF_H_*/
\ No newline at end of file
source/dnode/mgmt/inc/dmInt.h
→
source/dnode/mgmt/in
terface/in
c/dmInt.h
浏览文件 @
2a95c8ef
...
...
@@ -13,59 +13,40 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _TD_D
ND_DNODE
_INT_H_
#define _TD_D
ND_DNODE
_INT_H_
#ifndef _TD_D
M
_INT_H_
#define _TD_D
M
_INT_H_
#include "d
ndInt
.h"
#include "d
mDef
.h"
#ifdef __cplusplus
extern
"C"
{
#endif
typedef
struct
SDnodeMgmt
{
int64_t
dver
;
int64_t
updateTime
;
int8_t
statusSent
;
SEpSet
mnodeEpSet
;
SHashObj
*
dnodeHash
;
SArray
*
dnodeEps
;
TdThread
*
threadId
;
SRWLatch
latch
;
SSingleWorker
mgmtWorker
;
SSingleWorker
monitorWorker
;
SMsgCb
msgCb
;
const
char
*
path
;
SDnode
*
pDnode
;
SMgmtWrapper
*
pWrapper
;
}
SDnodeMgmt
;
// 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
dmProcessStartupReq
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
);
void
dmGetMonitorSysInfo
(
SMonSysInfo
*
pInfo
);
// dmFile.c
int32_t
dmReadFile
(
SDnodeMgmt
*
pMgmt
);
int32_t
dmWriteFile
(
SDnodeMgmt
*
pMgmt
);
void
dmUpdateDnodeEps
(
SDnodeMgmt
*
pMgmt
,
SArray
*
pDnodeEps
);
// dmHandle.c
void
dmInitMsgHandle
(
SMgmtWrapper
*
pWrapper
);
void
dmSendStatusReq
(
SDnodeMgmt
*
pMgmt
);
int32_t
dmProcessConfigReq
(
SDnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
dmProcessStatusRsp
(
SDnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
dmProcessAuthRsp
(
SDnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
dmProcessGrantRsp
(
SDnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
dmProcessCDnodeReq
(
SDnode
*
pDnode
,
SNodeMsg
*
pMsg
);
// dmMonitor.c
void
dmGetVnodeLoads
(
SMgmtWrapper
*
pWrapper
,
SMonVloadInfo
*
pInfo
);
void
dmSendMonitorReport
(
SDnode
*
pDnode
);
// dmWorker.c
int32_t
dmStartThread
(
SDnodeMgmt
*
pMgmt
);
int32_t
dmStartWorker
(
SDnodeMgmt
*
pMgmt
);
void
dmStopWorker
(
SDnodeMgmt
*
pMgmt
);
int32_t
dmProcessMgmtMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
int32_t
dmProcessMonitorMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
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
);
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DND_DNODE_INT_H_*/
\ No newline at end of file
#endif
/*_TD_DM_INT_H_*/
\ No newline at end of file
source/dnode/mgmt/interface/inc/dmLog.h
0 → 100644
浏览文件 @
2a95c8ef
/*
* 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/
main/dnd
Env.c
→
source/dnode/mgmt/
interface/src/dm
Env.c
浏览文件 @
2a95c8ef
...
...
@@ -14,12 +14,12 @@
*/
#define _DEFAULT_SOURCE
#include "d
nd
Int.h"
#include "d
m
Int.h"
#include "wal.h"
static
int8_t
once
=
DND_ENV_INIT
;
int32_t
d
nd
Init
()
{
int32_t
d
m
Init
()
{
dDebug
(
"start to init dnode env"
);
if
(
atomic_val_compare_exchange_8
(
&
once
,
DND_ENV_INIT
,
DND_ENV_READY
)
!=
DND_ENV_INIT
)
{
terrno
=
TSDB_CODE_REPEAT_INIT
;
...
...
@@ -45,7 +45,7 @@ int32_t dndInit() {
return
0
;
}
void
d
nd
Cleanup
()
{
void
d
m
Cleanup
()
{
dDebug
(
"start to cleanup dnode env"
);
if
(
atomic_val_compare_exchange_8
(
&
once
,
DND_ENV_READY
,
DND_ENV_CLEANUP
)
!=
DND_ENV_READY
)
{
dError
(
"dnode env is already cleaned up"
);
...
...
@@ -57,63 +57,3 @@ void dndCleanup() {
taosStopCacheRefreshWorker
();
dInfo
(
"dnode env is cleaned up"
);
}
const
char
*
dndStatStr
(
EDndStatus
status
)
{
switch
(
status
)
{
case
DND_STAT_INIT
:
return
"init"
;
case
DND_STAT_RUNNING
:
return
"running"
;
case
DND_STAT_STOPPED
:
return
"stopped"
;
default:
return
"UNKNOWN"
;
}
}
const
char
*
dndNodeLogStr
(
EDndType
ntype
)
{
switch
(
ntype
)
{
case
VNODES
:
return
"vnode"
;
case
QNODE
:
return
"qnode"
;
case
SNODE
:
return
"snode"
;
case
MNODE
:
return
"mnode"
;
case
BNODE
:
return
"bnode"
;
default:
return
"taosd"
;
}
}
const
char
*
dndNodeProcStr
(
EDndType
ntype
)
{
switch
(
ntype
)
{
case
VNODES
:
return
"taosv"
;
case
QNODE
:
return
"taosq"
;
case
SNODE
:
return
"taoss"
;
case
MNODE
:
return
"taosm"
;
case
BNODE
:
return
"taosb"
;
default:
return
"taosd"
;
}
}
const
char
*
dndEventStr
(
EDndEvent
ev
)
{
switch
(
ev
)
{
case
DND_EVENT_START
:
return
"start"
;
case
DND_EVENT_STOP
:
return
"stop"
;
case
DND_EVENT_CHILD
:
return
"child"
;
default:
return
"UNKNOWN"
;
}
}
\ No newline at end of file
source/dnode/mgmt/
main/dnd
File.c
→
source/dnode/mgmt/
interface/src/dm
File.c
浏览文件 @
2a95c8ef
...
...
@@ -14,22 +14,22 @@
*/
#define _DEFAULT_SOURCE
#include "d
nd
Int.h"
#include "d
m
Int.h"
#define MAXLEN 1024
int32_t
d
nd
ReadFile
(
SMgmtWrapper
*
pWrapper
,
bool
*
pDeployed
)
{
int32_t
d
m
ReadFile
(
SMgmtWrapper
*
pWrapper
,
bool
*
pDeployed
)
{
int32_t
code
=
TSDB_CODE_INVALID_JSON_FORMAT
;
int64_t
len
=
0
;
char
content
[
MAXLEN
+
1
]
=
{
0
};
cJSON
*
root
=
NULL
;
char
file
[
PATH_MAX
];
char
file
[
PATH_MAX
]
=
{
0
}
;
TdFilePtr
pFile
=
NULL
;
snprintf
(
file
,
sizeof
(
file
),
"%s%s%s.json"
,
pWrapper
->
path
,
TD_DIRSEP
,
pWrapper
->
name
);
pFile
=
taosOpenFile
(
file
,
TD_FILE_READ
);
if
(
pFile
==
NULL
)
{
dDebug
(
"file %s not exist"
,
file
);
//
dDebug("file %s not exist", file);
code
=
0
;
goto
_OVER
;
}
...
...
@@ -64,7 +64,7 @@ _OVER:
return
code
;
}
int32_t
d
nd
WriteFile
(
SMgmtWrapper
*
pWrapper
,
bool
deployed
)
{
int32_t
d
m
WriteFile
(
SMgmtWrapper
*
pWrapper
,
bool
deployed
)
{
int32_t
code
=
-
1
;
int32_t
len
=
0
;
char
content
[
MAXLEN
+
1
]
=
{
0
};
...
...
@@ -117,7 +117,7 @@ _OVER:
return
code
;
}
TdFilePtr
d
nd
CheckRunning
(
const
char
*
dataDir
)
{
TdFilePtr
d
m
CheckRunning
(
const
char
*
dataDir
)
{
char
filepath
[
PATH_MAX
]
=
{
0
};
snprintf
(
filepath
,
sizeof
(
filepath
),
"%s%s.running"
,
dataDir
,
TD_DIRSEP
);
...
...
@@ -140,18 +140,17 @@ TdFilePtr dndCheckRunning(const char *dataDir) {
return
pFile
;
}
int32_t
d
ndReadShmFile
(
SDnode
*
pDnode
)
{
int32_t
d
mReadShmFile
(
SMgmtWrapper
*
pWrapper
)
{
int32_t
code
=
-
1
;
char
itemName
[
24
]
=
{
0
};
char
content
[
MAXLEN
+
1
]
=
{
0
};
char
file
[
PATH_MAX
]
=
{
0
};
cJSON
*
root
=
NULL
;
TdFilePtr
pFile
=
NULL
;
snprintf
(
file
,
sizeof
(
file
),
"%s%s
.shmfile"
,
pDnode
->
dataDir
,
TD_DIRSEP
);
snprintf
(
file
,
sizeof
(
file
),
"%s%s
shmfile"
,
pWrapper
->
path
,
TD_DIRSEP
);
pFile
=
taosOpenFile
(
file
,
TD_FILE_READ
);
if
(
pFile
==
NULL
)
{
dDebug
(
"file %s not exist"
,
file
);
// dDebug("node:%s, file %s not exist", pWrapper->name
, file);
code
=
0
;
goto
_OVER
;
}
...
...
@@ -160,44 +159,36 @@ int32_t dndReadShmFile(SDnode *pDnode) {
root
=
cJSON_Parse
(
content
);
if
(
root
==
NULL
)
{
terrno
=
TSDB_CODE_INVALID_JSON_FORMAT
;
dError
(
"
failed to read %s since invalid json format"
,
file
);
dError
(
"
node:%s, failed to read %s since invalid json format"
,
pWrapper
->
name
,
file
);
goto
_OVER
;
}
for
(
EDndType
ntype
=
DNODE
+
1
;
ntype
<
NODE_MAX
;
++
ntype
)
{
snprintf
(
itemName
,
sizeof
(
itemName
),
"%s_shmid"
,
dndNodeProcStr
(
ntype
));
cJSON
*
shmid
=
cJSON_GetObjectItem
(
root
,
itemName
);
if
(
shmid
&&
shmid
->
type
==
cJSON_Number
)
{
pDnode
->
wrappers
[
ntype
].
shm
.
id
=
shmid
->
valueint
;
}
snprintf
(
itemName
,
sizeof
(
itemName
),
"%s_shmsize"
,
dndNodeProcStr
(
ntype
));
cJSON
*
shmsize
=
cJSON_GetObjectItem
(
root
,
itemName
);
if
(
shmsize
&&
shmsize
->
type
==
cJSON_Number
)
{
pDnode
->
wrappers
[
ntype
].
shm
.
size
=
shmsize
->
valueint
;
}
cJSON
*
shmid
=
cJSON_GetObjectItem
(
root
,
"shmid"
);
if
(
shmid
&&
shmid
->
type
==
cJSON_Number
)
{
pWrapper
->
procShm
.
id
=
shmid
->
valueint
;
}
cJSON
*
shmsize
=
cJSON_GetObjectItem
(
root
,
"shmsize"
);
if
(
shmsize
&&
shmsize
->
type
==
cJSON_Number
)
{
pWrapper
->
procShm
.
size
=
shmsize
->
valueint
;
}
}
if
(
!
tsMultiProcess
||
pDnode
->
ntype
==
DNODE
||
pDnode
->
ntype
==
NODE_MAX
)
{
for
(
EDndType
ntype
=
DNODE
;
ntype
<
NODE_MAX
;
++
ntype
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
ntype
];
if
(
pWrapper
->
shm
.
id
>=
0
)
{
dDebug
(
"shmid:%d, is closed, size:%d"
,
pWrapper
->
shm
.
id
,
pWrapper
->
shm
.
size
);
taosDropShm
(
&
pWrapper
->
shm
);
}
if
(
!
tsMultiProcess
||
pWrapper
->
pDnode
->
ntype
==
DNODE
||
pWrapper
->
pDnode
->
ntype
==
NODE_END
)
{
if
(
pWrapper
->
procShm
.
id
>=
0
)
{
dDebug
(
"node:%s, shmid:%d, is closed, size:%d"
,
pWrapper
->
name
,
pWrapper
->
procShm
.
id
,
pWrapper
->
procShm
.
size
);
taosDropShm
(
&
pWrapper
->
procShm
);
}
}
else
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
pDnode
->
ntype
];
if
(
taosAttachShm
(
&
pWrapper
->
shm
)
!=
0
)
{
if
(
taosAttachShm
(
&
pWrapper
->
procShm
)
!=
0
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
dError
(
"shmid:%d, failed to attach shm since %s"
,
pWrapper
->
s
hm
.
id
,
terrstr
());
dError
(
"shmid:%d, failed to attach shm since %s"
,
pWrapper
->
procS
hm
.
id
,
terrstr
());
goto
_OVER
;
}
dInfo
(
"node:%s, shmid:%d is attached, size:%d"
,
pWrapper
->
name
,
pWrapper
->
shm
.
id
,
pWrapper
->
s
hm
.
size
);
dInfo
(
"node:%s, shmid:%d is attached, size:%d"
,
pWrapper
->
name
,
pWrapper
->
procShm
.
id
,
pWrapper
->
procS
hm
.
size
);
}
dDebug
(
"
successed to load %s"
,
file
);
dDebug
(
"
node:%s, successed to load %s"
,
pWrapper
->
name
,
file
);
code
=
0
;
_OVER:
...
...
@@ -207,7 +198,7 @@ _OVER:
return
code
;
}
int32_t
d
ndWriteShmFile
(
SDnode
*
pDnode
)
{
int32_t
d
mWriteShmFile
(
SMgmtWrapper
*
pWrapper
)
{
int32_t
code
=
-
1
;
int32_t
len
=
0
;
char
content
[
MAXLEN
+
1
]
=
{
0
};
...
...
@@ -215,37 +206,30 @@ int32_t dndWriteShmFile(SDnode *pDnode) {
char
realfile
[
PATH_MAX
]
=
{
0
};
TdFilePtr
pFile
=
NULL
;
snprintf
(
file
,
sizeof
(
file
),
"%s%s
.shmfile.bak"
,
pDnode
->
dataDir
,
TD_DIRSEP
);
snprintf
(
realfile
,
sizeof
(
realfile
),
"%s%s
.shmfile"
,
pDnode
->
dataDir
,
TD_DIRSEP
);
snprintf
(
file
,
sizeof
(
file
),
"%s%s
shmfile.bak"
,
pWrapper
->
path
,
TD_DIRSEP
);
snprintf
(
realfile
,
sizeof
(
realfile
),
"%s%s
shmfile"
,
pWrapper
->
path
,
TD_DIRSEP
);
pFile
=
taosOpenFile
(
file
,
TD_FILE_CREATE
|
TD_FILE_WRITE
|
TD_FILE_TRUNC
);
if
(
pFile
==
NULL
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
dError
(
"
failed to open file:%s since %s"
,
file
,
terrstr
());
dError
(
"
node:%s, failed to open file:%s since %s"
,
pWrapper
->
name
,
file
,
terrstr
());
goto
_OVER
;
}
len
+=
snprintf
(
content
+
len
,
MAXLEN
-
len
,
"{
\n
"
);
for
(
EDndType
ntype
=
DNODE
+
1
;
ntype
<
NODE_MAX
;
++
ntype
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
ntype
];
len
+=
snprintf
(
content
+
len
,
MAXLEN
-
len
,
"
\"
%s_shmid
\"
:%d,
\n
"
,
dndNodeProcStr
(
ntype
),
pWrapper
->
shm
.
id
);
if
(
ntype
==
NODE_MAX
-
1
)
{
len
+=
snprintf
(
content
+
len
,
MAXLEN
-
len
,
"
\"
%s_shmsize
\"
:%d
\n
"
,
dndNodeProcStr
(
ntype
),
pWrapper
->
shm
.
size
);
}
else
{
len
+=
snprintf
(
content
+
len
,
MAXLEN
-
len
,
"
\"
%s_shmsize
\"
:%d,
\n
"
,
dndNodeProcStr
(
ntype
),
pWrapper
->
shm
.
size
);
}
}
len
+=
snprintf
(
content
+
len
,
MAXLEN
-
len
,
"
\"
shmid
\"
:%d,
\n
"
,
pWrapper
->
procShm
.
id
);
len
+=
snprintf
(
content
+
len
,
MAXLEN
-
len
,
"
\"
shmsize
\"
:%d
\n
"
,
pWrapper
->
procShm
.
size
);
len
+=
snprintf
(
content
+
len
,
MAXLEN
-
len
,
"}
\n
"
);
if
(
taosWriteFile
(
pFile
,
content
,
len
)
!=
len
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
dError
(
"
failed to write file:%s since %s"
,
file
,
terrstr
());
dError
(
"
node:%s, failed to write file:%s since %s"
,
pWrapper
->
name
,
file
,
terrstr
());
goto
_OVER
;
}
if
(
taosFsyncFile
(
pFile
)
!=
0
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
dError
(
"
failed to fsync file:%s since %s"
,
file
,
terrstr
());
dError
(
"
node:%s, failed to fsync file:%s since %s"
,
pWrapper
->
name
,
file
,
terrstr
());
goto
_OVER
;
}
...
...
@@ -253,11 +237,11 @@ int32_t dndWriteShmFile(SDnode *pDnode) {
if
(
taosRenameFile
(
file
,
realfile
)
!=
0
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
dError
(
"
failed to rename %s to %s since %s"
,
file
,
realfile
,
terrstr
());
dError
(
"
node:%s, failed to rename %s to %s since %s"
,
pWrapper
->
name
,
file
,
realfile
,
terrstr
());
return
-
1
;
}
dInfo
(
"
successed to write %s"
,
realfile
);
dInfo
(
"
node:%s, successed to write %s"
,
pWrapper
->
name
,
realfile
);
code
=
0
;
_OVER:
...
...
source/dnode/mgmt/
main/dnd
Int.c
→
source/dnode/mgmt/
interface/src/dm
Int.c
浏览文件 @
2a95c8ef
...
...
@@ -14,142 +14,87 @@
*/
#define _DEFAULT_SOURCE
#include "dndInt.h"
static
int32_t
dndInitVars
(
SDnode
*
pDnode
,
const
SDnodeOpt
*
pOption
)
{
pDnode
->
numOfSupportVnodes
=
pOption
->
numOfSupportVnodes
;
pDnode
->
serverPort
=
pOption
->
serverPort
;
pDnode
->
dataDir
=
strdup
(
pOption
->
dataDir
);
pDnode
->
localEp
=
strdup
(
pOption
->
localEp
);
pDnode
->
localFqdn
=
strdup
(
pOption
->
localFqdn
);
pDnode
->
firstEp
=
strdup
(
pOption
->
firstEp
);
pDnode
->
secondEp
=
strdup
(
pOption
->
secondEp
);
pDnode
->
disks
=
pOption
->
disks
;
pDnode
->
numOfDisks
=
pOption
->
numOfDisks
;
pDnode
->
ntype
=
pOption
->
ntype
;
pDnode
->
rebootTime
=
taosGetTimestampMs
();
if
(
pDnode
->
dataDir
==
NULL
||
pDnode
->
localEp
==
NULL
||
pDnode
->
localFqdn
==
NULL
||
pDnode
->
firstEp
==
NULL
||
pDnode
->
secondEp
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
return
-
1
;
#include "dmInt.h"
const
char
*
dmStatName
(
EDndRunStatus
status
)
{
switch
(
status
)
{
case
DND_STAT_INIT
:
return
"init"
;
case
DND_STAT_RUNNING
:
return
"running"
;
case
DND_STAT_STOPPED
:
return
"stopped"
;
default:
return
"UNKNOWN"
;
}
if
(
!
tsMultiProcess
||
pDnode
->
ntype
==
DNODE
||
pDnode
->
ntype
==
NODE_MAX
)
{
pDnode
->
lockfile
=
dndCheckRunning
(
pDnode
->
dataDir
);
if
(
pDnode
->
lockfile
==
NULL
)
{
return
-
1
;
}
}
return
0
;
}
static
void
dndClearVars
(
SDnode
*
pDnode
)
{
for
(
EDndType
n
=
0
;
n
<
NODE_MAX
;
++
n
)
{
SMgmtWrapper
*
pMgmt
=
&
pDnode
->
wrappers
[
n
];
taosMemoryFreeClear
(
pMgmt
->
path
);
const
char
*
dmLogName
(
EDndNodeType
ntype
)
{
switch
(
ntype
)
{
case
VNODE
:
return
"vnode"
;
case
QNODE
:
return
"qnode"
;
case
SNODE
:
return
"snode"
;
case
MNODE
:
return
"mnode"
;
case
BNODE
:
return
"bnode"
;
default:
return
"taosd"
;
}
if
(
pDnode
->
lockfile
!=
NULL
)
{
taosUnLockFile
(
pDnode
->
lockfile
);
taosCloseFile
(
&
pDnode
->
lockfile
);
pDnode
->
lockfile
=
NULL
;
}
taosMemoryFreeClear
(
pDnode
->
localEp
);
taosMemoryFreeClear
(
pDnode
->
localFqdn
);
taosMemoryFreeClear
(
pDnode
->
firstEp
);
taosMemoryFreeClear
(
pDnode
->
secondEp
);
taosMemoryFreeClear
(
pDnode
->
dataDir
);
taosMemoryFree
(
pDnode
);
dDebug
(
"dnode memory is cleared, data:%p"
,
pDnode
);
}
SDnode
*
dndCreate
(
const
SDnodeOpt
*
pOption
)
{
dDebug
(
"start to create dnode object"
);
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
;
const
char
*
dmProcName
(
EDndNodeType
ntype
)
{
switch
(
ntype
)
{
case
VNODE
:
return
"taosv"
;
case
QNODE
:
return
"taosq"
;
case
SNODE
:
return
"taoss"
;
case
MNODE
:
return
"taosm"
;
case
BNODE
:
return
"taosb"
;
default:
return
"taosd"
;
}
}
if
(
dndInitVars
(
pDnode
,
pOption
)
!=
0
)
{
dError
(
"failed to init variables since %s"
,
terrstr
());
goto
_OVER
;
}
dndSetStatus
(
pDnode
,
DND_STAT_INIT
);
dmSetMgmtFp
(
&
pDnode
->
wrappers
[
DNODE
]);
mmSetMgmtFp
(
&
pDnode
->
wrappers
[
MNODE
]);
vmSetMgmtFp
(
&
pDnode
->
wrappers
[
VNODES
]);
qmSetMgmtFp
(
&
pDnode
->
wrappers
[
QNODE
]);
smSetMgmtFp
(
&
pDnode
->
wrappers
[
SNODE
]);
bmSetMgmtFp
(
&
pDnode
->
wrappers
[
BNODE
]);
for
(
EDndType
n
=
0
;
n
<
NODE_MAX
;
++
n
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
snprintf
(
path
,
sizeof
(
path
),
"%s%s%s"
,
pDnode
->
dataDir
,
TD_DIRSEP
,
pWrapper
->
name
);
pWrapper
->
path
=
strdup
(
path
);
pWrapper
->
shm
.
id
=
-
1
;
pWrapper
->
pDnode
=
pDnode
;
pWrapper
->
ntype
=
n
;
if
(
pWrapper
->
path
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_OVER
;
}
pWrapper
->
procType
=
PROC_SINGLE
;
taosInitRWLatch
(
&
pWrapper
->
latch
);
}
if
(
dndInitMsgHandle
(
pDnode
)
!=
0
)
{
dError
(
"failed to init msg handles since %s"
,
terrstr
());
goto
_OVER
;
}
if
(
dndReadShmFile
(
pDnode
)
!=
0
)
{
dError
(
"failed to read shm file since %s"
,
terrstr
());
goto
_OVER
;
}
SMsgCb
msgCb
=
dndCreateMsgcb
(
&
pDnode
->
wrappers
[
0
]);
tmsgSetDefaultMsgCb
(
&
msgCb
);
dInfo
(
"dnode is created, data:%p"
,
pDnode
);
code
=
0
;
_OVER:
if
(
code
!=
0
&&
pDnode
)
{
dndClearVars
(
pDnode
);
pDnode
=
NULL
;
dError
(
"failed to create dnode since %s"
,
terrstr
());
const
char
*
dmEventName
(
EDndEvent
ev
)
{
switch
(
ev
)
{
case
DND_EVENT_START
:
return
"start"
;
case
DND_EVENT_STOP
:
return
"stop"
;
case
DND_EVENT_CHILD
:
return
"child"
;
default:
return
"UNKNOWN"
;
}
return
pDnode
;
}
void
dndClose
(
SDnode
*
pDnode
)
{
if
(
pDnode
==
NULL
)
return
;
for
(
EDndType
n
=
0
;
n
<
NODE_MAX
;
++
n
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
n
];
dndCloseNode
(
pWrapper
);
void
dmSetStatus
(
SDnode
*
pDnode
,
EDndRunStatus
status
)
{
if
(
pDnode
->
status
!=
status
)
{
dDebug
(
"dnode status set from %s to %s"
,
dmStatName
(
pDnode
->
status
),
dmStatName
(
status
));
pDnode
->
status
=
status
;
}
dndClearVars
(
pDnode
);
dInfo
(
"dnode is closed, data:%p"
,
pDnode
);
}
void
d
ndHandle
Event
(
SDnode
*
pDnode
,
EDndEvent
event
)
{
void
d
mSet
Event
(
SDnode
*
pDnode
,
EDndEvent
event
)
{
if
(
event
==
DND_EVENT_STOP
)
{
pDnode
->
event
=
event
;
}
}
SMgmtWrapper
*
dndAcquireWrapper
(
SDnode
*
pDnode
,
EDndType
ntype
)
{
void
dmSetMsgHandle
(
SMgmtWrapper
*
pWrapper
,
tmsg_t
msgType
,
NodeMsgFp
nodeMsgFp
,
int8_t
vgId
)
{
pWrapper
->
msgFps
[
TMSG_INDEX
(
msgType
)]
=
nodeMsgFp
;
pWrapper
->
msgVgIds
[
TMSG_INDEX
(
msgType
)]
=
vgId
;
}
SMgmtWrapper
*
dmAcquireWrapper
(
SDnode
*
pDnode
,
EDndNodeType
ntype
)
{
SMgmtWrapper
*
pWrapper
=
&
pDnode
->
wrappers
[
ntype
];
SMgmtWrapper
*
pRetWrapper
=
pWrapper
;
...
...
@@ -166,11 +111,11 @@ SMgmtWrapper *dndAcquireWrapper(SDnode *pDnode, EDndType ntype) {
return
pRetWrapper
;
}
int32_t
d
nd
MarkWrapper
(
SMgmtWrapper
*
pWrapper
)
{
int32_t
d
m
MarkWrapper
(
SMgmtWrapper
*
pWrapper
)
{
int32_t
code
=
0
;
taosRLockLatch
(
&
pWrapper
->
latch
);
if
(
pWrapper
->
deployed
||
(
pWrapper
->
procType
==
PROC_PARENT
&&
pWrapper
->
required
))
{
if
(
pWrapper
->
deployed
||
(
pWrapper
->
procType
==
DND_
PROC_PARENT
&&
pWrapper
->
required
))
{
int32_t
refCount
=
atomic_add_fetch_32
(
&
pWrapper
->
refCount
,
1
);
dTrace
(
"node:%s, is marked, refCount:%d"
,
pWrapper
->
name
,
refCount
);
}
else
{
...
...
@@ -182,7 +127,7 @@ int32_t dndMarkWrapper(SMgmtWrapper *pWrapper) {
return
code
;
}
void
d
nd
ReleaseWrapper
(
SMgmtWrapper
*
pWrapper
)
{
void
d
m
ReleaseWrapper
(
SMgmtWrapper
*
pWrapper
)
{
if
(
pWrapper
==
NULL
)
return
;
taosRLockLatch
(
&
pWrapper
->
latch
);
...
...
@@ -191,39 +136,38 @@ void dndReleaseWrapper(SMgmtWrapper *pWrapper) {
dTrace
(
"node:%s, is released, refCount:%d"
,
pWrapper
->
name
,
refCount
);
}
void
dndSetMsgHandle
(
SMgmtWrapper
*
pWrapper
,
tmsg_t
msgType
,
NodeMsgFp
nodeMsgFp
,
int8_t
vgId
)
{
pWrapper
->
msgFps
[
TMSG_INDEX
(
msgType
)]
=
nodeMsgFp
;
pWrapper
->
msgVgIds
[
TMSG_INDEX
(
msgType
)]
=
vgId
;
}
EDndStatus
dndGetStatus
(
SDnode
*
pDnode
)
{
return
pDnode
->
status
;
}
void
dndSetStatus
(
SDnode
*
pDnode
,
EDndStatus
status
)
{
if
(
pDnode
->
status
!=
status
)
{
dDebug
(
"dnode status set from %s to %s"
,
dndStatStr
(
pDnode
->
status
),
dndStatStr
(
status
));
pDnode
->
status
=
status
;
}
}
void
dndReportStartup
(
SDnode
*
pDnode
,
const
char
*
pName
,
const
char
*
pDesc
)
{
void
dmReportStartup
(
SDnode
*
pDnode
,
const
char
*
pName
,
const
char
*
pDesc
)
{
SStartupReq
*
pStartup
=
&
pDnode
->
startup
;
tstrncpy
(
pStartup
->
name
,
pName
,
TSDB_STEP_NAME_LEN
);
tstrncpy
(
pStartup
->
desc
,
pDesc
,
TSDB_STEP_DESC_LEN
);
pStartup
->
finished
=
0
;
}
static
void
d
nd
GetStartup
(
SDnode
*
pDnode
,
SStartupReq
*
pStartup
)
{
static
void
d
m
GetStartup
(
SDnode
*
pDnode
,
SStartupReq
*
pStartup
)
{
memcpy
(
pStartup
,
&
pDnode
->
startup
,
sizeof
(
SStartupReq
));
pStartup
->
finished
=
(
dndGetStatus
(
pDnode
)
==
DND_STAT_RUNNING
);
pStartup
->
finished
=
(
pDnode
->
status
==
DND_STAT_RUNNING
);
}
void
d
nd
ProcessStartupReq
(
SDnode
*
pDnode
,
SRpcMsg
*
pReq
)
{
void
d
m
ProcessStartupReq
(
SDnode
*
pDnode
,
SRpcMsg
*
pReq
)
{
dDebug
(
"startup req is received"
);
SStartupReq
*
pStartup
=
rpcMallocCont
(
sizeof
(
SStartupReq
));
d
nd
GetStartup
(
pDnode
,
pStartup
);
d
m
GetStartup
(
pDnode
,
pStartup
);
dDebug
(
"startup req is sent, step:%s desc:%s finished:%d"
,
pStartup
->
name
,
pStartup
->
desc
,
pStartup
->
finished
);
SRpcMsg
rpcRsp
=
{
.
handle
=
pReq
->
handle
,
.
pCont
=
pStartup
,
.
contLen
=
sizeof
(
SStartupReq
),
.
ahandle
=
pReq
->
ahandle
};
rpcSendResponse
(
&
rpcRsp
);
}
\ No newline at end of file
}
void
dmGetMonitorSysInfo
(
SMonSysInfo
*
pInfo
)
{
taosGetCpuUsage
(
&
pInfo
->
cpu_engine
,
&
pInfo
->
cpu_system
);
taosGetCpuCores
(
&
pInfo
->
cpu_cores
);
taosGetProcMemory
(
&
pInfo
->
mem_engine
);
taosGetSysMemory
(
&
pInfo
->
mem_system
);
pInfo
->
mem_total
=
tsTotalMemoryKB
;
pInfo
->
disk_engine
=
0
;
pInfo
->
disk_used
=
tsDataSpace
.
size
.
used
;
pInfo
->
disk_total
=
tsDataSpace
.
size
.
total
;
taosGetCardInfoDelta
(
&
pInfo
->
net_in
,
&
pInfo
->
net_out
);
taosGetProcIODelta
(
&
pInfo
->
io_read
,
&
pInfo
->
io_write
,
&
pInfo
->
io_read_disk
,
&
pInfo
->
io_write_disk
);
}
source/dnode/mgmt/mgmt_bnode/CMakeLists.txt
0 → 100644
浏览文件 @
2a95c8ef
aux_source_directory
(
src MGMT_BNODE
)
add_library
(
mgmt_bnode STATIC
${
MGMT_BNODE
}
)
target_include_directories
(
mgmt_bnode
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
)
target_link_libraries
(
mgmt_bnode dnode_interface
)
\ No newline at end of file
source/dnode/mgmt/inc/bmInt.h
→
source/dnode/mgmt/
mgmt_bnode/
inc/bmInt.h
浏览文件 @
2a95c8ef
...
...
@@ -16,7 +16,7 @@
#ifndef _TD_DND_BNODE_INT_H_
#define _TD_DND_BNODE_INT_H_
#include "d
nd
Int.h"
#include "d
m
Int.h"
#include "bnode.h"
...
...
@@ -33,10 +33,6 @@ typedef struct SBnodeMgmt {
SSingleWorker
monitorWorker
;
}
SBnodeMgmt
;
// bmInt.c
int32_t
bmOpen
(
SMgmtWrapper
*
pWrapper
);
int32_t
bmDrop
(
SMgmtWrapper
*
pWrapper
);
// bmHandle.c
void
bmInitMsgHandle
(
SMgmtWrapper
*
pWrapper
);
int32_t
bmProcessCreateReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
...
...
source/dnode/mgmt/
bm
/bmHandle.c
→
source/dnode/mgmt/
mgmt_bnode/src
/bmHandle.c
浏览文件 @
2a95c8ef
...
...
@@ -53,13 +53,19 @@ int32_t bmProcessCreateReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
-
1
;
}
if
(
createReq
.
dnodeId
!=
pDnode
->
dnodeId
)
{
if
(
createReq
.
dnodeId
!=
pDnode
->
d
ata
.
d
nodeId
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to create bnode since %s, input:%d cur:%d"
,
terrstr
(),
createReq
.
dnodeId
,
pDnode
->
dnodeId
);
dError
(
"failed to create bnode since %s, input:%d cur:%d"
,
terrstr
(),
createReq
.
dnodeId
,
pDnode
->
d
ata
.
d
nodeId
);
return
-
1
;
}
else
{
return
dndOpenNode
(
pWrapper
);
}
bool
deployed
=
true
;
if
(
dmWriteFile
(
pWrapper
,
deployed
)
!=
0
)
{
dError
(
"failed to write bnode file since %s"
,
terrstr
());
return
-
1
;
}
return
0
;
}
int32_t
bmProcessDropReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
...
...
@@ -72,16 +78,21 @@ int32_t bmProcessDropReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
-
1
;
}
if
(
dropReq
.
dnodeId
!=
pDnode
->
dnodeId
)
{
if
(
dropReq
.
dnodeId
!=
pDnode
->
d
ata
.
d
nodeId
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to drop bnode since %s"
,
terrstr
());
return
-
1
;
}
else
{
// dndCloseNode(pWrapper);
return
bmDrop
(
pWrapper
);
}
bool
deployed
=
false
;
if
(
dmWriteFile
(
pWrapper
,
deployed
)
!=
0
)
{
dError
(
"failed to write bnode file since %s"
,
terrstr
());
return
-
1
;
}
return
0
;
}
void
bmInitMsgHandle
(
SMgmtWrapper
*
pWrapper
)
{
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MON_BM_INFO
,
bmProcessMonitorMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MON_BM_INFO
,
bmProcessMonitorMsg
,
DEFAULT_HANDLE
);
}
source/dnode/mgmt/
bm
/bmInt.c
→
source/dnode/mgmt/
mgmt_bnode/src
/bmInt.c
浏览文件 @
2a95c8ef
...
...
@@ -16,70 +16,25 @@
#define _DEFAULT_SOURCE
#include "bmInt.h"
static
int32_t
bmRequire
(
SMgmtWrapper
*
pWrapper
,
bool
*
required
)
{
return
d
nd
ReadFile
(
pWrapper
,
required
);
}
static
int32_t
bmRequire
(
SMgmtWrapper
*
pWrapper
,
bool
*
required
)
{
return
d
m
ReadFile
(
pWrapper
,
required
);
}
static
void
bmInitOption
(
SBnodeMgmt
*
pMgmt
,
SBnodeOpt
*
pOption
)
{
SMsgCb
msgCb
=
dndCreateMsgcb
(
pMgmt
->
pWrapper
);
SMsgCb
msgCb
=
pMgmt
->
pDnode
->
data
.
msgCb
;
msgCb
.
pWrapper
=
pMgmt
->
pWrapper
;
pOption
->
msgCb
=
msgCb
;
}
static
int32_t
bmOpenImp
(
SBnodeMgmt
*
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
());
return
-
1
;
}
if
(
bmStartWorker
(
pMgmt
)
!=
0
)
{
dError
(
"failed to start bnode worker since %s"
,
terrstr
());
return
-
1
;
}
bool
deployed
=
true
;
if
(
dndWriteFile
(
pMgmt
->
pWrapper
,
deployed
)
!=
0
)
{
dError
(
"failed to write bnode file since %s"
,
terrstr
());
return
-
1
;
}
return
0
;
}
static
void
bmClose
(
SMgmtWrapper
*
pWrapper
)
{
SBnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
if
(
pMgmt
==
NULL
)
return
;
static
void
bmCloseImp
(
SBnodeMgmt
*
pMgmt
)
{
dInfo
(
"bnode-mgmt start to cleanup"
);
if
(
pMgmt
->
pBnode
!=
NULL
)
{
bmStopWorker
(
pMgmt
);
bndClose
(
pMgmt
->
pBnode
);
pMgmt
->
pBnode
=
NULL
;
}
}
int32_t
bmDrop
(
SMgmtWrapper
*
pWrapper
)
{
SBnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
if
(
pMgmt
==
NULL
)
return
0
;
dInfo
(
"bnode-mgmt start to drop"
);
bool
deployed
=
false
;
if
(
dndWriteFile
(
pWrapper
,
deployed
)
!=
0
)
{
dError
(
"failed to drop bnode since %s"
,
terrstr
());
return
-
1
;
}
bmCloseImp
(
pMgmt
);
taosRemoveDir
(
pMgmt
->
path
);
pWrapper
->
pMgmt
=
NULL
;
taosMemoryFree
(
pMgmt
);
dInfo
(
"bnode-mgmt is dropped"
);
return
0
;
}
static
void
bmClose
(
SMgmtWrapper
*
pWrapper
)
{
SBnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
if
(
pMgmt
==
NULL
)
return
;
dInfo
(
"bnode-mgmt start to cleanup"
);
bmCloseImp
(
pMgmt
);
pWrapper
->
pMgmt
=
NULL
;
taosMemoryFree
(
pMgmt
);
dInfo
(
"bnode-mgmt is cleaned up"
);
...
...
@@ -98,23 +53,30 @@ int32_t bmOpen(SMgmtWrapper *pWrapper) {
pMgmt
->
pWrapper
=
pWrapper
;
pWrapper
->
pMgmt
=
pMgmt
;
int32_t
code
=
bmOpenImp
(
pMgmt
);
if
(
code
!=
0
)
{
dError
(
"failed to init bnode-mgmt since %s"
,
terrstr
());
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
(
pWrapper
);
}
else
{
dInfo
(
"bnode-mgmt is initialized"
);
return
-
1
;
}
return
code
;
if
(
bmStartWorker
(
pMgmt
)
!=
0
)
{
dError
(
"failed to start bnode worker since %s"
,
terrstr
());
bmClose
(
pWrapper
);
return
-
1
;
}
return
0
;
}
void
bmSetMgmtFp
(
SMgmtWrapper
*
pWrapper
)
{
SMgmtFp
mgmtFp
=
{
0
};
mgmtFp
.
openFp
=
bmOpen
;
mgmtFp
.
closeFp
=
bmClose
;
mgmtFp
.
create
Msg
Fp
=
bmProcessCreateReq
;
mgmtFp
.
drop
Msg
Fp
=
bmProcessDropReq
;
mgmtFp
.
createFp
=
bmProcessCreateReq
;
mgmtFp
.
dropFp
=
bmProcessDropReq
;
mgmtFp
.
requiredFp
=
bmRequire
;
bmInitMsgHandle
(
pWrapper
);
...
...
source/dnode/mgmt/
bm
/bmWorker.c
→
source/dnode/mgmt/
mgmt_bnode/src
/bmWorker.c
浏览文件 @
2a95c8ef
文件已移动
source/dnode/mgmt/mgmt_mnode/CMakeLists.txt
0 → 100644
浏览文件 @
2a95c8ef
aux_source_directory
(
src MGMT_MNODE
)
add_library
(
mgmt_mnode STATIC
${
MGMT_MNODE
}
)
target_include_directories
(
mgmt_mnode
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
)
target_link_libraries
(
mgmt_mnode dnode_interface
)
\ No newline at end of file
source/dnode/mgmt/inc/mmInt.h
→
source/dnode/mgmt/
mgmt_mnode/
inc/mmInt.h
浏览文件 @
2a95c8ef
...
...
@@ -16,7 +16,8 @@
#ifndef _TD_DND_MNODE_INT_H_
#define _TD_DND_MNODE_INT_H_
#include "dndInt.h"
#include "dmInt.h"
#include "mnode.h"
#ifdef __cplusplus
...
...
@@ -40,11 +41,9 @@ typedef struct SMnodeMgmt {
// mmFile.c
int32_t
mmReadFile
(
SMnodeMgmt
*
pMgmt
,
bool
*
pDeployed
);
int32_t
mmWriteFile
(
SM
nodeMgmt
*
pMgmt
,
bool
deployed
);
int32_t
mmWriteFile
(
SM
gmtWrapper
*
pWrapper
,
SDCreateMnodeReq
*
pReq
,
bool
deployed
);
// mmInt.c
int32_t
mmOpenFromMsg
(
SMgmtWrapper
*
pWrapper
,
SDCreateMnodeReq
*
pReq
);
int32_t
mmDrop
(
SMgmtWrapper
*
pWrapper
);
int32_t
mmAlter
(
SMnodeMgmt
*
pMgmt
,
SDAlterMnodeReq
*
pReq
);
// mmHandle.c
...
...
source/dnode/mgmt/m
m
/mmFile.c
→
source/dnode/mgmt/m
gmt_mnode/src
/mmFile.c
浏览文件 @
2a95c8ef
...
...
@@ -28,7 +28,7 @@ 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
);
//
dDebug("file %s not exist", file);
code
=
0
;
goto
PRASE_MNODE_OVER
;
}
...
...
@@ -105,9 +105,11 @@ PRASE_MNODE_OVER:
return
code
;
}
int32_t
mmWriteFile
(
SMnodeMgmt
*
pMgmt
,
bool
deployed
)
{
char
file
[
PATH_MAX
];
snprintf
(
file
,
sizeof
(
file
),
"%s%smnode.json.bak"
,
pMgmt
->
path
,
TD_DIRSEP
);
int32_t
mmWriteFile
(
SMgmtWrapper
*
pWrapper
,
SDCreateMnodeReq
*
pReq
,
bool
deployed
)
{
char
file
[
PATH_MAX
]
=
{
0
};
char
realfile
[
PATH_MAX
]
=
{
0
};
snprintf
(
file
,
sizeof
(
file
),
"%s%smnode.json.bak"
,
pWrapper
->
path
,
TD_DIRSEP
);
snprintf
(
realfile
,
sizeof
(
realfile
),
"%s%smnode.json"
,
pWrapper
->
path
,
TD_DIRSEP
);
TdFilePtr
pFile
=
taosOpenFile
(
file
,
TD_FILE_CREATE
|
TD_FILE_WRITE
|
TD_FILE_TRUNC
);
if
(
pFile
==
NULL
)
{
...
...
@@ -119,21 +121,30 @@ int32_t mmWriteFile(SMnodeMgmt *pMgmt, bool deployed) {
int32_t
len
=
0
;
int32_t
maxLen
=
4096
;
char
*
content
=
taosMemoryCalloc
(
1
,
maxLen
+
1
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"{
\n
"
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
deployed
\"
: %d,
\n
"
,
deployed
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
mnodes
\"
: [{
\n
"
);
for
(
int32_t
i
=
0
;
i
<
pMgmt
->
replica
;
++
i
)
{
SReplica
*
pReplica
=
&
pMgmt
->
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
<
pMgmt
->
replica
-
1
)
{
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
" },{
\n
"
);
}
else
{
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
" }]
\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
"
);
}
}
}
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"
\"
deployed
\"
: %d
\n
"
,
deployed
);
len
+=
snprintf
(
content
+
len
,
maxLen
-
len
,
"}
\n
"
);
taosWriteFile
(
pFile
,
content
,
len
);
...
...
@@ -141,9 +152,6 @@ int32_t mmWriteFile(SMnodeMgmt *pMgmt, bool deployed) {
taosCloseFile
(
&
pFile
);
taosMemoryFree
(
content
);
char
realfile
[
PATH_MAX
];
snprintf
(
realfile
,
sizeof
(
realfile
),
"%s%smnode.json"
,
pMgmt
->
path
,
TD_DIRSEP
);
if
(
taosRenameFile
(
file
,
realfile
)
!=
0
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
dError
(
"failed to rename %s since %s"
,
file
,
terrstr
());
...
...
source/dnode/mgmt/m
m
/mmHandle.c
→
source/dnode/mgmt/m
gmt_mnode/src
/mmHandle.c
浏览文件 @
2a95c8ef
...
...
@@ -56,13 +56,19 @@ int32_t mmProcessCreateReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
-
1
;
}
if
(
createReq
.
replica
<=
1
||
createReq
.
dnodeId
!=
pDnode
->
dnodeId
)
{
if
(
createReq
.
replica
<=
1
||
createReq
.
dnodeId
!=
pDnode
->
d
ata
.
d
nodeId
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to create mnode since %s"
,
terrstr
());
return
-
1
;
}
else
{
return
mmOpenFromMsg
(
pWrapper
,
&
createReq
);
}
bool
deployed
=
true
;
if
(
mmWriteFile
(
pWrapper
,
&
createReq
,
deployed
)
!=
0
)
{
dError
(
"failed to write mnode file since %s"
,
terrstr
());
return
-
1
;
}
return
0
;
}
int32_t
mmProcessDropReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
...
...
@@ -75,14 +81,19 @@ int32_t mmProcessDropReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
-
1
;
}
if
(
dropReq
.
dnodeId
!=
pDnode
->
dnodeId
)
{
if
(
dropReq
.
dnodeId
!=
pDnode
->
d
ata
.
d
nodeId
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to drop mnode since %s"
,
terrstr
());
return
-
1
;
}
else
{
// dndCloseNode(pWrapper);
return
mmDrop
(
pWrapper
);
}
bool
deployed
=
false
;
if
(
mmWriteFile
(
pWrapper
,
NULL
,
deployed
)
!=
0
)
{
dError
(
"failed to write mnode file since %s"
,
terrstr
());
return
-
1
;
}
return
0
;
}
int32_t
mmProcessAlterReq
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
...
...
@@ -95,9 +106,9 @@ int32_t mmProcessAlterReq(SMnodeMgmt *pMgmt, SNodeMsg *pMsg) {
return
-
1
;
}
if
(
alterReq
.
dnodeId
!=
pDnode
->
dnodeId
)
{
if
(
alterReq
.
dnodeId
!=
pDnode
->
d
ata
.
d
nodeId
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to alter mnode since %s, dnodeId:%d input:%d"
,
terrstr
(),
pDnode
->
dnodeId
,
alterReq
.
dnodeId
);
dError
(
"failed to alter mnode since %s, dnodeId:%d input:%d"
,
terrstr
(),
pDnode
->
d
ata
.
d
nodeId
,
alterReq
.
dnodeId
);
return
-
1
;
}
else
{
return
mmAlter
(
pMgmt
,
&
alterReq
);
...
...
@@ -105,95 +116,95 @@ int32_t mmProcessAlterReq(SMnodeMgmt *pMgmt, SNodeMsg *pMsg) {
}
void
mmInitMsgHandle
(
SMgmtWrapper
*
pWrapper
)
{
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MON_MM_INFO
,
mmProcessMonitorMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MON_MM_INFO
,
mmProcessMonitorMsg
,
DEFAULT_HANDLE
);
// Requests handled by DNODE
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_MNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_DND_ALTER_MNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_MNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_QNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_QNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_SNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_SNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_BNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_BNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_VNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_DND_ALTER_VNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_VNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_DND_SYNC_VNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_DND_COMPACT_VNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_DND_CONFIG_DNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_MNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_DND_ALTER_MNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_MNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_QNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_QNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_SNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_SNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_BNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_BNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_DND_CREATE_VNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_DND_ALTER_VNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_DND_DROP_VNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_DND_SYNC_VNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_DND_COMPACT_VNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_DND_CONFIG_DNODE_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
// Requests handled by MNODE
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_CONNECT
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_ACCT
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_ALTER_ACCT
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_ACCT
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_USER
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_ALTER_USER
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_USER
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_GET_USER_AUTH
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_DNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_CONFIG_DNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_DNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_MNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_MNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_QNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_QNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_SNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_SNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_BNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_BNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_USE_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_ALTER_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_SYNC_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_COMPACT_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_FUNC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_RETRIEVE_FUNC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_FUNC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_STB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_ALTER_STB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_STB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_SMA
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_SMA
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_TABLE_META
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_VGROUP_LIST
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_KILL_QUERY
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_KILL_CONN
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_HEARTBEAT
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_SHOW
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_SYSTABLE_RETRIEVE
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_STATUS
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_KILL_TRANS
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_GRANT
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_AUTH
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_DND_ALTER_MNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_TOPIC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_ALTER_TOPIC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_TOPIC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_SUBSCRIBE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_MQ_COMMIT_OFFSET
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_GET_SUB_EP
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_STREAM
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_TASK_DEPLOY_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_GET_DB_CFG
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MND_GET_INDEX
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_CONNECT
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_ACCT
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_ALTER_ACCT
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_ACCT
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_USER
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_ALTER_USER
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_USER
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_GET_USER_AUTH
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_DNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_CONFIG_DNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_DNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_MNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_MNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_QNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_QNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_SNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_SNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_BNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_BNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_USE_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_ALTER_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_SYNC_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_COMPACT_DB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_FUNC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_RETRIEVE_FUNC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_FUNC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_STB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_ALTER_STB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_STB
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_SMA
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_SMA
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_TABLE_META
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_VGROUP_LIST
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_KILL_QUERY
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_KILL_CONN
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_HEARTBEAT
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_SHOW
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_SYSTABLE_RETRIEVE
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_STATUS
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_KILL_TRANS
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_GRANT
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_AUTH
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_DND_ALTER_MNODE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_TOPIC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_ALTER_TOPIC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_DROP_TOPIC
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_SUBSCRIBE
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_MQ_COMMIT_OFFSET
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_GET_SUB_EP
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_CREATE_STREAM
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_TASK_DEPLOY_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_GET_DB_CFG
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MND_GET_INDEX
,
mmProcessReadMsg
,
DEFAULT_HANDLE
);
// Requests handled by VNODE
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_MQ_SET_CONN_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_MQ_REB_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_MQ_CANCEL_CONN_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_CREATE_STB_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_ALTER_STB_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_DROP_STB_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_CREATE_SMA_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_DROP_SMA_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY
,
mmProcessQueryMsg
,
MNODE_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY_CONTINUE
,
mmProcessQueryMsg
,
MNODE_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_FETCH
,
mmProcessQueryMsg
,
MNODE_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_DROP_TASK
,
mmProcessQueryMsg
,
MNODE_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY_HEARTBEAT
,
mmProcessQueryMsg
,
MNODE_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_MQ_SET_CONN_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_MQ_REB_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_MQ_CANCEL_CONN_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_CREATE_STB_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_ALTER_STB_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_DROP_STB_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_CREATE_SMA_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_DROP_SMA_RSP
,
mmProcessWriteMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY
,
mmProcessQueryMsg
,
MNODE_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY_CONTINUE
,
mmProcessQueryMsg
,
MNODE_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_FETCH
,
mmProcessQueryMsg
,
MNODE_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_DROP_TASK
,
mmProcessQueryMsg
,
MNODE_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY_HEARTBEAT
,
mmProcessQueryMsg
,
MNODE_HANDLE
);
}
source/dnode/mgmt/m
m
/mmInt.c
→
source/dnode/mgmt/m
gmt_mnode/src
/mmInt.c
浏览文件 @
2a95c8ef
...
...
@@ -18,9 +18,9 @@
#include "wal.h"
static
bool
mmDeployRequired
(
SDnode
*
pDnode
)
{
if
(
pDnode
->
dnodeId
>
0
)
return
false
;
if
(
pDnode
->
clusterId
>
0
)
return
false
;
if
(
strcmp
(
pDnode
->
localEp
,
pDnode
->
firstEp
)
!=
0
)
return
false
;
if
(
pDnode
->
d
ata
.
d
nodeId
>
0
)
return
false
;
if
(
pDnode
->
data
.
clusterId
>
0
)
return
false
;
if
(
strcmp
(
pDnode
->
data
.
localEp
,
pDnode
->
data
.
firstEp
)
!=
0
)
return
false
;
return
true
;
}
...
...
@@ -39,7 +39,8 @@ static int32_t mmRequire(SMgmtWrapper *pWrapper, bool *required) {
}
static
void
mmInitOption
(
SMnodeMgmt
*
pMgmt
,
SMnodeOpt
*
pOption
)
{
SMsgCb
msgCb
=
dndCreateMsgcb
(
pMgmt
->
pWrapper
);
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
;
...
...
@@ -53,8 +54,8 @@ static void mmBuildOptionForDeploy(SMnodeMgmt *pMgmt, SMnodeOpt *pOption) {
pOption
->
selfIndex
=
0
;
SReplica
*
pReplica
=
&
pOption
->
replicas
[
0
];
pReplica
->
id
=
1
;
pReplica
->
port
=
pMgmt
->
pDnode
->
serverPort
;
tstrncpy
(
pReplica
->
fqdn
,
pMgmt
->
pDnode
->
localFqdn
,
TSDB_FQDN_LEN
);
pReplica
->
port
=
pMgmt
->
pDnode
->
data
.
serverPort
;
tstrncpy
(
pReplica
->
fqdn
,
pMgmt
->
pDnode
->
data
.
localFqdn
,
TSDB_FQDN_LEN
);
pOption
->
deploy
=
true
;
pMgmt
->
selfIndex
=
pOption
->
selfIndex
;
...
...
@@ -80,7 +81,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
->
dnodeId
)
{
if
(
pReplica
->
id
==
pMgmt
->
pDnode
->
d
ata
.
d
nodeId
)
{
pOption
->
selfIndex
=
i
;
}
}
...
...
@@ -97,44 +98,18 @@ static int32_t mmBuildOptionFromReq(SMnodeMgmt *pMgmt, SMnodeOpt *pOption, SDCre
return
0
;
}
static
int32_t
mmOpenImp
(
SMnodeMgmt
*
pMgmt
,
SDCreate
MnodeReq
*
pReq
)
{
int32_t
mmAlter
(
SMnodeMgmt
*
pMgmt
,
SDAlter
MnodeReq
*
pReq
)
{
SMnodeOpt
option
=
{
0
};
if
(
pReq
!=
NULL
)
{
if
(
mmBuildOptionFromReq
(
pMgmt
,
&
option
,
pReq
)
!=
0
)
{
return
-
1
;
}
}
else
{
bool
deployed
=
false
;
if
(
mmReadFile
(
pMgmt
,
&
deployed
)
!=
0
)
{
dError
(
"failed to read file since %s"
,
terrstr
());
return
-
1
;
}
if
(
!
deployed
)
{
dInfo
(
"mnode start to deploy"
);
if
(
pMgmt
->
pWrapper
->
procType
==
PROC_CHILD
)
{
pMgmt
->
pDnode
->
dnodeId
=
1
;
}
mmBuildOptionForDeploy
(
pMgmt
,
&
option
);
}
else
{
dInfo
(
"mnode start to open"
);
mmBuildOptionForOpen
(
pMgmt
,
&
option
);
}
}
pMgmt
->
pMnode
=
mndOpen
(
pMgmt
->
path
,
&
option
);
if
(
pMgmt
->
pMnode
==
NULL
)
{
dError
(
"failed to open mnode since %s"
,
terrstr
());
if
(
mmBuildOptionFromReq
(
pMgmt
,
&
option
,
pReq
)
!=
0
)
{
return
-
1
;
}
if
(
mmStartWorker
(
pMgmt
)
!=
0
)
{
dError
(
"failed to start mnode worker since %s"
,
terrstr
());
if
(
mndAlter
(
pMgmt
->
pMnode
,
&
option
)
!=
0
)
{
return
-
1
;
}
bool
deployed
=
true
;
if
(
mmWriteFile
(
pMgmt
,
deployed
)
!=
0
)
{
if
(
mmWriteFile
(
pMgmt
->
pWrapper
,
pReq
,
deployed
)
!=
0
)
{
dError
(
"failed to write mnode file since %s"
,
terrstr
());
return
-
1
;
}
...
...
@@ -142,53 +117,23 @@ static int32_t mmOpenImp(SMnodeMgmt *pMgmt, SDCreateMnodeReq *pReq) {
return
0
;
}
static
void
mmCloseImp
(
SMnodeMgmt
*
pMgmt
)
{
static
void
mmClose
(
SMgmtWrapper
*
pWrapper
)
{
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
if
(
pMgmt
==
NULL
)
return
;
dInfo
(
"mnode-mgmt start to cleanup"
);
if
(
pMgmt
->
pMnode
!=
NULL
)
{
mmStopWorker
(
pMgmt
);
mndClose
(
pMgmt
->
pMnode
);
pMgmt
->
pMnode
=
NULL
;
}
}
int32_t
mmAlter
(
SMnodeMgmt
*
pMgmt
,
SDAlterMnodeReq
*
pReq
)
{
SMnodeOpt
option
=
{
0
};
if
(
mmBuildOptionFromReq
(
pMgmt
,
&
option
,
pReq
)
!=
0
)
{
return
-
1
;
}
return
mndAlter
(
pMgmt
->
pMnode
,
&
option
);
}
int32_t
mmDrop
(
SMgmtWrapper
*
pWrapper
)
{
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
if
(
pMgmt
==
NULL
)
return
0
;
dInfo
(
"mnode-mgmt start to drop"
);
bool
deployed
=
false
;
if
(
mmWriteFile
(
pMgmt
,
deployed
)
!=
0
)
{
dError
(
"failed to drop mnode since %s"
,
terrstr
());
return
-
1
;
}
mmCloseImp
(
pMgmt
);
taosRemoveDir
(
pMgmt
->
path
);
pWrapper
->
pMgmt
=
NULL
;
taosMemoryFree
(
pMgmt
);
dInfo
(
"mnode-mgmt is dropped"
);
return
0
;
}
static
void
mmClose
(
SMgmtWrapper
*
pWrapper
)
{
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
if
(
pMgmt
==
NULL
)
return
;
dInfo
(
"mnode-mgmt start to cleanup"
);
mmCloseImp
(
pMgmt
);
pWrapper
->
pMgmt
=
NULL
;
taosMemoryFree
(
pMgmt
);
dInfo
(
"mnode-mgmt is cleaned up"
);
}
int32_t
mmOpenFromMsg
(
SMgmtWrapper
*
pWrapper
,
SDCreateMnodeReq
*
pReq
)
{
static
int32_t
mmOpen
(
SMgmtWrapper
*
pWrapper
)
{
dInfo
(
"mnode-mgmt start to init"
);
if
(
walInit
()
!=
0
)
{
dError
(
"failed to init wal since %s"
,
terrstr
());
...
...
@@ -206,18 +151,49 @@ int32_t mmOpenFromMsg(SMgmtWrapper *pWrapper, SDCreateMnodeReq *pReq) {
pMgmt
->
pWrapper
=
pWrapper
;
pWrapper
->
pMgmt
=
pMgmt
;
int32_t
code
=
mmOpenImp
(
pMgmt
,
pReq
)
;
if
(
code
!=
0
)
{
dError
(
"failed to
init mnode-mgmt
since %s"
,
terrstr
());
bool
deployed
=
false
;
if
(
mmReadFile
(
pMgmt
,
&
deployed
)
!=
0
)
{
dError
(
"failed to
read file
since %s"
,
terrstr
());
mmClose
(
pWrapper
);
return
-
1
;
}
SMnodeOpt
option
=
{
0
};
if
(
!
deployed
)
{
dInfo
(
"mnode start to deploy"
);
if
(
pWrapper
->
procType
==
DND_PROC_CHILD
)
{
pWrapper
->
pDnode
->
data
.
dnodeId
=
1
;
}
mmBuildOptionForDeploy
(
pMgmt
,
&
option
);
}
else
{
dInfo
(
"mnode-mgmt is initialized"
);
dInfo
(
"mnode start to open"
);
mmBuildOptionForOpen
(
pMgmt
,
&
option
);
}
return
code
;
}
pMgmt
->
pMnode
=
mndOpen
(
pMgmt
->
path
,
&
option
);
if
(
pMgmt
->
pMnode
==
NULL
)
{
dError
(
"failed to open mnode since %s"
,
terrstr
());
mmClose
(
pWrapper
);
return
-
1
;
}
if
(
mmStartWorker
(
pMgmt
)
!=
0
)
{
dError
(
"failed to start mnode worker since %s"
,
terrstr
());
mmClose
(
pWrapper
);
return
-
1
;
}
if
(
!
deployed
)
{
deployed
=
true
;
if
(
mmWriteFile
(
pWrapper
,
NULL
,
deployed
)
!=
0
)
{
dError
(
"failed to write mnode file since %s"
,
terrstr
());
return
-
1
;
}
}
static
int32_t
mmOpen
(
SMgmtWrapper
*
pWrapper
)
{
return
mmOpenFromMsg
(
pWrapper
,
NULL
);
}
dInfo
(
"mnode-mgmt is initialized"
);
return
0
;
}
static
int32_t
mmStart
(
SMgmtWrapper
*
pWrapper
)
{
dDebug
(
"mnode-mgmt start to run"
);
...
...
@@ -225,13 +201,22 @@ static int32_t mmStart(SMgmtWrapper *pWrapper) {
return
mndStart
(
pMgmt
->
pMnode
);
}
static
void
mmStop
(
SMgmtWrapper
*
pWrapper
)
{
dDebug
(
"mnode-mgmt start to stop"
);
SMnodeMgmt
*
pMgmt
=
pWrapper
->
pMgmt
;
if
(
pMgmt
!=
NULL
)
{
mndStop
(
pMgmt
->
pMnode
);
}
}
void
mmSetMgmtFp
(
SMgmtWrapper
*
pWrapper
)
{
SMgmtFp
mgmtFp
=
{
0
};
mgmtFp
.
openFp
=
mmOpen
;
mgmtFp
.
closeFp
=
mmClose
;
mgmtFp
.
startFp
=
mmStart
;
mgmtFp
.
createMsgFp
=
mmProcessCreateReq
;
mgmtFp
.
dropMsgFp
=
mmProcessDropReq
;
mgmtFp
.
stopFp
=
mmStop
;
mgmtFp
.
createFp
=
mmProcessCreateReq
;
mgmtFp
.
dropFp
=
mmProcessDropReq
;
mgmtFp
.
requiredFp
=
mmRequire
;
mmInitMsgHandle
(
pWrapper
);
...
...
source/dnode/mgmt/m
m
/mmWorker.c
→
source/dnode/mgmt/m
gmt_mnode/src
/mmWorker.c
浏览文件 @
2a95c8ef
文件已移动
source/dnode/mgmt/mgmt_qnode/CMakeLists.txt
0 → 100644
浏览文件 @
2a95c8ef
aux_source_directory
(
src MGMT_QNODE
)
add_library
(
mgmt_qnode STATIC
${
MGMT_QNODE
}
)
target_include_directories
(
mgmt_qnode
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
)
target_link_libraries
(
mgmt_qnode dnode_interface
)
\ No newline at end of file
source/dnode/mgmt/inc/qmInt.h
→
source/dnode/mgmt/
mgmt_qnode/
inc/qmInt.h
浏览文件 @
2a95c8ef
...
...
@@ -16,7 +16,8 @@
#ifndef _TD_DND_QNODE_INT_H_
#define _TD_DND_QNODE_INT_H_
#include "dndInt.h"
#include "dmInt.h"
#include "qnode.h"
#ifdef __cplusplus
...
...
@@ -33,10 +34,6 @@ typedef struct SQnodeMgmt {
SSingleWorker
monitorWorker
;
}
SQnodeMgmt
;
// qmInt.c
int32_t
qmOpen
(
SMgmtWrapper
*
pWrapper
);
int32_t
qmDrop
(
SMgmtWrapper
*
pWrapper
);
// qmHandle.c
void
qmInitMsgHandle
(
SMgmtWrapper
*
pWrapper
);
int32_t
qmProcessCreateReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
...
...
source/dnode/mgmt/
qm
/qmHandle.c
→
source/dnode/mgmt/
mgmt_qnode/src
/qmHandle.c
浏览文件 @
2a95c8ef
...
...
@@ -53,13 +53,19 @@ int32_t qmProcessCreateReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
-
1
;
}
if
(
createReq
.
dnodeId
!=
pDnode
->
dnodeId
)
{
if
(
createReq
.
dnodeId
!=
pDnode
->
d
ata
.
d
nodeId
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to create qnode since %s"
,
terrstr
());
return
-
1
;
}
else
{
return
dndOpenNode
(
pWrapper
);
}
bool
deployed
=
true
;
if
(
dmWriteFile
(
pWrapper
,
deployed
)
!=
0
)
{
dError
(
"failed to write qnode file since %s"
,
terrstr
());
return
-
1
;
}
return
0
;
}
int32_t
qmProcessDropReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
)
{
...
...
@@ -72,27 +78,32 @@ int32_t qmProcessDropReq(SMgmtWrapper *pWrapper, SNodeMsg *pMsg) {
return
-
1
;
}
if
(
dropReq
.
dnodeId
!=
pDnode
->
dnodeId
)
{
if
(
dropReq
.
dnodeId
!=
pDnode
->
d
ata
.
d
nodeId
)
{
terrno
=
TSDB_CODE_INVALID_OPTION
;
dError
(
"failed to drop qnode since %s"
,
terrstr
());
return
-
1
;
}
else
{
// dndCloseNode(pWrapper);
return
qmDrop
(
pWrapper
);
}
bool
deployed
=
false
;
if
(
dmWriteFile
(
pWrapper
,
deployed
)
!=
0
)
{
dError
(
"failed to write qnode file since %s"
,
terrstr
());
return
-
1
;
}
return
0
;
}
void
qmInitMsgHandle
(
SMgmtWrapper
*
pWrapper
)
{
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_MON_QM_INFO
,
qmProcessMonitorMsg
,
DEFAULT_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_MON_QM_INFO
,
qmProcessMonitorMsg
,
DEFAULT_HANDLE
);
// Requests handled by VNODE
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY
,
qmProcessQueryMsg
,
QNODE_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY_CONTINUE
,
qmProcessQueryMsg
,
QNODE_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_FETCH
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_FETCH_RSP
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_RES_READY
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_TASKS_STATUS
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_CANCEL_TASK
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
d
nd
SetMsgHandle
(
pWrapper
,
TDMT_VND_DROP_TASK
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY
,
qmProcessQueryMsg
,
QNODE_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_QUERY_CONTINUE
,
qmProcessQueryMsg
,
QNODE_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_FETCH
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_FETCH_RSP
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_RES_READY
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_TASKS_STATUS
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_CANCEL_TASK
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
d
m
SetMsgHandle
(
pWrapper
,
TDMT_VND_DROP_TASK
,
qmProcessFetchMsg
,
QNODE_HANDLE
);
}
source/dnode/mgmt/
qm
/qmInt.c
→
source/dnode/mgmt/
mgmt_qnode/src
/qmInt.c
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mgmt/
qm
/qmWorker.c
→
source/dnode/mgmt/
mgmt_qnode/src
/qmWorker.c
浏览文件 @
2a95c8ef
文件已移动
source/dnode/mgmt/mgmt_snode/CMakeLists.txt
0 → 100644
浏览文件 @
2a95c8ef
aux_source_directory
(
src MGMT_SNODE
)
add_library
(
mgmt_snode STATIC
${
MGMT_SNODE
}
)
target_include_directories
(
mgmt_snode
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
)
target_link_libraries
(
mgmt_snode dnode_interface
)
\ No newline at end of file
source/dnode/mgmt/inc/smInt.h
→
source/dnode/mgmt/
mgmt_snode/
inc/smInt.h
浏览文件 @
2a95c8ef
...
...
@@ -16,7 +16,8 @@
#ifndef _TD_DND_SNODE_INT_H_
#define _TD_DND_SNODE_INT_H_
#include "dndInt.h"
#include "dmInt.h"
#include "snode.h"
#ifdef __cplusplus
...
...
@@ -35,10 +36,6 @@ typedef struct SSnodeMgmt {
SSingleWorker
monitorWorker
;
}
SSnodeMgmt
;
// smInt.c
int32_t
smOpen
(
SMgmtWrapper
*
pWrapper
);
int32_t
smDrop
(
SMgmtWrapper
*
pWrapper
);
// smHandle.c
void
smInitMsgHandle
(
SMgmtWrapper
*
pWrapper
);
int32_t
smProcessCreateReq
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
...
...
source/dnode/mgmt/
sm
/smHandle.c
→
source/dnode/mgmt/
mgmt_snode/src
/smHandle.c
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mgmt/
sm
/smInt.c
→
source/dnode/mgmt/
mgmt_snode/src
/smInt.c
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mgmt/
sm
/smWorker.c
→
source/dnode/mgmt/
mgmt_snode/src
/smWorker.c
浏览文件 @
2a95c8ef
文件已移动
source/dnode/mgmt/mgmt_vnode/CMakeLists.txt
0 → 100644
浏览文件 @
2a95c8ef
aux_source_directory
(
src MGMT_VNODE
)
add_library
(
mgmt_vnode STATIC
${
MGMT_VNODE
}
)
target_include_directories
(
mgmt_vnode
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/inc"
)
target_link_libraries
(
mgmt_vnode dnode_interface
)
\ No newline at end of file
source/dnode/mgmt/inc/vmInt.h
→
source/dnode/mgmt/
mgmt_vnode/
inc/vmInt.h
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mgmt/
vm
/vmFile.c
→
source/dnode/mgmt/
mgmt_vnode/src
/vmFile.c
浏览文件 @
2a95c8ef
文件已移动
source/dnode/mgmt/
vm
/vmHandle.c
→
source/dnode/mgmt/
mgmt_vnode/src
/vmHandle.c
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mgmt/
vm
/vmInt.c
→
source/dnode/mgmt/
mgmt_vnode/src
/vmInt.c
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mgmt/
vm
/vmWorker.c
→
source/dnode/mgmt/
mgmt_vnode/src
/vmWorker.c
浏览文件 @
2a95c8ef
文件已移动
source/dnode/mgmt/test/CMakeLists.txt
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mgmt/test/bnode/CMakeLists.txt
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mgmt/test/mnode/CMakeLists.txt
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mgmt/test/qnode/CMakeLists.txt
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mgmt/test/snode/CMakeLists.txt
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mgmt/test/sut/CMakeLists.txt
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mgmt/test/sut/src/server.cpp
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mgmt/test/sut/src/sut.cpp
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mgmt/test/vnode/CMakeLists.txt
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mnode/impl/inc/mndGrant.h
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mnode/impl/src/mndDnode.c
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mnode/impl/src/mndGrant.c
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/dnode/mnode/impl/src/mnode.c
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/libs/transport/src/transSrv.c
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/util/src/tprocess.c
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
source/util/test/procTest.cpp
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
tests/script/jenkins/basic.txt
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
tests/script/tsim/db/error1.sim
浏览文件 @
2a95c8ef
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录