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();
}