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

yuxia pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fluss.git


The following commit(s) were added to refs/heads/main by this push:
     new a8cef413c [server] Updated Default RocksDB Log Directory to a separate 
directory (#1675)
a8cef413c is described below

commit a8cef413c044c789b001ac62592471ffd08cdf10
Author: Rion Williams <[email protected]>
AuthorDate: Thu Sep 18 07:39:58 2025 -0500

    [server] Updated Default RocksDB Log Directory to a separate directory 
(#1675)
---
 .../fluss/server/kv/rocksdb/RocksDBResourceContainer.java | 15 +++++++++++----
 .../server/kv/rocksdb/RocksDBResourceContainerTest.java   |  4 +++-
 website/docs/maintenance/configuration.md                 |  2 +-
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git 
a/fluss-server/src/main/java/org/apache/fluss/server/kv/rocksdb/RocksDBResourceContainer.java
 
b/fluss-server/src/main/java/org/apache/fluss/server/kv/rocksdb/RocksDBResourceContainer.java
index 707c45a28..d437c0878 100644
--- 
a/fluss-server/src/main/java/org/apache/fluss/server/kv/rocksdb/RocksDBResourceContainer.java
+++ 
b/fluss-server/src/main/java/org/apache/fluss/server/kv/rocksdb/RocksDBResourceContainer.java
@@ -22,6 +22,7 @@ import org.apache.fluss.config.ConfigOption;
 import org.apache.fluss.config.ConfigOptions;
 import org.apache.fluss.config.Configuration;
 import org.apache.fluss.config.ReadableConfig;
+import org.apache.fluss.utils.FileUtils;
 import org.apache.fluss.utils.IOUtils;
 
 import org.rocksdb.BlockBasedTableConfig;
@@ -42,6 +43,7 @@ import org.slf4j.LoggerFactory;
 import javax.annotation.Nullable;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -99,7 +101,7 @@ public class RocksDBResourceContainer implements 
AutoCloseable {
     }
 
     /** Gets the RocksDB {@link DBOptions} to be used for RocksDB instances. */
-    public DBOptions getDbOptions() {
+    public DBOptions getDbOptions() throws IOException {
         // initial options from common profile
         DBOptions opt = createBaseCommonDBOptions();
         handlesToClose.add(opt);
@@ -175,7 +177,8 @@ public class RocksDBResourceContainer implements 
AutoCloseable {
     }
 
     @SuppressWarnings("ConstantConditions")
-    private DBOptions setDBOptionsFromConfigurableOptions(DBOptions 
currentOptions) {
+    private DBOptions setDBOptionsFromConfigurableOptions(DBOptions 
currentOptions)
+            throws IOException {
         currentOptions.setMaxBackgroundJobs(
                 internalGetOption(ConfigOptions.KV_MAX_BACKGROUND_THREADS));
 
@@ -280,12 +283,16 @@ public class RocksDBResourceContainer implements 
AutoCloseable {
      *
      * @param dbOptions The RocksDB {@link DBOptions}.
      */
-    private void relocateDefaultDbLogDir(DBOptions dbOptions) {
+    private void relocateDefaultDbLogDir(DBOptions dbOptions) throws 
IOException {
         String logFilePath = System.getProperty("log.file");
         if (logFilePath != null) {
             File logFile = resolveFileLocation(logFilePath);
             if (logFile != null && resolveFileLocation(logFile.getParent()) != 
null) {
-                dbOptions.setDbLogDir(logFile.getParent());
+                File logFileDirectory = logFile.getParentFile();
+                File rocksDbLogDirectory = 
FileUtils.createDirectory(logFileDirectory, "rocksdb");
+                if (resolveFileLocation(rocksDbLogDirectory.getAbsolutePath()) 
!= null) {
+                    
dbOptions.setDbLogDir(rocksDbLogDirectory.getAbsolutePath());
+                }
             }
         }
     }
diff --git 
a/fluss-server/src/test/java/org/apache/fluss/server/kv/rocksdb/RocksDBResourceContainerTest.java
 
b/fluss-server/src/test/java/org/apache/fluss/server/kv/rocksdb/RocksDBResourceContainerTest.java
index 005483528..f36853cd4 100644
--- 
a/fluss-server/src/test/java/org/apache/fluss/server/kv/rocksdb/RocksDBResourceContainerTest.java
+++ 
b/fluss-server/src/test/java/org/apache/fluss/server/kv/rocksdb/RocksDBResourceContainerTest.java
@@ -108,7 +108,9 @@ class RocksDBResourceContainerTest {
         System.setProperty("log.file", logFile.getPath());
         try (RocksDBResourceContainer container = new 
RocksDBResourceContainer()) {
             
assertThat(container.getDbOptions().infoLogLevel()).isEqualTo(InfoLogLevel.INFO_LEVEL);
-            
assertThat(container.getDbOptions().dbLogDir()).isEqualTo(logFile.getParent());
+            File rocksDbLogDirectory = new File(logFile.getParent(), 
"rocksdb");
+            assertThat(container.getDbOptions().dbLogDir())
+                    .isEqualTo(rocksDbLogDirectory.getAbsolutePath());
         } finally {
             logFile.delete();
         }
diff --git a/website/docs/maintenance/configuration.md 
b/website/docs/maintenance/configuration.md
index 79ca3c347..d2fad94a1 100644
--- a/website/docs/maintenance/configuration.md
+++ b/website/docs/maintenance/configuration.md
@@ -136,7 +136,7 @@ during the Fluss cluster working.
 | kv.rocksdb.files.open                             | Integer    | -1          
                  | The maximum number of open files (per  bucket of table) 
that can be used by the DB, `-1` means no limit. The default value is `-1`.     
                                                                                
                                                                                
                                                                                
                  [...]
 | kv.rocksdb.log.max-file-size                      | MemorySize | 25mb        
                  | The maximum size of RocksDB's file used for information 
logging. If the log files becomes larger than this, a new file will be created. 
If 0, all logs will be written to one log file. The default maximum file size 
is `25MB`.                                                                      
                                                                                
                    [...]
 | kv.rocksdb.log.file-num                           | Integer    | 4           
                  | The maximum number of files RocksDB should keep for 
information logging (Default setting: 4).                                       
                                                                                
                                                                                
                                                                                
                      [...]
-| kv.rocksdb.log.dir                                | String     | (None)      
                  | The directory for RocksDB's information logging files. If 
empty (Fluss default setting), log files will be in the same directory as the 
Fluss log. If non-empty, this directory will be used and the data directory's 
absolute path will be used as the prefix of the log file name. If setting this 
option as a non-existing location, e.g `/dev/null`, RocksDB will then create 
the log under its own d [...]
+| kv.rocksdb.log.dir                                | String     | 
`${FLUSS_HOME}/log/rocksdb`               | The directory for RocksDB's 
information logging files. If empty (Fluss default setting), log files will be 
in the same directory as the Fluss log. If non-empty, this directory will be 
used and the data directory's absolute path will be used as the prefix of the 
log file name. If setting this option as a non-existing location, e.g 
`/dev/null`, RocksDB will then create the log und [...]
 | kv.rocksdb.log.level                              | Enum       | INFO_LEVEL  
                  | The specified information logging level for RocksDB. 
Candidate log level is `DEBUG_LEVEL`, `INFO_LEVEL`, `WARN_LEVEL`, 
`ERROR_LEVEL`, `FATAL_LEVEL`, `HEADER_LEVEL`, NUM_INFO_LOG_LEVELS, . If unset, 
Fluss will use INFO_LEVEL. Note: RocksDB info logs will not be written to the 
Fluss's tablet server logs and there is no rolling strategy, unless you 
configure `kv.rocksdb.log.dir`, `kv.rocksdb.l [...]
 | kv.rocksdb.write-batch-size                       | MemorySize | 2mb         
                  | The max size of the consumed memory for RocksDB batch 
write, will flush just based on item count if this config set to 0.             
                                                                                
                                                                                
                                                                                
                    [...]
 | kv.rocksdb.compaction.style                       | Enum       | LEVEL       
                  | The specified compaction style for DB. Candidate compaction 
style is LEVEL, FIFO, UNIVERSAL, or NONE, and Fluss chooses `LEVEL` as default 
style.                                                                          
                                                                                
                                                                                
               [...]

Reply via email to