You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zg...@apache.org on 2020/12/22 00:51:00 UTC
[hbase] branch branch-2.2 updated: HBASE-25277 postScannerFilterRow
impacts Scan performance a lot in HBase 2.x (#2765)
This is an automated email from the ASF dual-hosted git repository.
zghao pushed a commit to branch branch-2.2
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.2 by this push:
new 4cd6047 HBASE-25277 postScannerFilterRow impacts Scan performance a lot in HBase 2.x (#2765)
4cd6047 is described below
commit 4cd60474e1dcaa1856838abd1f677c99baa59284
Author: Pankaj <pa...@apache.org>
AuthorDate: Tue Dec 22 06:20:33 2020 +0530
HBASE-25277 postScannerFilterRow impacts Scan performance a lot in HBase 2.x (#2765)
Signed-off-by: Guanghao Zhang <zg...@apache.org>
---
.../hadoop/hbase/constraint/ConstraintProcessor.java | 18 +++++-------------
.../hbase/regionserver/RegionCoprocessorHost.java | 16 +++++++++++-----
.../hadoop/hbase/security/access/AccessController.java | 7 -------
.../security/visibility/VisibilityController.java | 7 -------
.../hbase/coprocessor/TestRegionCoprocessorHost.java | 1 +
5 files changed, 17 insertions(+), 32 deletions(-)
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/constraint/ConstraintProcessor.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/constraint/ConstraintProcessor.java
index 6aa5d97..b0a04c5 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/constraint/ConstraintProcessor.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/constraint/ConstraintProcessor.java
@@ -22,20 +22,19 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
-import org.apache.yetus.audience.InterfaceAudience;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CoprocessorEnvironment;
-import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Durability;
+import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.coprocessor.ObserverContext;
import org.apache.hadoop.hbase.coprocessor.RegionCoprocessor;
import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
import org.apache.hadoop.hbase.coprocessor.RegionObserver;
-import org.apache.hadoop.hbase.regionserver.InternalScanner;
import org.apache.hadoop.hbase.wal.WALEdit;
+import org.apache.yetus.audience.InterfaceAudience;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/***
* Processes multiple {@link Constraint Constraints} on a given table.
@@ -98,11 +97,4 @@ public class ConstraintProcessor implements RegionCoprocessor, RegionObserver {
}
// if we made it here, then the Put is valid
}
-
- @Override
- public boolean postScannerFilterRow(final ObserverContext<RegionCoprocessorEnvironment> e,
- final InternalScanner s, final Cell curRowCell, final boolean hasMore) throws IOException {
- // 'default' in RegionObserver might do unnecessary copy for Off heap backed Cells.
- return hasMore;
- }
}
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java
index 16fd332..2feb270 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java
@@ -105,6 +105,13 @@ public class RegionCoprocessorHost
// optimization: no need to call postScannerFilterRow, if no coprocessor implements it
private final boolean hasCustomPostScannerFilterRow;
+ /*
+ * Whether any configured CPs override postScannerFilterRow hook
+ */
+ public boolean hasCustomPostScannerFilterRow() {
+ return hasCustomPostScannerFilterRow;
+ }
+
/**
*
* Encapsulation of the environment of each coprocessor
@@ -278,11 +285,10 @@ public class RegionCoprocessorHost
out: for (RegionCoprocessorEnvironment env: coprocEnvironments) {
if (env.getInstance() instanceof RegionObserver) {
Class<?> clazz = env.getInstance().getClass();
- for(;;) {
- if (clazz == null) {
- // we must have directly implemented RegionObserver
- hasCustomPostScannerFilterRow = true;
- break out;
+ for (;;) {
+ if (clazz == Object.class) {
+ // we dont need to look postScannerFilterRow into Object class
+ break; // break the inner loop
}
try {
clazz.getDeclaredMethod("postScannerFilterRow", ObserverContext.class,
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java
index ab8a7e7..d747e7f 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java
@@ -1877,13 +1877,6 @@ public class AccessController implements MasterCoprocessor, RegionCoprocessor,
scannerOwners.remove(s);
}
- @Override
- public boolean postScannerFilterRow(final ObserverContext<RegionCoprocessorEnvironment> e,
- final InternalScanner s, final Cell curRowCell, final boolean hasMore) throws IOException {
- // 'default' in RegionObserver might do unnecessary copy for Off heap backed Cells.
- return hasMore;
- }
-
/**
* Verify, when servicing an RPC, that the caller is the scanner owner.
* If so, we assume that access control is correctly enforced based on
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityController.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityController.java
index 2a18551..65cc58e 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityController.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityController.java
@@ -741,13 +741,6 @@ public class VisibilityController implements MasterCoprocessor, RegionCoprocesso
return PrivateCellUtil.createCell(newCell, tags);
}
- @Override
- public boolean postScannerFilterRow(final ObserverContext<RegionCoprocessorEnvironment> e,
- final InternalScanner s, final Cell curRowCell, final boolean hasMore) throws IOException {
- // 'default' in RegionObserver might do unnecessary copy for Off heap backed Cells.
- return hasMore;
- }
-
/****************************** VisibilityEndpoint service related methods ******************************/
@Override
public synchronized void addLabels(RpcController controller, VisibilityLabelsRequest request,
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.java
index ee6e216..c674597 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.java
@@ -37,6 +37,7 @@ import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;
import org.apache.hadoop.hbase.regionserver.RegionServerServices;
import org.apache.hadoop.hbase.testclassification.SmallTests;
+
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;