Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
c2f62c98
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
c2f62c98
编写于
12月 29, 2020
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
TD-2429
上级
0d94b0b9
变更
8
显示空白变更内容
内联
并排
Showing
8 changed file
with
218 addition
and
19 deletion
+218
-19
src/balance/src/bnMain.c
src/balance/src/bnMain.c
+20
-5
src/inc/taosmsg.h
src/inc/taosmsg.h
+11
-10
src/mnode/inc/mnodeDef.h
src/mnode/inc/mnodeDef.h
+2
-2
src/mnode/inc/mnodeVgroup.h
src/mnode/inc/mnodeVgroup.h
+3
-0
src/mnode/src/mnodeDnode.c
src/mnode/src/mnodeDnode.c
+1
-0
src/mnode/src/mnodeVgroup.c
src/mnode/src/mnodeVgroup.c
+15
-2
src/vnode/src/vnodeMgmt.c
src/vnode/src/vnodeMgmt.c
+1
-0
tests/script/unique/dnode/lossdata.sim
tests/script/unique/dnode/lossdata.sim
+165
-0
未找到文件。
src/balance/src/bnMain.c
浏览文件 @
c2f62c98
...
@@ -224,19 +224,34 @@ static bool bnCheckVgroupReady(SVgObj *pVgroup, SVnodeGid *pRmVnode) {
...
@@ -224,19 +224,34 @@ static bool bnCheckVgroupReady(SVgObj *pVgroup, SVnodeGid *pRmVnode) {
return
false
;
return
false
;
}
}
int32_t
rmVnodeVer
=
0
;
for
(
int32_t
i
=
0
;
i
<
pVgroup
->
numOfVnodes
;
++
i
)
{
SVnodeGid
*
pVnode
=
pVgroup
->
vnodeGid
+
i
;
if
(
pVnode
==
pRmVnode
)
{
rmVnodeVer
=
mnodeGetVgidVer
(
pVnode
->
vver
);
mTrace
(
"vgId:%d, check vgroup status, vindex:%d dnode:%d status:%s role:%s vver:%d is watching"
,
pVgroup
->
vgId
,
i
,
pVnode
->
dnodeId
,
dnodeStatus
[
pVnode
->
pDnode
->
status
],
syncRole
[
pVnode
->
role
],
rmVnodeVer
);
}
}
bool
isReady
=
false
;
bool
isReady
=
false
;
for
(
int32_t
i
=
0
;
i
<
pVgroup
->
numOfVnodes
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pVgroup
->
numOfVnodes
;
++
i
)
{
SVnodeGid
*
pVnode
=
pVgroup
->
vnodeGid
+
i
;
SVnodeGid
*
pVnode
=
pVgroup
->
vnodeGid
+
i
;
if
(
pVnode
==
pRmVnode
)
continue
;
if
(
pVnode
==
pRmVnode
)
continue
;
int32_t
vver
=
mnodeGetVgidVer
(
pVnode
->
vver
);
mTrace
(
"vgId:%d, check vgroup status,
dnode:%d status:%d, vnode role:%s"
,
pVgroup
->
vgId
,
pVnode
->
pDnode
->
dnodeId
,
mTrace
(
"vgId:%d, check vgroup status,
vindex:%d dnode:%d status:%s role:%s vver:%d, rmvver:%d"
,
pVgroup
->
vgId
,
i
,
pVnode
->
pDnode
->
status
,
syncRole
[
pVnode
->
role
]
);
pVnode
->
dnodeId
,
dnodeStatus
[
pVnode
->
pDnode
->
status
],
syncRole
[
pVnode
->
role
],
vver
,
rmVnodeVer
);
if
(
pVnode
->
pDnode
->
status
==
TAOS_DN_STATUS_DROPPING
)
continue
;
if
(
pVnode
->
pDnode
->
status
==
TAOS_DN_STATUS_DROPPING
)
continue
;
if
(
pVnode
->
pDnode
->
status
==
TAOS_DN_STATUS_OFFLINE
)
continue
;
if
(
pVnode
->
pDnode
->
status
==
TAOS_DN_STATUS_OFFLINE
)
continue
;
if
(
pVnode
->
role
!=
TAOS_SYNC_ROLE_SLAVE
&&
pVnode
->
role
!=
TAOS_SYNC_ROLE_MASTER
)
continue
;
if
(
pVnode
->
role
==
TAOS_SYNC_ROLE_SLAVE
||
pVnode
->
role
==
TAOS_SYNC_ROLE_MASTER
)
{
if
(
rmVnodeVer
==
0
||
vver
>=
rmVnodeVer
)
{
isReady
=
true
;
mInfo
(
"vgId:%d, is ready for vindex:%d in dnode:%d status:%s role:%s vver:%d larger than rmvver:%d"
,
pVgroup
->
vgId
,
i
,
pVnode
->
dnodeId
,
dnodeStatus
[
pVnode
->
pDnode
->
status
],
syncRole
[
pVnode
->
role
],
vver
,
rmVnodeVer
);
}
}
isReady
=
true
;
}
}
return
isReady
;
return
isReady
;
...
@@ -256,7 +271,7 @@ static int32_t bnRemoveVnode(SVgObj *pVgroup) {
...
@@ -256,7 +271,7 @@ static int32_t bnRemoveVnode(SVgObj *pVgroup) {
mDebug
(
"vgId:%d, is not ready"
,
pVgroup
->
vgId
);
mDebug
(
"vgId:%d, is not ready"
,
pVgroup
->
vgId
);
return
-
1
;
return
-
1
;
}
else
{
}
else
{
m
Debug
(
"vgId:%d, is ready, discard dnode:%d"
,
pVgroup
->
vgId
,
pSelVnode
->
dnodeId
);
m
Info
(
"vgId:%d, is ready, discard dnode:%d"
,
pVgroup
->
vgId
,
pSelVnode
->
dnodeId
);
bnDiscardVnode
(
pVgroup
,
pSelVnode
);
bnDiscardVnode
(
pVgroup
,
pSelVnode
);
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
...
src/inc/taosmsg.h
浏览文件 @
c2f62c98
...
@@ -523,11 +523,12 @@ typedef struct {
...
@@ -523,11 +523,12 @@ typedef struct {
int64_t
totalStorage
;
int64_t
totalStorage
;
int64_t
compStorage
;
int64_t
compStorage
;
int64_t
pointsWritten
;
int64_t
pointsWritten
;
uint64_t
vnodeVersion
;
int32_t
vgCfgVersion
;
uint8_t
status
;
uint8_t
status
;
uint8_t
role
;
uint8_t
role
;
uint8_t
replica
;
uint8_t
replica
;
uint8_t
reserved
;
uint8_t
reserved
;
int32_t
vgCfgVersion
;
}
SVnodeLoad
;
}
SVnodeLoad
;
typedef
struct
{
typedef
struct
{
...
...
src/mnode/inc/mnodeDef.h
浏览文件 @
c2f62c98
...
@@ -128,8 +128,8 @@ typedef struct {
...
@@ -128,8 +128,8 @@ typedef struct {
typedef
struct
{
typedef
struct
{
int32_t
dnodeId
;
int32_t
dnodeId
;
int8_t
role
;
int8_t
role
;
int8_t
reserved
[
3
];
int8_t
vver
[
3
];
// To ensure compatibility, 3 bits are used to represent the remainder of 64 bit version
SDnodeObj
*
pDnode
;
SDnodeObj
*
pDnode
;
}
SVnodeGid
;
}
SVnodeGid
;
typedef
struct
SVgObj
{
typedef
struct
SVgObj
{
...
...
src/mnode/inc/mnodeVgroup.h
浏览文件 @
c2f62c98
...
@@ -53,6 +53,9 @@ void mnodeSendAlterVgroupMsg(SVgObj *pVgroup);
...
@@ -53,6 +53,9 @@ void mnodeSendAlterVgroupMsg(SVgObj *pVgroup);
SRpcEpSet
mnodeGetEpSetFromVgroup
(
SVgObj
*
pVgroup
);
SRpcEpSet
mnodeGetEpSetFromVgroup
(
SVgObj
*
pVgroup
);
SRpcEpSet
mnodeGetEpSetFromIp
(
char
*
ep
);
SRpcEpSet
mnodeGetEpSetFromIp
(
char
*
ep
);
int32_t
mnodeGetVgidVer
(
int8_t
*
vver
);
void
mnodeSetVgidVer
(
int8_t
*
cver
,
uint64_t
iver
);
#ifdef __cplusplus
#ifdef __cplusplus
}
}
#endif
#endif
...
...
src/mnode/src/mnodeDnode.c
浏览文件 @
c2f62c98
...
@@ -571,6 +571,7 @@ static int32_t mnodeProcessDnodeStatusMsg(SMnodeMsg *pMsg) {
...
@@ -571,6 +571,7 @@ static int32_t mnodeProcessDnodeStatusMsg(SMnodeMsg *pMsg) {
pVload
->
vgId
=
htonl
(
pVload
->
vgId
);
pVload
->
vgId
=
htonl
(
pVload
->
vgId
);
pVload
->
dbCfgVersion
=
htonl
(
pVload
->
dbCfgVersion
);
pVload
->
dbCfgVersion
=
htonl
(
pVload
->
dbCfgVersion
);
pVload
->
vgCfgVersion
=
htonl
(
pVload
->
vgCfgVersion
);
pVload
->
vgCfgVersion
=
htonl
(
pVload
->
vgCfgVersion
);
pVload
->
vnodeVersion
=
htobe64
(
pVload
->
vnodeVersion
);
SVgObj
*
pVgroup
=
mnodeGetVgroup
(
pVload
->
vgId
);
SVgObj
*
pVgroup
=
mnodeGetVgroup
(
pVload
->
vgId
);
if
(
pVgroup
==
NULL
)
{
if
(
pVgroup
==
NULL
)
{
...
...
src/mnode/src/mnodeVgroup.c
浏览文件 @
c2f62c98
...
@@ -184,6 +184,7 @@ static int32_t mnodeVgroupActionEncode(SSdbRow *pRow) {
...
@@ -184,6 +184,7 @@ static int32_t mnodeVgroupActionEncode(SSdbRow *pRow) {
for
(
int32_t
i
=
0
;
i
<
TSDB_MAX_REPLICA
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
TSDB_MAX_REPLICA
;
++
i
)
{
pTmpVgroup
->
vnodeGid
[
i
].
pDnode
=
NULL
;
pTmpVgroup
->
vnodeGid
[
i
].
pDnode
=
NULL
;
pTmpVgroup
->
vnodeGid
[
i
].
role
=
0
;
pTmpVgroup
->
vnodeGid
[
i
].
role
=
0
;
memset
(
pTmpVgroup
->
vnodeGid
[
i
].
vver
,
0
,
sizeof
(
pTmpVgroup
->
vnodeGid
[
i
].
vver
));
}
}
pRow
->
rowSize
=
tsVgUpdateSize
;
pRow
->
rowSize
=
tsVgUpdateSize
;
...
@@ -317,9 +318,10 @@ void mnodeUpdateVgroupStatus(SVgObj *pVgroup, SDnodeObj *pDnode, SVnodeLoad *pVl
...
@@ -317,9 +318,10 @@ void mnodeUpdateVgroupStatus(SVgObj *pVgroup, SDnodeObj *pDnode, SVnodeLoad *pVl
for
(
int32_t
i
=
0
;
i
<
pVgroup
->
numOfVnodes
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pVgroup
->
numOfVnodes
;
++
i
)
{
SVnodeGid
*
pVgid
=
&
pVgroup
->
vnodeGid
[
i
];
SVnodeGid
*
pVgid
=
&
pVgroup
->
vnodeGid
[
i
];
if
(
pVgid
->
pDnode
==
pDnode
)
{
if
(
pVgid
->
pDnode
==
pDnode
)
{
mTrace
(
"
dnode:%d, receive status from dnode, vgId:%d status:%s last:%s"
,
pDnode
->
dnodeId
,
pVgroup
->
vgId
,
mTrace
(
"
vgId:%d, receive vnode status from dnode:%d, status:%s last:%s vver:%"
PRIu64
,
pVgroup
->
vgId
,
syncRole
[
pVload
->
role
],
syncRole
[
pVgid
->
role
]
);
pDnode
->
dnodeId
,
syncRole
[
pVload
->
role
],
syncRole
[
pVgid
->
role
],
pVload
->
vnodeVersion
);
pVgid
->
role
=
pVload
->
role
;
pVgid
->
role
=
pVload
->
role
;
mnodeSetVgidVer
(
pVgid
->
vver
,
pVload
->
vnodeVersion
);
if
(
pVload
->
role
==
TAOS_SYNC_ROLE_MASTER
)
{
if
(
pVload
->
role
==
TAOS_SYNC_ROLE_MASTER
)
{
pVgroup
->
inUse
=
i
;
pVgroup
->
inUse
=
i
;
}
}
...
@@ -1179,3 +1181,14 @@ void mnodeSendDropAllDbVgroupsMsg(SDbObj *pDropDb) {
...
@@ -1179,3 +1181,14 @@ void mnodeSendDropAllDbVgroupsMsg(SDbObj *pDropDb) {
mInfo
(
"db:%s, all vgroups:%d drop msg is sent to dnode"
,
pDropDb
->
name
,
numOfVgroups
);
mInfo
(
"db:%s, all vgroups:%d drop msg is sent to dnode"
,
pDropDb
->
name
,
numOfVgroups
);
}
}
int32_t
mnodeGetVgidVer
(
int8_t
*
cver
)
{
int32_t
iver
=
((
int32_t
)
cver
[
0
])
*
10000
+
((
int32_t
)
cver
[
1
])
*
100
+
(
int32_t
)
cver
[
2
];
return
iver
;
}
void
mnodeSetVgidVer
(
int8_t
*
cver
,
uint64_t
iver
)
{
cver
[
0
]
=
(
int8_t
)((
int32_t
)(
iver
%
1000000
)
/
10000
);
cver
[
1
]
=
(
int8_t
)((
int32_t
)(
iver
%
100000
)
/
100
);
cver
[
2
]
=
(
int8_t
)(
iver
%
100
);
}
\ No newline at end of file
src/vnode/src/vnodeMgmt.c
浏览文件 @
c2f62c98
...
@@ -142,6 +142,7 @@ static void vnodeBuildVloadMsg(SVnodeObj *pVnode, SStatusMsg *pStatus) {
...
@@ -142,6 +142,7 @@ static void vnodeBuildVloadMsg(SVnodeObj *pVnode, SStatusMsg *pStatus) {
pLoad
->
totalStorage
=
htobe64
(
totalStorage
);
pLoad
->
totalStorage
=
htobe64
(
totalStorage
);
pLoad
->
compStorage
=
htobe64
(
compStorage
);
pLoad
->
compStorage
=
htobe64
(
compStorage
);
pLoad
->
pointsWritten
=
htobe64
(
pointsWritten
);
pLoad
->
pointsWritten
=
htobe64
(
pointsWritten
);
pLoad
->
vnodeVersion
=
htobe64
(
pVnode
->
version
);
pLoad
->
status
=
pVnode
->
status
;
pLoad
->
status
=
pVnode
->
status
;
pLoad
->
role
=
pVnode
->
role
;
pLoad
->
role
=
pVnode
->
role
;
pLoad
->
replica
=
pVnode
->
syncCfg
.
replica
;
pLoad
->
replica
=
pVnode
->
syncCfg
.
replica
;
...
...
tests/script/unique/dnode/lossdata.sim
0 → 100644
浏览文件 @
c2f62c98
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/deploy.sh -n dnode2 -i 2
system sh/deploy.sh -n dnode3 -i 3
system sh/deploy.sh -n dnode4 -i 4
system sh/deploy.sh -n dnode5 -i 5
system sh/cfg.sh -n dnode1 -c balanceInterval -v 10
system sh/cfg.sh -n dnode2 -c balanceInterval -v 10
system sh/cfg.sh -n dnode3 -c balanceInterval -v 10
system sh/cfg.sh -n dnode4 -c balanceInterval -v 10
system sh/cfg.sh -n dnode5 -c balanceInterval -v 10
system sh/cfg.sh -n dnode1 -c mnodeEqualVnodeNum -v 4
system sh/cfg.sh -n dnode2 -c mnodeEqualVnodeNum -v 4
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 4
system sh/cfg.sh -n dnode4 -c mnodeEqualVnodeNum -v 4
system sh/cfg.sh -n dnode5 -c mnodeEqualVnodeNum -v 4
system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 4
system sh/cfg.sh -n dnode2 -c maxTablesPerVnode -v 4
system sh/cfg.sh -n dnode3 -c maxTablesPerVnode -v 4
system sh/cfg.sh -n dnode4 -c maxTablesPerVnode -v 4
system sh/cfg.sh -n dnode5 -c maxTablesPerVnode -v 4
print ========== step1
system sh/exec.sh -n dnode1 -s start
sql connect
sql create dnode $hostname2
sql create dnode $hostname3
system sh/exec.sh -n dnode2 -s start
system sh/exec.sh -n dnode3 -s start
$x = 0
step1:
$x = $x + 1
sleep 1000
if $x == 10 then
return -1
endi
sql show dnodes
print dnode1 $data4_1
print dnode2 $data4_2
print dnode3 $data4_3
if $data4_1 != ready then
goto step1
endi
if $data4_2 != ready then
goto step1
endi
if $data4_3 != ready then
goto step1
endi
print ========== step2
sql create database d1 replica 2
sql create table d1.t1 (t timestamp, i int)
print ========== step2.1
sql show dnodes
print dnode1 openVnodes $data2_1
print dnode2 openVnodes $data2_2
print dnode3 openVnodes $data2_3
print dnode4 openVnodes $data2_4
if $data2_1 != 0 then
return -1
endi
if $data2_2 != 1 then
return -1
endi
if $data2_3 != 1 then
return -1
endi
print ========== step3
sql create dnode $hostname4
system sh/exec.sh -n dnode4 -s start
$x = 0
show3:
$x = $x + 1
sleep 1000
if $x == 10 then
return -1
endi
sql show dnodes
print dnode1 openVnodes $data2_1
print dnode2 openVnodes $data2_2
print dnode3 openVnodes $data2_3
print dnode4 openVnodes $data2_4
if $data2_2 != 1 then
goto show3
endi
if $data2_3 != 1 then
goto show3
endi
if $data2_4 != 0 then
goto show3
endi
sql show d1.vgroups;
print d1.vgroups $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07 $data08 $data09
print ========== step4
sql drop dnode $hostname3
$i = 0
$rowNum = 10000
while $i < $rowNum
$ts = 1500000000000 + $i
sql insert into d1.t1 values( $ts , $i )
$i = $i + 1
endw
print insert $rowNum finished
$x = 0
show4:
$x = $x + 1
sleep 1000
if $x == 40 then
return -1
endi
sql show dnodes
print dnode1 openVnodes $data2_1
print dnode2 openVnodes $data2_2
print dnode3 openVnodes $data2_3
print dnode4 openVnodes $data2_4
print dnode5 openVnodes $data2_5
if $data2_2 != 1 then
goto show4
endi
if $data2_3 != null then
goto show4
endi
if $data2_4 != 1 then
goto show4
endi
system sh/exec.sh -n dnode3 -s stop -x SIGINT
print ========== step5
sql select count(*) from d1.t1
print select count(*) from d1.t1 ==> $data00
if $data00 != $rowNum then
return -1
endi
#system sh/exec.sh -n dnode1 -s stop -x SIGINT
#system sh/exec.sh -n dnode2 -s stop -x SIGINT
#system sh/exec.sh -n dnode3 -s stop -x SIGINT
#system sh/exec.sh -n dnode4 -s stop -x SIGINT
#system sh/exec.sh -n dnode5 -s stop -x SIGINT
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录