Skip to content

Commit 97220fe

Browse files
authored
RATIS-1865. Add leader lease bound ratio configuration (#897)
1 parent 0b79689 commit 97220fe

File tree

4 files changed

+39
-0
lines changed

4 files changed

+39
-0
lines changed

ratis-common/src/main/java/org/apache/ratis/conf/ConfUtils.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,15 @@ static BiConsumer<String, Integer> requireMax(int max) {
7676
};
7777
}
7878

79+
static BiConsumer<String, Double> requireMin(double min) {
80+
return (key, value) -> {
81+
if (value < min) {
82+
throw new IllegalArgumentException(
83+
key + " = " + value + " < min = " + min);
84+
}
85+
};
86+
}
87+
7988
static BiConsumer<String, Double> requireMax(double max) {
8089
return (key, value) -> {
8190
if (value > max) {

ratis-docs/src/site/markdown/configurations.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,13 @@ treat the peer as caught-up. Increase this number when write throughput is high.
185185

186186
--------------------------------------------------------------------------------
187187

188+
| **Property** | `raft.server.read.leader.lease.timeout.ratio` |
189+
|:----------------|:----------------------------------------------|
190+
| **Description** | maximum timeout ratio of leader lease |
191+
| **Type** | double, ranging from (0.0,1.0) |
192+
| **Default** | 0.9 |
193+
194+
188195
### Write - Configurations related to write requests.
189196

190197
* Limits on pending write requests

ratis-server-api/src/main/java/org/apache/ratis/server/RaftServerConfigKeys.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,18 @@ static Option option(RaftProperties properties) {
191191
static void setOption(RaftProperties properties, Option option) {
192192
set(properties::setEnum, OPTION_KEY, option);
193193
}
194+
195+
String LEADER_LEASE_TIMEOUT_RATIO_KEY = PREFIX + ".leader.lease.timeout.ratio";
196+
double LEADER_LEASE_TIMEOUT_RATIO_DEFAULT = 0.9;
197+
static double leaderLeaseTimeoutRatio(RaftProperties properties) {
198+
return getDouble(properties::getDouble, LEADER_LEASE_TIMEOUT_RATIO_KEY,
199+
LEADER_LEASE_TIMEOUT_RATIO_DEFAULT, getDefaultLog(),
200+
requireMin(0.0), requireMax(1.0));
201+
}
202+
203+
static void setLeaderLeaseTimeoutRatio(RaftProperties properties, double ratio) {
204+
setDouble(properties::setDouble, LEADER_LEASE_TIMEOUT_RATIO_KEY, ratio);
205+
}
194206
}
195207

196208
interface Write {

ratis-server/src/main/java/org/apache/ratis/server/impl/DivisionPropertiesImpl.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,19 @@ class DivisionPropertiesImpl implements DivisionProperties {
2828
private final TimeDuration rpcTimeoutMax;
2929
private final TimeDuration rpcSleepTime;
3030
private final TimeDuration rpcSlownessTimeout;
31+
private final TimeDuration leaderLeaseTimeout;
3132

3233
DivisionPropertiesImpl(RaftProperties properties) {
3334
this.rpcTimeoutMin = RaftServerConfigKeys.Rpc.timeoutMin(properties);
3435
this.rpcTimeoutMax = RaftServerConfigKeys.Rpc.timeoutMax(properties);
3536
Preconditions.assertTrue(rpcTimeoutMax.compareTo(rpcTimeoutMin) >= 0,
3637
"rpcTimeoutMax = %s < rpcTimeoutMin = %s", rpcTimeoutMax, rpcTimeoutMin);
3738

39+
final double leaderLeaseTimeoutRatio = RaftServerConfigKeys.Read.leaderLeaseTimeoutRatio(properties);
40+
this.leaderLeaseTimeout = this.rpcTimeoutMin.multiply(leaderLeaseTimeoutRatio);
41+
Preconditions.assertTrue(rpcTimeoutMin.compareTo(leaderLeaseTimeout) >= 0,
42+
"rpcTimeoutMin = %s < leaderLeaseTimeout = %s", rpcTimeoutMin, leaderLeaseTimeout);
43+
3844
this.rpcSleepTime = RaftServerConfigKeys.Rpc.sleepTime(properties);
3945
this.rpcSlownessTimeout = RaftServerConfigKeys.Rpc.slownessTimeout(properties);
4046
}
@@ -49,6 +55,11 @@ public TimeDuration maxRpcTimeout() {
4955
return rpcTimeoutMax;
5056
}
5157

58+
/** @return the ratio of leader lease timeout */
59+
public TimeDuration leaderLeaseTimeout() {
60+
return leaderLeaseTimeout;
61+
}
62+
5263
@Override
5364
public TimeDuration rpcSleepTime() {
5465
return rpcSleepTime;

0 commit comments

Comments
 (0)