Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,6 @@ public final class RatisHelper {

// Prefix for Ratis Server GRPC and Ratis client conf.
public static final String HDDS_DATANODE_RATIS_PREFIX_KEY = "hdds.ratis";
private static final String RAFT_SERVER_PREFIX_KEY = "raft.server";
public static final String HDDS_DATANODE_RATIS_SERVER_PREFIX_KEY =
HDDS_DATANODE_RATIS_PREFIX_KEY + "." + RAFT_SERVER_PREFIX_KEY;
public static final String HDDS_DATANODE_RATIS_CLIENT_PREFIX_KEY =
HDDS_DATANODE_RATIS_PREFIX_KEY + "." + RaftClientConfigKeys.PREFIX;
public static final String HDDS_DATANODE_RATIS_GRPC_PREFIX_KEY =
HDDS_DATANODE_RATIS_PREFIX_KEY + "." + GrpcConfigKeys.PREFIX;

private static final Class[] NO_RETRY_EXCEPTIONS =
new Class[] {NotReplicatedException.class, GroupMismatchException.class,
Expand Down Expand Up @@ -227,7 +220,7 @@ private static RaftClient newRaftClient(RpcType rpcType, RaftPeerId leader,
}

/**
* Set all the properties matching with regex
* Set all client properties matching with regex
* {@link RatisHelper#HDDS_DATANODE_RATIS_PREFIX_KEY} in
* ozone configuration object and configure it to RaftProperties.
* @param ozoneConf
Expand All @@ -237,23 +230,26 @@ public static void createRaftClientProperties(ConfigurationSource ozoneConf,
RaftProperties raftProperties) {

// As for client we do not require server and grpc server/tls. exclude them.
Map<String, String> ratisClientConf = ozoneConf.getPropsWithPrefix(
StringUtils.appendIfNotPresent(HDDS_DATANODE_RATIS_PREFIX_KEY, '.'));
Map<String, String> ratisClientConf =
getDatanodeRatisPrefixProps(ozoneConf);
ratisClientConf.forEach((key, val) -> {
if (key.startsWith(RaftClientConfigKeys.PREFIX) || isGrpcClientConfig(
key)) {
if (isClientConfig(key) || isGrpcClientConfig(key)) {
raftProperties.set(key, val);
}
});
}

private static boolean isClientConfig(String key) {
return key.startsWith(RaftClientConfigKeys.PREFIX);
}

private static boolean isGrpcClientConfig(String key) {
return key.startsWith(GrpcConfigKeys.PREFIX) && !key
.startsWith(GrpcConfigKeys.TLS.PREFIX) && !key
.startsWith(GrpcConfigKeys.Server.PREFIX);
}
/**
* Set all the properties matching with prefix
* Set all server properties matching with prefix
* {@link RatisHelper#HDDS_DATANODE_RATIS_PREFIX_KEY} in
* ozone configuration object and configure it to RaftProperties.
* @param ozoneConf
Expand All @@ -266,7 +262,7 @@ public static void createRaftServerProperties(ConfigurationSource ozoneConf,
getDatanodeRatisPrefixProps(ozoneConf);
ratisServerConf.forEach((key, val) -> {
// Exclude ratis client configuration.
if (!key.startsWith(RaftClientConfigKeys.PREFIX)) {
if (!isClientConfig(key)) {
raftProperties.set(key, val);
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

/**
* Configuration related to Ratis Client. This is the config used in creating
* RaftClient creation.
* RaftClient.
*/
@ConfigGroup(prefix = RatisHelper.HDDS_DATANODE_RATIS_PREFIX_KEY)
public class RatisClientConfig {
Expand All @@ -38,7 +38,9 @@ public class RatisClientConfig {
* Configurations which will be set in RaftProperties. RaftProperties is a
* configuration object for Ratis client.
*/
@ConfigGroup(prefix = RaftClientConfigKeys.PREFIX)
@ConfigGroup(prefix =
RatisHelper.HDDS_DATANODE_RATIS_PREFIX_KEY + "." +
RaftClientConfigKeys.PREFIX)
public static class RaftConfig {
@Config(key = "async.outstanding-requests.max",
defaultValue = "32",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,18 @@

package org.apache.hadoop.hdds.conf;

import org.apache.ratis.grpc.GrpcConfigKeys;

import static org.apache.hadoop.hdds.conf.ConfigTag.CLIENT;
import static org.apache.hadoop.hdds.conf.ConfigTag.OZONE;
import static org.apache.hadoop.hdds.conf.ConfigTag.PERFORMANCE;
import static org.apache.hadoop.hdds.ratis.RatisHelper.HDDS_DATANODE_RATIS_GRPC_PREFIX_KEY;
import static org.apache.hadoop.hdds.ratis.RatisHelper.HDDS_DATANODE_RATIS_PREFIX_KEY;

/**
* Ratis Grpc Config Keys.
*/
@ConfigGroup(prefix = HDDS_DATANODE_RATIS_GRPC_PREFIX_KEY)
@ConfigGroup(prefix = HDDS_DATANODE_RATIS_PREFIX_KEY + "."
+ GrpcConfigKeys.PREFIX)
public class DatanodeRatisGrpcConfig {
@Config(key = "message.size.max",
defaultValue = "32MB",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,36 +18,24 @@

package org.apache.hadoop.hdds.conf;

import org.apache.ratis.server.RaftServerConfigKeys;

import java.time.Duration;

import static org.apache.hadoop.hdds.conf.ConfigTag.DATANODE;
import static org.apache.hadoop.hdds.conf.ConfigTag.OZONE;
import static org.apache.hadoop.hdds.conf.ConfigTag.PERFORMANCE;
import static org.apache.hadoop.hdds.conf.ConfigTag.RATIS;
import static org.apache.hadoop.hdds.ratis.RatisHelper.HDDS_DATANODE_RATIS_SERVER_PREFIX_KEY;
import static org.apache.hadoop.hdds.ratis.RatisHelper.HDDS_DATANODE_RATIS_PREFIX_KEY;

/**
* Datanode Ratis server Configuration.
*/
@ConfigGroup(prefix = HDDS_DATANODE_RATIS_SERVER_PREFIX_KEY)
@ConfigGroup(prefix = HDDS_DATANODE_RATIS_PREFIX_KEY + "."
+ RaftServerConfigKeys.PREFIX)
public class DatanodeRatisServerConfig {

private static final String RATIS_SERVER_REQUEST_TIMEOUT_KEY =
"rpc.request.timeout";

private static final String RATIS_SERVER_WATCH_REQUEST_TIMEOUT_KEY =
"watch.timeout";

private static final String RATIS_SERVER_NO_LEADER_TIMEOUT_KEY =
"Notification.no-leader.timeout";

private static final String RATIS_FOLLOWER_SLOWNESS_TIMEOUT_KEY =
"rpcslowness.timeout";

private static final String RATIS_LEADER_NUM_PENDING_REQUESTS_KEY =
"write.element-limit";

@Config(key = RATIS_SERVER_REQUEST_TIMEOUT_KEY,
@Config(key = "rpc.request.timeout",
defaultValue = "60s",
type = ConfigType.TIME,
tags = {OZONE, DATANODE, RATIS},
Expand All @@ -64,7 +52,7 @@ public void setRequestTimeOut(Duration duration) {
this.requestTimeOut = duration.toMillis();
}

@Config(key = RATIS_SERVER_WATCH_REQUEST_TIMEOUT_KEY,
@Config(key = "watch.timeout",
defaultValue = "180s",
type = ConfigType.TIME,
tags = {OZONE, DATANODE, RATIS},
Expand All @@ -82,7 +70,7 @@ public void setWatchTimeOut(Duration duration) {
this.watchTimeOut = duration.toMillis();
}

@Config(key = RATIS_SERVER_NO_LEADER_TIMEOUT_KEY,
@Config(key = "notification.no-leader.timeout",
defaultValue = "300s",
type = ConfigType.TIME,
tags = {OZONE, DATANODE, RATIS},
Expand All @@ -100,7 +88,7 @@ public void setNoLeaderTimeout(Duration duration) {
this.noLeaderTimeout = duration.toMillis();
}

@Config(key = RATIS_FOLLOWER_SLOWNESS_TIMEOUT_KEY,
@Config(key = "rpcslowness.timeout",
defaultValue = "300s",
type = ConfigType.TIME,
tags = {OZONE, DATANODE, RATIS},
Expand All @@ -118,7 +106,7 @@ public void setFollowerSlownessTimeout(Duration duration) {
this.followerSlownessTimeout = duration.toMillis();
}

@Config(key = RATIS_LEADER_NUM_PENDING_REQUESTS_KEY,
@Config(key = "write.element-limit",
defaultValue = "1024",
type = ConfigType.INT,
tags = {OZONE, DATANODE, RATIS, PERFORMANCE},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
import org.apache.hadoop.hdds.conf.DatanodeRatisServerConfig;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.ratis.RatisHelper;
import org.apache.hadoop.hdds.ratis.conf.RatisClientConfig;
import org.apache.hadoop.hdds.scm.ScmConfigKeys;
import org.apache.hadoop.ozone.MiniOzoneCluster;
import org.apache.hadoop.ozone.OzoneConsts;
Expand Down Expand Up @@ -71,14 +71,13 @@ public static void createCluster() throws IOException {
ratisServerConfig.setRequestTimeOut(Duration.ofSeconds(3));
ratisServerConfig.setWatchTimeOut(Duration.ofSeconds(10));
conf.setFromObject(ratisServerConfig);
conf.setTimeDuration(
RatisHelper.HDDS_DATANODE_RATIS_CLIENT_PREFIX_KEY + "." +
"rpc.request.timeout",
3, TimeUnit.SECONDS);
conf.setTimeDuration(
RatisHelper.HDDS_DATANODE_RATIS_CLIENT_PREFIX_KEY + "." +
"watch.request.timeout",
10, TimeUnit.SECONDS);

RatisClientConfig.RaftConfig raftClientConfig =
conf.getObject(RatisClientConfig.RaftConfig.class);
raftClientConfig.setRpcRequestTimeout(TimeUnit.SECONDS.toMillis(3));
raftClientConfig.setRpcWatchRequestTimeout(TimeUnit.SECONDS.toMillis(10));
conf.setFromObject(raftClientConfig);

conf.addResource(CONTRACT_XML);

cluster = MiniOzoneCluster.newBuilder(conf).setNumDatanodes(5).build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
import org.apache.hadoop.hdds.conf.DatanodeRatisServerConfig;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.ratis.RatisHelper;
import org.apache.hadoop.hdds.ratis.conf.RatisClientConfig;
import org.apache.hadoop.hdds.scm.ScmConfigKeys;
import org.apache.hadoop.ozone.MiniOzoneCluster;
import org.apache.hadoop.ozone.OzoneConsts;
Expand Down Expand Up @@ -68,14 +68,13 @@ public static void createCluster() throws IOException {
ratisServerConfig.setRequestTimeOut(Duration.ofSeconds(3));
ratisServerConfig.setWatchTimeOut(Duration.ofSeconds(10));
conf.setFromObject(ratisServerConfig);
conf.setTimeDuration(
RatisHelper.HDDS_DATANODE_RATIS_CLIENT_PREFIX_KEY + "." +
"rpc.request.timeout",
3, TimeUnit.SECONDS);
conf.setTimeDuration(
RatisHelper.HDDS_DATANODE_RATIS_CLIENT_PREFIX_KEY + "." +
"watch.request.timeout",
10, TimeUnit.SECONDS);

RatisClientConfig.RaftConfig raftClientConfig =
conf.getObject(RatisClientConfig.RaftConfig.class);
raftClientConfig.setRpcRequestTimeout(TimeUnit.SECONDS.toMillis(3));
raftClientConfig.setRpcWatchRequestTimeout(TimeUnit.SECONDS.toMillis(10));
conf.setFromObject(raftClientConfig);

conf.addResource(CONTRACT_XML);

cluster = MiniOzoneCluster.newBuilder(conf).setNumDatanodes(5).build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public static void init() throws Exception {
DatanodeRatisServerConfig ratisServerConfig =
conf.getObject(DatanodeRatisServerConfig.class);
ratisServerConfig.setFollowerSlownessTimeout(Duration.ofSeconds(10));
ratisServerConfig.setNoLeaderTimeout(Duration.ofSeconds(10));
ratisServerConfig.setNoLeaderTimeout(Duration.ofMinutes(5));
conf.setFromObject(ratisServerConfig);
conf.set(HddsConfigKeys.HDDS_PIPELINE_REPORT_INTERVAL, "2s");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import org.apache.hadoop.hdds.conf.DatanodeRatisServerConfig;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.ratis.RatisHelper;
import org.apache.hadoop.hdds.ratis.conf.RatisClientConfig;
import org.apache.hadoop.hdds.scm.XceiverClientManager;
import org.apache.hadoop.hdds.scm.XceiverClientRatis;
import org.apache.hadoop.hdds.scm.XceiverClientSpi;
Expand Down Expand Up @@ -97,14 +97,12 @@ private void startCluster(OzoneConfiguration conf) throws Exception {
ratisServerConfig.setRequestTimeOut(Duration.ofSeconds(3));
ratisServerConfig.setWatchTimeOut(Duration.ofSeconds(10));
conf.setFromObject(ratisServerConfig);
conf.setTimeDuration(
RatisHelper.HDDS_DATANODE_RATIS_CLIENT_PREFIX_KEY+ "." +
"rpc.request.timeout",
3, TimeUnit.SECONDS);
conf.setTimeDuration(
RatisHelper.HDDS_DATANODE_RATIS_CLIENT_PREFIX_KEY+ "." +
"watch.request.timeout",
10, TimeUnit.SECONDS);

RatisClientConfig.RaftConfig raftClientConfig =
conf.getObject(RatisClientConfig.RaftConfig.class);
raftClientConfig.setRpcRequestTimeout(TimeUnit.SECONDS.toMillis(3));
raftClientConfig.setRpcWatchRequestTimeout(TimeUnit.SECONDS.toMillis(10));
conf.setFromObject(raftClientConfig);

conf.setQuietMode(false);
cluster = MiniOzoneCluster.newBuilder(conf)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import org.apache.hadoop.hdds.client.ReplicationType;
import org.apache.hadoop.hdds.conf.DatanodeRatisServerConfig;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.ratis.RatisHelper;
import org.apache.hadoop.hdds.ratis.conf.RatisClientConfig;
import org.apache.hadoop.hdds.scm.ScmConfigKeys;
import org.apache.hadoop.hdds.scm.XceiverClientRatis;
import org.apache.hadoop.hdds.scm.client.HddsClientUtils;
Expand Down Expand Up @@ -108,19 +108,21 @@ public void init() throws Exception {
ratisServerConfig.setRequestTimeOut(Duration.ofSeconds(3));
ratisServerConfig.setWatchTimeOut(Duration.ofSeconds(3));
conf.setFromObject(ratisServerConfig);
conf.setTimeDuration(
RatisHelper.HDDS_DATANODE_RATIS_CLIENT_PREFIX_KEY+ "." +
"rpc.request.timeout",
3, TimeUnit.SECONDS);
conf.setTimeDuration(
RatisHelper.HDDS_DATANODE_RATIS_CLIENT_PREFIX_KEY+ "." +
"watch.request.timeout",
3, TimeUnit.SECONDS);

RatisClientConfig.RaftConfig raftClientConfig =
conf.getObject(RatisClientConfig.RaftConfig.class);
raftClientConfig.setRpcRequestTimeout(TimeUnit.SECONDS.toMillis(3));
raftClientConfig.setRpcWatchRequestTimeout(TimeUnit.SECONDS.toMillis(3));
conf.setFromObject(raftClientConfig);

conf.setBoolean(OZONE_CLIENT_STREAM_BUFFER_FLUSH_DELAY, false);
conf.setTimeDuration(RatisHelper.HDDS_DATANODE_RATIS_PREFIX_KEY
+ ".client.request.write.timeout", 30, TimeUnit.SECONDS);
conf.setTimeDuration(RatisHelper.HDDS_DATANODE_RATIS_PREFIX_KEY
+ ".client.request.watch.timeout", 30, TimeUnit.SECONDS);

RatisClientConfig ratisClientConfig =
conf.getObject(RatisClientConfig.class);
ratisClientConfig.setWriteRequestTimeoutInMs(TimeUnit.SECONDS.toMillis(30));
ratisClientConfig.setWatchRequestTimeoutInMs(TimeUnit.SECONDS.toMillis(30));
conf.setFromObject(ratisClientConfig);

cluster = MiniOzoneCluster.newBuilder(conf).setNumDatanodes(7)
.setTotalPipelineNumLimit(10).setBlockSize(blockSize)
.setChunkSize(chunkSize).setStreamBufferFlushSize(flushSize)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import org.apache.hadoop.hdds.conf.DatanodeRatisServerConfig;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.ratis.RatisHelper;
import org.apache.hadoop.hdds.ratis.conf.RatisClientConfig;
import org.apache.hadoop.hdds.scm.ScmConfigKeys;
import org.apache.hadoop.hdds.scm.XceiverClientRatis;
import org.apache.hadoop.hdds.scm.client.HddsClientUtils;
Expand Down Expand Up @@ -102,18 +102,20 @@ public void init() throws Exception {
ratisServerConfig.setRequestTimeOut(Duration.ofSeconds(3));
ratisServerConfig.setWatchTimeOut(Duration.ofSeconds(3));
conf.setFromObject(ratisServerConfig);
conf.setTimeDuration(
RatisHelper.HDDS_DATANODE_RATIS_CLIENT_PREFIX_KEY+ "." +
"rpc.request.timeout",
3, TimeUnit.SECONDS);
conf.setTimeDuration(
RatisHelper.HDDS_DATANODE_RATIS_CLIENT_PREFIX_KEY+ "." +
"watch.request.timeout",
3, TimeUnit.SECONDS);
conf.setTimeDuration(RatisHelper.HDDS_DATANODE_RATIS_PREFIX_KEY
+ ".client.request.write.timeout", 30, TimeUnit.SECONDS);
conf.setTimeDuration(RatisHelper.HDDS_DATANODE_RATIS_PREFIX_KEY
+ ".client.request.watch.timeout", 30, TimeUnit.SECONDS);

RatisClientConfig.RaftConfig raftClientConfig =
conf.getObject(RatisClientConfig.RaftConfig.class);
raftClientConfig.setRpcRequestTimeout(TimeUnit.SECONDS.toMillis(3));
raftClientConfig.setRpcWatchRequestTimeout(TimeUnit.SECONDS.toMillis(3));
conf.setFromObject(raftClientConfig);


RatisClientConfig ratisClientConfig =
conf.getObject(RatisClientConfig.class);
ratisClientConfig.setWriteRequestTimeoutInMs(TimeUnit.SECONDS.toMillis(30));
ratisClientConfig.setWatchRequestTimeoutInMs(TimeUnit.SECONDS.toMillis(30));
conf.setFromObject(ratisClientConfig);

cluster = MiniOzoneCluster.newBuilder(conf).setNumDatanodes(7)
.setTotalPipelineNumLimit(10).setBlockSize(blockSize)
.setChunkSize(chunkSize).setStreamBufferFlushSize(flushSize)
Expand Down
Loading