From 4a48a1658ca85b7e5fd0c7d8b0eb6f59a3b43208 Mon Sep 17 00:00:00 2001 From: Pankaj Date: Tue, 12 Apr 2022 09:41:26 +0530 Subject: [PATCH 1/2] HBASE-26944 Possible resource leak while creating new region scanner --- .../apache/hadoop/hbase/regionserver/RSRpcServices.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java index 814f43eb173b..4a287bfc1fa9 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java @@ -3203,8 +3203,13 @@ private Pair newRegionScanner(ScanRequest request, RegionScannerImpl coreScanner = region.getScanner(scan); Shipper shipper = coreScanner; RegionScanner scanner = coreScanner; - if (region.getCoprocessorHost() != null) { - scanner = region.getCoprocessorHost().postScannerOpen(scan, scanner); + try { + if (region.getCoprocessorHost() != null) { + scanner = region.getCoprocessorHost().postScannerOpen(scan, scanner); + } + } catch (Exception e) { + scanner.close(); + throw e; } long scannerId = scannerIdGenerator.generateNewScannerId(); builder.setScannerId(scannerId); From 9ea8fdf29b5d1a4c034da498ee81d2a2b9bdd22c Mon Sep 17 00:00:00 2001 From: Pankaj Date: Tue, 12 Apr 2022 17:00:20 +0530 Subject: [PATCH 2/2] HBASE-26944 Possible resource leak while creating new region scanner --- .../org/apache/hadoop/hbase/regionserver/RSRpcServices.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java index 4a287bfc1fa9..8fe2efc41f1e 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java @@ -3208,6 +3208,9 @@ private Pair newRegionScanner(ScanRequest request, scanner = region.getCoprocessorHost().postScannerOpen(scan, scanner); } } catch (Exception e) { + // Although region coprocessor is for advanced users and they should take care of the + // implementation to not damage the HBase system, closing the scanner on exception here does + // not have any bad side effect, so let's do it scanner.close(); throw e; }