Repository: hbase Updated Branches: refs/heads/branch-2 7c871849d -> a489292a8
HBASE-19502 Make sure we have closed all StoreFileScanner if we fail to open any StoreFileScanners Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/a489292a Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/a489292a Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/a489292a Branch: refs/heads/branch-2 Commit: a489292a832f77af4d36813a02f902ace24b1a98 Parents: 7c87184 Author: Chia-Ping Tsai <[email protected]> Authored: Wed Dec 13 21:30:08 2017 +0800 Committer: Chia-Ping Tsai <[email protected]> Committed: Wed Dec 13 21:38:45 2017 +0800 ---------------------------------------------------------------------- .../hbase/regionserver/StoreFileScanner.java | 28 +++++++++++++------- 1 file changed, 19 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/a489292a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java index 21e61b2..89b2acd 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java @@ -137,16 +137,26 @@ public class StoreFileScanner implements KeyValueScanner { file.initReader(); sortedFiles.add(file); } - for (int i = 0, n = files.size(); i < n; i++) { - HStoreFile sf = sortedFiles.remove(); - StoreFileScanner scanner; - if (usePread) { - scanner = sf.getPreadScanner(cacheBlocks, readPt, i, canOptimizeForNonNullColumn); - } else { - scanner = sf.getStreamScanner(canUseDrop, cacheBlocks, isCompaction, readPt, i, - canOptimizeForNonNullColumn); + boolean succ = false; + try { + for (int i = 0, n = files.size(); i < n; i++) { + HStoreFile sf = sortedFiles.remove(); + StoreFileScanner scanner; + if (usePread) { + scanner = sf.getPreadScanner(cacheBlocks, readPt, i, canOptimizeForNonNullColumn); + } else { + scanner = sf.getStreamScanner(canUseDrop, cacheBlocks, isCompaction, readPt, i, + canOptimizeForNonNullColumn); + } + scanners.add(scanner); + } + succ = true; + } finally { + if (!succ) { + for (StoreFileScanner scanner : scanners) { + scanner.close(); + } } - scanners.add(scanner); } return scanners; }
