hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From st...@apache.org
Subject svn commit: r1453719 - /hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatBase.java
Date Thu, 07 Mar 2013 07:41:57 GMT
Author: stack
Date: Thu Mar  7 07:41:56 2013
New Revision: 1453719

URL: http://svn.apache.org/r1453719
Log:
HBASE-7996 Clean up resource leak in MultiTableInputFormat

Modified:
    hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatBase.java

Modified: hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatBase.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatBase.java?rev=1453719&r1=1453718&r2=1453719&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatBase.java
(original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatBase.java
Thu Mar  7 07:41:56 2013
@@ -116,47 +116,51 @@ public abstract class MultiTableInputFor
       byte[] tableName = scan.getAttribute(Scan.SCAN_ATTRIBUTES_TABLE_NAME);
       if (tableName == null) 
         throw new IOException("A scan object did not have a table name");
-      HTable table = new HTable(context.getConfiguration(), tableName);
-      Pair<byte[][], byte[][]> keys = table.getStartEndKeys();
-      if (keys == null || keys.getFirst() == null ||
-          keys.getFirst().length == 0) {
-        throw new IOException("Expecting at least one region for table : "
-            + Bytes.toString(tableName));
-      }
-      int count = 0;
-      
-      byte[] startRow = scan.getStartRow();
-      byte[] stopRow = scan.getStopRow();
-
-      for (int i = 0; i < keys.getFirst().length; i++) {
-        if (!includeRegionInSplit(keys.getFirst()[i], keys.getSecond()[i])) {
-          continue;
+
+      HTable table = null;
+      try {
+        table = new HTable(context.getConfiguration(), tableName);
+        Pair<byte[][], byte[][]> keys = table.getStartEndKeys();
+        if (keys == null || keys.getFirst() == null ||
+            keys.getFirst().length == 0) {
+          throw new IOException("Expecting at least one region for table : "
+              + Bytes.toString(tableName));
         }
-        String regionLocation =
-            table.getRegionLocation(keys.getFirst()[i], false).getHostname();
+        int count = 0;
+
+        byte[] startRow = scan.getStartRow();
+        byte[] stopRow = scan.getStopRow();
+
+        for (int i = 0; i < keys.getFirst().length; i++) {
+          if (!includeRegionInSplit(keys.getFirst()[i], keys.getSecond()[i])) {
+            continue;
+          }
+          String regionLocation =
+              table.getRegionLocation(keys.getFirst()[i], false).getHostname();
         
-        // determine if the given start and stop keys fall into the range
-        if ((startRow.length == 0 || keys.getSecond()[i].length == 0 ||
-            Bytes.compareTo(startRow, keys.getSecond()[i]) < 0) &&
-            (stopRow.length == 0 ||
-                Bytes.compareTo(stopRow, keys.getFirst()[i]) > 0)) {
-          byte[] splitStart =
-              startRow.length == 0 ||
-                  Bytes.compareTo(keys.getFirst()[i], startRow) >= 0 ? keys
-                  .getFirst()[i] : startRow;
-          byte[] splitStop =
-              (stopRow.length == 0 || Bytes.compareTo(keys.getSecond()[i],
-                  stopRow) <= 0) && keys.getSecond()[i].length > 0 ? keys
-                  .getSecond()[i] : stopRow;
-          InputSplit split =
-              new TableSplit(tableName, scan, splitStart,
-                  splitStop, regionLocation);
-          splits.add(split);
-          if (LOG.isDebugEnabled())
-            LOG.debug("getSplits: split -> " + (count++) + " -> " + split);
+          // determine if the given start and stop keys fall into the range
+          if ((startRow.length == 0 || keys.getSecond()[i].length == 0 ||
+              Bytes.compareTo(startRow, keys.getSecond()[i]) < 0) &&
+              (stopRow.length == 0 ||
+                  Bytes.compareTo(stopRow, keys.getFirst()[i]) > 0)) {
+            byte[] splitStart =
+                startRow.length == 0 ||
+                    Bytes.compareTo(keys.getFirst()[i], startRow) >= 0 ? keys
+                    .getFirst()[i] : startRow;
+            byte[] splitStop =
+                (stopRow.length == 0 || Bytes.compareTo(keys.getSecond()[i],
+                    stopRow) <= 0) && keys.getSecond()[i].length > 0 ? keys
+                    .getSecond()[i] : stopRow;
+            InputSplit split =
+                new TableSplit(tableName, scan, splitStart, splitStop, regionLocation);
+            splits.add(split);
+            if (LOG.isDebugEnabled())
+              LOG.debug("getSplits: split -> " + (count++) + " -> " + split);
+          }
         }
+      } finally {
+        if (null != table) table.close();
       }
-      table.close();
     }
     return splits;
   }



Mime
View raw message