From b7ca4fcc8db40547d70116a6da8cc7b39715b354 Mon Sep 17 00:00:00 2001 From: xu tao Date: Wed, 20 Sep 2023 11:39:03 +0800 Subject: [PATCH] [fix](io): use try with resource make io stream close automatically to avoid resource leak (#24605) --- .../org/apache/doris/backup/Repository.java | 2 +- .../doris/common/util/SmallFileMgr.java | 10 +++---- .../doris/load/loadv2/SparkRepository.java | 2 +- .../org/apache/doris/master/MetaHelper.java | 3 +- .../org/apache/doris/persist/EditLog.java | 7 ----- .../org/apache/doris/persist/Storage.java | 12 ++++---- .../java/org/apache/doris/qe/HelpModule.java | 10 +++---- .../doris/plugin/audit/DorisStreamLoader.java | 6 ++-- .../doris/broker/hdfs/FileSystemManager.java | 30 +++++++++---------- 9 files changed, 37 insertions(+), 45 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/backup/Repository.java b/fe/fe-core/src/main/java/org/apache/doris/backup/Repository.java index 10227ce469..dbe4d5afb7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/backup/Repository.java +++ b/fe/fe-core/src/main/java/org/apache/doris/backup/Repository.java @@ -450,7 +450,7 @@ public class Repository implements Writable { // Preconditions.checkArgument(remoteFilePath.startsWith(location), remoteFilePath); // get md5usm of local file File file = new File(localFilePath); - String md5sum = null; + String md5sum; try (FileInputStream fis = new FileInputStream(file)) { md5sum = DigestUtils.md5Hex(fis); } catch (FileNotFoundException e) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/SmallFileMgr.java b/fe/fe-core/src/main/java/org/apache/doris/common/util/SmallFileMgr.java index b8185b4472..a95015f04b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/util/SmallFileMgr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/SmallFileMgr.java @@ -418,10 +418,10 @@ public class SmallFileMgr implements Writable { } file.createNewFile(); byte[] decoded = Base64.getDecoder().decode(smallFile.content); - FileOutputStream outputStream = new FileOutputStream(file); - outputStream.write(decoded); - outputStream.flush(); - outputStream.close(); + try (FileOutputStream outputStream = new FileOutputStream(file)) { + outputStream.write(decoded); + outputStream.flush(); + } if (!checkMd5(file, smallFile.md5)) { throw new DdlException("write file " + fileName @@ -436,7 +436,7 @@ public class SmallFileMgr implements Writable { } private boolean checkMd5(File file, String expectedMd5) throws DdlException { - String md5sum = null; + String md5sum; try (FileInputStream fis = new FileInputStream(file)) { md5sum = DigestUtils.md5Hex(fis); } catch (FileNotFoundException e) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/SparkRepository.java b/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/SparkRepository.java index d916c624c4..bfdad97aa0 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/SparkRepository.java +++ b/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/SparkRepository.java @@ -252,7 +252,7 @@ public class SparkRepository { public String getMd5String(String filePath) throws LoadException { File file = new File(filePath); - String md5sum = null; + String md5sum; try (FileInputStream fis = new FileInputStream(file)) { md5sum = DigestUtils.md5Hex(fis); Preconditions.checkNotNull(md5sum); diff --git a/fe/fe-core/src/main/java/org/apache/doris/master/MetaHelper.java b/fe/fe-core/src/main/java/org/apache/doris/master/MetaHelper.java index e1de241058..fe516b02bf 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/master/MetaHelper.java +++ b/fe/fe-core/src/main/java/org/apache/doris/master/MetaHelper.java @@ -126,8 +126,7 @@ public class MetaHelper { public static String getResponse(HttpURLConnection conn) throws IOException { String response; - try (BufferedReader bufferedReader = new BufferedReader( - new InputStreamReader(conn.getInputStream()))) { + try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream()))) { String line; StringBuilder sb = new StringBuilder(); while ((line = bufferedReader.readLine()) != null) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java b/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java index de11eba5fd..25d6bd089d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/persist/EditLog.java @@ -95,7 +95,6 @@ import org.apache.doris.transaction.TransactionStatus; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.io.File; import java.io.IOException; import java.util.List; @@ -1157,12 +1156,6 @@ public class EditLog { journal.close(); } - public synchronized void createEditLogFile(File name) throws IOException { - EditLogOutputStream editLogOutputStream = new EditLogFileOutputStream(name); - editLogOutputStream.create(); - editLogOutputStream.close(); - } - public void open() { journal.open(); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/persist/Storage.java b/fe/fe-core/src/main/java/org/apache/doris/persist/Storage.java index d8fc041aff..f058372227 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/persist/Storage.java +++ b/fe/fe-core/src/main/java/org/apache/doris/persist/Storage.java @@ -96,9 +96,9 @@ public class Storage { Properties prop = new Properties(); File versionFile = getVersionFile(); if (versionFile.isFile()) { - FileInputStream in = new FileInputStream(versionFile); - prop.load(in); - in.close(); + try (FileInputStream in = new FileInputStream(versionFile)) { + prop.load(in); + } clusterID = Integer.parseInt(prop.getProperty(CLUSTER_ID)); if (prop.getProperty(TOKEN) != null) { token = prop.getProperty(TOKEN); @@ -107,9 +107,9 @@ public class Storage { File roleFile = getRoleFile(); if (roleFile.isFile()) { - FileInputStream in = new FileInputStream(roleFile); - prop.load(in); - in.close(); + try (FileInputStream in = new FileInputStream(roleFile)) { + prop.load(in); + } role = FrontendNodeType.valueOf(prop.getProperty(FRONTEND_ROLE)); // For compatibility, NODE_NAME may not exist in ROLE file, set nodeName to null nodeName = prop.getProperty(NODE_NAME, null); diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/HelpModule.java b/fe/fe-core/src/main/java/org/apache/doris/qe/HelpModule.java index adca85a2a2..5658c11ce1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/HelpModule.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/HelpModule.java @@ -104,12 +104,12 @@ public class HelpModule { String line; List lines = Lists.newArrayList(); if (size > 0) { - BufferedReader reader = new BufferedReader(new InputStreamReader(zf.getInputStream(entry), - CHARSET_UTF_8)); - while ((line = reader.readLine()) != null) { - lines.add(line); + try (BufferedReader reader = + new BufferedReader(new InputStreamReader(zf.getInputStream(entry), CHARSET_UTF_8))) { + while ((line = reader.readLine()) != null) { + lines.add(line); + } } - reader.close(); // note that we only need basename String parentPathStr = null; diff --git a/fe_plugins/auditloader/src/main/java/org/apache/doris/plugin/audit/DorisStreamLoader.java b/fe_plugins/auditloader/src/main/java/org/apache/doris/plugin/audit/DorisStreamLoader.java index d2249a3ea7..2781bcc207 100644 --- a/fe_plugins/auditloader/src/main/java/org/apache/doris/plugin/audit/DorisStreamLoader.java +++ b/fe_plugins/auditloader/src/main/java/org/apache/doris/plugin/audit/DorisStreamLoader.java @@ -145,9 +145,9 @@ public class DorisStreamLoader { // build request and send to new be location beConn = getConnection(location, label); // send data to be - BufferedOutputStream bos = new BufferedOutputStream(beConn.getOutputStream()); - bos.write(sb.toString().getBytes()); - bos.close(); + try (BufferedOutputStream bos = new BufferedOutputStream(beConn.getOutputStream())) { + bos.write(sb.toString().getBytes()); + } // get respond status = beConn.getResponseCode(); diff --git a/fs_brokers/apache_hdfs_broker/src/main/java/org/apache/doris/broker/hdfs/FileSystemManager.java b/fs_brokers/apache_hdfs_broker/src/main/java/org/apache/doris/broker/hdfs/FileSystemManager.java index 55ba457404..279ae68800 100644 --- a/fs_brokers/apache_hdfs_broker/src/main/java/org/apache/doris/broker/hdfs/FileSystemManager.java +++ b/fs_brokers/apache_hdfs_broker/src/main/java/org/apache/doris/broker/hdfs/FileSystemManager.java @@ -343,15 +343,15 @@ public class FileSystemManager { // different kerberos account has different file tmpFilePath ="/tmp/." + principal.replace('/', '_') + - "_" + Long.toString(currentTime) + - "_" + Integer.toString(randNumber) + + "_" + currentTime + + "_" + randNumber + "_" + Thread.currentThread().getId(); logger.info("create kerberos tmp file" + tmpFilePath); - FileOutputStream fileOutputStream = new FileOutputStream(tmpFilePath); - FileLock lock = fileOutputStream.getChannel().lock(); - fileOutputStream.write(base64decodedBytes); - lock.release(); - fileOutputStream.close(); + try (FileOutputStream fileOutputStream = new FileOutputStream(tmpFilePath)) { + FileLock lock = fileOutputStream.getChannel().lock(); + fileOutputStream.write(base64decodedBytes); + lock.release(); + } keytab = tmpFilePath; } else { throw new BrokerException(TBrokerOperationStatusCode.INVALID_ARGUMENT, @@ -730,10 +730,10 @@ public class FileSystemManager { long currentTime = System.currentTimeMillis(); Random random = new Random(currentTime); int randNumber = random.nextInt(10000); - tmpFilePath = "/tmp/." + Long.toString(currentTime) + "_" + Integer.toString(randNumber); - FileOutputStream fileOutputStream = new FileOutputStream(tmpFilePath); - fileOutputStream.write(base64decodedBytes); - fileOutputStream.close(); + tmpFilePath = "/tmp/." + currentTime + "_" + randNumber; + try (FileOutputStream fileOutputStream = new FileOutputStream(tmpFilePath)) { + fileOutputStream.write(base64decodedBytes); + } keytab = tmpFilePath; } else { throw new BrokerException(TBrokerOperationStatusCode.INVALID_ARGUMENT, @@ -948,10 +948,10 @@ public class FileSystemManager { long currentTime = System.currentTimeMillis(); Random random = new Random(currentTime); int randNumber = random.nextInt(10000); - tmpFilePath = "/tmp/." + Long.toString(currentTime) + "_" + Integer.toString(randNumber); - FileOutputStream fileOutputStream = new FileOutputStream(tmpFilePath); - fileOutputStream.write(base64decodedBytes); - fileOutputStream.close(); + tmpFilePath = "/tmp/." + currentTime + "_" + randNumber; + try (FileOutputStream fileOutputStream = new FileOutputStream(tmpFilePath)) { + fileOutputStream.write(base64decodedBytes); + } keytab = tmpFilePath; } else { throw new BrokerException(TBrokerOperationStatusCode.INVALID_ARGUMENT,