diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-3077.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-3077.txt index 34662d5198a..46ea04d3baf 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-3077.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-3077.txt @@ -84,3 +84,5 @@ HDFS-3955. QJM: Make acceptRecovery() atomic. (todd) HDFS-3956. QJM: purge temporary files when no longer within retention period (todd) HDFS-4004. TestJournalNode#testJournal fails because of test case execution order (Chao Shi via todd) + +HDFS-4017. Unclosed FileInputStream in GetJournalEditServlet (Chao Shi via todd) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/GetJournalEditServlet.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/GetJournalEditServlet.java index fc4393d2bd7..6fac6a06861 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/GetJournalEditServlet.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/GetJournalEditServlet.java @@ -46,6 +46,7 @@ import org.apache.hadoop.hdfs.server.namenode.TransferFsImage; import org.apache.hadoop.hdfs.server.protocol.NamespaceInfo; import org.apache.hadoop.hdfs.util.DataTransferThrottler; +import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.security.SecurityUtil; import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.util.ServletUtil; @@ -157,6 +158,7 @@ private boolean checkStorageInfoOrSendError(JNStorage storage, @Override public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { + FileInputStream editFileIn = null; try { final ServletContext context = getServletContext(); final Configuration conf = (Configuration) getServletContext() @@ -181,8 +183,7 @@ public void doGet(final HttpServletRequest request, FileJournalManager fjm = storage.getJournalManager(); File editFile; - FileInputStream editFileIn; - + synchronized (fjm) { // Synchronize on the FJM so that the file doesn't get finalized // out from underneath us while we're in the process of opening @@ -209,6 +210,8 @@ public void doGet(final HttpServletRequest request, String errMsg = "getedit failed. " + StringUtils.stringifyException(t); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, errMsg); throw new IOException(errMsg); + } finally { + IOUtils.closeStream(editFileIn); } }