Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Apache RocketMQ
Rocketmq
提交
44f696c3
R
Rocketmq
项目概览
Apache RocketMQ
/
Rocketmq
上一次同步 接近 3 年
通知
255
Star
16136
Fork
68
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rocketmq
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
44f696c3
编写于
12月 04, 2018
作者:
D
dongeforever
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add deleting test for mixed commitlog
上级
927385be
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
93 addition
and
6 deletion
+93
-6
store/src/main/java/org/apache/rocketmq/store/dledger/DLedgerCommitLog.java
...a/org/apache/rocketmq/store/dledger/DLedgerCommitLog.java
+25
-4
store/src/test/java/org/apache/rocketmq/store/dledger/DLedgerCommitlogTest.java
...g/apache/rocketmq/store/dledger/DLedgerCommitlogTest.java
+9
-2
store/src/test/java/org/apache/rocketmq/store/dledger/MessageStoreTestBase.java
...g/apache/rocketmq/store/dledger/MessageStoreTestBase.java
+1
-0
store/src/test/java/org/apache/rocketmq/store/dledger/MixCommitlogTest.java
...a/org/apache/rocketmq/store/dledger/MixCommitlogTest.java
+58
-0
未找到文件。
store/src/main/java/org/apache/rocketmq/store/dledger/DLedgerCommitLog.java
浏览文件 @
44f696c3
...
...
@@ -30,6 +30,7 @@ import io.openmessaging.storage.dledger.store.file.SelectMmapBufferResult;
import
java.nio.ByteBuffer
;
import
java.util.HashMap
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.atomic.AtomicBoolean
;
import
org.apache.rocketmq.common.UtilAll
;
import
org.apache.rocketmq.common.message.MessageAccessor
;
import
org.apache.rocketmq.common.message.MessageConst
;
...
...
@@ -70,6 +71,7 @@ public class DLedgerCommitLog extends CommitLog {
//The old commitlog should be deleted before the dledger commitlog
private
final
boolean
originalDledgerEnableForceClean
;
private
final
AtomicBoolean
hasSetOriginalDledgerEnableForceClean
=
new
AtomicBoolean
(
false
);
private
boolean
isInrecoveringOldCommitlog
=
false
;
...
...
@@ -171,12 +173,28 @@ public class DLedgerCommitLog extends CommitLog {
final
long
intervalForcibly
,
final
boolean
cleanImmediately
)
{
int
count
=
super
.
deleteExpiredFile
(
expiredTime
,
deleteFilesInterval
,
intervalForcibly
,
cleanImmediately
);
if
(
mappedFileQueue
.
getMappedFiles
().
isEmpty
())
{
dLedgerConfig
.
setEnableDiskForceClean
(
originalDledgerEnableForceClean
);
if
(
hasSetOriginalDledgerEnableForceClean
.
compareAndSet
(
false
,
true
))
{
dLedgerConfig
.
setEnableDiskForceClean
(
originalDledgerEnableForceClean
);
}
//To prevent too much log in defaultMessageStore
return
Integer
.
MAX_VALUE
;
}
int
count
=
super
.
deleteExpiredFile
(
expiredTime
,
deleteFilesInterval
,
intervalForcibly
,
cleanImmediately
);
if
(
count
>
0
||
mappedFileQueue
.
getMappedFiles
().
size
()
!=
1
)
{
return
count
;
}
//the old logic will keep the last file, here to delete it
MappedFile
mappedFile
=
mappedFileQueue
.
getLastMappedFile
();
log
.
info
(
"Try to delete the last old commitlog file {}"
,
mappedFile
.
getFileName
());
long
liveMaxTimestamp
=
mappedFile
.
getLastModifiedTimestamp
()
+
expiredTime
;
if
(
System
.
currentTimeMillis
()
>=
liveMaxTimestamp
||
cleanImmediately
)
{
while
(!
mappedFile
.
destroy
(
10
*
1000
))
{
io
.
openmessaging
.
storage
.
dledger
.
utils
.
UtilAll
.
sleep
(
1000
);
}
mappedFileQueue
.
getMappedFiles
().
remove
(
mappedFile
);
}
//return 1 to prevent too much log in defaultMessageStore
return
count
>
0
?
count
:
1
;
return
1
;
}
...
...
@@ -238,6 +256,8 @@ public class DLedgerCommitLog extends CommitLog {
if
(
mappedFile
!=
null
)
{
dLedgerConfig
.
setEnableDiskForceClean
(
false
);
dividedCommitlogOffset
=
mappedFile
.
getFileFromOffset
()
+
mappedFile
.
getFileSize
();
}
else
{
hasSetOriginalDledgerEnableForceClean
.
set
(
true
);
}
return
;
}
...
...
@@ -251,6 +271,7 @@ public class DLedgerCommitLog extends CommitLog {
isInrecoveringOldCommitlog
=
false
;
MappedFile
mappedFile
=
this
.
mappedFileQueue
.
getLastMappedFile
();
if
(
mappedFile
==
null
)
{
hasSetOriginalDledgerEnableForceClean
.
set
(
true
);
return
;
}
ByteBuffer
byteBuffer
=
mappedFile
.
sliceByteBuffer
();
...
...
store/src/test/java/org/apache/rocketmq/store/dledger/DLedgerCommitlogTest.java
浏览文件 @
44f696c3
...
...
@@ -19,33 +19,40 @@ public class DLedgerCommitlogTest extends MessageStoreTestBase {
@Test
public
void
testRe
putOffset
()
throws
Exception
{
public
void
testRe
cover
()
throws
Exception
{
String
base
=
createBaseDir
();
String
peers
=
String
.
format
(
"n0-localhost:%d"
,
nextPort
());
String
group
=
UUID
.
randomUUID
().
toString
();
String
topic
=
UUID
.
randomUUID
().
toString
();
{
DefaultMessageStore
messageStore
=
createDledgerMessageStore
(
base
,
group
,
"n0"
,
peers
,
null
,
false
);
Thread
.
sleep
(
1000
);
String
topic
=
UUID
.
randomUUID
().
toString
();
doPutMessages
(
messageStore
,
topic
,
0
,
1000
,
0
);
Thread
.
sleep
(
100
);
Assert
.
assertEquals
(
0
,
messageStore
.
getMinOffsetInQueue
(
topic
,
0
));
Assert
.
assertEquals
(
1000
,
messageStore
.
getMaxOffsetInQueue
(
topic
,
0
));
Assert
.
assertEquals
(
0
,
messageStore
.
dispatchBehindBytes
());
doGetMessages
(
messageStore
,
topic
,
0
,
1000
,
0
);
messageStore
.
shutdown
();
}
{
//normal recover
DefaultMessageStore
messageStore
=
createDledgerMessageStore
(
base
,
group
,
"n0"
,
peers
,
null
,
false
);
Assert
.
assertEquals
(
0
,
messageStore
.
getMinOffsetInQueue
(
topic
,
0
));
Assert
.
assertEquals
(
1000
,
messageStore
.
getMaxOffsetInQueue
(
topic
,
0
));
Assert
.
assertEquals
(
0
,
messageStore
.
dispatchBehindBytes
());
doGetMessages
(
messageStore
,
topic
,
0
,
1000
,
0
);
messageStore
.
shutdown
();
}
{
//abnormal recover
DefaultMessageStore
messageStore
=
createDledgerMessageStore
(
base
,
group
,
"n0"
,
peers
,
null
,
true
);
Assert
.
assertEquals
(
0
,
messageStore
.
getMinOffsetInQueue
(
topic
,
0
));
Assert
.
assertEquals
(
1000
,
messageStore
.
getMaxOffsetInQueue
(
topic
,
0
));
Assert
.
assertEquals
(
0
,
messageStore
.
dispatchBehindBytes
());
doGetMessages
(
messageStore
,
topic
,
0
,
1000
,
0
);
messageStore
.
shutdown
();
}
}
...
...
store/src/test/java/org/apache/rocketmq/store/dledger/MessageStoreTestBase.java
浏览文件 @
44f696c3
...
...
@@ -99,6 +99,7 @@ public class MessageStoreTestBase extends StoreTestBase {
Assert
.
assertTrue
(!
getMessageResult
.
getMessageBufferList
().
isEmpty
());
MessageExt
messageExt
=
MessageDecoder
.
decode
(
getMessageResult
.
getMessageBufferList
().
get
(
0
));
Assert
.
assertEquals
(
beginLogicsOffset
+
i
,
messageExt
.
getQueueOffset
());
getMessageResult
.
release
();
}
}
...
...
store/src/test/java/org/apache/rocketmq/store/dledger/MixCommitlogTest.java
浏览文件 @
44f696c3
...
...
@@ -65,6 +65,64 @@ public class MixCommitlogTest extends MessageStoreTestBase {
doGetMessages
(
recoverDledgerStore
,
topic
,
0
,
3000
,
0
);
recoverDledgerStore
.
shutdown
();
}
}
@Test
public
void
testDeleteExpiredFiles
()
throws
Exception
{
String
base
=
createBaseDir
();
String
topic
=
UUID
.
randomUUID
().
toString
();
String
peers
=
String
.
format
(
"n0-localhost:%d"
,
nextPort
());
String
group
=
UUID
.
randomUUID
().
toString
();
long
dividedOffset
;
{
DefaultMessageStore
originalStore
=
createMessageStore
(
base
,
false
);
doPutMessages
(
originalStore
,
topic
,
0
,
1000
,
0
);
Thread
.
sleep
(
500
);
Assert
.
assertEquals
(
0
,
originalStore
.
getMinOffsetInQueue
(
topic
,
0
));
Assert
.
assertEquals
(
1000
,
originalStore
.
getMaxOffsetInQueue
(
topic
,
0
));
Assert
.
assertEquals
(
0
,
originalStore
.
dispatchBehindBytes
());
dividedOffset
=
originalStore
.
getCommitLog
().
getMaxOffset
();
dividedOffset
=
dividedOffset
-
dividedOffset
%
originalStore
.
getMessageStoreConfig
().
getMapedFileSizeCommitLog
()
+
originalStore
.
getMessageStoreConfig
().
getMapedFileSizeCommitLog
();
originalStore
.
shutdown
();
}
long
maxPhysicalOffset
;
{
DefaultMessageStore
dledgerStore
=
createDledgerMessageStore
(
base
,
group
,
"n0"
,
peers
,
null
,
true
);
DLedgerCommitLog
dLedgerCommitLog
=
(
DLedgerCommitLog
)
dledgerStore
.
getCommitLog
();
Assert
.
assertFalse
(
dLedgerCommitLog
.
getdLedgerServer
().
getdLedgerConfig
().
isEnableDiskForceClean
());
Assert
.
assertEquals
(
dividedOffset
,
dLedgerCommitLog
.
getDividedCommitlogOffset
());
Thread
.
sleep
(
2000
);
doPutMessages
(
dledgerStore
,
topic
,
0
,
1000
,
1000
);
Thread
.
sleep
(
500
);
Assert
.
assertEquals
(
0
,
dledgerStore
.
getMinOffsetInQueue
(
topic
,
0
));
Assert
.
assertEquals
(
2000
,
dledgerStore
.
getMaxOffsetInQueue
(
topic
,
0
));
Assert
.
assertEquals
(
0
,
dledgerStore
.
dispatchBehindBytes
());
Assert
.
assertEquals
(
0
,
dledgerStore
.
getMinPhyOffset
());
maxPhysicalOffset
=
dledgerStore
.
getMaxPhyOffset
();
doGetMessages
(
dledgerStore
,
topic
,
0
,
2000
,
0
);
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
dledgerStore
.
getCommitLog
().
deleteExpiredFile
(
System
.
currentTimeMillis
(),
0
,
0
,
true
);
}
Assert
.
assertEquals
(
dividedOffset
,
dledgerStore
.
getMinPhyOffset
());
Assert
.
assertEquals
(
maxPhysicalOffset
,
dledgerStore
.
getMaxPhyOffset
());
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
Assert
.
assertEquals
(
Integer
.
MAX_VALUE
,
dledgerStore
.
getCommitLog
().
deleteExpiredFile
(
System
.
currentTimeMillis
(),
0
,
0
,
true
));
}
Assert
.
assertEquals
(
dividedOffset
,
dledgerStore
.
getMinPhyOffset
());
Assert
.
assertEquals
(
maxPhysicalOffset
,
dledgerStore
.
getMaxPhyOffset
());
Assert
.
assertTrue
(
dLedgerCommitLog
.
getdLedgerServer
().
getdLedgerConfig
().
isEnableDiskForceClean
());
dLedgerCommitLog
.
getdLedgerServer
().
getdLedgerConfig
().
setEnableDiskForceClean
(
false
);
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
Assert
.
assertEquals
(
Integer
.
MAX_VALUE
,
dledgerStore
.
getCommitLog
().
deleteExpiredFile
(
System
.
currentTimeMillis
(),
0
,
0
,
true
));
}
//should not change the value
Assert
.
assertFalse
(
dLedgerCommitLog
.
getdLedgerServer
().
getdLedgerConfig
().
isEnableDiskForceClean
());
doGetMessages
(
dledgerStore
,
topic
,
0
,
1000
,
1000
);
dledgerStore
.
shutdown
();
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录