Repository: knox Updated Branches: refs/heads/master 1f7e67efe -> 86babd32d
KNOX-1624 - Ensure streams and readers are properly closed Signed-off-by: Kevin Risden <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/knox/repo Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/86babd32 Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/86babd32 Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/86babd32 Branch: refs/heads/master Commit: 86babd32d62b2cbea0c866b3c037c9b288f2e1bb Parents: 1f7e67e Author: Kevin Risden <[email protected]> Authored: Mon Nov 26 12:57:37 2018 -0500 Committer: Kevin Risden <[email protected]> Committed: Mon Nov 26 15:20:43 2018 -0500 ---------------------------------------------------------------------- .../ambari/AmbariConfigurationMonitor.java | 37 ++------------- .../ambari/AmbariDynamicServiceURLCreator.java | 5 +- .../org/apache/knox/gateway/GatewayServer.java | 20 +++----- .../org/apache/knox/gateway/GatewayServlet.java | 4 +- .../simple/SimpleDescriptorHandler.java | 24 ++++------ .../gateway/util/ServiceDefinitionsLoader.java | 5 +- .../apache/knox/gateway/shell/KnoxSession.java | 9 ++-- .../gateway/dispatch/HadoopAuthCookieStore.java | 5 +- .../security/impl/BaseKeystoreService.java | 48 +++++--------------- .../correlation/Log4jCorrelationService.java | 23 ++-------- 10 files changed, 48 insertions(+), 132 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariConfigurationMonitor.java ---------------------------------------------------------------------- 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 3b1cc6a..2d61280 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 @@ -116,9 +116,7 @@ class AmbariConfigurationMonitor implements ClusterConfigurationMonitor { Collection<File> persistedConfigs = FileUtils.listFiles(persistenceDir, new String[]{"conf"}, false); for (File persisted : persistedConfigs) { Properties props = new Properties(); - FileInputStream in = null; - try { - in = new FileInputStream(persisted); + try (FileInputStream in = new FileInputStream(persisted)) { props.load(in); addDiscoveryConfig(props.getProperty(PROP_CLUSTER_NAME), new ServiceDiscoveryConfig() { @@ -139,14 +137,6 @@ class AmbariConfigurationMonitor implements ClusterConfigurationMonitor { }); } catch (IOException e) { log.failedToLoadClusterMonitorServiceDiscoveryConfig(getType(), e); - } finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - // - } - } } } } @@ -162,9 +152,7 @@ class AmbariConfigurationMonitor implements ClusterConfigurationMonitor { Collection<File> persistedConfigs = FileUtils.listFiles(persistenceDir, new String[]{"ver"}, false); for (File persisted : persistedConfigs) { Properties props = new Properties(); - FileInputStream in = null; - try { - in = new FileInputStream(persisted); + try (FileInputStream in = new FileInputStream(persisted)) { props.load(in); String source = props.getProperty(PROP_CLUSTER_SOURCE); @@ -179,17 +167,8 @@ class AmbariConfigurationMonitor implements ClusterConfigurationMonitor { // Map the config versions to the cluster name addClusterConfigVersions(source, clusterName, configVersions); - } catch (IOException e) { log.failedToLoadClusterMonitorConfigVersions(getType(), e); - } finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - // - } - } } } } @@ -231,21 +210,11 @@ class AmbariConfigurationMonitor implements ClusterConfigurationMonitor { } private void persist(Properties props, File dest) { - FileOutputStream out = null; - try { - out = new FileOutputStream(dest); + try (FileOutputStream out = new FileOutputStream(dest)) { props.store(out, PERSISTED_FILE_COMMENT); out.flush(); } catch (Exception e) { log.failedToPersistClusterMonitorData(getType(), dest.getAbsolutePath(), e); - } finally { - if (out != null) { - try { - out.close(); - } catch (IOException e) { - // - } - } } } http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java ---------------------------------------------------------------------- diff --git a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java index dc929f7..b81a53a 100644 --- a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java +++ b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java @@ -23,6 +23,7 @@ import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; @@ -51,7 +52,9 @@ class AmbariDynamicServiceURLCreator implements ServiceURLCreator { AmbariDynamicServiceURLCreator(AmbariCluster cluster, File mappingConfiguration) throws IOException { this.cluster = cluster; - config = new ServiceURLPropertyConfig(new FileInputStream(mappingConfiguration)); + try (InputStream inputStream = new FileInputStream(mappingConfiguration)) { + config = new ServiceURLPropertyConfig(inputStream); + } } AmbariDynamicServiceURLCreator(AmbariCluster cluster, String mappings) { http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java ---------------------------------------------------------------------- diff --git a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java index 52ca3fd..002be67 100644 --- a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java +++ b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java @@ -22,7 +22,6 @@ import net.lingala.zip4j.exception.ZipException; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.ParseException; import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.knox.gateway.audit.api.Action; import org.apache.knox.gateway.audit.api.ActionOutcome; @@ -85,6 +84,7 @@ import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Serializable; import java.net.InetSocketAddress; @@ -92,7 +92,6 @@ import java.net.ServerSocket; import java.net.Socket; import java.net.URI; import java.net.URISyntaxException; -import java.net.UnknownHostException; import java.nio.charset.StandardCharsets; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; @@ -624,19 +623,11 @@ public class GatewayServer { * @return true if port in use else false */ public static boolean isPortInUse(final int port) { - - Socket socket = null; - try { - socket = new Socket("localhost", port); + try (Socket socket = new Socket("localhost", port)){ return true; - } catch (final UnknownHostException e) { - return false; } catch (final IOException e) { return false; - } finally { - IOUtils.closeQuietly(socket); } - } /** @@ -734,8 +725,11 @@ public class GatewayServer { originalRoot.appendChild( importedNode ); } } - - XmlUtils.writeXml( webXmlDoc, new OutputStreamWriter(new FileOutputStream(webXmlFile), StandardCharsets.UTF_8) ); + + try (OutputStream outputStream = new FileOutputStream(webXmlFile); + OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8)) { + XmlUtils.writeXml(webXmlDoc, outputStreamWriter); + } } } http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java ---------------------------------------------------------------------- diff --git a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java index 2374ba3..ef2a27d 100644 --- a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java +++ b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java @@ -214,8 +214,8 @@ public class GatewayServlet implements Servlet, Filter { try { GatewayFilter filter = null; if( stream != null ) { - try { - GatewayDescriptor descriptor = GatewayDescriptorFactory.load("xml", new InputStreamReader(stream, StandardCharsets.UTF_8)); + try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)){ + GatewayDescriptor descriptor = GatewayDescriptorFactory.load("xml", reader); filter = GatewayFactory.create( descriptor ); } finally { stream.close(); http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java ---------------------------------------------------------------------- diff --git a/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java b/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java index a7bbbbd..4df2cf1 100644 --- a/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java +++ b/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java @@ -32,6 +32,7 @@ import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.StringWriter; import java.net.URI; @@ -362,10 +363,8 @@ public class SimpleDescriptorHandler { final Map<String, List<String>> serviceURLs, final Map<String, Map<String, String>> serviceParams) { Map<String, File> result = new HashMap<>(); - - BufferedWriter fw = null; File topologyDescriptor = null; - try { + try (StringWriter sw = new StringWriter()) { // Handle the referenced provider configuration File providerConfigFile = null; ProviderConfiguration providerConfiguration = null; @@ -410,8 +409,6 @@ public class SimpleDescriptorHandler { } // Generate the topology content - StringWriter sw = new StringWriter(); - sw.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"); sw.write("<!--==============================================-->\n"); sw.write("<!-- DO NOT EDIT. This is an auto-generated file. -->\n"); @@ -577,20 +574,15 @@ public class SimpleDescriptorHandler { } topologyDescriptor = new File(destDirectory, topologyFilename + ".xml"); - fw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(topologyDescriptor), StandardCharsets.UTF_8)); - fw.write(sw.toString()); - fw.flush(); + try (OutputStream outputStream = new FileOutputStream(topologyDescriptor); + OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8); + BufferedWriter fw = new BufferedWriter(outputStreamWriter)) { + fw.write(sw.toString()); + fw.flush(); + } } catch (IOException e) { log.failedToGenerateTopologyFromSimpleDescriptor(topologyDescriptor.getName(), e); topologyDescriptor.delete(); - } finally { - if (fw != null) { - try { - fw.close(); - } catch (IOException e) { - // ignore - } - } } result.put(RESULT_TOPOLOGY, topologyDescriptor); http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java ---------------------------------------------------------------------- diff --git a/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java b/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java index d2687ec..63283cb 100644 --- a/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java +++ b/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java @@ -58,8 +58,7 @@ public class ServiceDefinitionsLoader { Unmarshaller unmarshaller = context.createUnmarshaller(); for ( File file : getFileList(servicesDir) ) { - try { - FileInputStream inputStream = new FileInputStream(file); + try (InputStream inputStream = new FileInputStream(file)) { ServiceDefinition definition = (ServiceDefinition) unmarshaller.unmarshal(inputStream); //look for rewrite rules as a sibling (for now) UrlRewriteRulesDescriptor rewriteRulesDescriptor = loadRewriteRules(file.getParentFile()); @@ -67,6 +66,8 @@ public class ServiceDefinitionsLoader { log.addedServiceDefinition(definition.getName(), definition.getRole(), definition.getVersion()); } catch ( FileNotFoundException e ) { log.failedToFindServiceDefinitionFile(file.getAbsolutePath(), e); + } catch (IOException e) { + log.failedToLoadServiceDefinition(file.getAbsolutePath(), e); } } } catch ( JAXBException e ) { http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-shell/src/main/java/org/apache/knox/gateway/shell/KnoxSession.java ---------------------------------------------------------------------- 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 3bf9836..da57946 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 @@ -17,7 +17,6 @@ */ package org.apache.knox.gateway.shell; -import org.apache.commons.io.IOUtils; import org.apache.http.HttpHost; import org.apache.http.HttpRequest; import org.apache.http.auth.AuthScope; @@ -201,7 +200,6 @@ public class KnoxSession implements Closeable { discoverTruststoreDetails(clientContext); - InputStream is = null; try { ks = KeyStore.getInstance("JKS"); File file = new File(clientContext.connection().truststoreLocation()); @@ -219,8 +217,9 @@ public class KnoxSession implements Closeable { } if (file.exists()) { - is = new FileInputStream(file); - ks.load(is, truststorePass.toCharArray()); + try (InputStream is = new FileInputStream(file)) { + ks.load(is, truststorePass.toCharArray()); + } } else { throw new KnoxShellException("Unable to find a truststore for secure login." @@ -244,8 +243,6 @@ public class KnoxSession implements Closeable { } catch (IOException e) { throw new KnoxShellException("Unable to load truststore." + " May be related to password setting or truststore format.", e); - } finally { - IOUtils.closeQuietly(is); } return ks; http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStore.java ---------------------------------------------------------------------- diff --git a/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStore.java b/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStore.java index b8aa618..f921b3a 100644 --- a/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStore.java +++ b/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStore.java @@ -19,6 +19,7 @@ package org.apache.knox.gateway.dispatch; import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; import java.lang.reflect.Field; import java.util.Date; import java.util.Properties; @@ -74,8 +75,8 @@ public class HadoopAuthCookieStore extends BasicCookieStore { String krb5Config = config.getKerberosLoginConfig(); if (krb5Config != null && !krb5Config.isEmpty()) { Properties p = new Properties(); - try { - p.load(new FileInputStream(krb5Config)); + try (InputStream in = new FileInputStream(krb5Config)){ + p.load(in); String configuredPrincipal = p.getProperty("principal"); // Strip off enclosing quotes, if present if (configuredPrincipal.startsWith("\"")) { http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/BaseKeystoreService.java ---------------------------------------------------------------------- diff --git a/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/BaseKeystoreService.java b/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/BaseKeystoreService.java index 57d7884..720e4c3 100644 --- a/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/BaseKeystoreService.java +++ b/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/BaseKeystoreService.java @@ -29,6 +29,7 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.security.Key; import java.security.KeyStore; @@ -50,18 +51,11 @@ public class BaseKeystoreService { NoSuchAlgorithmException { final KeyStore keyStore = KeyStore.getInstance(storeType); - if ( keyStoreFile.exists() ) - { - final FileInputStream input = new FileInputStream( keyStoreFile ); - try { + if ( keyStoreFile.exists() ) { + try (FileInputStream input = new FileInputStream( keyStoreFile )) { keyStore.load( input, masterPassword ); } - finally { - input.close(); - } - } - else - { + } else { keyStore.load( null, masterPassword ); } @@ -84,17 +78,14 @@ public class BaseKeystoreService { } } } - FileOutputStream stream = new FileOutputStream( file ); - return stream; + return new FileOutputStream( file ); } protected void createKeystore(String filename, String keystoreType) throws KeystoreServiceException { - try { - FileOutputStream out = createKeyStoreFile( filename ); + try (FileOutputStream out = createKeyStoreFile( filename )) { KeyStore ks = KeyStore.getInstance(keystoreType); ks.load( null, null ); ks.store( out, masterService.getMasterSecret() ); - out.close(); } catch (KeyStoreException e) { LOG.failedToCreateKeystore( filename, keystoreType, e ); throw new KeystoreServiceException(e); @@ -114,33 +105,16 @@ public class BaseKeystoreService { } protected boolean isKeystoreAvailable(final File keyStoreFile, String storeType) throws KeyStoreException, IOException { - if ( keyStoreFile.exists() ) - { - FileInputStream input = null; - try { - final KeyStore keyStore = KeyStore.getInstance(storeType); - input = new FileInputStream( keyStoreFile ); + if ( keyStoreFile.exists() ) { + try (InputStream input = new FileInputStream(keyStoreFile)){ + final KeyStore keyStore = KeyStore.getInstance(storeType); keyStore.load( input, masterService.getMasterSecret() ); return true; - } catch (NoSuchAlgorithmException e) { + } catch (NoSuchAlgorithmException | CertificateException e) { LOG.failedToLoadKeystore( keyStoreFile.getName(), storeType, e ); - } catch (CertificateException e) { - LOG.failedToLoadKeystore( keyStoreFile.getName(), storeType, e ); - } catch (IOException e) { + } catch (IOException | KeyStoreException e) { LOG.failedToLoadKeystore( keyStoreFile.getName(), storeType, e ); throw e; - } catch (KeyStoreException e) { - LOG.failedToLoadKeystore( keyStoreFile.getName(), storeType, e ); - throw e; - } - finally { - try { - if ( input != null ) { - input.close(); - } - } catch (IOException e) { - LOG.failedToLoadKeystore( keyStoreFile.getName(), storeType, e ); - } } } return false; http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/correlation/Log4jCorrelationService.java ---------------------------------------------------------------------- diff --git a/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/correlation/Log4jCorrelationService.java b/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/correlation/Log4jCorrelationService.java index 4c13261..8bbfcb6 100644 --- a/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/correlation/Log4jCorrelationService.java +++ b/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/correlation/Log4jCorrelationService.java @@ -88,27 +88,12 @@ public class Log4jCorrelationService implements CorrelationService { @Override public CorrelationContext readExternalizedContext(byte[] externalizedContext) { - ByteArrayInputStream bais = new ByteArrayInputStream( externalizedContext ); - ObjectInput oi = null; - CorrelationContext context = null; - try { - oi = new ObjectInputStream( bais ); - context = (CorrelationContext) oi.readObject(); - } catch ( IOException e ) { - throw new IllegalArgumentException( e ); - } catch ( ClassNotFoundException e ) { + try (ByteArrayInputStream bais = new ByteArrayInputStream( externalizedContext ); + ObjectInput oi = new ObjectInputStream( bais )) { + return (CorrelationContext) oi.readObject(); + } catch ( IOException | ClassNotFoundException e ) { throw new IllegalArgumentException( e ); - } finally { - try { - bais.close(); - if ( oi != null) { - oi.close(); - } - } catch ( IOException e ) { - throw new IllegalArgumentException( e ); - } } - return context; } @Override
