KNOX-2130 - Handle InterruptedException better (#199)

Signed-off-by: Kevin Risden <krisden@apache.org>
diff --git a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariConfigurationMonitor.java b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariConfigurationMonitor.java
index fc8cc96..7867c6e 100644
--- a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariConfigurationMonitor.java
+++ b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariConfigurationMonitor.java
@@ -475,7 +475,6 @@
             this.interval = interval;
         }
 
-
         void stop() {
             isActive = false;
         }
@@ -521,7 +520,7 @@
                 try {
                     Thread.sleep(interval * 1000L);
                 } catch (InterruptedException e) {
-                    // Ignore
+                    Thread.currentThread().interrupt();
                 }
             }
         }
diff --git a/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/dispatch/ConfigurableHADispatch.java b/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/dispatch/ConfigurableHADispatch.java
index 137b131..a5425d8 100644
--- a/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/dispatch/ConfigurableHADispatch.java
+++ b/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/dispatch/ConfigurableHADispatch.java
@@ -116,6 +116,7 @@
           Thread.sleep(failoverSleep);
         } catch ( InterruptedException e ) {
           LOG.failoverSleepFailed(getServiceRole(), e);
+          Thread.currentThread().interrupt();
         }
       }
       executeRequest(outboundRequest, inboundRequest, outboundResponse);
diff --git a/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/dispatch/DefaultHaDispatch.java b/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/dispatch/DefaultHaDispatch.java
index d53747a..698427a 100644
--- a/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/dispatch/DefaultHaDispatch.java
+++ b/gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/dispatch/DefaultHaDispatch.java
@@ -114,6 +114,7 @@
           Thread.sleep(failoverSleep);
         } catch ( InterruptedException e ) {
           LOG.failoverSleepFailed(getServiceRole(), e);
+          Thread.currentThread().interrupt();
         }
       }
       executeRequest(outboundRequest, inboundRequest, outboundResponse);
@@ -126,5 +127,4 @@
       }
     }
   }
-
 }
diff --git a/gateway-server/src/main/java/org/apache/knox/gateway/services/topology/impl/DefaultTopologyService.java b/gateway-server/src/main/java/org/apache/knox/gateway/services/topology/impl/DefaultTopologyService.java
index 85470f9..4a1101d 100644
--- a/gateway-server/src/main/java/org/apache/knox/gateway/services/topology/impl/DefaultTopologyService.java
+++ b/gateway-server/src/main/java/org/apache/knox/gateway/services/topology/impl/DefaultTopologyService.java
@@ -72,7 +72,6 @@
 import java.io.File;
 import java.io.FileFilter;
 import java.io.IOException;
-import java.net.URISyntaxException;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -87,9 +86,8 @@
 
 import static org.apache.commons.digester3.binder.DigesterLoader.newLoader;
 
-public class DefaultTopologyService
-    extends FileAlterationListenerAdaptor
-    implements TopologyService, TopologyMonitor, TopologyProvider, FileFilter, FileAlterationListener, ServiceDefinitionChangeListener {
+public class DefaultTopologyService extends FileAlterationListenerAdaptor implements TopologyService, TopologyMonitor,
+    TopologyProvider, FileFilter, FileAlterationListener, ServiceDefinitionChangeListener {
 
   private static final JAXBContext jaxbContext = getJAXBContext();
 
@@ -97,14 +95,11 @@
     AuditConstants.DEFAULT_AUDITOR_NAME, AuditConstants.KNOX_SERVICE_NAME,
     AuditConstants.KNOX_COMPONENT_NAME);
 
-  private static final List<String> SUPPORTED_TOPOLOGY_FILE_EXTENSIONS = new ArrayList<>();
-  static {
-    SUPPORTED_TOPOLOGY_FILE_EXTENSIONS.add("xml");
-    SUPPORTED_TOPOLOGY_FILE_EXTENSIONS.add("conf");
-  }
+  private static final List<String> SUPPORTED_TOPOLOGY_FILE_EXTENSIONS = Arrays.asList("xml", "conf");
 
   private static GatewayMessages log = MessagesFactory.get(GatewayMessages.class);
-  private static DigesterLoader digesterLoader = newLoader(new KnoxFormatXmlTopologyRules(), new AmbariFormatXmlTopologyRules());
+  private static DigesterLoader digesterLoader = newLoader(new KnoxFormatXmlTopologyRules(),
+      new AmbariFormatXmlTopologyRules());
   private List<FileAlterationMonitor> monitors = new ArrayList<>();
   private File topologiesDirectory;
   private File sharedProvidersDirectory;
@@ -133,7 +128,7 @@
     }
   }
 
