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

ltamber 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 e87f9cbb08 [ISSUE #9875] Optimize the RocksDB config shutdown logic 
when useSingleRocksDBForAllConfigs is set to true to prevent JVM crashes. 
(#9874)
e87f9cbb08 is described below

commit e87f9cbb084f080b04d37e261f632c351d1c54e7
Author: rongtong <[email protected]>
AuthorDate: Wed Nov 26 11:21:01 2025 +0800

    [ISSUE #9875] Optimize the RocksDB config shutdown logic when 
useSingleRocksDBForAllConfigs is set to true to prevent JVM crashes. (#9874)
    
    * Optimize the RocksDB config shutdown logic when 
useSingleRocksDBForAllConfigs is set to true to prevent JVM crashes.
    
    Change-Id: I309e8d13b6adc46d68146c05ffd7e026e2852ad8
    
    * Fix bug
    
    Change-Id: Ie577e32f65a3902dd60d654f80a8e7eda5790fbf
    
    ---------
    
    Co-authored-by: RongtongJin <[email protected]>
---
 .../apache/rocketmq/broker/config/v1/RocksDBConfigManager.java | 10 ++++++----
 .../broker/config/v1/RocksDBConsumerOffsetManager.java         |  2 +-
 .../apache/rocketmq/common/config/AbstractRocksDBStorage.java  |  4 ++++
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git 
a/broker/src/main/java/org/apache/rocketmq/broker/config/v1/RocksDBConfigManager.java
 
b/broker/src/main/java/org/apache/rocketmq/broker/config/v1/RocksDBConfigManager.java
index 4ebdce1315..e4827e2baf 100644
--- 
a/broker/src/main/java/org/apache/rocketmq/broker/config/v1/RocksDBConfigManager.java
+++ 
b/broker/src/main/java/org/apache/rocketmq/broker/config/v1/RocksDBConfigManager.java
@@ -38,7 +38,6 @@ public class RocksDBConfigManager {
 
     public static final Charset CHARSET = StandardCharsets.UTF_8;
 
-    public volatile boolean isStop = false;
     public ConfigRocksDBStorage configRocksDBStorage = null;
     private FlushOptions flushOptions = null;
     private volatile long lastFlushMemTableMicroSecond = 0;
@@ -72,11 +71,14 @@ public class RocksDBConfigManager {
     }
 
     public boolean init(boolean readOnly) {
-        this.isStop = false;
         this.configRocksDBStorage = ConfigRocksDBStorage.getStore(filePath, 
readOnly, compressionType);
         return this.configRocksDBStorage.start();
     }
 
+    public boolean isLoaded() {
+        return this.configRocksDBStorage != null && 
this.configRocksDBStorage.isLoaded();
+    }
+
     public boolean init() {
         return this.init(false);
     }
@@ -113,7 +115,6 @@ public class RocksDBConfigManager {
     }
 
     public boolean stop() {
-        this.isStop = true;
         ConfigRocksDBStorage.shutdown(filePath);
         if (this.flushOptions != null) {
             this.flushOptions.close();
@@ -123,7 +124,7 @@ public class RocksDBConfigManager {
 
     public void flushWAL() {
         try {
-            if (this.isStop) {
+            if (!isLoaded()) {
                 return;
             }
             if (this.configRocksDBStorage != null) {
@@ -183,4 +184,5 @@ public class RocksDBConfigManager {
 
         return configRocksDBStorage.getStatistics();
     }
+
 }
diff --git 
a/broker/src/main/java/org/apache/rocketmq/broker/config/v1/RocksDBConsumerOffsetManager.java
 
b/broker/src/main/java/org/apache/rocketmq/broker/config/v1/RocksDBConsumerOffsetManager.java
index 4f63516777..6536f90a8d 100644
--- 
a/broker/src/main/java/org/apache/rocketmq/broker/config/v1/RocksDBConsumerOffsetManager.java
+++ 
b/broker/src/main/java/org/apache/rocketmq/broker/config/v1/RocksDBConsumerOffsetManager.java
@@ -157,7 +157,7 @@ public class RocksDBConsumerOffsetManager extends 
ConsumerOffsetManager {
 
     @Override
     public synchronized void persist() {
-        if (!rocksDBConfigManager.isStop) {
+        if (rocksDBConfigManager.isLoaded()) {
             try (WriteBatch writeBatch = new WriteBatch()) {
                 for (Entry<String, ConcurrentMap<Integer, Long>> entry : 
this.offsetTable.entrySet()) {
                     putWriteBatch(writeBatch, entry.getKey(), 
entry.getValue());
diff --git 
a/common/src/main/java/org/apache/rocketmq/common/config/AbstractRocksDBStorage.java
 
b/common/src/main/java/org/apache/rocketmq/common/config/AbstractRocksDBStorage.java
index 08a103bb27..6a5a0fc11b 100644
--- 
a/common/src/main/java/org/apache/rocketmq/common/config/AbstractRocksDBStorage.java
+++ 
b/common/src/main/java/org/apache/rocketmq/common/config/AbstractRocksDBStorage.java
@@ -481,6 +481,10 @@ public abstract class AbstractRocksDBStorage {
      */
     protected abstract void preShutdown();
 
+    public boolean isLoaded() {
+        return loaded;
+    }
+
     public synchronized boolean shutdown() {
         try {
             if (!this.loaded) {

Reply via email to