Repository: incubator-ratis Updated Branches: refs/heads/master 615e76724 -> 6a755e66f
RATIS-37. Change RaftServerConfigKeys to use SizeInBytes and TimeDuration. Contributed by Tsz Wo Nicholas Sze. Project: http://git-wip-us.apache.org/repos/asf/incubator-ratis/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ratis/commit/6a755e66 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ratis/tree/6a755e66 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ratis/diff/6a755e66 Branch: refs/heads/master Commit: 6a755e66f89a8e100403cb6af5eb08b9ead3c324 Parents: 615e767 Author: Jing Zhao <[email protected]> Authored: Thu Mar 9 16:33:02 2017 -0800 Committer: Jing Zhao <[email protected]> Committed: Thu Mar 9 16:33:02 2017 -0800 ---------------------------------------------------------------------- .../org/apache/ratis/util/TimeDuration.java | 4 + .../java/org/apache/ratis/TestBatchAppend.java | 9 +- .../org/apache/ratis/TestRestartRaftPeer.java | 5 +- .../ratis/server/RaftServerConfigKeys.java | 155 +++++++++---------- .../apache/ratis/server/impl/LeaderState.java | 13 +- .../apache/ratis/server/impl/LogAppender.java | 9 +- .../ratis/server/impl/RaftServerImpl.java | 5 +- .../apache/ratis/server/impl/ServerState.java | 2 +- .../ratis/server/impl/StateMachineUpdater.java | 4 +- .../ratis/server/storage/LogOutputStream.java | 6 +- .../ratis/server/storage/RaftLogWorker.java | 2 +- .../ratis/server/storage/RaftStorage.java | 2 +- .../ratis/server/storage/SegmentedRaftLog.java | 2 +- .../java/org/apache/ratis/MiniRaftCluster.java | 8 +- .../java/org/apache/ratis/RaftTestUtil.java | 26 ++-- .../impl/RaftReconfigurationBaseTest.java | 2 +- .../simulation/SimulatedRequestReply.java | 7 +- .../TestNotLeaderExceptionWithSimulation.java | 3 - .../server/storage/TestRaftLogReadWrite.java | 12 +- .../server/storage/TestRaftLogSegment.java | 39 +++-- .../ratis/server/storage/TestRaftStorage.java | 3 +- .../server/storage/TestSegmentedRaftLog.java | 10 +- .../statemachine/RaftSnapshotBaseTest.java | 4 +- .../ratis/statemachine/TestStateMachine.java | 2 +- 24 files changed, 160 insertions(+), 174 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-common/src/main/java/org/apache/ratis/util/TimeDuration.java ---------------------------------------------------------------------- diff --git a/ratis-common/src/main/java/org/apache/ratis/util/TimeDuration.java b/ratis-common/src/main/java/org/apache/ratis/util/TimeDuration.java index d57c115..8a3dc18 100644 --- a/ratis-common/src/main/java/org/apache/ratis/util/TimeDuration.java +++ b/ratis-common/src/main/java/org/apache/ratis/util/TimeDuration.java @@ -111,6 +111,10 @@ public class TimeDuration implements Comparable<TimeDuration> { return targetUnit.convert(duration, unit); } + public int toInt(TimeUnit targetUnit) { + return Math.toIntExact(toLong(targetUnit)); + } + public boolean isNegative() { return duration < 0; } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-examples/src/test/java/org/apache/ratis/TestBatchAppend.java ---------------------------------------------------------------------- diff --git a/ratis-examples/src/test/java/org/apache/ratis/TestBatchAppend.java b/ratis-examples/src/test/java/org/apache/ratis/TestBatchAppend.java index c9ee721..cc69984 100644 --- a/ratis-examples/src/test/java/org/apache/ratis/TestBatchAppend.java +++ b/ratis-examples/src/test/java/org/apache/ratis/TestBatchAppend.java @@ -21,6 +21,7 @@ import org.apache.log4j.Level; import org.apache.ratis.RaftTestUtil.SimpleMessage; import org.apache.ratis.client.RaftClient; import org.apache.ratis.conf.RaftProperties; +import org.apache.ratis.util.SizeInBytes; import org.apache.ratis.examples.RaftExamplesTestUtil; import org.apache.ratis.protocol.RaftPeerId; import org.apache.ratis.server.RaftServerConfigKeys; @@ -48,8 +49,6 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; import java.util.stream.Stream; -import static org.apache.ratis.server.RaftServerConfigKeys.KB; - /** * Enable raft.server.log.appender.batch.enabled and test LogAppender */ @@ -67,11 +66,11 @@ public class TestBatchAppend { RaftProperties prop = new RaftProperties(); prop.setClass(MiniRaftCluster.STATEMACHINE_CLASS_KEY, SimpleStateMachine4Testing.class, StateMachine.class); - RaftServerConfigKeys.Log.setSegmentSizeMax(prop::setLong, 8*KB); + RaftServerConfigKeys.Log.setSegmentSizeMax(prop, SizeInBytes.valueOf("8KB")); // enable batch appending - RaftServerConfigKeys.Log.Appender.setBatchEnabled(prop::setBoolean, true); + RaftServerConfigKeys.Log.Appender.setBatchEnabled(prop, true); // set batch appending buffer size to 4KB - RaftServerConfigKeys.Log.Appender.setBufferCapacity(prop::setInt, 4*KB); + RaftServerConfigKeys.Log.Appender.setBufferCapacity(prop, SizeInBytes.valueOf("4KB")); return RaftExamplesTestUtil.getMiniRaftClusters(prop, 3); } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-examples/src/test/java/org/apache/ratis/TestRestartRaftPeer.java ---------------------------------------------------------------------- diff --git a/ratis-examples/src/test/java/org/apache/ratis/TestRestartRaftPeer.java b/ratis-examples/src/test/java/org/apache/ratis/TestRestartRaftPeer.java index a5b7d69..34aec44 100644 --- a/ratis-examples/src/test/java/org/apache/ratis/TestRestartRaftPeer.java +++ b/ratis-examples/src/test/java/org/apache/ratis/TestRestartRaftPeer.java @@ -21,6 +21,7 @@ import org.apache.log4j.Level; import org.apache.ratis.RaftTestUtil.SimpleMessage; import org.apache.ratis.client.RaftClient; import org.apache.ratis.conf.RaftProperties; +import org.apache.ratis.util.SizeInBytes; import org.apache.ratis.examples.RaftExamplesTestUtil; import org.apache.ratis.protocol.RaftPeerId; import org.apache.ratis.server.RaftServerConfigKeys; @@ -43,8 +44,6 @@ import java.io.IOException; import java.util.Arrays; import java.util.Collection; -import static org.apache.ratis.server.RaftServerConfigKeys.KB; - /** * Test restarting raft peers. */ @@ -63,7 +62,7 @@ public class TestRestartRaftPeer { RaftProperties prop = new RaftProperties(); prop.setClass(MiniRaftCluster.STATEMACHINE_CLASS_KEY, SimpleStateMachine4Testing.class, StateMachine.class); - RaftServerConfigKeys.Log.setSegmentSizeMax(prop::setLong, 8*KB); + RaftServerConfigKeys.Log.setSegmentSizeMax(prop, SizeInBytes.valueOf("8KB")); return RaftExamplesTestUtil.getMiniRaftClusters(prop, 3); } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/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 74c56a5..66e06e0 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 @@ -17,25 +17,24 @@ */ package org.apache.ratis.server; -import org.apache.ratis.conf.ConfUtils; +import org.apache.ratis.conf.RaftProperties; +import org.apache.ratis.util.SizeInBytes; +import org.apache.ratis.util.TimeDuration; -import java.util.function.BiConsumer; -import java.util.function.BiFunction; +import java.util.concurrent.TimeUnit; -import static org.apache.ratis.conf.ConfUtils.requireMin; +import static org.apache.ratis.conf.ConfUtils.*; public interface RaftServerConfigKeys { String PREFIX = "raft.server"; - int KB = 1024; - int MB = 1024*KB; String STORAGE_DIR_KEY = PREFIX + ".storage.dir"; String STORAGE_DIR_DEFAULT = "file:///tmp/raft-server/"; - static String storageDir(BiFunction<String, String, String> getTrimmed) { - return ConfUtils.get(getTrimmed, STORAGE_DIR_KEY, STORAGE_DIR_DEFAULT); + static String storageDir(RaftProperties properties) { + return get(properties::getTrimmed, STORAGE_DIR_KEY, STORAGE_DIR_DEFAULT); } - static void setStorageDir(BiConsumer<String, String> setString, String storageDir) { - ConfUtils.set(setString, STORAGE_DIR_KEY, storageDir); + static void setStorageDir(RaftProperties properties, String storageDir) { + set(properties::set, STORAGE_DIR_KEY, storageDir); } /** @@ -45,12 +44,12 @@ public interface RaftServerConfigKeys { */ String STAGING_CATCHUP_GAP_KEY = PREFIX + ".staging.catchup.gap"; int STAGING_CATCHUP_GAP_DEFAULT = 1000; // increase this number when write throughput is high - static int stagingCatchupGap(BiFunction<String, Integer, Integer> getInt) { - return ConfUtils.getInt(getInt, + static int stagingCatchupGap(RaftProperties properties) { + return getInt(properties::getInt, STAGING_CATCHUP_GAP_KEY, STAGING_CATCHUP_GAP_DEFAULT, requireMin(0)); } - static void setStagingCatchupGap(BiConsumer<String, Integer> setInt, int stagingCatchupGap) { - ConfUtils.setInt(setInt, STAGING_CATCHUP_GAP_KEY, stagingCatchupGap); + static void setStagingCatchupGap(RaftProperties properties, int stagingCatchupGap) { + setInt(properties::setInt, STAGING_CATCHUP_GAP_KEY, stagingCatchupGap); } interface Log { @@ -58,48 +57,47 @@ public interface RaftServerConfigKeys { String USE_MEMORY_KEY = PREFIX + ".use.memory"; boolean USE_MEMORY_DEFAULT = false; - static boolean useMemory(BiFunction<String, Boolean, Boolean> getBool) { - return ConfUtils.getBoolean(getBool, USE_MEMORY_KEY, USE_MEMORY_DEFAULT); + static boolean useMemory(RaftProperties properties) { + return getBoolean(properties::getBoolean, USE_MEMORY_KEY, USE_MEMORY_DEFAULT); } - static void setUseMemory(BiConsumer<String, Boolean> setLong, boolean useMemory) { - ConfUtils.setBoolean(setLong, USE_MEMORY_KEY, useMemory); + static void setUseMemory(RaftProperties properties, boolean useMemory) { + setBoolean(properties::setBoolean, USE_MEMORY_KEY, useMemory); } String SEGMENT_SIZE_MAX_KEY = PREFIX + ".segment.size.max"; - long SEGMENT_SIZE_MAX_DEFAULT = 8*MB; - static long segmentSizeMax(BiFunction<String, Long, Long> getLong) { - return ConfUtils.getLong(getLong, - SEGMENT_SIZE_MAX_KEY, SEGMENT_SIZE_MAX_DEFAULT, requireMin(0L)); + SizeInBytes SEGMENT_SIZE_MAX_DEFAULT = SizeInBytes.valueOf("8MB"); + static SizeInBytes segmentSizeMax(RaftProperties properties) { + return getSizeInBytes(properties::getSizeInBytes, + SEGMENT_SIZE_MAX_KEY, SEGMENT_SIZE_MAX_DEFAULT); } - static void setSegmentSizeMax( - BiConsumer<String, Long> setLong, long segmentSizeMax) { - ConfUtils.setLong(setLong, SEGMENT_SIZE_MAX_KEY, segmentSizeMax); + static void setSegmentSizeMax(RaftProperties properties, SizeInBytes segmentSizeMax) { + setSizeInBytes(properties::set, SEGMENT_SIZE_MAX_KEY, segmentSizeMax); } String PREALLOCATED_SIZE_KEY = PREFIX + ".preallocated.size"; - int PREALLOCATED_SIZE_DEFAULT = 4*MB; - static int preallocatedSize(BiFunction<String, Integer, Integer> getInt) { - return ConfUtils.getInt(getInt, - PREALLOCATED_SIZE_KEY, PREALLOCATED_SIZE_DEFAULT, requireMin(0)); + SizeInBytes PREALLOCATED_SIZE_DEFAULT = SizeInBytes.valueOf("4MB"); + static SizeInBytes preallocatedSize(RaftProperties properties) { + return getSizeInBytes(properties::getSizeInBytes, + PREALLOCATED_SIZE_KEY, PREALLOCATED_SIZE_DEFAULT); } - static void setPreallocatedSize(BiConsumer<String, Integer> setInt, int preallocatedSize) { - ConfUtils.setInt(setInt, PREALLOCATED_SIZE_KEY, preallocatedSize); + static void setPreallocatedSize(RaftProperties properties, SizeInBytes preallocatedSize) { + setSizeInBytes(properties::set, PREALLOCATED_SIZE_KEY, preallocatedSize); } String WRITE_BUFFER_SIZE_KEY = PREFIX + ".write.buffer.size"; - int WRITE_BUFFER_SIZE_DEFAULT = 64*KB; - static int writeBufferSize(BiFunction<String, Integer, Integer> getInt) { - return ConfUtils.getInt(getInt, - WRITE_BUFFER_SIZE_KEY, WRITE_BUFFER_SIZE_DEFAULT, requireMin(0)); + SizeInBytes WRITE_BUFFER_SIZE_DEFAULT =SizeInBytes.valueOf("64KB"); + static SizeInBytes writeBufferSize(RaftProperties properties) { + return getSizeInBytes(properties::getSizeInBytes, + WRITE_BUFFER_SIZE_KEY, WRITE_BUFFER_SIZE_DEFAULT); } - static void setWriteBufferSize(BiConsumer<String, Integer> setInt, int writeBufferSize) { - ConfUtils.setInt(setInt, WRITE_BUFFER_SIZE_KEY, writeBufferSize); + static void setWriteBufferSize(RaftProperties properties, SizeInBytes writeBufferSize) { + setSizeInBytes(properties::set, WRITE_BUFFER_SIZE_KEY, writeBufferSize); } String FORCE_SYNC_NUM_KEY = PREFIX + ".force.sync.num"; int FORCE_SYNC_NUM_DEFAULT = 128; - static int forceSyncNum(BiFunction<String, Integer, Integer> getInt) { - return ConfUtils.getInt(getInt, + static int forceSyncNum(RaftProperties properties) { + return getInt(properties::getInt, FORCE_SYNC_NUM_KEY, FORCE_SYNC_NUM_DEFAULT, requireMin(0)); } @@ -107,30 +105,29 @@ public interface RaftServerConfigKeys { String PREFIX = Log.PREFIX + ".appender"; String BUFFER_CAPACITY_KEY = PREFIX + ".buffer.capacity"; - int BUFFER_CAPACITY_DEFAULT = 4*MB; - static int bufferCapacity(BiFunction<String, Integer, Integer> getInt) { - return ConfUtils.getInt(getInt, - BUFFER_CAPACITY_KEY, BUFFER_CAPACITY_DEFAULT, requireMin(0)); + SizeInBytes BUFFER_CAPACITY_DEFAULT =SizeInBytes.valueOf("4MB"); + static SizeInBytes bufferCapacity(RaftProperties properties) { + return getSizeInBytes(properties::getSizeInBytes, + BUFFER_CAPACITY_KEY, BUFFER_CAPACITY_DEFAULT); } - static void setBufferCapacity(BiConsumer<String, Integer> setInt, int bufferCapacity) { - ConfUtils.setInt(setInt, BUFFER_CAPACITY_KEY, bufferCapacity); + static void setBufferCapacity(RaftProperties properties, SizeInBytes bufferCapacity) { + setSizeInBytes(properties::set, BUFFER_CAPACITY_KEY, bufferCapacity); } String BATCH_ENABLED_KEY = PREFIX + ".batch.enabled"; boolean BATCH_ENABLED_DEFAULT = false; - static boolean batchEnabled(BiFunction<String, Boolean, Boolean> getBool) { - return ConfUtils.getBoolean(getBool, BATCH_ENABLED_KEY, BATCH_ENABLED_DEFAULT); + static boolean batchEnabled(RaftProperties properties) { + return getBoolean(properties::getBoolean, BATCH_ENABLED_KEY, BATCH_ENABLED_DEFAULT); } - static void setBatchEnabled( - BiConsumer<String, Boolean> setLong, boolean batchEnabled) { - ConfUtils.setBoolean(setLong, BATCH_ENABLED_KEY, batchEnabled); + static void setBatchEnabled(RaftProperties properties, boolean batchEnabled) { + setBoolean(properties::setBoolean, BATCH_ENABLED_KEY, batchEnabled); } String SNAPSHOT_CHUNK_SIZE_MAX_KEY = PREFIX + ".snapshot.chunk.size.max"; - int SNAPSHOT_CHUNK_SIZE_MAX_DEFAULT = 16*MB; - static int snapshotChunkSizeMax(BiFunction<String, Integer, Integer> getInt) { - return ConfUtils.getInt(getInt, - SNAPSHOT_CHUNK_SIZE_MAX_KEY, SNAPSHOT_CHUNK_SIZE_MAX_DEFAULT, requireMin(0)); + SizeInBytes SNAPSHOT_CHUNK_SIZE_MAX_DEFAULT =SizeInBytes.valueOf("16MB"); + static SizeInBytes snapshotChunkSizeMax(RaftProperties properties) { + return getSizeInBytes(properties::getSizeInBytes, + SNAPSHOT_CHUNK_SIZE_MAX_KEY, SNAPSHOT_CHUNK_SIZE_MAX_DEFAULT); } } } @@ -142,25 +139,23 @@ public interface RaftServerConfigKeys { String AUTO_TRIGGER_ENABLED_KEY = PREFIX + ".auto.trigger.enabled"; /** by default let the state machine to decide when to do checkpoint */ boolean AUTO_TRIGGER_ENABLED_DEFAULT = false; - static boolean autoTriggerEnabled(BiFunction<String, Boolean, Boolean> getBool) { - return ConfUtils.getBoolean(getBool, + static boolean autoTriggerEnabled(RaftProperties properties) { + return getBoolean(properties::getBoolean, AUTO_TRIGGER_ENABLED_KEY, AUTO_TRIGGER_ENABLED_DEFAULT); } - static void setAutoTriggerEnabled( - BiConsumer<String, Boolean> setLong, boolean autoTriggerThreshold) { - ConfUtils.setBoolean(setLong, AUTO_TRIGGER_ENABLED_KEY, autoTriggerThreshold); + static void setAutoTriggerEnabled(RaftProperties properties, boolean autoTriggerThreshold) { + setBoolean(properties::setBoolean, AUTO_TRIGGER_ENABLED_KEY, autoTriggerThreshold); } /** log size limit (in number of log entries) that triggers the snapshot */ String AUTO_TRIGGER_THRESHOLD_KEY = PREFIX + ".auto.trigger.threshold"; long AUTO_TRIGGER_THRESHOLD_DEFAULT = 400000L; - static long autoTriggerThreshold(BiFunction<String, Long, Long> getLong) { - return ConfUtils.getLong(getLong, + static long autoTriggerThreshold(RaftProperties properties) { + return getLong(properties::getLong, AUTO_TRIGGER_THRESHOLD_KEY, AUTO_TRIGGER_THRESHOLD_DEFAULT, requireMin(0L)); } - static void setAutoTriggerThreshold( - BiConsumer<String, Long> setLong, long autoTriggerThreshold) { - ConfUtils.setLong(setLong, AUTO_TRIGGER_THRESHOLD_KEY, autoTriggerThreshold); + static void setAutoTriggerThreshold(RaftProperties properties, long autoTriggerThreshold) { + setLong(properties::setLong, AUTO_TRIGGER_THRESHOLD_KEY, autoTriggerThreshold); } } @@ -168,29 +163,29 @@ public interface RaftServerConfigKeys { interface Rpc { String PREFIX = RaftServerConfigKeys.PREFIX + ".rpc"; - String TIMEOUT_MIN_MS_KEY = PREFIX + ".timeout.min.ms"; - int TIMEOUT_MIN_MS_DEFAULT = 150; - static int timeoutMinMs(BiFunction<String, Integer, Integer> getInt) { - return ConfUtils.getInt(getInt, - TIMEOUT_MIN_MS_KEY, TIMEOUT_MIN_MS_DEFAULT, requireMin(0)); + String TIMEOUT_MIN_KEY = PREFIX + ".timeout.min"; + TimeDuration TIMEOUT_MIN_DEFAULT = TimeDuration.valueOf(150, TimeUnit.MILLISECONDS); + static TimeDuration timeoutMin(RaftProperties properties) { + return getTimeDuration(properties.getTimeDuration(TIMEOUT_MIN_DEFAULT.getUnit()), + TIMEOUT_MIN_KEY, TIMEOUT_MIN_DEFAULT); } - String TIMEOUT_MAX_MS_KEY = PREFIX + ".timeout.max.ms"; - int TIMEOUT_MAX_MS_DEFAULT = 300; - static int timeoutMaxMs(BiFunction<String, Integer, Integer> getInt) { - return ConfUtils.getInt(getInt, - TIMEOUT_MAX_MS_KEY, TIMEOUT_MAX_MS_DEFAULT, requireMin(0)); + String TIMEOUT_MAX_KEY = PREFIX + ".timeout.max"; + TimeDuration TIMEOUT_MAX_DEFAULT = TimeDuration.valueOf(300, TimeUnit.MILLISECONDS); + static TimeDuration timeoutMax(RaftProperties properties) { + return getTimeDuration(properties.getTimeDuration(TIMEOUT_MAX_DEFAULT.getUnit()), + TIMEOUT_MAX_KEY, TIMEOUT_MAX_DEFAULT); } - String SLEEP_TIME_MS_KEY = PREFIX + ".sleep.time.ms"; - int SLEEP_TIME_MS_DEFAULT = 25; - static int sleepTimeMs(BiFunction<String, Integer, Integer> getInt) { - return ConfUtils.getInt(getInt, - SLEEP_TIME_MS_KEY, SLEEP_TIME_MS_DEFAULT, requireMin(0)); + String SLEEP_TIME_KEY = PREFIX + ".sleep.time"; + TimeDuration SLEEP_TIME_DEFAULT = TimeDuration.valueOf(25, TimeUnit.MILLISECONDS); + static TimeDuration sleepTime(RaftProperties properties) { + return getTimeDuration(properties.getTimeDuration(SLEEP_TIME_DEFAULT.getUnit()), + SLEEP_TIME_KEY, SLEEP_TIME_DEFAULT); } } static void main(String[] args) { - ConfUtils.printAll(RaftServerConfigKeys.class); + printAll(RaftServerConfigKeys.class); } } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderState.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderState.java b/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderState.java index c5f0060..6f246d8 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderState.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderState.java @@ -25,10 +25,7 @@ import org.apache.ratis.server.storage.RaftLog; import org.apache.ratis.shaded.proto.RaftProtos.LeaderNoOp; import org.apache.ratis.shaded.proto.RaftProtos.LogEntryProto; import org.apache.ratis.statemachine.TransactionContext; -import org.apache.ratis.util.CodeInjectionForTesting; -import org.apache.ratis.util.Daemon; -import org.apache.ratis.util.ProtoUtils; -import org.apache.ratis.util.Timestamp; +import org.apache.ratis.util.*; import org.slf4j.Logger; import java.io.IOException; @@ -93,14 +90,14 @@ public class LeaderState { private volatile boolean running = true; private final int stagingCatchupGap; - private final int syncInterval; + private final TimeDuration syncInterval; private final long placeHolderIndex; LeaderState(RaftServerImpl server, RaftProperties properties) { this.server = server; - stagingCatchupGap = RaftServerConfigKeys.stagingCatchupGap(properties::getInt); - syncInterval = RaftServerConfigKeys.Rpc.sleepTimeMs(properties::getInt); + stagingCatchupGap = RaftServerConfigKeys.stagingCatchupGap(properties); + syncInterval = RaftServerConfigKeys.Rpc.sleepTime(properties); final ServerState state = server.getState(); this.raftLog = state.getLog(); @@ -177,7 +174,7 @@ public class LeaderState { return currentTerm; } - int getSyncInterval() { + TimeDuration getSyncInterval() { return syncInterval; } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/main/java/org/apache/ratis/server/impl/LogAppender.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/main/java/org/apache/ratis/server/impl/LogAppender.java b/ratis-server/src/main/java/org/apache/ratis/server/impl/LogAppender.java index fdab93d..9dbe314 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/impl/LogAppender.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/LogAppender.java @@ -68,9 +68,10 @@ public class LogAppender extends Daemon { this.raftLog = server.getState().getLog(); final RaftProperties properties = server.getProperties(); - this.maxBufferSize = RaftServerConfigKeys.Log.Appender.bufferCapacity(properties::getInt); - this.batchSending = RaftServerConfigKeys.Log.Appender.batchEnabled(properties::getBoolean); - this.snapshotChunkMaxSize = RaftServerConfigKeys.Log.Appender.snapshotChunkSizeMax(properties::getInt); + this.maxBufferSize = RaftServerConfigKeys.Log.Appender.bufferCapacity(properties).getSizeInt(); + this.batchSending = RaftServerConfigKeys.Log.Appender.batchEnabled(properties); + this.snapshotChunkMaxSize = RaftServerConfigKeys.Log.Appender.snapshotChunkSizeMax(properties).getSizeInt(); + this.buffer = new LogEntryBuffer(); this.leaderTerm = server.getState().getCurrentTerm(); } @@ -209,7 +210,7 @@ public class LogAppender extends Daemon { LOG.debug(this + ": failed to send appendEntries; retry " + retry++, ioe); } if (isAppenderRunning()) { - Thread.sleep(leaderState.getSyncInterval()); + leaderState.getSyncInterval().sleep(); } } return null; http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java index 98e37e5..e13a0ba 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java @@ -48,6 +48,7 @@ import java.util.List; import java.util.OptionalLong; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; import static org.apache.ratis.shaded.proto.RaftProtos.AppendEntriesReplyProto.AppendResult.*; import static org.apache.ratis.util.LifeCycle.State.*; @@ -92,8 +93,8 @@ public class RaftServerImpl implements RaftServer { RaftConfiguration raftConf, RaftProperties properties, Parameters parameters) throws IOException { this.lifeCycle = new LifeCycle(id); - minTimeoutMs = RaftServerConfigKeys.Rpc.timeoutMinMs(properties::getInt); - maxTimeoutMs = RaftServerConfigKeys.Rpc.timeoutMaxMs(properties::getInt); + minTimeoutMs = RaftServerConfigKeys.Rpc.timeoutMin(properties).toInt(TimeUnit.MILLISECONDS); + maxTimeoutMs = RaftServerConfigKeys.Rpc.timeoutMax(properties).toInt(TimeUnit.MILLISECONDS); Preconditions.checkArgument(maxTimeoutMs > minTimeoutMs, "max timeout: %s, min timeout: %s", maxTimeoutMs, minTimeoutMs); this.properties = properties; http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/main/java/org/apache/ratis/server/impl/ServerState.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/main/java/org/apache/ratis/server/impl/ServerState.java b/ratis-server/src/main/java/org/apache/ratis/server/impl/ServerState.java index 4ad099d..2e0ea71 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/impl/ServerState.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/ServerState.java @@ -124,7 +124,7 @@ public class ServerState implements Closeable { private RaftLog initLog(RaftPeerId id, RaftProperties prop, RaftServerImpl server, long lastIndexInSnapshot) throws IOException { final RaftLog log; - if (RaftServerConfigKeys.Log.useMemory(prop::getBoolean)) { + if (RaftServerConfigKeys.Log.useMemory(prop)) { log = new MemoryRaftLog(id); } else { log = new SegmentedRaftLog(id, server, this.storage, http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/main/java/org/apache/ratis/server/impl/StateMachineUpdater.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/main/java/org/apache/ratis/server/impl/StateMachineUpdater.java b/ratis-server/src/main/java/org/apache/ratis/server/impl/StateMachineUpdater.java index fb153cb..3341549 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/impl/StateMachineUpdater.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/StateMachineUpdater.java @@ -80,8 +80,8 @@ class StateMachineUpdater implements Runnable { this.lastAppliedIndex = lastAppliedIndex; lastSnapshotIndex = lastAppliedIndex; - autoSnapshotEnabled = RaftServerConfigKeys.Snapshot.autoTriggerEnabled(properties::getBoolean); - autoSnapshotThreshold = RaftServerConfigKeys.Snapshot.autoTriggerThreshold(properties::getLong); + autoSnapshotEnabled = RaftServerConfigKeys.Snapshot.autoTriggerEnabled(properties); + autoSnapshotThreshold = RaftServerConfigKeys.Snapshot.autoTriggerThreshold(properties); updater = new Daemon(this); } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/main/java/org/apache/ratis/server/storage/LogOutputStream.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/main/java/org/apache/ratis/server/storage/LogOutputStream.java b/ratis-server/src/main/java/org/apache/ratis/server/storage/LogOutputStream.java index 6a0f5da..8563549 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/storage/LogOutputStream.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/storage/LogOutputStream.java @@ -61,14 +61,14 @@ public class LogOutputStream implements Closeable { throws IOException { this.file = file; this.checksum = new PureJavaCrc32C(); - this.segmentMaxSize = RaftServerConfigKeys.Log.segmentSizeMax(properties::getLong); - this.preallocatedSize = RaftServerConfigKeys.Log.preallocatedSize(properties::getInt); + this.segmentMaxSize = RaftServerConfigKeys.Log.segmentSizeMax(properties).getSize(); + this.preallocatedSize = RaftServerConfigKeys.Log.preallocatedSize(properties).getSize(); RandomAccessFile rp = new RandomAccessFile(file, "rw"); fc = rp.getChannel(); fc.position(fc.size()); preallocatedPos = fc.size(); - final int bufferSize = RaftServerConfigKeys.Log.writeBufferSize(properties::getInt); + final int bufferSize = RaftServerConfigKeys.Log.writeBufferSize(properties).getSizeInt(); out = new BufferedWriteChannel(fc, bufferSize); if (!append) { http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLogWorker.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLogWorker.java b/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLogWorker.java index a78d117..0d724e8 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLogWorker.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLogWorker.java @@ -76,7 +76,7 @@ class RaftLogWorker implements Runnable { this.raftServer = raftServer; this.storage = storage; this.properties = properties; - this.forceSyncNum = RaftServerConfigKeys.Log.forceSyncNum(properties::getInt); + this.forceSyncNum = RaftServerConfigKeys.Log.forceSyncNum(properties); workerThread = new Thread(this, getClass().getSimpleName() + " for " + storage); } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftStorage.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftStorage.java b/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftStorage.java index 2b73b0a..c86357d 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftStorage.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftStorage.java @@ -44,7 +44,7 @@ public class RaftStorage implements Closeable { public RaftStorage(RaftProperties prop, RaftServerConstants.StartupOption option) throws IOException { - final String dir = RaftServerConfigKeys.storageDir(prop::getTrimmed); + final String dir = RaftServerConfigKeys.storageDir(prop); storageDir = new RaftStorageDirectory( new File(FileUtils.stringAsURI(dir).getPath())); if (option == RaftServerConstants.StartupOption.FORMAT) { http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/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 90b5f8d..c31665f 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 @@ -104,7 +104,7 @@ public class SegmentedRaftLog extends RaftLog { throws IOException { super(selfId); this.storage = storage; - this.segmentMaxSize = RaftServerConfigKeys.Log.segmentSizeMax(properties::getLong); + this.segmentMaxSize = RaftServerConfigKeys.Log.segmentSizeMax(properties).getSize(); cache = new RaftLogCache(); fileLogWorker = new RaftLogWorker(server, storage, properties); lastCommitted.set(lastIndexInSnapshot); http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/test/java/org/apache/ratis/MiniRaftCluster.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/MiniRaftCluster.java b/ratis-server/src/test/java/org/apache/ratis/MiniRaftCluster.java index 0f87da1..0944b87 100644 --- a/ratis-server/src/test/java/org/apache/ratis/MiniRaftCluster.java +++ b/ratis-server/src/test/java/org/apache/ratis/MiniRaftCluster.java @@ -44,6 +44,7 @@ import java.io.IOException; import java.net.InetSocketAddress; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.StreamSupport; @@ -197,7 +198,7 @@ public abstract class MiniRaftCluster { } public int getMaxTimeout() { - return RaftServerConfigKeys.Rpc.timeoutMaxMs(properties::getInt); + return RaftServerConfigKeys.Rpc.timeoutMax(properties).toInt(TimeUnit.MILLISECONDS); } public RaftConfiguration getConf() { @@ -211,7 +212,7 @@ public abstract class MiniRaftCluster { formatDir(dirStr); } final RaftProperties prop = new RaftProperties(properties); - RaftServerConfigKeys.setStorageDir(prop::set, dirStr); + RaftServerConfigKeys.setStorageDir(prop, dirStr); final StateMachine stateMachine = getStateMachine4Test(properties); return newRaftServer(id, stateMachine, conf, prop); } catch (IOException e) { @@ -429,7 +430,8 @@ public abstract class MiniRaftCluster { // least ELECTION_TIMEOUT_MIN. In this way when the target leader request a // vote, all non-leader servers can grant the vote. // Disable the target leader server RPC so that it can request a vote. - blockQueueAndSetDelay(leaderId, RaftServerConfigKeys.Rpc.TIMEOUT_MIN_MS_DEFAULT); + blockQueueAndSetDelay(leaderId, + RaftServerConfigKeys.Rpc.TIMEOUT_MIN_DEFAULT.toInt(TimeUnit.MILLISECONDS)); // Reopen queues so that the vote can make progress. blockQueueAndSetDelay(leaderId, 0); http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/test/java/org/apache/ratis/RaftTestUtil.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/RaftTestUtil.java b/ratis-server/src/test/java/org/apache/ratis/RaftTestUtil.java index 3ada880..5166249 100644 --- a/ratis-server/src/test/java/org/apache/ratis/RaftTestUtil.java +++ b/ratis-server/src/test/java/org/apache/ratis/RaftTestUtil.java @@ -17,20 +17,9 @@ */ package org.apache.ratis; -import static org.apache.ratis.util.ProtoUtils.toByteString; - -import java.io.File; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.nio.charset.Charset; -import java.util.Arrays; -import java.util.Collection; -import java.util.function.BooleanSupplier; -import java.util.function.IntSupplier; - +import com.google.common.base.Preconditions; import org.apache.commons.lang.RandomStringUtils; import org.apache.ratis.protocol.Message; -import org.apache.ratis.protocol.RaftPeer; import org.apache.ratis.protocol.RaftPeerId; import org.apache.ratis.server.RaftServerConfigKeys; import org.apache.ratis.server.impl.BlockRequestHandlingInjection; @@ -44,7 +33,16 @@ import org.junit.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Preconditions; +import java.io.File; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; +import java.util.Arrays; +import java.util.Collection; +import java.util.function.BooleanSupplier; +import java.util.function.IntSupplier; + +import static org.apache.ratis.util.ProtoUtils.toByteString; public class RaftTestUtil { static final Logger LOG = LoggerFactory.getLogger(RaftTestUtil.class); @@ -230,7 +228,7 @@ public class RaftTestUtil { public static void block(BooleanSupplier isBlocked) throws InterruptedException { for(; isBlocked.getAsBoolean(); ) { - Thread.sleep(RaftServerConfigKeys.Rpc.TIMEOUT_MAX_MS_DEFAULT); + RaftServerConfigKeys.Rpc.TIMEOUT_MAX_DEFAULT.sleep(); } } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/test/java/org/apache/ratis/server/impl/RaftReconfigurationBaseTest.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/server/impl/RaftReconfigurationBaseTest.java b/ratis-server/src/test/java/org/apache/ratis/server/impl/RaftReconfigurationBaseTest.java index 00e12d2..bf7de9f 100644 --- a/ratis-server/src/test/java/org/apache/ratis/server/impl/RaftReconfigurationBaseTest.java +++ b/ratis-server/src/test/java/org/apache/ratis/server/impl/RaftReconfigurationBaseTest.java @@ -68,7 +68,7 @@ public abstract class RaftReconfigurationBaseTest { @BeforeClass public static void setup() { // set a small gap for tests - RaftServerConfigKeys.setStagingCatchupGap(prop::setInt, STAGING_CATCHUP_GAP); + RaftServerConfigKeys.setStagingCatchupGap(prop, STAGING_CATCHUP_GAP); } public abstract MiniRaftCluster getCluster(int peerNum) throws IOException; http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/test/java/org/apache/ratis/server/simulation/SimulatedRequestReply.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/server/simulation/SimulatedRequestReply.java b/ratis-server/src/test/java/org/apache/ratis/server/simulation/SimulatedRequestReply.java index 75e49ea..7fb2c2c 100644 --- a/ratis-server/src/test/java/org/apache/ratis/server/simulation/SimulatedRequestReply.java +++ b/ratis-server/src/test/java/org/apache/ratis/server/simulation/SimulatedRequestReply.java @@ -29,10 +29,7 @@ import org.apache.ratis.util.Timestamp; import java.io.IOException; import java.util.Collection; import java.util.Map; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -41,7 +38,7 @@ class SimulatedRequestReply<REQUEST extends RaftRpcMessage, public static final String SIMULATE_LATENCY_KEY = SimulatedRequestReply.class.getName() + ".simulateLatencyMs"; public static final int SIMULATE_LATENCY_DEFAULT - = RaftServerConfigKeys.Rpc.TIMEOUT_MIN_MS_DEFAULT; + = RaftServerConfigKeys.Rpc.TIMEOUT_MIN_DEFAULT.toInt(TimeUnit.MILLISECONDS); public static final long TIMEOUT = 3000L; private static class ReplyOrException<REPLY> { http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/test/java/org/apache/ratis/server/simulation/TestNotLeaderExceptionWithSimulation.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/server/simulation/TestNotLeaderExceptionWithSimulation.java b/ratis-server/src/test/java/org/apache/ratis/server/simulation/TestNotLeaderExceptionWithSimulation.java index 669d4df..c37e2fb 100644 --- a/ratis-server/src/test/java/org/apache/ratis/server/simulation/TestNotLeaderExceptionWithSimulation.java +++ b/ratis-server/src/test/java/org/apache/ratis/server/simulation/TestNotLeaderExceptionWithSimulation.java @@ -19,9 +19,6 @@ package org.apache.ratis.server.simulation; import org.apache.ratis.MiniRaftCluster; import org.apache.ratis.RaftNotLeaderExceptionBaseTest; -import org.apache.ratis.conf.RaftProperties; - -import java.io.IOException; public class TestNotLeaderExceptionWithSimulation extends RaftNotLeaderExceptionBaseTest { @Override http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogReadWrite.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogReadWrite.java b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogReadWrite.java index 026d1c1..3c10815 100644 --- a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogReadWrite.java +++ b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogReadWrite.java @@ -20,6 +20,7 @@ package org.apache.ratis.server.storage; import org.apache.ratis.RaftTestUtil; import org.apache.ratis.RaftTestUtil.SimpleOperation; import org.apache.ratis.conf.RaftProperties; +import org.apache.ratis.util.SizeInBytes; import org.apache.ratis.protocol.ChecksumException; import org.apache.ratis.protocol.ClientId; import org.apache.ratis.server.RaftServerConfigKeys; @@ -44,8 +45,6 @@ import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; -import static org.apache.ratis.server.RaftServerConfigKeys.MB; - /** * Test basic functionality of LogReader, LogInputStream, and LogOutputStream. */ @@ -62,7 +61,7 @@ public class TestRaftLogReadWrite { public void setup() throws Exception { storageDir = RaftTestUtil.getTestDir(TestRaftLogReadWrite.class); properties = new RaftProperties(); - RaftServerConfigKeys.setStorageDir(properties::set, + RaftServerConfigKeys.setStorageDir(properties, FileUtils.fileAsURI(storageDir).toString()); } @@ -172,7 +171,8 @@ public class TestRaftLogReadWrite { out.flush(); // make sure the file contains padding - Assert.assertEquals(RaftServerConfigKeys.Log.PREALLOCATED_SIZE_DEFAULT, + Assert.assertEquals( + RaftServerConfigKeys.Log.PREALLOCATED_SIZE_DEFAULT.getSize(), openSegment.length()); // check if the reader can correctly read the log file @@ -190,8 +190,8 @@ public class TestRaftLogReadWrite { */ @Test public void testReadWithCorruptPadding() throws IOException { - RaftServerConfigKeys.Log.setPreallocatedSize(properties::setInt, 4*MB); - RaftServerConfigKeys.Log.setSegmentSizeMax(properties::setLong, 16*MB); + RaftServerConfigKeys.Log.setPreallocatedSize(properties, SizeInBytes.valueOf("4MB")); + RaftServerConfigKeys.Log.setSegmentSizeMax(properties, SizeInBytes.valueOf("16MB")); RaftStorage storage = new RaftStorage(properties, StartupOption.REGULAR); File openSegment = storage.getStorageDir().getOpenLogFile(0); http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogSegment.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogSegment.java b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogSegment.java index 5ac5db3..f538421 100644 --- a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogSegment.java +++ b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftLogSegment.java @@ -17,20 +17,10 @@ */ package org.apache.ratis.server.storage; -import static org.apache.ratis.server.RaftServerConfigKeys.KB; -import static org.apache.ratis.server.RaftServerConfigKeys.MB; -import static org.apache.ratis.server.impl.RaftServerConstants.INVALID_LOG_INDEX; -import static org.apache.ratis.server.storage.LogSegment.getEntrySize; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - import org.apache.ratis.RaftTestUtil; import org.apache.ratis.RaftTestUtil.SimpleOperation; import org.apache.ratis.conf.RaftProperties; +import org.apache.ratis.util.SizeInBytes; import org.apache.ratis.protocol.ClientId; import org.apache.ratis.server.RaftServerConfigKeys; import org.apache.ratis.server.impl.RaftServerConstants.StartupOption; @@ -38,11 +28,21 @@ import org.apache.ratis.shaded.proto.RaftProtos.LogEntryProto; import org.apache.ratis.shaded.proto.RaftProtos.SMLogEntryProto; import org.apache.ratis.util.FileUtils; import org.apache.ratis.util.ProtoUtils; +import org.apache.ratis.util.TraditionalBinaryPrefix; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.apache.ratis.server.impl.RaftServerConstants.INVALID_LOG_INDEX; +import static org.apache.ratis.server.storage.LogSegment.getEntrySize; + /** * Test basic functionality of {@link LogSegment} */ @@ -56,8 +56,7 @@ public class TestRaftLogSegment { @Before public void setup() throws Exception { storageDir = RaftTestUtil.getTestDir(TestRaftLogSegment.class); - RaftServerConfigKeys.setStorageDir(properties::set, - storageDir.getCanonicalPath()); + RaftServerConfigKeys.setStorageDir(properties, storageDir.getCanonicalPath()); } @After @@ -213,8 +212,8 @@ public class TestRaftLogSegment { private RaftProperties getProperties(long maxSegmentSize, int preallocatedSize) { RaftProperties p = new RaftProperties(); - RaftServerConfigKeys.Log.setSegmentSizeMax(p::setLong, maxSegmentSize); - RaftServerConfigKeys.Log.setPreallocatedSize(p::setInt, preallocatedSize); + RaftServerConfigKeys.Log.setSegmentSizeMax(p, SizeInBytes.valueOf(maxSegmentSize)); + RaftServerConfigKeys.Log.setPreallocatedSize(p, SizeInBytes.valueOf(preallocatedSize)); return p; } @@ -271,10 +270,10 @@ public class TestRaftLogSegment { */ @Test public void testPreallocationAndAppend() throws Exception { - final long max = 2*MB; - RaftServerConfigKeys.Log.setSegmentSizeMax(properties::setLong, max); - RaftServerConfigKeys.Log.setPreallocatedSize(properties::setInt, 16*KB); - RaftServerConfigKeys.Log.setWriteBufferSize(properties::setInt, 10*KB); + final SizeInBytes max = SizeInBytes.valueOf(2, TraditionalBinaryPrefix.MEGA); + RaftServerConfigKeys.Log.setSegmentSizeMax(properties, max); + RaftServerConfigKeys.Log.setPreallocatedSize(properties, SizeInBytes.valueOf("16KB")); + RaftServerConfigKeys.Log.setWriteBufferSize(properties, SizeInBytes.valueOf("10KB")); RaftStorage storage = new RaftStorage(properties, StartupOption.REGULAR); final File file = storage.getStorageDir().getOpenLogFile(0); @@ -289,7 +288,7 @@ public class TestRaftLogSegment { long preallocated = 16 * 1024; try (LogOutputStream out = new LogOutputStream(file, false, properties)) { Assert.assertEquals(preallocated, file.length()); - while (totalSize + entrySize < max) { + while (totalSize + entrySize < max.getSize()) { totalSize += entrySize; out.write(entry); if (totalSize > preallocated) { http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java index cb375c6..ede9103 100644 --- a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java +++ b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestRaftStorage.java @@ -49,8 +49,7 @@ public class TestRaftStorage { @Before public void setup() throws Exception { storageDir = RaftTestUtil.getTestDir(TestRaftStorage.class); - RaftServerConfigKeys.setStorageDir(properties::set, - storageDir.getCanonicalPath()); + RaftServerConfigKeys.setStorageDir(properties, storageDir.getCanonicalPath()); } @After http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/test/java/org/apache/ratis/server/storage/TestSegmentedRaftLog.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestSegmentedRaftLog.java b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestSegmentedRaftLog.java index fb4fe16..1fcb54b 100644 --- a/ratis-server/src/test/java/org/apache/ratis/server/storage/TestSegmentedRaftLog.java +++ b/ratis-server/src/test/java/org/apache/ratis/server/storage/TestSegmentedRaftLog.java @@ -22,6 +22,7 @@ import org.apache.ratis.MiniRaftCluster; import org.apache.ratis.RaftTestUtil; import org.apache.ratis.RaftTestUtil.SimpleOperation; import org.apache.ratis.conf.RaftProperties; +import org.apache.ratis.util.SizeInBytes; import org.apache.ratis.protocol.ClientId; import org.apache.ratis.protocol.RaftPeerId; import org.apache.ratis.server.RaftServerConfigKeys; @@ -45,8 +46,6 @@ import java.util.Collections; import java.util.List; import java.util.function.Supplier; -import static org.apache.ratis.server.RaftServerConfigKeys.KB; - public class TestSegmentedRaftLog { static { RaftUtils.setLogLevel(RaftLogWorker.LOG, Level.DEBUG); @@ -80,8 +79,7 @@ public class TestSegmentedRaftLog { public void setup() throws Exception { storageDir = RaftTestUtil.getTestDir(TestSegmentedRaftLog.class); properties = new RaftProperties(); - RaftServerConfigKeys.setStorageDir(properties::set, - storageDir.getCanonicalPath()); + RaftServerConfigKeys.setStorageDir(properties, storageDir.getCanonicalPath()); storage = new RaftStorage(properties, RaftServerConstants.StartupOption.REGULAR); } @@ -190,8 +188,8 @@ public class TestSegmentedRaftLog { */ @Test public void testAppendAndRoll() throws Exception { - RaftServerConfigKeys.Log.setPreallocatedSize(properties::setInt, 16*KB); - RaftServerConfigKeys.Log.setSegmentSizeMax(properties::setLong, 128*KB); + RaftServerConfigKeys.Log.setPreallocatedSize(properties, SizeInBytes.valueOf("16KB")); + RaftServerConfigKeys.Log.setSegmentSizeMax(properties, SizeInBytes.valueOf("128KB")); List<SegmentRange> ranges = prepareRanges(1, 1024, 0); final byte[] content = new byte[1024]; http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java b/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java index c08931a..68ab8c3 100644 --- a/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java +++ b/ratis-server/src/test/java/org/apache/ratis/statemachine/RaftSnapshotBaseTest.java @@ -92,8 +92,8 @@ public abstract class RaftSnapshotBaseTest { prop.setClass(MiniRaftCluster.STATEMACHINE_CLASS_KEY, SimpleStateMachine4Testing.class, StateMachine.class); RaftServerConfigKeys.Snapshot.setAutoTriggerThreshold( - prop::setLong, SNAPSHOT_TRIGGER_THRESHOLD); - RaftServerConfigKeys.Snapshot.setAutoTriggerEnabled(prop::setBoolean, true); + prop, SNAPSHOT_TRIGGER_THRESHOLD); + RaftServerConfigKeys.Snapshot.setAutoTriggerEnabled(prop, true); this.cluster = getFactory().newCluster(1, prop); cluster.start(); } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/6a755e66/ratis-server/src/test/java/org/apache/ratis/statemachine/TestStateMachine.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/statemachine/TestStateMachine.java b/ratis-server/src/test/java/org/apache/ratis/statemachine/TestStateMachine.java index c8bf76e..b81e367 100644 --- a/ratis-server/src/test/java/org/apache/ratis/statemachine/TestStateMachine.java +++ b/ratis-server/src/test/java/org/apache/ratis/statemachine/TestStateMachine.java @@ -60,7 +60,7 @@ public class TestStateMachine { { // TODO: fix and run with in-memory log. It fails with NPE // TODO: if change setUseMemory to true - RaftServerConfigKeys.Log.setUseMemory(properties::setBoolean, false); + RaftServerConfigKeys.Log.setUseMemory(properties, false); } private MiniRaftClusterWithSimulatedRpc cluster;
