This is an automated email from the ASF dual-hosted git repository.

adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 61772231e3 HDDS-8570. Error closing 
SCMSecurityProtocolClientSideTranslatorPB (#4679)
61772231e3 is described below

commit 61772231e33ccb4a788b48486a3d8013ef05b4f7
Author: Duong Nguyen <[email protected]>
AuthorDate: Tue May 9 13:38:24 2023 -0700

    HDDS-8570. Error closing SCMSecurityProtocolClientSideTranslatorPB (#4679)
---
 .../SCMSecurityProtocolFailoverProxyProvider.java  |  9 ++---
 .../apache/hadoop/hdds/utils/HddsServerUtil.java   |  4 +-
 .../hadoop/ozone/TestSecureOzoneCluster.java       | 43 +++++++++++-----------
 3 files changed, 28 insertions(+), 28 deletions(-)

diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/proxy/SCMSecurityProtocolFailoverProxyProvider.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/proxy/SCMSecurityProtocolFailoverProxyProvider.java
index 18d1be6b43..77fc646d84 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/proxy/SCMSecurityProtocolFailoverProxyProvider.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/proxy/SCMSecurityProtocolFailoverProxyProvider.java
@@ -286,12 +286,11 @@ public class SCMSecurityProtocolFailoverProxyProvider 
implements
 
   @Override
   public synchronized void close() throws IOException {
-    for (Map.Entry<String, ProxyInfo<SCMSecurityProtocolPB>> proxy :
-        scmProxies.entrySet()) {
-      if (proxy.getValue() != null) {
-        RPC.stopProxy(proxy.getValue());
+    for (ProxyInfo<SCMSecurityProtocolPB> proxyInfo : scmProxies.values()) {
+      SCMSecurityProtocolPB proxy = proxyInfo.proxy;
+      if (proxy != null) {
+        RPC.stopProxy(proxy);
       }
-      scmProxies.remove(proxy.getKey());
     }
   }
 
diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/HddsServerUtil.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/HddsServerUtil.java
index f120ffad33..0f0d40e3ba 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/HddsServerUtil.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/HddsServerUtil.java
@@ -496,13 +496,13 @@ public final class HddsServerUtil {
    * @return {@link ScmBlockLocationProtocol}
    * @throws IOException
    */
-  public static SCMSecurityProtocol getScmSecurityClient(
+  public static SCMSecurityProtocolClientSideTranslatorPB getScmSecurityClient(
       OzoneConfiguration conf, UserGroupInformation ugi) throws IOException {
     SCMSecurityProtocolClientSideTranslatorPB scmSecurityClient =
         new SCMSecurityProtocolClientSideTranslatorPB(
             new SCMSecurityProtocolFailoverProxyProvider(conf, ugi));
     return TracingUtil.createProxy(scmSecurityClient,
-        SCMSecurityProtocol.class, conf);
+        SCMSecurityProtocolClientSideTranslatorPB.class, conf);
   }
 
   /**
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestSecureOzoneCluster.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestSecureOzoneCluster.java
index 2281f5900b..16c1cb62d8 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestSecureOzoneCluster.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestSecureOzoneCluster.java
@@ -44,7 +44,6 @@ import org.apache.hadoop.hdds.HddsConfigKeys;
 import org.apache.hadoop.hdds.annotation.InterfaceAudience;
 import org.apache.hadoop.hdds.conf.DefaultConfigManager;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.hdds.protocol.SCMSecurityProtocol;
 import org.apache.hadoop.hdds.protocol.proto.SCMSecurityProtocolProtos;
 import 
org.apache.hadoop.hdds.protocol.proto.SCMSecurityProtocolProtos.SCMGetCertResponseProto;
 import 
org.apache.hadoop.hdds.protocolPB.SCMSecurityProtocolClientSideTranslatorPB;
@@ -81,7 +80,6 @@ import 
org.apache.hadoop.hdds.security.x509.exception.CertificateException;
 import org.apache.hadoop.hdds.security.x509.keys.HDDSKeyGenerator;
 import org.apache.hadoop.hdds.security.x509.keys.KeyCodec;
 import org.apache.hadoop.hdds.utils.HAUtils;
-import org.apache.hadoop.hdds.utils.HddsServerUtil;
 import org.apache.hadoop.io.Text;
 import org.apache.hadoop.ipc.Client;
 import org.apache.hadoop.ipc.Server;
@@ -141,6 +139,7 @@ import static 
org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_SECURITY_SERVIC
 import static 
org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_SECURITY_SERVICE_PORT_KEY;
 import static 
org.apache.hadoop.hdds.scm.server.SCMHTTPServerConfig.ConfigStrings.HDDS_SCM_HTTP_KERBEROS_KEYTAB_FILE_KEY;
 import static 
org.apache.hadoop.hdds.scm.server.SCMHTTPServerConfig.ConfigStrings.HDDS_SCM_HTTP_KERBEROS_PRINCIPAL_KEY;
+import static org.apache.hadoop.hdds.utils.HddsServerUtil.getScmSecurityClient;
 import static org.apache.hadoop.net.ServerSocketUtil.getPort;
 import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_ADMINISTRATORS;
 import static 
org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_CLIENT_FAILOVER_MAX_ATTEMPTS_KEY;
@@ -376,29 +375,31 @@ public final class TestSecureOzoneCluster {
           UserGroupInformation.loginUserFromKeytabAndReturnUGI(
               testUserPrincipal, testUserKeytab.getCanonicalPath());
       ugi.setAuthenticationMethod(KERBEROS);
-      SCMSecurityProtocol scmSecurityProtocolClient =
-          HddsServerUtil.getScmSecurityClient(conf, ugi);
-      assertNotNull(scmSecurityProtocolClient);
-      String caCert = scmSecurityProtocolClient.getCACertificate();
-      assertNotNull(caCert);
-      // Get some random certificate, used serial id 100 which will be
-      // unavailable as our serial id is time stamp. Serial id 1 is root CA,
-      // and it is persisted in DB.
-      LambdaTestUtils.intercept(SCMSecurityException.class,
-          "Certificate not found",
-          () -> scmSecurityProtocolClient.getCertificate("100"));
+      try (SCMSecurityProtocolClientSideTranslatorPB securityClient =
+          getScmSecurityClient(conf, ugi)) {
+        assertNotNull(securityClient);
+        String caCert = securityClient.getCACertificate();
+        assertNotNull(caCert);
+        // Get some random certificate, used serial id 100 which will be
+        // unavailable as our serial id is time stamp. Serial id 1 is root CA,
+        // and it is persisted in DB.
+        LambdaTestUtils.intercept(SCMSecurityException.class,
+            "Certificate not found",
+            () -> securityClient.getCertificate("100"));
+      }
 
       // Case 2: User without Kerberos credentials should fail.
       ugi = UserGroupInformation.createRemoteUser("test");
       ugi.setAuthenticationMethod(AuthMethod.TOKEN);
-      SCMSecurityProtocol finalScmSecurityProtocolClient =
-          HddsServerUtil.getScmSecurityClient(conf, ugi);
-
-      String cannotAuthMessage = "Client cannot authenticate via:[KERBEROS]";
-      LambdaTestUtils.intercept(IOException.class, cannotAuthMessage,
-          finalScmSecurityProtocolClient::getCACertificate);
-      LambdaTestUtils.intercept(IOException.class, cannotAuthMessage,
-          () -> finalScmSecurityProtocolClient.getCertificate("1"));
+      try (SCMSecurityProtocolClientSideTranslatorPB securityClient =
+          getScmSecurityClient(conf, ugi)) {
+
+        String cannotAuthMessage = "Client cannot authenticate via:[KERBEROS]";
+        LambdaTestUtils.intercept(IOException.class, cannotAuthMessage,
+            securityClient::getCACertificate);
+        LambdaTestUtils.intercept(IOException.class, cannotAuthMessage,
+            () -> securityClient.getCertificate("1"));
+      }
     } finally {
       if (scm != null) {
         scm.stop();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to