You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by du...@apache.org on 2022/03/03 02:41:28 UTC

[rocketmq] branch develop updated: fix that wrong dir is creaed when using mult-dirs storage (#3901)

This is an automated email from the ASF dual-hosted git repository.

duhengforever 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 3ccf651  fix that wrong dir is creaed when using mult-dirs storage (#3901)
3ccf651 is described below

commit 3ccf651ebf7c82cb50d27c0c25017a34ebb68007
Author: cserwen <cs...@163.com>
AuthorDate: Thu Mar 3 10:41:15 2022 +0800

    fix that wrong dir is creaed when using mult-dirs storage (#3901)
    
    Co-authored-by: dengzhiwen1 <de...@xiaomi.com>
---
 .../java/org/apache/rocketmq/store/MappedFile.java   | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

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 774896b..b46e7ca 100644
--- a/store/src/main/java/org/apache/rocketmq/store/MappedFile.java
+++ b/store/src/main/java/org/apache/rocketmq/store/MappedFile.java
@@ -39,6 +39,7 @@ import org.apache.rocketmq.common.message.MessageExt;
 import org.apache.rocketmq.common.message.MessageExtBatch;
 import org.apache.rocketmq.store.CommitLog.PutMessageContext;
 import org.apache.rocketmq.store.config.FlushDiskType;
+import org.apache.rocketmq.store.config.MessageStoreConfig;
 import org.apache.rocketmq.store.util.LibC;
 import sun.nio.ch.DirectBuffer;
 
@@ -80,14 +81,25 @@ public class MappedFile extends ReferenceResource {
 
     public static void ensureDirOK(final String dirName) {
         if (dirName != null) {
-            File f = new File(dirName);
-            if (!f.exists()) {
-                boolean result = f.mkdirs();
-                log.info(dirName + " mkdir " + (result ? "OK" : "Failed"));
+            if (dirName.contains(MessageStoreConfig.MULTI_PATH_SPLITTER)) {
+                String[] dirs = dirName.trim().split(MessageStoreConfig.MULTI_PATH_SPLITTER);
+                for (String dir : dirs) {
+                    createDirIfNotExist(dir);
+                }
+            } else {
+                createDirIfNotExist(dirName);
             }
         }
     }
 
+    private static void  createDirIfNotExist(String dirName) {
+        File f = new File(dirName);
+        if (!f.exists()) {
+            boolean result = f.mkdirs();
+            log.info(dirName + " mkdir " + (result ? "OK" : "Failed"));
+        }
+    }
+
     public static void clean(final ByteBuffer buffer) {
         if (buffer == null || !buffer.isDirect() || buffer.capacity() == 0)
             return;