You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ratis.apache.org by sh...@apache.org on 2018/11/21 18:24:26 UTC
incubator-ratis git commit: RATIS-410. Raft log entry with
stateMachineData may cause OOM. Contributed by Shashikant Banerjee.
Repository: incubator-ratis
Updated Branches:
refs/heads/master 1dd3d0bff -> 8136a972c
RATIS-410. Raft log entry with stateMachineData may cause OOM. Contributed by Shashikant Banerjee.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ratis/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ratis/commit/8136a972
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ratis/tree/8136a972
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ratis/diff/8136a972
Branch: refs/heads/master
Commit: 8136a972c178528d06f22a0dfdc6e42c3ce17c44
Parents: 1dd3d0b
Author: Shashikant Banerjee <sh...@apache.org>
Authored: Wed Nov 21 23:51:13 2018 +0530
Committer: Shashikant Banerjee <sh...@apache.org>
Committed: Wed Nov 21 23:51:13 2018 +0530
----------------------------------------------------------------------
.../java/org/apache/ratis/server/RaftServerConfigKeys.java | 9 +++++++++
.../org/apache/ratis/server/storage/SegmentedRaftLog.java | 9 ++++++++-
2 files changed, 17 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/8136a972/ratis-server/src/main/java/org/apache/ratis/server/RaftServerConfigKeys.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/main/java/org/apache/ratis/server/RaftServerConfigKeys.java b/ratis-server/src/main/java/org/apache/ratis/server/RaftServerConfigKeys.java
index 5e0017c..ed08ca9 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/RaftServerConfigKeys.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/RaftServerConfigKeys.java
@@ -165,6 +165,15 @@ public interface RaftServerConfigKeys {
static void setSync(RaftProperties properties, boolean sync) {
setBoolean(properties::setBoolean, SYNC_KEY, sync);
}
+ String CACHING_ENABLED_KEY = PREFIX + ".caching.enabled";
+ boolean CACHING_ENABLED_DEFAULT = false;
+ static boolean cachingEnabled(RaftProperties properties) {
+ return getBoolean(properties::getBoolean,
+ CACHING_ENABLED_KEY, CACHING_ENABLED_DEFAULT, getDefaultLog());
+ }
+ static void setCachingEnabled(RaftProperties properties, boolean enable) {
+ setBoolean(properties::setBoolean, CACHING_ENABLED_KEY, enable);
+ }
String SYNC_TIMEOUT_KEY = PREFIX + ".sync.timeout";
TimeDuration SYNC_TIMEOUT_DEFAULT = TimeDuration.valueOf(10, TimeUnit.SECONDS);
http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/8136a972/ratis-server/src/main/java/org/apache/ratis/server/storage/SegmentedRaftLog.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/main/java/org/apache/ratis/server/storage/SegmentedRaftLog.java b/ratis-server/src/main/java/org/apache/ratis/server/storage/SegmentedRaftLog.java
index 3aee7e1..dfd971b 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/storage/SegmentedRaftLog.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/storage/SegmentedRaftLog.java
@@ -98,6 +98,7 @@ public class SegmentedRaftLog extends RaftLog {
private final RaftLogCache cache;
private final RaftLogWorker fileLogWorker;
private final long segmentMaxSize;
+ private final boolean stateMachineCachingEnabled;
public SegmentedRaftLog(RaftPeerId selfId, RaftServerImpl server,
RaftStorage storage, long lastIndexInSnapshot, RaftProperties properties) {
@@ -117,6 +118,7 @@ public class SegmentedRaftLog extends RaftLog {
cache = new RaftLogCache(selfId, storage, properties);
this.fileLogWorker = new RaftLogWorker(selfId, stateMachine, submitUpdateCommitEvent, storage, properties);
lastCommitted.set(lastIndexInSnapshot);
+ stateMachineCachingEnabled = RaftServerConfigKeys.Log.StateMachineData.cachingEnabled(properties);
}
@Override
@@ -298,7 +300,12 @@ public class SegmentedRaftLog extends RaftLog {
// will leave a spurious entry in the cache.
CompletableFuture<Long> writeFuture =
fileLogWorker.writeLogEntry(entry).getFuture();
- cache.appendEntry(entry);
+ if (stateMachineCachingEnabled) {
+ // The stateMachineData will be cached inside the StateMachine itself.
+ cache.appendEntry(ServerProtoUtils.removeStateMachineData(entry));
+ } else {
+ cache.appendEntry(entry);
+ }
return writeFuture;
} catch (Throwable throwable) {
LOG.error(getSelfId() + "exception while appending entry with index:" +