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

lizhimin 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 c2c29c2435 [ISSUE #7545] Fix set mapped file to null cause file can 
not destroy (#7612)
c2c29c2435 is described below

commit c2c29c2435e0626cfe4f49830fbdc0d9421d82b5
Author: lizhimins <707364...@qq.com>
AuthorDate: Mon Dec 4 16:13:07 2023 +0800

    [ISSUE #7545] Fix set mapped file to null cause file can not destroy (#7612)
---
 .../org/apache/rocketmq/tieredstore/index/IndexStoreFile.java  |  2 --
 .../apache/rocketmq/tieredstore/index/IndexStoreService.java   | 10 ++++++++++
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git 
a/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/index/IndexStoreFile.java
 
b/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/index/IndexStoreFile.java
index 52a686f685..def5c8f2d0 100644
--- 
a/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/index/IndexStoreFile.java
+++ 
b/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/index/IndexStoreFile.java
@@ -457,11 +457,9 @@ public class IndexStoreFile implements IndexFile {
             this.fileStatus.set(IndexStatusEnum.SHUTDOWN);
             if (this.mappedFile != null) {
                 this.mappedFile.shutdown(TimeUnit.SECONDS.toMillis(10));
-                this.mappedFile = null;
             }
             if (this.compactMappedFile != null) {
                 this.compactMappedFile.shutdown(TimeUnit.SECONDS.toMillis(10));
-                this.compactMappedFile = null;
             }
         } catch (Exception e) {
             log.error("IndexStoreFile shutdown failed, timestamp: {}, status: 
{}", this.getTimestamp(), fileStatus.get(), e);
diff --git 
a/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/index/IndexStoreService.java
 
b/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/index/IndexStoreService.java
index 14608aa58d..e99ea0de18 100644
--- 
a/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/index/IndexStoreService.java
+++ 
b/tieredstore/src/main/java/org/apache/rocketmq/tieredstore/index/IndexStoreService.java
@@ -37,6 +37,7 @@ import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.rocketmq.common.ServiceThread;
+import org.apache.rocketmq.common.UtilAll;
 import org.apache.rocketmq.logging.org.slf4j.Logger;
 import org.apache.rocketmq.logging.org.slf4j.LoggerFactory;
 import org.apache.rocketmq.store.logfile.DefaultMappedFile;
@@ -101,6 +102,10 @@ public class IndexStoreService extends ServiceThread 
implements IndexService {
     private void recover() {
         Stopwatch stopwatch = Stopwatch.createStarted();
 
+        // delete compact file directory
+        UtilAll.deleteFile(new 
File(Paths.get(storeConfig.getStorePathRootDir(),
+            FILE_DIRECTORY_NAME, FILE_COMPACTED_DIRECTORY_NAME).toString()));
+
         // recover local
         File dir = new File(Paths.get(storeConfig.getStorePathRootDir(), 
FILE_DIRECTORY_NAME).toString());
         this.doConvertOldFormatFile(Paths.get(dir.getPath(), 
"0000").toString());
@@ -141,6 +146,10 @@ public class IndexStoreService extends ServiceThread 
implements IndexService {
 
         for (TieredFileSegment fileSegment : flatFile.getFileSegmentList()) {
             IndexFile indexFile = new IndexStoreFile(storeConfig, fileSegment);
+            IndexFile localFile = timeStoreTable.get(indexFile.getTimestamp());
+            if (localFile != null) {
+                localFile.destroy();
+            }
             timeStoreTable.put(indexFile.getTimestamp(), indexFile);
             log.info("IndexStoreService recover load remote file, timestamp: 
{}", indexFile.getTimestamp());
         }
@@ -248,6 +257,7 @@ public class IndexStoreService extends ServiceThread 
implements IndexService {
         if 
(IndexFile.IndexStatusEnum.UPLOAD.equals(indexFile.getFileStatus())) {
             log.error("IndexStoreService file status not correct, so skip, 
timestamp: {}, status: {}",
                 indexFile.getTimestamp(), indexFile.getFileStatus());
+            indexFile.destroy();
             return;
         }
 

Reply via email to