HBASE-7996 Clean up resource leak in MultiTableInputFormat
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1453720 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
92d7a45476
commit
4fa8e86f29
|
@ -116,47 +116,51 @@ public abstract class MultiTableInputFormatBase extends
|
||||||
byte[] tableName = scan.getAttribute(Scan.SCAN_ATTRIBUTES_TABLE_NAME);
|
byte[] tableName = scan.getAttribute(Scan.SCAN_ATTRIBUTES_TABLE_NAME);
|
||||||
if (tableName == null)
|
if (tableName == null)
|
||||||
throw new IOException("A scan object did not have a table name");
|
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++) {
|
HTable table = null;
|
||||||
if (!includeRegionInSplit(keys.getFirst()[i], keys.getSecond()[i])) {
|
try {
|
||||||
continue;
|
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 =
|
int count = 0;
|
||||||
table.getRegionLocation(keys.getFirst()[i], false).getHostname();
|
|
||||||
|
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
|
// determine if the given start and stop keys fall into the range
|
||||||
if ((startRow.length == 0 || keys.getSecond()[i].length == 0 ||
|
if ((startRow.length == 0 || keys.getSecond()[i].length == 0 ||
|
||||||
Bytes.compareTo(startRow, keys.getSecond()[i]) < 0) &&
|
Bytes.compareTo(startRow, keys.getSecond()[i]) < 0) &&
|
||||||
(stopRow.length == 0 ||
|
(stopRow.length == 0 ||
|
||||||
Bytes.compareTo(stopRow, keys.getFirst()[i]) > 0)) {
|
Bytes.compareTo(stopRow, keys.getFirst()[i]) > 0)) {
|
||||||
byte[] splitStart =
|
byte[] splitStart =
|
||||||
startRow.length == 0 ||
|
startRow.length == 0 ||
|
||||||
Bytes.compareTo(keys.getFirst()[i], startRow) >= 0 ? keys
|
Bytes.compareTo(keys.getFirst()[i], startRow) >= 0 ? keys
|
||||||
.getFirst()[i] : startRow;
|
.getFirst()[i] : startRow;
|
||||||
byte[] splitStop =
|
byte[] splitStop =
|
||||||
(stopRow.length == 0 || Bytes.compareTo(keys.getSecond()[i],
|
(stopRow.length == 0 || Bytes.compareTo(keys.getSecond()[i],
|
||||||
stopRow) <= 0) && keys.getSecond()[i].length > 0 ? keys
|
stopRow) <= 0) && keys.getSecond()[i].length > 0 ? keys
|
||||||
.getSecond()[i] : stopRow;
|
.getSecond()[i] : stopRow;
|
||||||
InputSplit split =
|
InputSplit split =
|
||||||
new TableSplit(tableName, scan, splitStart,
|
new TableSplit(tableName, scan, splitStart, splitStop, regionLocation);
|
||||||
splitStop, regionLocation);
|
splits.add(split);
|
||||||
splits.add(split);
|
if (LOG.isDebugEnabled())
|
||||||
if (LOG.isDebugEnabled())
|
LOG.debug("getSplits: split -> " + (count++) + " -> " + split);
|
||||||
LOG.debug("getSplits: split -> " + (count++) + " -> " + split);
|
}
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
|
if (null != table) table.close();
|
||||||
}
|
}
|
||||||
table.close();
|
|
||||||
}
|
}
|
||||||
return splits;
|
return splits;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue