This is an automated email from the ASF dual-hosted git repository.
szetszwo pushed a commit to branch feature/leaderlease
in repository https://gitbox.apache.org/repos/asf/ratis.git
The following commit(s) were added to refs/heads/feature/leaderlease by this
push:
new 97220fe9f RATIS-1865. Add leader lease bound ratio configuration (#897)
97220fe9f is described below
commit 97220fe9fa2223645164e0010606d3c649b2a721
Author: William Song <[email protected]>
AuthorDate: Fri Aug 4 00:39:04 2023 +0800
RATIS-1865. Add leader lease bound ratio configuration (#897)
---
.../src/main/java/org/apache/ratis/conf/ConfUtils.java | 9 +++++++++
ratis-docs/src/site/markdown/configurations.md | 7 +++++++
.../java/org/apache/ratis/server/RaftServerConfigKeys.java | 12 ++++++++++++
.../org/apache/ratis/server/impl/DivisionPropertiesImpl.java | 11 +++++++++++
4 files changed, 39 insertions(+)
diff --git a/ratis-common/src/main/java/org/apache/ratis/conf/ConfUtils.java
b/ratis-common/src/main/java/org/apache/ratis/conf/ConfUtils.java
index 629d5a389..a642ebb9d 100644
--- a/ratis-common/src/main/java/org/apache/ratis/conf/ConfUtils.java
+++ b/ratis-common/src/main/java/org/apache/ratis/conf/ConfUtils.java
@@ -76,6 +76,15 @@ public interface ConfUtils {
};
}
+ static BiConsumer<String, Double> requireMin(double min) {
+ return (key, value) -> {
+ if (value < min) {
+ throw new IllegalArgumentException(
+ key + " = " + value + " < min = " + min);
+ }
+ };
+ }
+
static BiConsumer<String, Double> requireMax(double max) {
return (key, value) -> {
if (value > max) {
diff --git a/ratis-docs/src/site/markdown/configurations.md
b/ratis-docs/src/site/markdown/configurations.md
index 4f6d21555..d688a7f9e 100644
--- a/ratis-docs/src/site/markdown/configurations.md
+++ b/ratis-docs/src/site/markdown/configurations.md
@@ -185,6 +185,13 @@ treat the peer as caught-up. Increase this number when
write throughput is high.
--------------------------------------------------------------------------------
+| **Property** | `raft.server.read.leader.lease.timeout.ratio` |
+|:----------------|:----------------------------------------------|
+| **Description** | maximum timeout ratio of leader lease |
+| **Type** | double, ranging from (0.0,1.0) |
+| **Default** | 0.9 |
+
+
### Write - Configurations related to write requests.
* Limits on pending write requests
diff --git
a/ratis-server-api/src/main/java/org/apache/ratis/server/RaftServerConfigKeys.java
b/ratis-server-api/src/main/java/org/apache/ratis/server/RaftServerConfigKeys.java
index 211edd796..469bceba0 100644
---
a/ratis-server-api/src/main/java/org/apache/ratis/server/RaftServerConfigKeys.java
+++
b/ratis-server-api/src/main/java/org/apache/ratis/server/RaftServerConfigKeys.java
@@ -191,6 +191,18 @@ public interface RaftServerConfigKeys {
static void setOption(RaftProperties properties, Option option) {
set(properties::setEnum, OPTION_KEY, option);
}
+
+ String LEADER_LEASE_TIMEOUT_RATIO_KEY = PREFIX +
".leader.lease.timeout.ratio";
+ double LEADER_LEASE_TIMEOUT_RATIO_DEFAULT = 0.9;
+ static double leaderLeaseTimeoutRatio(RaftProperties properties) {
+ return getDouble(properties::getDouble, LEADER_LEASE_TIMEOUT_RATIO_KEY,
+ LEADER_LEASE_TIMEOUT_RATIO_DEFAULT, getDefaultLog(),
+ requireMin(0.0), requireMax(1.0));
+ }
+
+ static void setLeaderLeaseTimeoutRatio(RaftProperties properties, double
ratio) {
+ setDouble(properties::setDouble, LEADER_LEASE_TIMEOUT_RATIO_KEY, ratio);
+ }
}
interface Write {
diff --git
a/ratis-server/src/main/java/org/apache/ratis/server/impl/DivisionPropertiesImpl.java
b/ratis-server/src/main/java/org/apache/ratis/server/impl/DivisionPropertiesImpl.java
index 63cbc02ed..b3e8dd94d 100644
---
a/ratis-server/src/main/java/org/apache/ratis/server/impl/DivisionPropertiesImpl.java
+++
b/ratis-server/src/main/java/org/apache/ratis/server/impl/DivisionPropertiesImpl.java
@@ -28,6 +28,7 @@ class DivisionPropertiesImpl implements DivisionProperties {
private final TimeDuration rpcTimeoutMax;
private final TimeDuration rpcSleepTime;
private final TimeDuration rpcSlownessTimeout;
+ private final TimeDuration leaderLeaseTimeout;
DivisionPropertiesImpl(RaftProperties properties) {
this.rpcTimeoutMin = RaftServerConfigKeys.Rpc.timeoutMin(properties);
@@ -35,6 +36,11 @@ class DivisionPropertiesImpl implements DivisionProperties {
Preconditions.assertTrue(rpcTimeoutMax.compareTo(rpcTimeoutMin) >= 0,
"rpcTimeoutMax = %s < rpcTimeoutMin = %s", rpcTimeoutMax,
rpcTimeoutMin);
+ final double leaderLeaseTimeoutRatio =
RaftServerConfigKeys.Read.leaderLeaseTimeoutRatio(properties);
+ this.leaderLeaseTimeout =
this.rpcTimeoutMin.multiply(leaderLeaseTimeoutRatio);
+ Preconditions.assertTrue(rpcTimeoutMin.compareTo(leaderLeaseTimeout) >= 0,
+ "rpcTimeoutMin = %s < leaderLeaseTimeout = %s", rpcTimeoutMin,
leaderLeaseTimeout);
+
this.rpcSleepTime = RaftServerConfigKeys.Rpc.sleepTime(properties);
this.rpcSlownessTimeout =
RaftServerConfigKeys.Rpc.slownessTimeout(properties);
}
@@ -49,6 +55,11 @@ class DivisionPropertiesImpl implements DivisionProperties {
return rpcTimeoutMax;
}
+ /** @return the ratio of leader lease timeout */
+ public TimeDuration leaderLeaseTimeout() {
+ return leaderLeaseTimeout;
+ }
+
@Override
public TimeDuration rpcSleepTime() {
return rpcSleepTime;