This is an automated email from the ASF dual-hosted git repository.
vongosling pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git
The following commit(s) were added to refs/heads/develop by this push:
new 390f735 [ROCKETMQ-321] Fix deleting files in the middle (#198)
390f735 is described below
commit 390f73582b234e7081ad4b16a93326ab0e128df0
Author: Zhendong Liu <[email protected]>
AuthorDate: Wed Dec 13 19:35:21 2017 +0800
[ROCKETMQ-321] Fix deleting files in the middle (#198)
---
.../java/org/apache/rocketmq/store/MappedFile.java | 5 ++++
.../org/apache/rocketmq/store/MappedFileQueue.java | 3 +++
.../apache/rocketmq/store/MappedFileQueueTest.java | 27 ++++++++++++++++++++++
3 files changed, 35 insertions(+)
diff --git a/store/src/main/java/org/apache/rocketmq/store/MappedFile.java
b/store/src/main/java/org/apache/rocketmq/store/MappedFile.java
index 492ac5f..0a43d47 100644
--- a/store/src/main/java/org/apache/rocketmq/store/MappedFile.java
+++ b/store/src/main/java/org/apache/rocketmq/store/MappedFile.java
@@ -570,6 +570,11 @@ public class MappedFile extends ReferenceResource {
log.info("munlock {} {} {} ret = {} time consuming = {}", address,
this.fileName, this.fileSize, ret, System.currentTimeMillis() - beginTime);
}
+ //testable
+ File getFile() {
+ return this.file;
+ }
+
@Override
public String toString() {
return this.fileName;
diff --git a/store/src/main/java/org/apache/rocketmq/store/MappedFileQueue.java
b/store/src/main/java/org/apache/rocketmq/store/MappedFileQueue.java
index 0ee1b9f..9eb3b3a 100644
--- a/store/src/main/java/org/apache/rocketmq/store/MappedFileQueue.java
+++ b/store/src/main/java/org/apache/rocketmq/store/MappedFileQueue.java
@@ -367,6 +367,9 @@ public class MappedFileQueue {
} else {
break;
}
+ } else {
+ //avoid deleting files in the middle
+ break;
}
}
}
diff --git
a/store/src/test/java/org/apache/rocketmq/store/MappedFileQueueTest.java
b/store/src/test/java/org/apache/rocketmq/store/MappedFileQueueTest.java
index dd7b229..92f1876 100644
--- a/store/src/test/java/org/apache/rocketmq/store/MappedFileQueueTest.java
+++ b/store/src/test/java/org/apache/rocketmq/store/MappedFileQueueTest.java
@@ -202,6 +202,33 @@ public class MappedFileQueueTest {
mappedFileQueue.destroy();
}
+ @Test
+ public void testDeleteExpiredFileByTime() throws Exception {
+ MappedFileQueue mappedFileQueue =
+ new MappedFileQueue("target/unit_test_store/f/", 1024, null);
+
+ for (int i = 0; i < 100; i++) {
+ MappedFile mappedFile = mappedFileQueue.getLastMappedFile(0);
+ assertThat(mappedFile).isNotNull();
+ byte[] bytes = new byte[512];
+ assertThat(mappedFile.appendMessage(bytes)).isTrue();
+ }
+
+ assertThat(mappedFileQueue.getMappedFiles().size()).isEqualTo(50);
+ long expiredTime = 100 * 1000;
+ for (int i = 0; i < mappedFileQueue.getMappedFiles().size(); i++) {
+ MappedFile mappedFile = mappedFileQueue.getMappedFiles().get(i);
+ if (i < 5) {
+ mappedFile.getFile().setLastModified(System.currentTimeMillis()
- expiredTime * 2);
+ }
+ if (i > 20) {
+ mappedFile.getFile().setLastModified(System.currentTimeMillis()
- expiredTime * 2);
+ }
+ }
+ mappedFileQueue.deleteExpiredFileByTime(expiredTime, 0, 0, false);
+ assertThat(mappedFileQueue.getMappedFiles().size()).isEqualTo(45);
+ }
+
@After
public void destory() {
File file = new File("target/unit_test_store");
--
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].