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]>'].

Reply via email to