From 285bf04592afe73eb06cfd0a76ee4eba3e552197 Mon Sep 17 00:00:00 2001 From: tushengxia Date: Wed, 9 Sep 2020 21:38:06 +0800 Subject: [PATCH] fix resource leak problems --- .../datacenter/client/DataCenterClient.java | 3 +- .../hbase/query/HBaseGetRecordCursor.java | 12 +++++- .../plugin/hbase/query/HBaseRecordCursor.java | 4 +- .../filebased/FileBasedSeedStore.java | 10 +---- .../security/KeystoreSecurityKeyManager.java | 42 +++++++++---------- .../spi/filesystem/FileBasedLock.java | 10 +---- 6 files changed, 40 insertions(+), 41 deletions(-) diff --git a/hetu-datacenter/src/main/java/io/hetu/core/plugin/datacenter/client/DataCenterClient.java b/hetu-datacenter/src/main/java/io/hetu/core/plugin/datacenter/client/DataCenterClient.java index e5629774b..648aa38d1 100644 --- a/hetu-datacenter/src/main/java/io/hetu/core/plugin/datacenter/client/DataCenterClient.java +++ b/hetu-datacenter/src/main/java/io/hetu/core/plugin/datacenter/client/DataCenterClient.java @@ -238,8 +238,7 @@ public class DataCenterClient { String query = "PREPARE subStatement FROM " + sql; String describe = "DESCRIBE OUTPUT subStatement"; - try { - StatementClient preparedClient = execute(query); + try (StatementClient preparedClient = execute(query)) { DataCenterClientSession newClientSession = DataCenterStatementClientFactory.createClientSession( preparedClient, this.config, this.typeManager); diff --git a/hetu-hbase/src/main/java/io/hetu/core/plugin/hbase/query/HBaseGetRecordCursor.java b/hetu-hbase/src/main/java/io/hetu/core/plugin/hbase/query/HBaseGetRecordCursor.java index 00d55ec9c..a148b6091 100644 --- a/hetu-hbase/src/main/java/io/hetu/core/plugin/hbase/query/HBaseGetRecordCursor.java +++ b/hetu-hbase/src/main/java/io/hetu/core/plugin/hbase/query/HBaseGetRecordCursor.java @@ -144,5 +144,15 @@ public class HBaseGetRecordCursor } @Override - public void close() {} + public void close() + { + try (Connection connection = this.conn) { + if (connection != null) { + connection.close(); + } + } + catch (IOException e) { + // ignore exception from close + } + } } diff --git a/hetu-hbase/src/main/java/io/hetu/core/plugin/hbase/query/HBaseRecordCursor.java b/hetu-hbase/src/main/java/io/hetu/core/plugin/hbase/query/HBaseRecordCursor.java index 92b2b7d25..212aafae5 100644 --- a/hetu-hbase/src/main/java/io/hetu/core/plugin/hbase/query/HBaseRecordCursor.java +++ b/hetu-hbase/src/main/java/io/hetu/core/plugin/hbase/query/HBaseRecordCursor.java @@ -283,6 +283,8 @@ public class HBaseRecordCursor @Override public void close() { - this.scanner.close(); + if (this.scanner != null) { + this.scanner.close(); + } } } diff --git a/hetu-seed-store/src/main/java/io/hetu/core/seedstore/filebased/FileBasedSeedStore.java b/hetu-seed-store/src/main/java/io/hetu/core/seedstore/filebased/FileBasedSeedStore.java index 5cc227558..b6068f766 100644 --- a/hetu-seed-store/src/main/java/io/hetu/core/seedstore/filebased/FileBasedSeedStore.java +++ b/hetu-seed-store/src/main/java/io/hetu/core/seedstore/filebased/FileBasedSeedStore.java @@ -192,14 +192,8 @@ public class FileBasedSeedStore private void writeToFile(Path file, String content, boolean overwrite) throws IOException { - OutputStream os; - if (overwrite) { - os = fs.newOutputStream(file); + try (OutputStream os = (overwrite) ? fs.newOutputStream(file) : fs.newOutputStream(file, CREATE_NEW)) { + os.write(content.getBytes()); } - else { - os = fs.newOutputStream(file, CREATE_NEW); - } - os.write(content.getBytes()); - os.close(); } } diff --git a/presto-main/src/main/java/io/prestosql/security/KeystoreSecurityKeyManager.java b/presto-main/src/main/java/io/prestosql/security/KeystoreSecurityKeyManager.java index c5103e89c..6fc80245e 100644 --- a/presto-main/src/main/java/io/prestosql/security/KeystoreSecurityKeyManager.java +++ b/presto-main/src/main/java/io/prestosql/security/KeystoreSecurityKeyManager.java @@ -94,7 +94,9 @@ public class KeystoreSecurityKeyManager { Path keystorePath = Paths.get(config.getFileStorePath()); String keyStr = ""; - try (InputStream inputStream = fileSystemClientManager.getFileSystemClient(SHARE_FS_CLIENT_CONFIG_NAME, Paths.get("/")).newInputStream(keystorePath)) { + try (HetuFileSystemClient hetuFileSystemClient = + fileSystemClientManager.getFileSystemClient(SHARE_FS_CLIENT_CONFIG_NAME, Paths.get("/")); + InputStream inputStream = hetuFileSystemClient.newInputStream(keystorePath)) { KeyStore keyStore = KeyStore.getInstance(PKCS12); keyStore.load(inputStream, config.getKeystorePassword().toCharArray()); Key key = keyStore.getKey(keyFileName, config.getKeystorePassword().toCharArray()); @@ -143,9 +145,8 @@ public class KeystoreSecurityKeyManager KeyStore keyStore; InputStream inputStream = null; OutputStream outputStream = null; - HetuFileSystemClient hetuFileSystemClient; - try { - hetuFileSystemClient = fileSystemClientManager.getFileSystemClient(SHARE_FS_CLIENT_CONFIG_NAME, Paths.get("/")); + try (HetuFileSystemClient hetuFileSystemClient = + fileSystemClientManager.getFileSystemClient(SHARE_FS_CLIENT_CONFIG_NAME, Paths.get("/"))) { inputStream = hetuFileSystemClient.newInputStream(keystorPath); keyStore = KeyStore.getInstance(PKCS12); keyStore.load(inputStream, config.getKeystorePassword().toCharArray()); @@ -167,12 +168,13 @@ public class KeystoreSecurityKeyManager throw new SecurityKeyException(format("error in I/O: fail to delete alias[%s] from keystore.", keyFileName)); } finally { - try { - if (inputStream != null) { - inputStream.close(); + try (InputStream inputStreamRelease = inputStream; + OutputStream outputStreamRelease = outputStream) { + if (inputStreamRelease != null) { + inputStreamRelease.close(); } - if (outputStream != null) { - outputStream.close(); + if (outputStreamRelease != null) { + outputStreamRelease.close(); } } catch (IOException e) { @@ -191,9 +193,8 @@ public class KeystoreSecurityKeyManager InputStream inputStream = null; OutputStream outputStream = null; - HetuFileSystemClient hetuFileSystemClient; - try { - hetuFileSystemClient = fileSystemClientManager.getFileSystemClient(SHARE_FS_CLIENT_CONFIG_NAME, Paths.get("/")); + try (HetuFileSystemClient hetuFileSystemClient = + fileSystemClientManager.getFileSystemClient(SHARE_FS_CLIENT_CONFIG_NAME, Paths.get("/"))) { boolean isStoreFileExists = hetuFileSystemClient.exists(keystorPath); KeyStore keyStore = KeyStore.getInstance(PKCS12); if (isStoreFileExists) { @@ -223,12 +224,13 @@ public class KeystoreSecurityKeyManager throw new SecurityKeyException("error in I/O: create file failed."); } finally { - try { - if (inputStream != null) { - inputStream.close(); + try (InputStream inputStreamRelease = inputStream; + OutputStream outputStreamRelease = outputStream) { + if (inputStreamRelease != null) { + inputStreamRelease.close(); } - if (outputStream != null) { - outputStream.close(); + if (outputStreamRelease != null) { + outputStreamRelease.close(); } } catch (IOException e) { @@ -240,10 +242,8 @@ public class KeystoreSecurityKeyManager private void createStoreDirIfNotExists() { String file = config.getFileStorePath(); - HetuFileSystemClient hetuFileSystemClient; - try { - hetuFileSystemClient = fileSystemClientManager.getFileSystemClient(SHARE_FS_CLIENT_CONFIG_NAME, Paths.get("/")); - + try (HetuFileSystemClient hetuFileSystemClient = + fileSystemClientManager.getFileSystemClient(SHARE_FS_CLIENT_CONFIG_NAME, Paths.get("/"))) { int lastIndex = file.lastIndexOf(File.separator); String tmpFileDir = file.substring(0, lastIndex); if (hetuFileSystemClient.exists(Paths.get(tmpFileDir))) { diff --git a/presto-spi/src/main/java/io/prestosql/spi/filesystem/FileBasedLock.java b/presto-spi/src/main/java/io/prestosql/spi/filesystem/FileBasedLock.java index 0466fac6e..b84ff455a 100644 --- a/presto-spi/src/main/java/io/prestosql/spi/filesystem/FileBasedLock.java +++ b/presto-spi/src/main/java/io/prestosql/spi/filesystem/FileBasedLock.java @@ -424,15 +424,9 @@ public class FileBasedLock private void writeToFile(Path file, String content, boolean overwrite) throws IOException { - OutputStream os; - if (overwrite) { - os = fs.newOutputStream(file); + try (OutputStream os = (overwrite) ? fs.newOutputStream(file) : fs.newOutputStream(file, CREATE_NEW)) { + os.write(content.getBytes()); } - else { - os = fs.newOutputStream(file, CREATE_NEW); - } - os.write(content.getBytes()); - os.close(); } private static String checkProperty(Properties properties, String key)