Browse Source

HADOOP-13847. KMSWebApp should close KeyProviderCryptoExtension. Contributed by John Zhuge.

(cherry picked from commit 291df5c7fb713d5442ee29eb3f272127afb05a3c)
Xiao Chen 8 years ago
parent
commit
49f9e7cf71

+ 3 - 2
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/key/KeyProviderCryptoExtension.java

@@ -412,8 +412,9 @@ public class KeyProviderCryptoExtension extends
 
 
   @Override
   @Override
   public void close() throws IOException {
   public void close() throws IOException {
-    if (getKeyProvider() != null) {
-      getKeyProvider().close();
+    KeyProvider provider = getKeyProvider();
+    if (provider != null && provider != this) {
+      provider.close();
     }
     }
   }
   }
 
 

+ 6 - 1
hadoop-common-project/hadoop-kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSWebApp.java

@@ -40,9 +40,9 @@ import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
 import javax.servlet.ServletContextListener;
 
 
 import java.io.File;
 import java.io.File;
+import java.io.IOException;
 import java.net.URI;
 import java.net.URI;
 import java.net.URL;
 import java.net.URL;
-import java.util.List;
 
 
 @InterfaceAudience.Private
 @InterfaceAudience.Private
 public class KMSWebApp implements ServletContextListener {
 public class KMSWebApp implements ServletContextListener {
@@ -218,6 +218,11 @@ public class KMSWebApp implements ServletContextListener {
 
 
   @Override
   @Override
   public void contextDestroyed(ServletContextEvent sce) {
   public void contextDestroyed(ServletContextEvent sce) {
+    try {
+      keyProviderCryptoExtension.close();
+    } catch (IOException ioe) {
+      LOG.error("Error closing KeyProviderCryptoExtension", ioe);
+    }
     kmsAudit.shutdown();
     kmsAudit.shutdown();
     kmsAcls.stopReloader();
     kmsAcls.stopReloader();
     jmxReporter.stop();
     jmxReporter.stop();