-  private Topology loadTopology(File file) throws IOException, SAXException, URISyntaxException, InterruptedException {
+  private Topology loadTopology(File file) throws IOException, SAXException, InterruptedException {
     final long TIMEOUT = 250; //ms
     final long DELAY = 50; //ms
     log.loadingTopologyFile(file.getAbsolutePath());
@@ -155,7 +150,7 @@
     return topology;
   }
 
-  private Topology loadTopologyAttempt(File file) throws IOException, SAXException, URISyntaxException {
+  private Topology loadTopologyAttempt(File file) throws IOException, SAXException {
     Topology topology;
     Digester digester = digesterLoader.newDigester();
     TopologyBuilder topologyBuilder = digester.parse(FileUtils.openInputStream(file));
@@ -207,10 +202,9 @@
             break;
           }
         } catch (InterruptedException e) {
-          auditor.audit(Action.REDEPLOY, topology.getName(), ResourceType.TOPOLOGY,
-              ActionOutcome.FAILURE);
+          auditor.audit(Action.REDEPLOY, topology.getName(), ResourceType.TOPOLOGY, ActionOutcome.FAILURE);
           log.failedToRedeployTopology(topology.getName(), e);
-          e.printStackTrace();
+          Thread.currentThread().interrupt();
         }
       }
     } catch (SAXException e) {
@@ -258,7 +252,7 @@
     return configDir.getAbsoluteFile();
   }
 
-  private void  initListener(FileAlterationMonitor  monitor,
+  private void initListener(FileAlterationMonitor  monitor,
                             File                   directory,
                             FileFilter             filter,
                             FileAlterationListener listener) {
@@ -268,7 +262,7 @@
     monitor.addObserver(observer);
   }
 
-  private void initListener(File directory, FileFilter filter, FileAlterationListener listener) throws IOException, SAXException {
+  private void initListener(File directory, FileFilter filter, FileAlterationListener listener) {
     // Increasing the monitoring interval to 5 seconds as profiling has shown
     // this is rather expensive in terms of generated garbage objects.
     initListener(new FileAlterationMonitor(5000L), directory, filter, listener);
@@ -691,8 +685,8 @@
       // Initialize the remote configuration monitor, if it has been configured
       remoteMonitor = RemoteConfigurationMonitorFactory.get(config);
 
-    } catch (IOException | SAXException io) {
-      throw new ServiceLifecycleException(io.getMessage());
+    } catch (IOException io) {
+      throw new ServiceLifecycleException(io.getMessage(), io);
     }
   }
 
diff --git a/gateway-service-rm/src/main/java/org/apache/knox/gateway/rm/dispatch/RMHaBaseDispatcher.java b/gateway-service-rm/src/main/java/org/apache/knox/gateway/rm/dispatch/RMHaBaseDispatcher.java
index caec73a..b9438aa 100644
--- a/gateway-service-rm/src/main/java/org/apache/knox/gateway/rm/dispatch/RMHaBaseDispatcher.java
+++ b/gateway-service-rm/src/main/java/org/apache/knox/gateway/rm/dispatch/RMHaBaseDispatcher.java
@@ -135,6 +135,7 @@
                 Thread.sleep(failoverSleep);
              } catch (InterruptedException e) {
                 LOG.failoverSleepFailed(this.resourceRole, e);
+                Thread.currentThread().interrupt();
              }
           }
           executeRequest(outboundRequest, inboundRequest, outboundResponse);
diff --git a/gateway-service-webhdfs/src/main/java/org/apache/knox/gateway/hdfs/dispatch/AbstractHdfsHaDispatch.java b/gateway-service-webhdfs/src/main/java/org/apache/knox/gateway/hdfs/dispatch/AbstractHdfsHaDispatch.java
index 97890fc..3e808fe 100644
--- a/gateway-service-webhdfs/src/main/java/org/apache/knox/gateway/hdfs/dispatch/AbstractHdfsHaDispatch.java
+++ b/gateway-service-webhdfs/src/main/java/org/apache/knox/gateway/hdfs/dispatch/AbstractHdfsHaDispatch.java
@@ -128,6 +128,7 @@
                Thread.sleep(failoverSleep);
             } catch (InterruptedException e) {
                LOG.failoverSleepFailed(getResourceRole(), e);
+               Thread.currentThread().interrupt();
             }
          }
          LOG.failingOverRequest(outboundRequest.getURI().toString());
@@ -141,5 +142,4 @@
          }
       }
    }
-
-}
\ No newline at end of file
+}
diff --git a/gateway-shell/src/main/java/org/apache/knox/gateway/shell/KnoxSession.java b/gateway-shell/src/main/java/org/apache/knox/gateway/shell/KnoxSession.java
index bbfb288..470aa44 100644
--- a/gateway-shell/src/main/java/org/apache/knox/gateway/shell/KnoxSession.java
+++ b/gateway-shell/src/main/java/org/apache/knox/gateway/shell/KnoxSession.java
@@ -83,6 +83,7 @@
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
 import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
@@ -94,7 +95,6 @@
 import de.thetaphi.forbiddenapis.SuppressForbidden;
 
 public class KnoxSession implements Closeable {
-
   private static final String DEFAULT_JAAS_FILE = "/jaas.conf";
   public static final String JGSS_LOGIN_MOUDLE = "com.sun.security.jgss.initiate";
   public static final String END_CERTIFICATE = "-----END CERTIFICATE-----\n";
@@ -559,18 +559,16 @@
     try {
       shutdown();
     } catch (InterruptedException e) {
+      Thread.currentThread().interrupt();
       throw new KnoxShellException("Can not shutdown underlying resources", e);
     }
   }
 
   @Override
   public String toString() {
-    final StringBuilder sb = new StringBuilder("KnoxSession{base='");
-    sb.append(base).append("\'}");
-    return sb.toString();
+    return String.format(Locale.ROOT, "KnoxSession{base='%s'}", base);
   }
 
