Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
3487d4f8
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1187
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
3487d4f8
编写于
3月 16, 2022
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
shm
上级
a50e8233
变更
39
隐藏空白更改
内联
并排
Showing
39 changed file
with
122 addition
and
375 deletion
+122
-375
source/dnode/mgmt/bnode/inc/bmFile.h
source/dnode/mgmt/bnode/inc/bmFile.h
+0
-0
source/dnode/mgmt/bnode/inc/bmInt.h
source/dnode/mgmt/bnode/inc/bmInt.h
+16
-0
source/dnode/mgmt/bnode/inc/bmMgmt.h
source/dnode/mgmt/bnode/inc/bmMgmt.h
+0
-0
source/dnode/mgmt/bnode/inc/bmMsg.h
source/dnode/mgmt/bnode/inc/bmMsg.h
+0
-31
source/dnode/mgmt/bnode/inc/bmWorker.h
source/dnode/mgmt/bnode/inc/bmWorker.h
+0
-42
source/dnode/mgmt/bnode/src/bmInt.c
source/dnode/mgmt/bnode/src/bmInt.c
+0
-1
source/dnode/mgmt/bnode/src/bmMsg.c
source/dnode/mgmt/bnode/src/bmMsg.c
+1
-2
source/dnode/mgmt/container/inc/dndInt.h
source/dnode/mgmt/container/inc/dndInt.h
+8
-0
source/dnode/mgmt/container/src/dndMonitor.c
source/dnode/mgmt/container/src/dndMonitor.c
+0
-4
source/dnode/mgmt/container/src/dndNode.c
source/dnode/mgmt/container/src/dndNode.c
+0
-7
source/dnode/mgmt/container/src/dndTransport.c
source/dnode/mgmt/container/src/dndTransport.c
+0
-3
source/dnode/mgmt/dnode/src/dmMsg.c
source/dnode/mgmt/dnode/src/dmMsg.c
+1
-1
source/dnode/mgmt/dnode/src/dmWorker.c
source/dnode/mgmt/dnode/src/dmWorker.c
+2
-3
source/dnode/mgmt/mnode/inc/mmInt.h
source/dnode/mgmt/mnode/inc/mmInt.h
+1
-0
source/dnode/mgmt/mnode/src/mmInt.c
source/dnode/mgmt/mnode/src/mmInt.c
+0
-2
source/dnode/mgmt/mnode/src/mmMsg.c
source/dnode/mgmt/mnode/src/mmMsg.c
+0
-1
source/dnode/mgmt/mnode/src/mmWorker.c
source/dnode/mgmt/mnode/src/mmWorker.c
+0
-2
source/dnode/mgmt/qnode/inc/qmFile.h
source/dnode/mgmt/qnode/inc/qmFile.h
+0
-0
source/dnode/mgmt/qnode/inc/qmInt.h
source/dnode/mgmt/qnode/inc/qmInt.h
+18
-0
source/dnode/mgmt/qnode/inc/qmMgmt.h
source/dnode/mgmt/qnode/inc/qmMgmt.h
+0
-0
source/dnode/mgmt/qnode/inc/qmMsg.h
source/dnode/mgmt/qnode/inc/qmMsg.h
+0
-33
source/dnode/mgmt/qnode/inc/qmWorker.h
source/dnode/mgmt/qnode/inc/qmWorker.h
+0
-42
source/dnode/mgmt/qnode/src/qmInt.c
source/dnode/mgmt/qnode/src/qmInt.c
+0
-1
source/dnode/mgmt/qnode/src/qmMsg.c
source/dnode/mgmt/qnode/src/qmMsg.c
+1
-2
source/dnode/mgmt/snode/inc/smFile.h
source/dnode/mgmt/snode/inc/smFile.h
+0
-0
source/dnode/mgmt/snode/inc/smInt.h
source/dnode/mgmt/snode/inc/smInt.h
+16
-0
source/dnode/mgmt/snode/inc/smMgmt.h
source/dnode/mgmt/snode/inc/smMgmt.h
+0
-0
source/dnode/mgmt/snode/inc/smMsg.h
source/dnode/mgmt/snode/inc/smMsg.h
+0
-31
source/dnode/mgmt/snode/inc/smWorker.h
source/dnode/mgmt/snode/inc/smWorker.h
+0
-42
source/dnode/mgmt/snode/src/smInt.c
source/dnode/mgmt/snode/src/smInt.c
+0
-1
source/dnode/mgmt/snode/src/smMsg.c
source/dnode/mgmt/snode/src/smMsg.c
+1
-2
source/dnode/mgmt/vnode/inc/vm.h
source/dnode/mgmt/vnode/inc/vm.h
+19
-9
source/dnode/mgmt/vnode/inc/vmFile.h
source/dnode/mgmt/vnode/inc/vmFile.h
+0
-33
source/dnode/mgmt/vnode/inc/vmInt.h
source/dnode/mgmt/vnode/inc/vmInt.h
+29
-19
source/dnode/mgmt/vnode/inc/vmWorker.h
source/dnode/mgmt/vnode/inc/vmWorker.h
+0
-44
source/dnode/mgmt/vnode/src/vmFile.c
source/dnode/mgmt/vnode/src/vmFile.c
+1
-1
source/dnode/mgmt/vnode/src/vmInt.c
source/dnode/mgmt/vnode/src/vmInt.c
+1
-5
source/dnode/mgmt/vnode/src/vmMsg.c
source/dnode/mgmt/vnode/src/vmMsg.c
+6
-9
source/dnode/mgmt/vnode/src/vmWorker.c
source/dnode/mgmt/vnode/src/vmWorker.c
+1
-2
未找到文件。
source/dnode/mgmt/bnode/inc/bmFile.h
已删除
100644 → 0
浏览文件 @
a50e8233
source/dnode/mgmt/bnode/inc/bmInt.h
浏览文件 @
3487d4f8
...
...
@@ -43,6 +43,22 @@ void dndProcessBnodeWriteMsg(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet);
int32_t
bmProcessCreateReq
(
SBnodeMgmt
*
pMgmt
,
SNodeMsg
*
pRpcMsg
);
int32_t
bmProcessDropReq
(
SBnodeMgmt
*
pMgmt
,
SNodeMsg
*
pRpcMsg
);
void
bmInitMsgHandles
(
SMgmtWrapper
*
pWrapper
);
int32_t
bmStartWorker
(
SDnode
*
pDnode
);
void
bmStopWorker
(
SDnode
*
pDnode
);
void
bmInitMsgFp
(
SMnodeMgmt
*
pMgmt
);
void
bmProcessRpcMsg
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
);
int32_t
bmPutMsgToWriteQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pRpcMsg
);
int32_t
bmPutMsgToReadQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pRpcMsg
);
void
bmConsumeChildQueue
(
SDnode
*
pDnode
,
SNodeMsg
*
pMsg
,
int32_t
msgLen
,
void
*
pCont
,
int32_t
contLen
);
void
bmConsumeParentQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
int32_t
msgLen
,
void
*
pCont
,
int32_t
contLen
);
void
bmProcessWriteMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
void
bmProcessSyncMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
void
bmProcessReadMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
#ifdef __cplusplus
}
#endif
...
...
source/dnode/mgmt/bnode/inc/bmMgmt.h
已删除
100644 → 0
浏览文件 @
a50e8233
source/dnode/mgmt/bnode/inc/bmMsg.h
已删除
100644 → 0
浏览文件 @
a50e8233
/*
* 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_BNODE_HANDLE_H_
#define _TD_DND_BNODE_HANDLE_H_
#include "mm.h"
#ifdef __cplusplus
extern
"C"
{
#endif
void
bmInitMsgHandles
(
SMgmtWrapper
*
pWrapper
);
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DND_BNODE_HANDLE_H_*/
\ No newline at end of file
source/dnode/mgmt/bnode/inc/bmWorker.h
已删除
100644 → 0
浏览文件 @
a50e8233
/*
* 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_BNODE_WORKER_H_
#define _TD_DND_BNODE_WORKER_H_
#include "bmInt.h"
#ifdef __cplusplus
extern
"C"
{
#endif
int32_t
bmStartWorker
(
SDnode
*
pDnode
);
void
bmStopWorker
(
SDnode
*
pDnode
);
void
bmInitMsgFp
(
SMnodeMgmt
*
pMgmt
);
void
bmProcessRpcMsg
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
);
int32_t
bmPutMsgToWriteQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pRpcMsg
);
int32_t
bmPutMsgToReadQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pRpcMsg
);
void
bmConsumeChildQueue
(
SDnode
*
pDnode
,
SNodeMsg
*
pMsg
,
int32_t
msgLen
,
void
*
pCont
,
int32_t
contLen
);
void
bmConsumeParentQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
int32_t
msgLen
,
void
*
pCont
,
int32_t
contLen
);
void
bmProcessWriteMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
void
bmProcessSyncMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
void
bmProcessReadMsg
(
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DND_BNODE_WORKER_H_*/
\ No newline at end of file
source/dnode/mgmt/bnode/src/bmInt.c
浏览文件 @
3487d4f8
...
...
@@ -15,7 +15,6 @@
#define _DEFAULT_SOURCE
#include "bmInt.h"
#include "bmMsg.h"
bool
bmRequireNode
(
SMgmtWrapper
*
pWrapper
)
{
return
false
;
}
...
...
source/dnode/mgmt/bnode/src/bmMsg.c
浏览文件 @
3487d4f8
...
...
@@ -14,8 +14,7 @@
*/
#define _DEFAULT_SOURCE
#include "bmMsg.h"
#include "bmWorker.h"
#include "bmInt.h"
int32_t
bmProcessCreateReq
(
SBnodeMgmt
*
pMgmt
,
SNodeMsg
*
pRpcMsg
)
{
return
0
;}
int32_t
bmProcessDropReq
(
SBnodeMgmt
*
pMgmt
,
SNodeMsg
*
pRpcMsg
)
{
return
0
;}
...
...
source/dnode/mgmt/container/inc/dndInt.h
浏览文件 @
3487d4f8
...
...
@@ -18,6 +18,14 @@
#include "dnd.h"
#include "bmInt.h"
#include "dm.h"
#include "dndInt.h"
#include "mm.h"
#include "qmInt.h"
#include "smInt.h"
#include "vm.h"
#ifdef __cplusplus
extern
"C"
{
#endif
...
...
source/dnode/mgmt/container/src/dndMonitor.c
浏览文件 @
3487d4f8
...
...
@@ -16,10 +16,6 @@
#define _DEFAULT_SOURCE
#include "dndInt.h"
#include "dm.h"
#include "mm.h"
#include "vmInt.h"
static
int32_t
dndGetMonitorDiskInfo
(
SDnode
*
pDnode
,
SMonDiskInfo
*
pInfo
)
{
tstrncpy
(
pInfo
->
logdir
.
name
,
tsLogDir
,
sizeof
(
pInfo
->
logdir
.
name
));
pInfo
->
logdir
.
size
=
tsLogSpace
.
size
;
...
...
source/dnode/mgmt/container/src/dndNode.c
浏览文件 @
3487d4f8
...
...
@@ -16,13 +16,6 @@
#define _DEFAULT_SOURCE
#include "dndInt.h"
#include "bmInt.h"
#include "dm.h"
#include "mm.h"
#include "qmInt.h"
#include "smInt.h"
#include "vmInt.h"
static
void
dndResetLog
(
SMgmtWrapper
*
pMgmt
)
{
char
logname
[
24
]
=
{
0
};
snprintf
(
logname
,
sizeof
(
logname
),
"%slog"
,
pMgmt
->
name
);
...
...
source/dnode/mgmt/container/src/dndTransport.c
浏览文件 @
3487d4f8
...
...
@@ -16,9 +16,6 @@
#define _DEFAULT_SOURCE
#include "dndInt.h"
#include "dm.h"
#include "mm.h"
#define INTERNAL_USER "_dnd"
#define INTERNAL_CKEY "_key"
#define INTERNAL_SECRET "_pwd"
...
...
source/dnode/mgmt/dnode/src/dmMsg.c
浏览文件 @
3487d4f8
...
...
@@ -15,7 +15,7 @@
#define _DEFAULT_SOURCE
#include "dmInt.h"
#include "vm
Int
.h"
#include "vm.h"
void
dmSendStatusReq
(
SDnodeMgmt
*
pMgmt
)
{
SDnode
*
pDnode
=
pMgmt
->
pDnode
;
...
...
source/dnode/mgmt/dnode/src/dmWorker.c
浏览文件 @
3487d4f8
...
...
@@ -14,13 +14,12 @@
*/
#define _DEFAULT_SOURCE
#include "dmInt.h"
#include "bmInt.h"
#include "dmInt.h"
#include "mm.h"
#include "qmInt.h"
#include "smInt.h"
#include "vm
Int
.h"
#include "vm.h"
static
void
*
dmThreadRoutine
(
void
*
param
)
{
SDnodeMgmt
*
pMgmt
=
param
;
...
...
source/dnode/mgmt/mnode/inc/mmInt.h
浏览文件 @
3487d4f8
...
...
@@ -16,6 +16,7 @@
#ifndef _TD_DND_MNODE_INT_H_
#define _TD_DND_MNODE_INT_H_
#include "dm.h"
#include "mm.h"
#ifdef __cplusplus
...
...
source/dnode/mgmt/mnode/src/mmInt.c
浏览文件 @
3487d4f8
...
...
@@ -16,8 +16,6 @@
#define _DEFAULT_SOURCE
#include "mmInt.h"
#include "dm.h"
SMnode
*
mmAcquire
(
SMnodeMgmt
*
pMgmt
)
{
SMnode
*
pMnode
=
NULL
;
int32_t
refCount
=
0
;
...
...
source/dnode/mgmt/mnode/src/mmMsg.c
浏览文件 @
3487d4f8
...
...
@@ -15,7 +15,6 @@
#define _DEFAULT_SOURCE
#include "mmInt.h"
#include "dm.h"
int32_t
mmProcessCreateReq
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SDnode
*
pDnode
=
pMgmt
->
pDnode
;
...
...
source/dnode/mgmt/mnode/src/mmWorker.c
浏览文件 @
3487d4f8
...
...
@@ -16,8 +16,6 @@
#define _DEFAULT_SOURCE
#include "mmInt.h"
#include "dm.h"
static
void
mmProcessQueue
(
SMnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
dTrace
(
"msg:%p, will be processed"
,
pMsg
);
SMnode
*
pMnode
=
mmAcquire
(
pMgmt
);
...
...
source/dnode/mgmt/qnode/inc/qmFile.h
已删除
100644 → 0
浏览文件 @
a50e8233
source/dnode/mgmt/qnode/inc/qmInt.h
浏览文件 @
3487d4f8
...
...
@@ -48,6 +48,24 @@ void dndProcessQnodeFetchMsg(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet);
int32_t
qmProcessCreateReq
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
qmProcessDropReq
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
void
qmInitMsgHandles
(
SMgmtWrapper
*
pWrapper
);
int32_t
qmProcessCreateReq
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
qmProcessDropReq
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
qmStartWorker
(
SDnode
*
pDnode
);
void
qmStopWorker
(
SDnode
*
pDnode
);
void
qmInitMsgFp
(
SMnodeMgmt
*
pMgmt
);
void
qmProcessRpcMsg
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
);
int32_t
qmPutMsgToWriteQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pRpcMsg
);
int32_t
qmPutMsgToReadQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pRpcMsg
);
void
qmConsumeChildQueue
(
SDnode
*
pDnode
,
SNodeMsg
*
pMsg
,
int32_t
msgLen
,
void
*
pCont
,
int32_t
contLen
);
void
qmConsumeParentQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
int32_t
msgLen
,
void
*
pCont
,
int32_t
contLen
);
void
qmProcessWriteMsg
(
SDnode
*
pDnode
,
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
void
qmProcessSyncMsg
(
SDnode
*
pDnode
,
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
void
qmProcessReadMsg
(
SDnode
*
pDnode
,
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
#ifdef __cplusplus
}
#endif
...
...
source/dnode/mgmt/qnode/inc/qmMgmt.h
已删除
100644 → 0
浏览文件 @
a50e8233
source/dnode/mgmt/qnode/inc/qmMsg.h
已删除
100644 → 0
浏览文件 @
a50e8233
/*
* 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_QNODE_HANDLE_H_
#define _TD_DND_QNODE_HANDLE_H_
#include "qmInt.h"
#ifdef __cplusplus
extern
"C"
{
#endif
void
qmInitMsgHandles
(
SMgmtWrapper
*
pWrapper
);
int32_t
qmProcessCreateReq
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
qmProcessDropReq
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DND_QNODE_HANDLE_H_*/
\ No newline at end of file
source/dnode/mgmt/qnode/inc/qmWorker.h
已删除
100644 → 0
浏览文件 @
a50e8233
/*
* 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_QNODE_WORKER_H_
#define _TD_DND_QNODE_WORKER_H_
#include "qmInt.h"
#ifdef __cplusplus
extern
"C"
{
#endif
int32_t
qmStartWorker
(
SDnode
*
pDnode
);
void
qmStopWorker
(
SDnode
*
pDnode
);
void
qmInitMsgFp
(
SMnodeMgmt
*
pMgmt
);
void
qmProcessRpcMsg
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
);
int32_t
qmPutMsgToWriteQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pRpcMsg
);
int32_t
qmPutMsgToReadQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pRpcMsg
);
void
qmConsumeChildQueue
(
SDnode
*
pDnode
,
SNodeMsg
*
pMsg
,
int32_t
msgLen
,
void
*
pCont
,
int32_t
contLen
);
void
qmConsumeParentQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
int32_t
msgLen
,
void
*
pCont
,
int32_t
contLen
);
void
qmProcessWriteMsg
(
SDnode
*
pDnode
,
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
void
qmProcessSyncMsg
(
SDnode
*
pDnode
,
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
void
qmProcessReadMsg
(
SDnode
*
pDnode
,
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DND_QNODE_WORKER_H_*/
\ No newline at end of file
source/dnode/mgmt/qnode/src/qmInt.c
浏览文件 @
3487d4f8
...
...
@@ -15,7 +15,6 @@
#define _DEFAULT_SOURCE
#include "qmInt.h"
#include "qmMsg.h"
bool
qmRequireNode
(
SMgmtWrapper
*
pWrapper
)
{
return
false
;
}
...
...
source/dnode/mgmt/qnode/src/qmMsg.c
浏览文件 @
3487d4f8
...
...
@@ -14,8 +14,7 @@
*/
#define _DEFAULT_SOURCE
#include "qmMsg.h"
#include "qmWorker.h"
#include "qmInt.h"
int32_t
qmProcessCreateReq
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
return
0
;}
int32_t
qmProcessDropReq
(
SQnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
){
return
0
;}
...
...
source/dnode/mgmt/snode/inc/smFile.h
已删除
100644 → 0
浏览文件 @
a50e8233
source/dnode/mgmt/snode/inc/smInt.h
浏览文件 @
3487d4f8
...
...
@@ -42,6 +42,22 @@ void dndProcessSnodeWriteMsg(SDnode *pDnode, SRpcMsg *pMsg, SEpSet *pEpSet);
int32_t
smProcessCreateReq
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
smProcessDropReq
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
void
smInitMsgHandles
(
SMgmtWrapper
*
pWrapper
);
int32_t
smStartWorker
(
SDnode
*
pDnode
);
void
smStopWorker
(
SDnode
*
pDnode
);
void
smInitMsgFp
(
SMnodeMgmt
*
pMgmt
);
void
smProcessRpcMsg
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
);
int32_t
smPutMsgToWriteQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pRpcMsg
);
int32_t
smPutMsgToReadQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pRpcMsg
);
void
smConsumeChildQueue
(
SDnode
*
pDnode
,
SNodeMsg
*
pMsg
,
int32_t
msgLen
,
void
*
pCont
,
int32_t
contLen
);
void
smConsumeParentQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
int32_t
msgLen
,
void
*
pCont
,
int32_t
contLen
);
void
smProcessWriteMsg
(
SDnode
*
pDnode
,
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
void
smProcessSyncMsg
(
SDnode
*
pDnode
,
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
void
smProcessReadMsg
(
SDnode
*
pDnode
,
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
#ifdef __cplusplus
}
#endif
...
...
source/dnode/mgmt/snode/inc/smMgmt.h
已删除
100644 → 0
浏览文件 @
a50e8233
source/dnode/mgmt/snode/inc/smMsg.h
已删除
100644 → 0
浏览文件 @
a50e8233
/*
* 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_SNODE_HANDLE_H_
#define _TD_DND_SNODE_HANDLE_H_
#include "smInt.h"
#ifdef __cplusplus
extern
"C"
{
#endif
void
smInitMsgHandles
(
SMgmtWrapper
*
pWrapper
);
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DND_SNODE_HANDLE_H_*/
\ No newline at end of file
source/dnode/mgmt/snode/inc/smWorker.h
已删除
100644 → 0
浏览文件 @
a50e8233
/*
* 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_SNODE_WORKER_H_
#define _TD_DND_SNODE_WORKER_H_
#include "smInt.h"
#ifdef __cplusplus
extern
"C"
{
#endif
int32_t
smStartWorker
(
SDnode
*
pDnode
);
void
smStopWorker
(
SDnode
*
pDnode
);
void
smInitMsgFp
(
SMnodeMgmt
*
pMgmt
);
void
smProcessRpcMsg
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
SEpSet
*
pEpSet
);
int32_t
smPutMsgToWriteQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pRpcMsg
);
int32_t
smPutMsgToReadQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pRpcMsg
);
void
smConsumeChildQueue
(
SDnode
*
pDnode
,
SNodeMsg
*
pMsg
,
int32_t
msgLen
,
void
*
pCont
,
int32_t
contLen
);
void
smConsumeParentQueue
(
SDnode
*
pDnode
,
SRpcMsg
*
pMsg
,
int32_t
msgLen
,
void
*
pCont
,
int32_t
contLen
);
void
smProcessWriteMsg
(
SDnode
*
pDnode
,
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
void
smProcessSyncMsg
(
SDnode
*
pDnode
,
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
void
smProcessReadMsg
(
SDnode
*
pDnode
,
SMgmtWrapper
*
pWrapper
,
SNodeMsg
*
pMsg
);
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DND_SNODE_WORKER_H_*/
\ No newline at end of file
source/dnode/mgmt/snode/src/smInt.c
浏览文件 @
3487d4f8
...
...
@@ -15,7 +15,6 @@
#define _DEFAULT_SOURCE
#include "smInt.h"
#include "smMsg.h"
bool
smRequireNode
(
SMgmtWrapper
*
pWrapper
)
{
return
false
;
}
...
...
source/dnode/mgmt/snode/src/smMsg.c
浏览文件 @
3487d4f8
...
...
@@ -14,8 +14,7 @@
*/
#define _DEFAULT_SOURCE
#include "smMsg.h"
#include "smWorker.h"
#include "smInt.h"
int32_t
smProcessCreateReq
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
return
0
;}
int32_t
smProcessDropReq
(
SSnodeMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
return
0
;}
...
...
source/dnode/mgmt/vnode/inc/vm
Msg
.h
→
source/dnode/mgmt/vnode/inc/vm.h
浏览文件 @
3487d4f8
...
...
@@ -13,25 +13,35 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _TD_DND_VNODE
_HANDLE
_H_
#define _TD_DND_VNODE
_HANDLE
_H_
#ifndef _TD_DND_VNODE
S
_H_
#define _TD_DND_VNODE
S
_H_
#include "
vmInt
.h"
#include "
dnd
.h"
#ifdef __cplusplus
extern
"C"
{
#endif
typedef
struct
{
int32_t
openVnodes
;
int32_t
totalVnodes
;
int32_t
masterNum
;
int64_t
numOfSelectReqs
;
int64_t
numOfInsertReqs
;
int64_t
numOfInsertSuccessReqs
;
int64_t
numOfBatchInsertReqs
;
int64_t
numOfBatchInsertSuccessReqs
;
}
SVnodesStat
;
void
vmGetMgmtFp
(
SMgmtWrapper
*
pWrapper
);
void
vmInitMsgHandles
(
SMgmtWrapper
*
pWrapper
);
int32_t
vmProcessCreateVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
int32_t
vmProcessAlterVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
int32_t
vmProcessDropVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
int32_t
vmProcessSyncVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
int32_t
vmProcessCompactVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
void
vmGetVnodeLoads
(
SMgmtWrapper
*
pWrapper
,
SArray
*
pLoads
);
int32_t
vmGetTfsMonitorInfo
(
SMgmtWrapper
*
pWrapper
,
SMonDiskInfo
*
pInfo
);
void
vmGetVnodeReqs
(
SMgmtWrapper
*
pWrapper
,
SMonDnodeInfo
*
pInfo
);
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DND_VNODE_HANDLE_H_*/
\ No newline at end of file
#endif
/*_TD_DND_VNODES_H_*/
\ No newline at end of file
source/dnode/mgmt/vnode/inc/vmFile.h
已删除
100644 → 0
浏览文件 @
a50e8233
/*
* 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_VNODES_FILE_H_
#define _TD_DND_VNODES_FILE_H_
#include "vmInt.h"
#ifdef __cplusplus
extern
"C"
{
#endif
int32_t
vmGetVnodesFromFile
(
SVnodesMgmt
*
pMgmt
,
SWrapperCfg
**
ppCfgs
,
int32_t
*
numOfVnodes
);
int32_t
vmWriteVnodesToFile
(
SVnodesMgmt
*
pMgmt
);
SVnodeObj
**
vmGetVnodesFromHash
(
SVnodesMgmt
*
pMgmt
,
int32_t
*
numOfVnodes
);
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DND_VNODES_FILE_H_*/
\ No newline at end of file
source/dnode/mgmt/vnode/inc/vmInt.h
浏览文件 @
3487d4f8
...
...
@@ -16,23 +16,14 @@
#ifndef _TD_DND_VNODES_INT_H_
#define _TD_DND_VNODES_INT_H_
#include "dnd.h"
#include "dm.h"
#include "sync.h"
#include "vm.h"
#ifdef __cplusplus
extern
"C"
{
#endif
typedef
struct
{
int32_t
openVnodes
;
int32_t
totalVnodes
;
int32_t
masterNum
;
int64_t
numOfSelectReqs
;
int64_t
numOfInsertReqs
;
int64_t
numOfInsertSuccessReqs
;
int64_t
numOfBatchInsertReqs
;
int64_t
numOfBatchInsertSuccessReqs
;
}
SVnodesStat
;
typedef
struct
SVnodesMgmt
{
SHashObj
*
hash
;
SRWLatch
latch
;
...
...
@@ -85,18 +76,37 @@ typedef struct {
SWrapperCfg
*
pCfgs
;
}
SVnodeThread
;
// interface
void
vmGetMgmtFp
(
SMgmtWrapper
*
pWrapper
);
void
vmGetVnodeLoads
(
SMgmtWrapper
*
pWrapper
,
SArray
*
pLoads
);
int32_t
vmGetTfsMonitorInfo
(
SMgmtWrapper
*
pWrapper
,
SMonDiskInfo
*
pInfo
);
void
vmGetVnodeReqs
(
SMgmtWrapper
*
pWrapper
,
SMonDnodeInfo
*
pInfo
);
// vmInt.h
// vmInt.c
SVnodeObj
*
vmAcquireVnode
(
SVnodesMgmt
*
pMgmt
,
int32_t
vgId
);
void
vmReleaseVnode
(
SVnodesMgmt
*
pMgmt
,
SVnodeObj
*
pVnode
);
int32_t
vmOpenVnode
(
SVnodesMgmt
*
pMgmt
,
SWrapperCfg
*
pCfg
,
SVnode
*
pImpl
);
void
vmCloseVnode
(
SVnodesMgmt
*
pMgmt
,
SVnodeObj
*
pVnode
);
// vmMsg.c
int32_t
vmProcessCreateVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
int32_t
vmProcessAlterVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
int32_t
vmProcessDropVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
int32_t
vmProcessSyncVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
int32_t
vmProcessCompactVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pReq
);
// vmFile.c
int32_t
vmGetVnodesFromFile
(
SVnodesMgmt
*
pMgmt
,
SWrapperCfg
**
ppCfgs
,
int32_t
*
numOfVnodes
);
int32_t
vmWriteVnodesToFile
(
SVnodesMgmt
*
pMgmt
);
SVnodeObj
**
vmGetVnodesFromHash
(
SVnodesMgmt
*
pMgmt
,
int32_t
*
numOfVnodes
);
// vmWorker.c
int32_t
vmStartWorker
(
SVnodesMgmt
*
pMgmt
);
void
vmStopWorker
(
SVnodesMgmt
*
pMgmt
);
int32_t
vmAllocQueue
(
SVnodesMgmt
*
pMgmt
,
SVnodeObj
*
pVnode
);
void
vmFreeQueue
(
SVnodesMgmt
*
pMgmt
,
SVnodeObj
*
pVnode
);
int32_t
vmPutMsgToQueryQueue
(
SVnodesMgmt
*
pMgmt
,
SRpcMsg
*
pMsg
);
int32_t
vmPutMsgToApplyQueue
(
SVnodesMgmt
*
pMgmt
,
int32_t
vgId
,
SRpcMsg
*
pMsg
);
int32_t
vmProcessWriteMsg
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
vmProcessSyncMsg
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
vmProcessQueryMsg
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
vmProcessFetchMsg
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
vmProcessMgmtMsg
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
#ifdef __cplusplus
...
...
source/dnode/mgmt/vnode/inc/vmWorker.h
已删除
100644 → 0
浏览文件 @
a50e8233
/*
* 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_VNODE_WORKER_H_
#define _TD_DND_VNODE_WORKER_H_
#include "vmInt.h"
#ifdef __cplusplus
extern
"C"
{
#endif
int32_t
vmStartWorker
(
SVnodesMgmt
*
pMgmt
);
void
vmStopWorker
(
SVnodesMgmt
*
pMgmt
);
int32_t
vmAllocQueue
(
SVnodesMgmt
*
pMgmt
,
SVnodeObj
*
pVnode
);
void
vmFreeQueue
(
SVnodesMgmt
*
pMgmt
,
SVnodeObj
*
pVnode
);
int32_t
vmPutMsgToQueryQueue
(
SVnodesMgmt
*
pMgmt
,
SRpcMsg
*
pMsg
);
int32_t
vmPutMsgToApplyQueue
(
SVnodesMgmt
*
pMgmt
,
int32_t
vgId
,
SRpcMsg
*
pMsg
);
int32_t
vmProcessWriteMsg
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
vmProcessSyncMsg
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
vmProcessQueryMsg
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
int32_t
vmProcessFetchMsg
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
);
#ifdef __cplusplus
}
#endif
#endif
/*_TD_DND_VNODE_WORKER_H_*/
\ No newline at end of file
source/dnode/mgmt/vnode/src/vmFile.c
浏览文件 @
3487d4f8
...
...
@@ -14,7 +14,7 @@
*/
#define _DEFAULT_SOURCE
#include "vm
File
.h"
#include "vm
Int
.h"
SVnodeObj
**
vmGetVnodesFromHash
(
SVnodesMgmt
*
pMgmt
,
int32_t
*
numOfVnodes
)
{
taosRLockLatch
(
&
pMgmt
->
latch
);
...
...
source/dnode/mgmt/vnode/src/vmInt.c
浏览文件 @
3487d4f8
...
...
@@ -14,11 +14,7 @@
*/
#define _DEFAULT_SOURCE
#include "vmFile.h"
#include "vmMsg.h"
#include "vmWorker.h"
#include "sync.h"
#include "vmInt.h"
SVnodeObj
*
vmAcquireVnode
(
SVnodesMgmt
*
pMgmt
,
int32_t
vgId
)
{
SVnodeObj
*
pVnode
=
NULL
;
...
...
source/dnode/mgmt/vnode/src/vmMsg.c
浏览文件 @
3487d4f8
...
...
@@ -14,10 +14,7 @@
*/
#define _DEFAULT_SOURCE
#include "vmMsg.h"
#include "vmFile.h"
#include "vmWorker.h"
#include "dm.h"
#include "vmInt.h"
static
void
vmGenerateVnodeCfg
(
SCreateVnodeReq
*
pCreate
,
SVnodeCfg
*
pCfg
)
{
pCfg
->
vgId
=
pCreate
->
vgId
;
...
...
@@ -56,7 +53,7 @@ static void vmGenerateWrapperCfg(SVnodesMgmt *pMgmt, SCreateVnodeReq *pCreate, S
}
int32_t
vmProcessCreateVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SCreateVnodeReq
createReq
=
{
0
};
if
(
tDeserializeSCreateVnodeReq
(
pReq
->
pCont
,
pReq
->
contLen
,
&
createReq
)
!=
0
)
{
terrno
=
TSDB_CODE_INVALID_MSG
;
...
...
@@ -115,7 +112,7 @@ int32_t vmProcessCreateVnodeReq(SVnodesMgmt *pMgmt, SNodeMsg *pMsg) {
}
int32_t
vmProcessAlterVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SAlterVnodeReq
alterReq
=
{
0
};
if
(
tDeserializeSCreateVnodeReq
(
pReq
->
pCont
,
pReq
->
contLen
,
&
alterReq
)
!=
0
)
{
terrno
=
TSDB_CODE_INVALID_MSG
;
...
...
@@ -157,7 +154,7 @@ int32_t vmProcessAlterVnodeReq(SVnodesMgmt *pMgmt, SNodeMsg *pMsg) {
}
int32_t
vmProcessDropVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SDropVnodeReq
dropReq
=
{
0
};
if
(
tDeserializeSDropVnodeReq
(
pReq
->
pCont
,
pReq
->
contLen
,
&
dropReq
)
!=
0
)
{
terrno
=
TSDB_CODE_INVALID_MSG
;
...
...
@@ -188,7 +185,7 @@ int32_t vmProcessDropVnodeReq(SVnodesMgmt *pMgmt, SNodeMsg *pMsg) {
}
int32_t
vmProcessSyncVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SSyncVnodeReq
syncReq
=
{
0
};
tDeserializeSDropVnodeReq
(
pReq
->
pCont
,
pReq
->
contLen
,
&
syncReq
);
...
...
@@ -212,7 +209,7 @@ int32_t vmProcessSyncVnodeReq(SVnodesMgmt *pMgmt, SNodeMsg *pMsg) {
}
int32_t
vmProcessCompactVnodeReq
(
SVnodesMgmt
*
pMgmt
,
SNodeMsg
*
pMsg
)
{
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SRpcMsg
*
pReq
=
&
pMsg
->
rpcMsg
;
SCompactVnodeReq
compatcReq
=
{
0
};
tDeserializeSDropVnodeReq
(
pReq
->
pCont
,
pReq
->
contLen
,
&
compatcReq
);
...
...
source/dnode/mgmt/vnode/src/vmWorker.c
浏览文件 @
3487d4f8
...
...
@@ -14,8 +14,7 @@
*/
#define _DEFAULT_SOURCE
#include "vmWorker.h"
#include "vmMsg.h"
#include "vmInt.h"
static
void
vmProcessQueryQueue
(
SVnodeObj
*
pVnode
,
SRpcMsg
*
pMsg
)
{
vnodeProcessQueryMsg
(
pVnode
->
pImpl
,
pMsg
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录