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

jinrongtong 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 9654299e77 [ISSUE #9412] Flush bak metrics file before deleting the 
original file (#9413)
9654299e77 is described below

commit 9654299e778b7f0cdc95ce2dd134075084704835
Author: Ji Juntao <juntao....@alibaba-inc.com>
AuthorDate: Tue May 20 09:47:20 2025 +0800

    [ISSUE #9412] Flush bak metrics file before deleting the original file 
(#9413)
    
    * flush bak file before delete original file.
    
    * timer metrics.
    
    * english comment.
---
 .../apache/rocketmq/broker/transaction/TransactionMetrics.java    | 8 ++++++++
 common/src/main/java/org/apache/rocketmq/common/BrokerConfig.java | 2 +-
 .../main/java/org/apache/rocketmq/store/timer/TimerMetrics.java   | 8 ++++++++
 3 files changed, 17 insertions(+), 1 deletion(-)

diff --git 
a/broker/src/main/java/org/apache/rocketmq/broker/transaction/TransactionMetrics.java
 
b/broker/src/main/java/org/apache/rocketmq/broker/transaction/TransactionMetrics.java
index ad30c73c60..28fff6a90c 100644
--- 
a/broker/src/main/java/org/apache/rocketmq/broker/transaction/TransactionMetrics.java
+++ 
b/broker/src/main/java/org/apache/rocketmq/broker/transaction/TransactionMetrics.java
@@ -25,7 +25,11 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
+import java.nio.channels.FileChannel;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
@@ -209,6 +213,10 @@ public class TransactionMetrics extends ConfigManager {
             File configFile = new File(config);
             if (configFile.exists()) {
                 Files.copy(configFile, new File(backup));
+                Path backupPath = Paths.get(backup);
+                try (FileChannel channel = FileChannel.open(backupPath, 
StandardOpenOption.WRITE)) {
+                    channel.force(true); // force flush before deleting 
original file.
+                }
                 configFile.delete();
             }
 
diff --git a/common/src/main/java/org/apache/rocketmq/common/BrokerConfig.java 
b/common/src/main/java/org/apache/rocketmq/common/BrokerConfig.java
index a49bd00473..b607985e34 100644
--- a/common/src/main/java/org/apache/rocketmq/common/BrokerConfig.java
+++ b/common/src/main/java/org/apache/rocketmq/common/BrokerConfig.java
@@ -287,7 +287,7 @@ public class BrokerConfig extends BrokerIdentity {
     @ImportantField
     private long transactionCheckInterval = 30 * 1000;
 
-    private long transactionMetricFlushInterval = 3 * 1000;
+    private long transactionMetricFlushInterval = 10 * 1000;
 
     /**
      * transaction batch op message
diff --git 
a/store/src/main/java/org/apache/rocketmq/store/timer/TimerMetrics.java 
b/store/src/main/java/org/apache/rocketmq/store/timer/TimerMetrics.java
index 0d80dae3e3..03bcc6e8b9 100644
--- a/store/src/main/java/org/apache/rocketmq/store/timer/TimerMetrics.java
+++ b/store/src/main/java/org/apache/rocketmq/store/timer/TimerMetrics.java
@@ -25,7 +25,11 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
+import java.nio.channels.FileChannel;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -263,6 +267,10 @@ public class TimerMetrics extends ConfigManager {
             File configFile = new File(config);
             if (configFile.exists()) {
                 Files.copy(configFile, new File(backup));
+                Path backupPath = Paths.get(backup);
+                try (FileChannel channel = FileChannel.open(backupPath, 
StandardOpenOption.WRITE)) {
+                    channel.force(true); // force flush before deleting 
original file.
+                }
                 configFile.delete();
             }
 

Reply via email to