-
   private static final class JAASClientConfig extends Configuration {
 
     private static final Configuration baseConfig = Configuration.getConfiguration();
@@ -603,7 +601,6 @@
 
   @SuppressWarnings("PMD.AvoidAccessibilityAlteration")
   private static class ConfigurationFactory {
-
     private static final Class implClazz;
     static {
       // Oracle and OpenJDK use the Sun implementation
@@ -639,5 +636,4 @@
       return config;
     }
   }
-
 }
diff --git a/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/KnoxSpnegoAuthScheme.java b/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/KnoxSpnegoAuthScheme.java
index 5498600..f6dac77 100644
--- a/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/KnoxSpnegoAuthScheme.java
+++ b/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/KnoxSpnegoAuthScheme.java
@@ -21,7 +21,6 @@
 import org.ietf.jgss.GSSException;
 
 public class KnoxSpnegoAuthScheme extends SPNegoScheme {
-
   private static long nano = Long.MIN_VALUE;
 
   public KnoxSpnegoAuthScheme( boolean stripPort ) {
@@ -43,7 +42,7 @@
         try {
           Thread.sleep( 0 );
         } catch( InterruptedException e ) {
-          // Ignore it.
+          Thread.currentThread().interrupt();
         }
       }
       nano = now;
diff --git a/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/CMFMasterService.java b/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/CMFMasterService.java
index 611e670..47f2f18 100644
--- a/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/CMFMasterService.java
+++ b/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/CMFMasterService.java
@@ -35,7 +35,7 @@
 import java.util.List;
 
 public class CMFMasterService {
-  private static GatewaySpiMessages LOG = MessagesFactory.get( GatewaySpiMessages.class );
+  private static final GatewaySpiMessages LOG = MessagesFactory.get( GatewaySpiMessages.class );
 
   private static final String MASTER_PASSPHRASE = "masterpassphrase";
   private static final String MASTER_PERSISTENCE_TAG = "#1.0# " + TimeStamp.getCurrentTime().toDateString();
@@ -132,8 +132,8 @@
   }
 
   protected void persistMaster(char[] master, File masterFile) {
-    EncryptionResult atom = encryptMaster(master);
     try {
+      EncryptionResult atom = encryptMaster(master);
       ArrayList<String> lines = new ArrayList<>();
       lines.add(MASTER_PERSISTENCE_TAG);
 
@@ -151,13 +151,13 @@
     }
   }
 
-  private EncryptionResult encryptMaster(char[] master) {
+  private EncryptionResult encryptMaster(char[] master) throws IOException {
     try {
       return encryptor.encrypt(new String(master));
     } catch (Exception e) {
       LOG.failedToEncryptMasterSecret(e);
+      throw new IOException(e);
     }
-    return null;
   }
 
   protected void initializeFromMaster(File masterFile) throws Exception {
@@ -201,4 +201,4 @@
   private boolean isUnixEnv() {
     return (File.separatorChar == '/');
   }
-}
\ No newline at end of file
+}
diff --git a/gateway-test-utils/src/main/java/org/apache/knox/test/TestUtils.java b/gateway-test-utils/src/main/java/org/apache/knox/test/TestUtils.java
index 63429cb..dcf87b5 100644
--- a/gateway-test-utils/src/main/java/org/apache/knox/test/TestUtils.java
+++ b/gateway-test-utils/src/main/java/org/apache/knox/test/TestUtils.java
@@ -60,8 +60,7 @@
   }
 
   public static String getResourceName( Class clazz, String name ) {
-    name = clazz.getName().replaceAll( "\\.", "/" ) + "/" + name;
-    return name;
+    return clazz.getName().replaceAll( "\\.", "/" ) + "/" + name;
   }
 
   public static URL getResourceUrl( Class clazz, String name ) throws FileNotFoundException {
@@ -216,7 +215,7 @@
       try {
         Thread.sleep( wait );
       } catch( InterruptedException e ) {
-        // Ignore.
+        Thread.currentThread().interrupt();
       }
     }
   }
@@ -231,6 +230,4 @@
     LOG.debug( "execute: reponse=" + response );
     return response;
   }
-
-
 }
diff --git a/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/appender/JdbmStoreAndForwardAppender.java b/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/appender/JdbmStoreAndForwardAppender.java
index b3d445e..865b34e 100644
--- a/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/appender/JdbmStoreAndForwardAppender.java
+++ b/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/appender/JdbmStoreAndForwardAppender.java
@@ -82,8 +82,11 @@
       queue.stop();
       forwarder.join();
       queue.close();
-    } catch( InterruptedException | IOException e ) {
-      throw new RuntimeException( e );
+    } catch(InterruptedException e) {
+      Thread.currentThread().interrupt();
+      throw new RuntimeException(e);
+    } catch(IOException e) {
+      throw new RuntimeException(e);
     }
   }