Skip to content

Commit ec34cee

Browse files
authored
HDDS-2047. Datanodes fail to come up after 10 retries in a secure env… (#1379)
1 parent c929b38 commit ec34cee

File tree

3 files changed

+13
-33
lines changed

3 files changed

+13
-33
lines changed

hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HddsUtils.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.util.Map;
3131
import java.util.Optional;
3232
import java.util.TimeZone;
33+
import java.util.concurrent.TimeUnit;
3334

3435
import org.apache.hadoop.classification.InterfaceAudience;
3536
import org.apache.hadoop.classification.InterfaceStability;
@@ -43,6 +44,8 @@
4344
import org.apache.hadoop.hdds.protocol.SCMSecurityProtocol;
4445
import org.apache.hadoop.hdds.scm.protocolPB.ScmBlockLocationProtocolPB;
4546
import org.apache.hadoop.hdfs.DFSConfigKeys;
47+
import org.apache.hadoop.io.retry.RetryPolicies;
48+
import org.apache.hadoop.io.retry.RetryPolicy;
4649
import org.apache.hadoop.ipc.Client;
4750
import org.apache.hadoop.ipc.ProtobufRpcEngine;
4851
import org.apache.hadoop.ipc.RPC;
@@ -177,23 +180,27 @@ public static InetSocketAddress getScmAddressForBlockClients(
177180
/**
178181
* Create a scm security client.
179182
* @param conf - Ozone configuration.
180-
* @param address - inet socket address of scm.
181183
*
182184
* @return {@link SCMSecurityProtocol}
183185
* @throws IOException
184186
*/
185187
public static SCMSecurityProtocolClientSideTranslatorPB getScmSecurityClient(
186-
OzoneConfiguration conf, InetSocketAddress address) throws IOException {
188+
OzoneConfiguration conf) throws IOException {
187189
RPC.setProtocolEngine(conf, SCMSecurityProtocolPB.class,
188190
ProtobufRpcEngine.class);
189191
long scmVersion =
190192
RPC.getProtocolVersion(ScmBlockLocationProtocolPB.class);
193+
InetSocketAddress address =
194+
getScmAddressForSecurityProtocol(conf);
195+
RetryPolicy retryPolicy =
196+
RetryPolicies.retryForeverWithFixedSleep(
197+
1000, TimeUnit.MILLISECONDS);
191198
SCMSecurityProtocolClientSideTranslatorPB scmSecurityClient =
192199
new SCMSecurityProtocolClientSideTranslatorPB(
193-
RPC.getProxy(SCMSecurityProtocolPB.class, scmVersion,
200+
RPC.getProtocolProxy(SCMSecurityProtocolPB.class, scmVersion,
194201
address, UserGroupInformation.getCurrentUser(),
195202
conf, NetUtils.getDefaultSocketFactory(conf),
196-
Client.getRpcTimeout(conf)));
203+
Client.getRpcTimeout(conf), retryPolicy).getProxy());
197204
return scmSecurityClient;
198205
}
199206

hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/HddsDatanodeService.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,8 +272,7 @@ private void getSCMSignedCert(OzoneConfiguration config) {
272272
PKCS10CertificationRequest csr = getCSR(config);
273273
// TODO: For SCM CA we should fetch certificate from multiple SCMs.
274274
SCMSecurityProtocolClientSideTranslatorPB secureScmClient =
275-
HddsUtils.getScmSecurityClient(config,
276-
HddsUtils.getScmAddressForSecurityProtocol(config));
275+
HddsUtils.getScmSecurityClient(config);
277276
SCMGetCertResponseProto response = secureScmClient.
278277
getDataNodeCertificateChain(datanodeDetails.getProtoBufMessage(),
279278
getEncodedString(csr));

hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,8 @@
4848
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
4949
import org.apache.hadoop.hdds.protocol.DatanodeDetails;
5050
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
51-
import org.apache.hadoop.hdds.protocol.SCMSecurityProtocol;
5251
import org.apache.hadoop.hdds.protocol.proto.SCMSecurityProtocolProtos.SCMGetCertResponseProto;
5352
import org.apache.hadoop.hdds.protocolPB.SCMSecurityProtocolClientSideTranslatorPB;
54-
import org.apache.hadoop.hdds.protocolPB.SCMSecurityProtocolPB;
5553
import org.apache.hadoop.hdds.scm.ScmInfo;
5654
import org.apache.hadoop.hdds.scm.container.common.helpers.ExcludeList;
5755
import org.apache.hadoop.hdds.scm.protocol.ScmBlockLocationProtocol;
@@ -183,7 +181,6 @@
183181
import static org.apache.hadoop.hdds.HddsConfigKeys.HDDS_BLOCK_TOKEN_ENABLED_DEFAULT;
184182
import static org.apache.hadoop.hdds.HddsUtils.getScmAddressForBlockClients;
185183
import static org.apache.hadoop.hdds.HddsUtils.getScmAddressForClients;
186-
import static org.apache.hadoop.hdds.HddsUtils.getScmAddressForSecurityProtocol;
187184
import static org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeState.HEALTHY;
188185
import static org.apache.hadoop.hdds.security.x509.certificates.utils.CertificateSignRequest.getEncodedString;
189186
import static org.apache.hadoop.hdds.server.ServerUtils.updateRPCListenAddress;
@@ -951,29 +948,6 @@ private static ScmBlockLocationProtocol getScmBlockClient(
951948
conf);
952949
}
953950

954-
/**
955-
* Create a scm security client, used to get SCM signed certificate.
956-
*
957-
* @return {@link SCMSecurityProtocol}
958-
* @throws IOException
959-
*/
960-
private static SCMSecurityProtocolClientSideTranslatorPB
961-
getScmSecurityClient(OzoneConfiguration conf) throws IOException {
962-
RPC.setProtocolEngine(conf, SCMSecurityProtocolPB.class,
963-
ProtobufRpcEngine.class);
964-
long scmVersion =
965-
RPC.getProtocolVersion(ScmBlockLocationProtocolPB.class);
966-
InetSocketAddress scmSecurityProtoAdd =
967-
getScmAddressForSecurityProtocol(conf);
968-
SCMSecurityProtocolClientSideTranslatorPB scmSecurityClient =
969-
new SCMSecurityProtocolClientSideTranslatorPB(
970-
RPC.getProxy(SCMSecurityProtocolPB.class, scmVersion,
971-
scmSecurityProtoAdd, UserGroupInformation.getCurrentUser(),
972-
conf, NetUtils.getDefaultSocketFactory(conf),
973-
Client.getRpcTimeout(conf)));
974-
return scmSecurityClient;
975-
}
976-
977951
/**
978952
* Returns a scm container client.
979953
*
@@ -1563,7 +1537,7 @@ private static void getSCMSignedCert(CertificateClient client,
15631537
omDetailsProtoBuilder.build();
15641538
LOG.info("OzoneManager ports added:{}", omDetailsProto.getPortsList());
15651539
SCMSecurityProtocolClientSideTranslatorPB secureScmClient =
1566-
getScmSecurityClient(config);
1540+
HddsUtils.getScmSecurityClient(config);
15671541

15681542
SCMGetCertResponseProto response = secureScmClient.
15691543
getOMCertChain(omDetailsProto, getEncodedString(csr));

0 commit comments

Comments
 (0)