This is an automated email from the ASF dual-hosted git repository. weichiu pushed a commit to branch branch-3.2 in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/branch-3.2 by this push: new 88f3ce1 HDFS-15650. Make the socket timeout for computing checksum of striped blocks configurable (#2414) 88f3ce1 is described below commit 88f3ce11279d6dbf825abbd385e3c43dbd2ad715 Author: crossfire <bs...@outlook.com> AuthorDate: Fri Jul 16 11:58:12 2021 +0900 HDFS-15650. Make the socket timeout for computing checksum of striped blocks configurable (#2414) (cherry picked from commit 4bb25c810beb7abb8540c051114488e69a128ea3) (cherry picked from commit bd0b8a0bcf96fe66a93f59b74822f419cac7eb09) --- .../java/org/apache/hadoop/hdfs/FileChecksumHelper.java | 3 ++- .../apache/hadoop/hdfs/client/HdfsClientConfigKeys.java | 2 ++ .../org/apache/hadoop/hdfs/client/impl/DfsClientConf.java | 12 ++++++++++++ .../hadoop/hdfs/server/datanode/BlockChecksumHelper.java | 2 +- .../org/apache/hadoop/hdfs/server/datanode/DNConf.java | 15 +++++++++++++++ .../hadoop-hdfs/src/main/resources/hdfs-default.xml | 10 ++++++++++ 6 files changed, 42 insertions(+), 2 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/FileChecksumHelper.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/FileChecksumHelper.java index 8f807d5..c1804a2 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/FileChecksumHelper.java +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/FileChecksumHelper.java @@ -623,7 +623,8 @@ final class FileChecksumHelper { @Override void checksumBlocks() throws IOException { - int tmpTimeout = 3000 * 1 + getClient().getConf().getSocketTimeout(); + int tmpTimeout = getClient().getConf().getChecksumEcSocketTimeout() * 1 + + getClient().getConf().getSocketTimeout(); setTimeout(tmpTimeout); for (bgIdx = 0; diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/client/HdfsClientConfigKeys.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/client/HdfsClientConfigKeys.java index 6a7e0a8..b74c119 100755 --- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/client/HdfsClientConfigKeys.java +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/client/HdfsClientConfigKeys.java @@ -127,6 +127,8 @@ public interface HdfsClientConfigKeys { int DFS_BYTES_PER_CHECKSUM_DEFAULT = 512; String DFS_CHECKSUM_COMBINE_MODE_KEY = "dfs.checksum.combine.mode"; String DFS_CHECKSUM_COMBINE_MODE_DEFAULT = "MD5MD5CRC"; + String DFS_CHECKSUM_EC_SOCKET_TIMEOUT_KEY = "dfs.checksum.ec.socket-timeout"; + int DFS_CHECKSUM_EC_SOCKET_TIMEOUT_DEFAULT = 3000; String DFS_DATANODE_SOCKET_WRITE_TIMEOUT_KEY = "dfs.datanode.socket.write.timeout"; String DFS_CLIENT_DOMAIN_SOCKET_DATA_TRAFFIC = diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/client/impl/DfsClientConf.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/client/impl/DfsClientConf.java index cb49295..c0c6893 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/client/impl/DfsClientConf.java +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/client/impl/DfsClientConf.java @@ -41,6 +41,8 @@ import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_BYTES_PER_C import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_BYTES_PER_CHECKSUM_KEY; import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_CHECKSUM_COMBINE_MODE_DEFAULT; import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_CHECKSUM_COMBINE_MODE_KEY; +import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_CHECKSUM_EC_SOCKET_TIMEOUT_DEFAULT; +import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_CHECKSUM_EC_SOCKET_TIMEOUT_KEY; import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_CHECKSUM_TYPE_DEFAULT; import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_CHECKSUM_TYPE_KEY; import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_CLIENT_CACHED_CONN_RETRY_DEFAULT; @@ -110,6 +112,7 @@ public class DfsClientConf { private final int ioBufferSize; private final ChecksumOpt defaultChecksumOpt; private final ChecksumCombineMode checksumCombineMode; + private final int checksumEcSocketTimeout; private final int writePacketSize; private final int writeMaxPackets; private final ByteArrayManager.Conf writeByteArrayManagerConf; @@ -186,6 +189,8 @@ public class DfsClientConf { CommonConfigurationKeysPublic.IO_FILE_BUFFER_SIZE_DEFAULT); defaultChecksumOpt = getChecksumOptFromConf(conf); checksumCombineMode = getChecksumCombineModeFromConf(conf); + checksumEcSocketTimeout = conf.getInt(DFS_CHECKSUM_EC_SOCKET_TIMEOUT_KEY, + DFS_CHECKSUM_EC_SOCKET_TIMEOUT_DEFAULT); dataTransferTcpNoDelay = conf.getBoolean( DFS_DATA_TRANSFER_CLIENT_TCPNODELAY_KEY, DFS_DATA_TRANSFER_CLIENT_TCPNODELAY_DEFAULT); @@ -433,6 +438,13 @@ public class DfsClientConf { } /** + * @return the checksumEcSocketTimeout + */ + public int getChecksumEcSocketTimeout() { + return checksumEcSocketTimeout; + } + + /** * @return the writePacketSize */ public int getWritePacketSize() { diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockChecksumHelper.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockChecksumHelper.java index 014e009..a6c52e8 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockChecksumHelper.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockChecksumHelper.java @@ -597,7 +597,7 @@ final class BlockChecksumHelper { private void checksumBlock(ExtendedBlock block, int blockIdx, Token<BlockTokenIdentifier> blockToken, DatanodeInfo targetDatanode) throws IOException { - int timeout = 3000; + int timeout = getDatanode().getDnConf().getEcChecksumSocketTimeout(); try (IOStreamPair pair = getDatanode().connectToDN(targetDatanode, timeout, block, blockToken)) { diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DNConf.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DNConf.java index 9f792472..5252e68 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DNConf.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DNConf.java @@ -60,6 +60,8 @@ import static org.apache.hadoop.hdfs.DFSConfigKeys.IGNORE_SECURE_PORTS_FOR_TESTI import static org.apache.hadoop.hdfs.DFSConfigKeys.IGNORE_SECURE_PORTS_FOR_TESTING_DEFAULT; import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_DATANODE_BP_READY_TIMEOUT_KEY; import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_DATANODE_BP_READY_TIMEOUT_DEFAULT; +import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_CHECKSUM_EC_SOCKET_TIMEOUT_KEY; +import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_CHECKSUM_EC_SOCKET_TIMEOUT_DEFAULT; import org.apache.hadoop.conf.Configurable; import org.apache.hadoop.conf.Configuration; @@ -82,6 +84,7 @@ public class DNConf { final int socketTimeout; final int socketWriteTimeout; final int socketKeepaliveTimeout; + final int ecChecksumSocketTimeout; private final int transferSocketSendBufferSize; private final int transferSocketRecvBufferSize; private final boolean tcpNoDelay; @@ -141,6 +144,9 @@ public class DNConf { socketKeepaliveTimeout = getConf().getInt( DFSConfigKeys.DFS_DATANODE_SOCKET_REUSE_KEEPALIVE_KEY, DFSConfigKeys.DFS_DATANODE_SOCKET_REUSE_KEEPALIVE_DEFAULT); + ecChecksumSocketTimeout = getConf().getInt( + DFS_CHECKSUM_EC_SOCKET_TIMEOUT_KEY, + DFS_CHECKSUM_EC_SOCKET_TIMEOUT_DEFAULT); this.transferSocketSendBufferSize = getConf().getInt( DFSConfigKeys.DFS_DATANODE_TRANSFER_SOCKET_SEND_BUFFER_SIZE_KEY, DFSConfigKeys.DFS_DATANODE_TRANSFER_SOCKET_SEND_BUFFER_SIZE_DEFAULT); @@ -363,6 +369,15 @@ public class DNConf { } /** + * Returns socket timeout for computing the checksum of EC blocks + * + * @return int socket timeout + */ + public int getEcChecksumSocketTimeout() { + return ecChecksumSocketTimeout; + } + + /** * Returns the SaslPropertiesResolver configured for use with * DataTransferProtocol, or null if not configured. * diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml b/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml index c8a5f11..bcbccb9 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml @@ -3783,6 +3783,16 @@ </property> <property> + <name>dfs.checksum.ec.socket-timeout</name> + <value>3000</value> + <description> + Default timeout value in milliseconds for computing the checksum of striped blocks. + Recommended to set the same value between client and DNs in a cluster because mismatching + may cause exhausting handler threads. + </description> +</property> + +<property> <name>dfs.client.block.write.locateFollowingBlock.retries</name> <value>5</value> <description> --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org