This is an automated email from the ASF dual-hosted git repository. pboado pushed a commit to branch 4.14-HBase-1.2 in repository https://gitbox.apache.org/repos/asf/phoenix.git
commit 6349f245e29ca54d773026a5563c43a2ab9e8264 Author: Lars Hofhansl <la...@apache.org> AuthorDate: Thu May 23 06:40:34 2019 +0100 PHOENIX-5291 Ensure that Phoenix coprocessor close all scanners. --- .../coprocessor/UngroupedAggregateRegionObserver.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java index f0ce5b2..72ee4a3 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java @@ -1158,7 +1158,7 @@ public class UngroupedAggregateRegionObserver extends BaseScannerRegionObserver long rowCount = 0; // in case of async, we report 0 as number of rows updated StatisticsCollectionRunTracker statsRunTracker = StatisticsCollectionRunTracker.getInstance(config); - boolean runUpdateStats = statsRunTracker.addUpdateStatsCommandRegion(region.getRegionInfo(),scan.getFamilyMap().keySet()); + final boolean runUpdateStats = statsRunTracker.addUpdateStatsCommandRegion(region.getRegionInfo(),scan.getFamilyMap().keySet()); if (runUpdateStats) { if (!async) { rowCount = callable.call(); @@ -1187,8 +1187,11 @@ public class UngroupedAggregateRegionObserver extends BaseScannerRegionObserver @Override public void close() throws IOException { - // No-op because we want to manage closing of the inner scanner ourselves. - // This happens inside StatsCollectionCallable. + // If we ran/scheduled StatsCollectionCallable the delegate + // scanner is closed there. Otherwise close it here. + if (!runUpdateStats) { + super.close(); + } } @Override @@ -1425,6 +1428,14 @@ public class UngroupedAggregateRegionObserver extends BaseScannerRegionObserver + fullTableName); Scan scan = new Scan(); scan.setMaxVersions(); + + // close the passed scanner since we are returning a brand-new one + try { + if (s != null) { + s.close(); + } + } catch (IOException ignore) {} + return new StoreScanner(store, store.getScanInfo(), scan, scanners, ScanType.COMPACT_RETAIN_DELETES, store.getSmallestReadPoint(), HConstants.OLDEST_TIMESTAMP);