Skip to content

Commit

Permalink
fix that wrong dir is creaed when using mult-dirs storage (apache#3901)
Browse files Browse the repository at this point in the history
Co-authored-by: dengzhiwen1 <dengzhiwen1@xiaomi.com>
  • Loading branch information
2 people authored and 上河 committed Mar 3, 2022
1 parent c8d89a2 commit 8c2676f
Showing 1 changed file with 16 additions and 4 deletions.
20 changes: 16 additions & 4 deletions store/src/main/java/org/apache/rocketmq/store/MappedFile.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
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;

Expand Down Expand Up @@ -80,14 +81,25 @@ public MappedFile(final String fileName, final int fileSize,

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;
Expand Down

0 comments on commit 8c2676f

Please sign in to comment.