Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
56c513cd
T
TDengine
项目概览
taosdata
/
TDengine
11 个月 前同步成功
通知
1179
Star
22014
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
56c513cd
编写于
12月 15, 2021
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rename some funcs
上级
f57151d2
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
40 addition
and
41 deletion
+40
-41
source/dnode/mnode/impl/inc/mndShow.h
source/dnode/mnode/impl/inc/mndShow.h
+1
-1
source/dnode/mnode/impl/src/mndAcct.c
source/dnode/mnode/impl/src/mndAcct.c
+19
-19
source/dnode/mnode/impl/src/mndCluster.c
source/dnode/mnode/impl/src/mndCluster.c
+1
-1
source/dnode/mnode/impl/src/mndDb.c
source/dnode/mnode/impl/src/mndDb.c
+5
-6
source/dnode/mnode/impl/src/mndDnode.c
source/dnode/mnode/impl/src/mndDnode.c
+2
-2
source/dnode/mnode/impl/src/mndFunc.c
source/dnode/mnode/impl/src/mndFunc.c
+1
-1
source/dnode/mnode/impl/src/mndMnode.c
source/dnode/mnode/impl/src/mndMnode.c
+1
-1
source/dnode/mnode/impl/src/mndProfile.c
source/dnode/mnode/impl/src/mndProfile.c
+2
-2
source/dnode/mnode/impl/src/mndShow.c
source/dnode/mnode/impl/src/mndShow.c
+1
-1
source/dnode/mnode/impl/src/mndStb.c
source/dnode/mnode/impl/src/mndStb.c
+2
-2
source/dnode/mnode/impl/src/mndUser.c
source/dnode/mnode/impl/src/mndUser.c
+1
-1
source/dnode/mnode/impl/src/mndVgroup.c
source/dnode/mnode/impl/src/mndVgroup.c
+2
-2
source/dnode/mnode/impl/src/mnode.c
source/dnode/mnode/impl/src/mnode.c
+2
-2
未找到文件。
source/dnode/mnode/impl/inc/mndShow.h
浏览文件 @
56c513cd
...
...
@@ -27,7 +27,7 @@ void mndCleanupShow(SMnode *pMnode);
void
mndAddShowMetaHandle
(
SMnode
*
pMnode
,
EShowType
showType
,
ShowMetaFp
fp
);
void
mndAddShowRetrieveHandle
(
SMnode
*
pMnode
,
EShowType
showType
,
ShowRetrieveFp
fp
);
void
mndAddShowFreeIterHandle
(
SMnode
*
pMnode
,
EShowType
msgType
,
ShowFreeIterFp
fp
);
void
mn
ode
VacuumResult
(
char
*
data
,
int32_t
numOfCols
,
int32_t
rows
,
int32_t
capacity
,
SShowObj
*
pShow
);
void
mn
d
VacuumResult
(
char
*
data
,
int32_t
numOfCols
,
int32_t
rows
,
int32_t
capacity
,
SShowObj
*
pShow
);
char
*
mndShowStr
(
int32_t
showType
);
#ifdef __cplusplus
...
...
source/dnode/mnode/impl/src/mndAcct.c
浏览文件 @
56c513cd
...
...
@@ -19,12 +19,12 @@
#define SDB_ACCT_VER 1
static
int32_t
mn
ode
CreateDefaultAcct
(
SMnode
*
pMnode
);
static
SSdbRaw
*
mn
ode
AcctActionEncode
(
SAcctObj
*
pAcct
);
static
SSdbRow
*
mn
ode
AcctActionDecode
(
SSdbRaw
*
pRaw
);
static
int32_t
mn
ode
AcctActionInsert
(
SSdb
*
pSdb
,
SAcctObj
*
pAcct
);
static
int32_t
mn
ode
AcctActionDelete
(
SSdb
*
pSdb
,
SAcctObj
*
pAcct
);
static
int32_t
mn
ode
AcctActionUpdate
(
SSdb
*
pSdb
,
SAcctObj
*
pOldAcct
,
SAcctObj
*
pNewAcct
);
static
int32_t
mn
d
CreateDefaultAcct
(
SMnode
*
pMnode
);
static
SSdbRaw
*
mn
d
AcctActionEncode
(
SAcctObj
*
pAcct
);
static
SSdbRow
*
mn
d
AcctActionDecode
(
SSdbRaw
*
pRaw
);
static
int32_t
mn
d
AcctActionInsert
(
SSdb
*
pSdb
,
SAcctObj
*
pAcct
);
static
int32_t
mn
d
AcctActionDelete
(
SSdb
*
pSdb
,
SAcctObj
*
pAcct
);
static
int32_t
mn
d
AcctActionUpdate
(
SSdb
*
pSdb
,
SAcctObj
*
pOldAcct
,
SAcctObj
*
pNewAcct
);
static
int32_t
mndProcessCreateAcctMsg
(
SMnodeMsg
*
pMnodeMsg
);
static
int32_t
mndProcessAlterAcctMsg
(
SMnodeMsg
*
pMnodeMsg
);
static
int32_t
mndProcessDropAcctMsg
(
SMnodeMsg
*
pMnodeMsg
);
...
...
@@ -32,12 +32,12 @@ static int32_t mndProcessDropAcctMsg(SMnodeMsg *pMnodeMsg);
int32_t
mndInitAcct
(
SMnode
*
pMnode
)
{
SSdbTable
table
=
{.
sdbType
=
SDB_ACCT
,
.
keyType
=
SDB_KEY_BINARY
,
.
deployFp
=
mn
ode
CreateDefaultAcct
,
.
encodeFp
=
(
SdbEncodeFp
)
mn
ode
AcctActionEncode
,
.
decodeFp
=
(
SdbDecodeFp
)
mn
ode
AcctActionDecode
,
.
insertFp
=
(
SdbInsertFp
)
mn
ode
AcctActionInsert
,
.
updateFp
=
(
SdbUpdateFp
)
mn
ode
AcctActionUpdate
,
.
deleteFp
=
(
SdbDeleteFp
)
mn
ode
AcctActionDelete
};
.
deployFp
=
mn
d
CreateDefaultAcct
,
.
encodeFp
=
(
SdbEncodeFp
)
mn
d
AcctActionEncode
,
.
decodeFp
=
(
SdbDecodeFp
)
mn
d
AcctActionDecode
,
.
insertFp
=
(
SdbInsertFp
)
mn
d
AcctActionInsert
,
.
updateFp
=
(
SdbUpdateFp
)
mn
d
AcctActionUpdate
,
.
deleteFp
=
(
SdbDeleteFp
)
mn
d
AcctActionDelete
};
mndSetMsgHandle
(
pMnode
,
TSDB_MSG_TYPE_CREATE_ACCT
,
mndProcessCreateAcctMsg
);
mndSetMsgHandle
(
pMnode
,
TSDB_MSG_TYPE_ALTER_ACCT
,
mndProcessAlterAcctMsg
);
...
...
@@ -48,7 +48,7 @@ int32_t mndInitAcct(SMnode *pMnode) {
void
mndCleanupAcct
(
SMnode
*
pMnode
)
{}
static
int32_t
mn
ode
CreateDefaultAcct
(
SMnode
*
pMnode
)
{
static
int32_t
mn
d
CreateDefaultAcct
(
SMnode
*
pMnode
)
{
SAcctObj
acctObj
=
{
0
};
tstrncpy
(
acctObj
.
acct
,
TSDB_DEFAULT_USER
,
TSDB_USER_LEN
);
acctObj
.
createdTime
=
taosGetTimestampMs
();
...
...
@@ -61,7 +61,7 @@ static int32_t mnodeCreateDefaultAcct(SMnode *pMnode) {
.
maxStorage
=
INT64_MAX
,
.
accessState
=
TSDB_VN_ALL_ACCCESS
};
SSdbRaw
*
pRaw
=
mn
ode
AcctActionEncode
(
&
acctObj
);
SSdbRaw
*
pRaw
=
mn
d
AcctActionEncode
(
&
acctObj
);
if
(
pRaw
==
NULL
)
return
-
1
;
sdbSetRawStatus
(
pRaw
,
SDB_STATUS_READY
);
...
...
@@ -69,7 +69,7 @@ static int32_t mnodeCreateDefaultAcct(SMnode *pMnode) {
return
sdbWrite
(
pMnode
->
pSdb
,
pRaw
);
}
static
SSdbRaw
*
mn
ode
AcctActionEncode
(
SAcctObj
*
pAcct
)
{
static
SSdbRaw
*
mn
d
AcctActionEncode
(
SAcctObj
*
pAcct
)
{
SSdbRaw
*
pRaw
=
sdbAllocRaw
(
SDB_ACCT
,
SDB_ACCT_VER
,
sizeof
(
SAcctObj
));
if
(
pRaw
==
NULL
)
return
NULL
;
...
...
@@ -90,7 +90,7 @@ static SSdbRaw *mnodeAcctActionEncode(SAcctObj *pAcct) {
return
pRaw
;
}
static
SSdbRow
*
mn
ode
AcctActionDecode
(
SSdbRaw
*
pRaw
)
{
static
SSdbRow
*
mn
d
AcctActionDecode
(
SSdbRaw
*
pRaw
)
{
int8_t
sver
=
0
;
if
(
sdbGetRawSoftVer
(
pRaw
,
&
sver
)
!=
0
)
return
NULL
;
...
...
@@ -120,18 +120,18 @@ static SSdbRow *mnodeAcctActionDecode(SSdbRaw *pRaw) {
return
pRow
;
}
static
int32_t
mn
ode
AcctActionInsert
(
SSdb
*
pSdb
,
SAcctObj
*
pAcct
)
{
static
int32_t
mn
d
AcctActionInsert
(
SSdb
*
pSdb
,
SAcctObj
*
pAcct
)
{
mTrace
(
"acct:%s, perform insert action"
,
pAcct
->
acct
);
memset
(
&
pAcct
->
info
,
0
,
sizeof
(
SAcctInfo
));
return
0
;
}
static
int32_t
mn
ode
AcctActionDelete
(
SSdb
*
pSdb
,
SAcctObj
*
pAcct
)
{
static
int32_t
mn
d
AcctActionDelete
(
SSdb
*
pSdb
,
SAcctObj
*
pAcct
)
{
mTrace
(
"acct:%s, perform delete action"
,
pAcct
->
acct
);
return
0
;
}
static
int32_t
mn
ode
AcctActionUpdate
(
SSdb
*
pSdb
,
SAcctObj
*
pOldAcct
,
SAcctObj
*
pNewAcct
)
{
static
int32_t
mn
d
AcctActionUpdate
(
SSdb
*
pSdb
,
SAcctObj
*
pOldAcct
,
SAcctObj
*
pNewAcct
)
{
mTrace
(
"acct:%s, perform update action"
,
pOldAcct
->
acct
);
memcpy
(
pOldAcct
->
acct
,
pNewAcct
->
acct
,
TSDB_USER_LEN
);
...
...
source/dnode/mnode/impl/src/mndCluster.c
浏览文件 @
56c513cd
...
...
@@ -203,7 +203,7 @@ static int32_t mndRetrieveClusters(SMnodeMsg *pMsg, SShowObj *pShow, char *data,
numOfRows
++
;
}
mn
ode
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
mn
d
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
pShow
->
numOfReads
+=
numOfRows
;
return
numOfRows
;
}
...
...
source/dnode/mnode/impl/src/mndDb.c
浏览文件 @
56c513cd
...
...
@@ -408,7 +408,6 @@ static int32_t mndProcessCreateDbMsg(SMnodeMsg *pMsg) {
mndReleaseUser
(
pMnode
,
pOperUser
);
if
(
code
!=
0
)
{
terrno
=
code
;
mError
(
"db:%s, failed to create since %s"
,
pCreate
->
db
,
terrstr
());
return
-
1
;
}
...
...
@@ -416,7 +415,7 @@ static int32_t mndProcessCreateDbMsg(SMnodeMsg *pMsg) {
return
TSDB_CODE_MND_ACTION_IN_PROGRESS
;
}
static
int32_t
mn
ode
SetDbCfgFromAlterDbMsg
(
SDbObj
*
pDb
,
SAlterDbMsg
*
pAlter
)
{
static
int32_t
mn
d
SetDbCfgFromAlterDbMsg
(
SDbObj
*
pDb
,
SAlterDbMsg
*
pAlter
)
{
bool
changed
=
false
;
if
(
pAlter
->
totalBlocks
>=
0
&&
pAlter
->
totalBlocks
!=
pDb
->
cfg
.
totalBlocks
)
{
...
...
@@ -522,7 +521,7 @@ static int32_t mndProcessAlterDbMsg(SMnodeMsg *pMsg) {
SDbObj
dbObj
=
{
0
};
memcpy
(
&
dbObj
,
pDb
,
sizeof
(
SDbObj
));
int32_t
code
=
mn
ode
SetDbCfgFromAlterDbMsg
(
&
dbObj
,
pAlter
);
int32_t
code
=
mn
d
SetDbCfgFromAlterDbMsg
(
&
dbObj
,
pAlter
);
if
(
code
!=
0
)
{
mndReleaseDb
(
pMnode
,
pDb
);
mError
(
"db:%s, failed to alter since %s"
,
pAlter
->
db
,
tstrerror
(
code
));
...
...
@@ -773,7 +772,7 @@ static int32_t mndGetDbMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *pMe
return
0
;
}
char
*
mn
ode
GetDbStr
(
char
*
src
)
{
char
*
mnGetDbStr
(
char
*
src
)
{
char
*
pos
=
strstr
(
src
,
TS_PATH_DELIMITER
);
if
(
pos
!=
NULL
)
++
pos
;
...
...
@@ -795,7 +794,7 @@ static int32_t mndRetrieveDbs(SMnodeMsg *pMsg, SShowObj *pShow, char *data, int3
cols
=
0
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
char
*
name
=
mn
ode
GetDbStr
(
pDb
->
name
);
char
*
name
=
mnGetDbStr
(
pDb
->
name
);
if
(
name
!=
NULL
)
{
STR_WITH_MAXSIZE_TO_VARSTR
(
pWrite
,
name
,
pShow
->
bytes
[
cols
]);
}
else
{
...
...
@@ -888,7 +887,7 @@ static int32_t mndRetrieveDbs(SMnodeMsg *pMsg, SShowObj *pShow, char *data, int3
sdbRelease
(
pSdb
,
pDb
);
}
mn
ode
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
mn
d
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
pShow
->
numOfReads
+=
numOfRows
;
return
numOfRows
;
...
...
source/dnode/mnode/impl/src/mndDnode.c
浏览文件 @
56c513cd
...
...
@@ -612,7 +612,7 @@ static int32_t mndRetrieveConfigs(SMnodeMsg *pMsg, SShowObj *pShow, char *data,
cols
++
;
}
mn
ode
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
mn
d
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
pShow
->
numOfReads
+=
numOfRows
;
return
numOfRows
;
}
...
...
@@ -734,7 +734,7 @@ static int32_t mndRetrieveDnodes(SMnodeMsg *pMsg, SShowObj *pShow, char *data, i
sdbRelease
(
pSdb
,
pDnode
);
}
mn
ode
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
mn
d
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
pShow
->
numOfReads
+=
numOfRows
;
return
numOfRows
;
...
...
source/dnode/mnode/impl/src/mndFunc.c
浏览文件 @
56c513cd
...
...
@@ -500,7 +500,7 @@ static int32_t mndRetrieveFuncs(SMnodeMsg *pMsg, SShowObj *pShow, char *data, in
sdbRelease
(
pSdb
,
pFunc
);
}
mn
ode
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
mn
d
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
pShow
->
numOfReads
+=
numOfRows
;
return
numOfRows
;
}
...
...
source/dnode/mnode/impl/src/mndMnode.c
浏览文件 @
56c513cd
...
...
@@ -457,7 +457,7 @@ static int32_t mndRetrieveMnodes(SMnodeMsg *pMsg, SShowObj *pShow, char *data, i
sdbRelease
(
pSdb
,
pMnodeObj
);
}
mn
ode
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
mn
d
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
pShow
->
numOfReads
+=
numOfRows
;
return
numOfRows
;
...
...
source/dnode/mnode/impl/src/mndProfile.c
浏览文件 @
56c513cd
...
...
@@ -252,7 +252,7 @@ static int32_t mndProcessConnectMsg(SMnodeMsg *pMsg) {
return
0
;
}
static
int32_t
mn
ode
SaveQueryStreamList
(
SConnObj
*
pConn
,
SHeartBeatMsg
*
pMsg
)
{
static
int32_t
mn
d
SaveQueryStreamList
(
SConnObj
*
pConn
,
SHeartBeatMsg
*
pMsg
)
{
pConn
->
numOfQueries
=
0
;
pConn
->
numOfStreams
=
0
;
int32_t
numOfQueries
=
htonl
(
pMsg
->
numOfQueries
);
...
...
@@ -338,7 +338,7 @@ static int32_t mndProcessHeartBeatMsg(SMnodeMsg *pMsg) {
return
-
1
;
}
mn
ode
SaveQueryStreamList
(
pConn
,
pReq
);
mn
d
SaveQueryStreamList
(
pConn
,
pReq
);
if
(
pConn
->
killed
!=
0
)
{
pRsp
->
killConnection
=
1
;
}
...
...
source/dnode/mnode/impl/src/mndShow.c
浏览文件 @
56c513cd
...
...
@@ -310,7 +310,7 @@ static bool mndCheckRetrieveFinished(SShowObj *pShow) {
return
false
;
}
void
mn
ode
VacuumResult
(
char
*
data
,
int32_t
numOfCols
,
int32_t
rows
,
int32_t
capacity
,
SShowObj
*
pShow
)
{
void
mn
d
VacuumResult
(
char
*
data
,
int32_t
numOfCols
,
int32_t
rows
,
int32_t
capacity
,
SShowObj
*
pShow
)
{
if
(
rows
<
capacity
)
{
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
memmove
(
data
+
pShow
->
offset
[
i
]
*
rows
,
data
+
pShow
->
offset
[
i
]
*
capacity
,
pShow
->
bytes
[
i
]
*
rows
);
...
...
source/dnode/mnode/impl/src/mndStb.c
浏览文件 @
56c513cd
...
...
@@ -605,7 +605,7 @@ static int32_t mndGetStbMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaMsg *pM
return
0
;
}
static
void
mn
ode
ExtractTableName
(
char
*
tableId
,
char
*
name
)
{
static
void
mn
d
ExtractTableName
(
char
*
tableId
,
char
*
name
)
{
int
pos
=
-
1
;
int
num
=
0
;
for
(
pos
=
0
;
tableId
[
pos
]
!=
0
;
++
pos
)
{
...
...
@@ -665,7 +665,7 @@ static int32_t mndRetrieveStb(SMnodeMsg *pMsg, SShowObj *pShow, char *data, int3
}
pShow
->
numOfReads
+=
numOfRows
;
mn
ode
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
mn
d
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
return
numOfRows
;
}
...
...
source/dnode/mnode/impl/src/mndUser.c
浏览文件 @
56c513cd
...
...
@@ -486,7 +486,7 @@ static int32_t mndRetrieveUsers(SMnodeMsg *pMsg, SShowObj *pShow, char *data, in
sdbRelease
(
pSdb
,
pUser
);
}
mn
ode
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
mn
d
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
pShow
->
numOfReads
+=
numOfRows
;
return
numOfRows
;
}
...
...
source/dnode/mnode/impl/src/mndVgroup.c
浏览文件 @
56c513cd
...
...
@@ -284,7 +284,7 @@ static int32_t mndRetrieveVgroups(SMnodeMsg *pMsg, SShowObj *pShow, char *data,
numOfRows
++
;
}
mn
ode
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
mn
d
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
pShow
->
numOfReads
+=
numOfRows
;
return
numOfRows
;
}
...
...
@@ -374,7 +374,7 @@ static int32_t mndRetrieveVnodes(SMnodeMsg *pMsg, SShowObj *pShow, char *data, i
sdbRelease
(
pSdb
,
pVgroup
);
}
mn
ode
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
mn
d
VacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
pShow
->
numOfReads
+=
numOfRows
;
return
numOfRows
;
}
...
...
source/dnode/mnode/impl/src/mnode.c
浏览文件 @
56c513cd
...
...
@@ -69,7 +69,7 @@ static void mndCleanupTimer(SMnode *pMnode) {
}
}
static
int32_t
mn
ode
CreateDir
(
SMnode
*
pMnode
,
const
char
*
path
)
{
static
int32_t
mn
d
CreateDir
(
SMnode
*
pMnode
,
const
char
*
path
)
{
pMnode
->
path
=
strdup
(
path
);
if
(
pMnode
->
path
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
...
...
@@ -245,7 +245,7 @@ SMnode *mndOpen(const char *path, const SMnodeOpt *pOption) {
return
NULL
;
}
int32_t
code
=
mn
ode
CreateDir
(
pMnode
,
path
);
int32_t
code
=
mn
d
CreateDir
(
pMnode
,
path
);
if
(
code
!=
0
)
{
code
=
terrno
;
mError
(
"failed to open mnode since %s"
,
terrstr
());
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录