You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2012/04/18 23:59:24 UTC

svn commit: r1327697 - /hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java

Author: stack
Date: Wed Apr 18 21:59:24 2012
New Revision: 1327697

URL: http://svn.apache.org/viewvc?rev=1327697&view=rev
Log:
HBASE-5819 SplitLogs function could leak resources

Modified:
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java?rev=1327697&r1=1327696&r2=1327697&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java Wed Apr 18 21:59:24 2012
@@ -260,9 +260,9 @@ public class HLogSplitter {
    * directory.
    */
   private List<Path> splitLog(final FileStatus[] logfiles) throws IOException {
-    List<Path> processedLogs = new ArrayList<Path>();
-    List<Path> corruptedLogs = new ArrayList<Path>();
-    List<Path> splits = null;
+    List<Path> processedLogs = new ArrayList<Path>(logfiles.length);
+    List<Path> corruptedLogs = new ArrayList<Path>(logfiles.length);
+    List<Path> splits;
 
     boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors", true);
 
@@ -279,24 +279,25 @@ public class HLogSplitter {
         splitSize += logLength;
         logAndReport("Splitting hlog " + (i++ + 1) + " of " + logfiles.length
             + ": " + logPath + ", length=" + logLength);
-        Reader in;
+        Reader in = null;
         try {
           in = getReader(fs, log, conf, skipErrors);
           if (in != null) {
             parseHLog(in, logPath, entryBuffers, fs, conf, skipErrors);
-            try {
-              in.close();
-            } catch (IOException e) {
-              LOG.warn("Close log reader threw exception -- continuing",
-                  e);
-            }
           }
           processedLogs.add(logPath);
         } catch (CorruptedLogFileException e) {
           LOG.info("Got while parsing hlog " + logPath +
               ". Marking as corrupted", e);
           corruptedLogs.add(logPath);
-          continue;
+        } finally {
+          if (in != null) {
+            try {
+              in.close();
+            } catch (IOException e) {
+              LOG.warn("Close log reader threw exception -- continuing", e);
+            }
+          }
         }
       }
       status.setStatus("Log splits complete. Checking for orphaned logs.");
@@ -619,7 +620,7 @@ public class HLogSplitter {
         if (!fs.rename(corrupted, p)) {
           LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);
         } else {
-          LOG.warn("Moving corrupted log " + corrupted + " to " + p);
+          LOG.warn("Moved corrupted log " + corrupted + " to " + p);
         }
       }
     }