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) {