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

rpuch pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new 35a685101f IGNITE-23180 Fix fsync setting for RocksDbSharedLogStorage 
(#4369)
35a685101f is described below

commit 35a685101fb6cf6c8833d9924969eefbe45566d7
Author: Phillippko <[email protected]>
AuthorDate: Wed Sep 11 00:03:01 2024 +0800

    IGNITE-23180 Fix fsync setting for RocksDbSharedLogStorage (#4369)
---
 .../internal/raft/storage/impl/DefaultLogStorageFactory.java  | 11 +++++++++--
 .../internal/raft/storage/impl/RocksDbSharedLogStorage.java   |  9 +++------
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git 
a/modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/impl/DefaultLogStorageFactory.java
 
b/modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/impl/DefaultLogStorageFactory.java
index 857cafe97a..1a8465da50 100644
--- 
a/modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/impl/DefaultLogStorageFactory.java
+++ 
b/modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/impl/DefaultLogStorageFactory.java
@@ -58,6 +58,7 @@ import org.rocksdb.Priority;
 import org.rocksdb.RocksDB;
 import org.rocksdb.RocksDBException;
 import org.rocksdb.WriteBatch;
+import org.rocksdb.WriteOptions;
 import org.rocksdb.util.SizeUnit;
 
 /** Implementation of the {@link LogStorageFactory} that creates {@link 
RocksDbSharedLogStorage}s. */
@@ -79,6 +80,9 @@ public class DefaultLogStorageFactory implements 
LogStorageFactory {
     /** Database options. */
     private DBOptions dbOptions;
 
+    /** Write options to use in writes to database. */
+    private WriteOptions writeOptions;
+
     /** Configuration column family handle. */
     private ColumnFamilyHandle confHandle;
 
@@ -116,6 +120,7 @@ public class DefaultLogStorageFactory implements 
LogStorageFactory {
      * @param factoryName Name of the log factory, will be used in logs.
      * @param nodeName Node name.
      * @param logPath Function to get path to the log storage.
+     * @param fsync If should fsync after each write to database.
      */
     public DefaultLogStorageFactory(String factoryName, String nodeName, Path 
logPath, boolean fsync) {
         this.factoryName = factoryName;
@@ -150,6 +155,8 @@ public class DefaultLogStorageFactory implements 
LogStorageFactory {
 
         this.dbOptions = createDbOptions();
 
+        this.writeOptions = new WriteOptions().setSync(dbOptions.useFsync());
+
         this.cfOption = createColumnFamilyOptions();
 
         this.flushListener = new LoggingRocksDbFlushListener(factoryName);
@@ -206,16 +213,16 @@ public class DefaultLogStorageFactory implements 
LogStorageFactory {
         closables.add(dbOptions);
         closables.add(cfOption);
         closables.add(flushListener);
+        closables.add(writeOptions);
 
         RocksUtils.closeAll(closables);
     }
 
-    /** {@inheritDoc} */
     @Override
     public LogStorage createLogStorage(String groupId, RaftOptions 
raftOptions) {
         assert raftOptions.isSync() == dbOptions.useFsync() : "Sync options 
must be the same";
 
-        return new RocksDbSharedLogStorage(this, db, confHandle, dataHandle, 
groupId, raftOptions, executorService);
+        return new RocksDbSharedLogStorage(this, db, confHandle, dataHandle, 
groupId, writeOptions, executorService);
     }
 
     @Override
diff --git 
a/modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/impl/RocksDbSharedLogStorage.java
 
b/modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/impl/RocksDbSharedLogStorage.java
index d58f690467..036233ac44 100644
--- 
a/modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/impl/RocksDbSharedLogStorage.java
+++ 
b/modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/impl/RocksDbSharedLogStorage.java
@@ -42,7 +42,6 @@ import org.apache.ignite.raft.jraft.entity.LogId;
 import org.apache.ignite.raft.jraft.entity.codec.LogEntryDecoder;
 import org.apache.ignite.raft.jraft.entity.codec.LogEntryEncoder;
 import org.apache.ignite.raft.jraft.option.LogStorageOptions;
-import org.apache.ignite.raft.jraft.option.RaftOptions;
 import org.apache.ignite.raft.jraft.storage.LogStorage;
 import org.apache.ignite.raft.jraft.util.BytesUtil;
 import org.apache.ignite.raft.jraft.util.Describer;
@@ -95,7 +94,7 @@ public class RocksDbSharedLogStorage implements LogStorage, 
Describer {
     /** Shared data column family handle. */
     private final ColumnFamilyHandle dataHandle;
 
-    /** Write options. */
+    /** Shared write options. */
     private final WriteOptions writeOptions;
 
     /** Start prefix. */
@@ -144,7 +143,7 @@ public class RocksDbSharedLogStorage implements LogStorage, 
Describer {
             ColumnFamilyHandle confHandle,
             ColumnFamilyHandle dataHandle,
             String groupId,
-            RaftOptions raftOptions,
+            WriteOptions writeOptions,
             Executor executor
     ) {
         Requires.requireNonNull(db);
@@ -170,8 +169,7 @@ public class RocksDbSharedLogStorage implements LogStorage, 
Describer {
         this.groupEndPrefix = groupEndPrefix(groupId);
         this.groupStartBound = new Slice(groupStartPrefix);
         this.groupEndBound = new Slice(groupEndPrefix);
-
-        this.writeOptions = new WriteOptions();
+        this.writeOptions = writeOptions;
     }
 
     /**
@@ -664,7 +662,6 @@ public class RocksDbSharedLogStorage implements LogStorage, 
Describer {
      * Called upon closing the storage.
      */
     protected void onShutdown() {
-        writeOptions.close();
         groupEndBound.close();
         groupStartBound.close();
     }

Reply via email to