You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ni...@apache.org on 2021/10/03 14:34:15 UTC

[hbase] branch HBASE-25714 updated: HBASE-26278 Add preRequestCompaction method for AccessController (#3677)

This is an automated email from the ASF dual-hosted git repository.

niuyulin pushed a commit to branch HBASE-25714
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/HBASE-25714 by this push:
     new e3553ad  HBASE-26278 Add preRequestCompaction method for AccessController (#3677)
e3553ad is described below

commit e3553ad5d9fa3f320c440acad0978a30d2ca0de4
Author: niuyulin <yu...@gmail.com>
AuthorDate: Sun Oct 3 09:33:48 2021 -0500

    HBASE-26278 Add preRequestCompaction method for AccessController (#3677)
    
    Signed-off-by: Duo Zhang <zh...@apache.org>
---
 .../apache/hadoop/hbase/coprocessor/RegionObserver.java    |  6 ++++++
 .../org/apache/hadoop/hbase/regionserver/CompactSplit.java |  3 +++
 .../hadoop/hbase/regionserver/RegionCoprocessorHost.java   | 12 ++++++++++++
 .../hadoop/hbase/security/access/AccessController.java     | 14 ++++----------
 .../hadoop/hbase/security/access/TestAccessController.java |  4 +---
 5 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java
index 4f4d79c..9f7ec80 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java
@@ -217,6 +217,12 @@ public interface RegionObserver {
       throws IOException {}
 
   /**
+   * Add for AccessController after HBASE-26089
+   */
+  default void preRequestCompaction(ObserverContext<RegionCoprocessorEnvironment> c)
+    throws IOException {}
+
+  /**
    * Called prior to selecting the {@link StoreFile StoreFiles} to compact from the list of
    * available candidates. To alter the files used for compaction, you may mutate the passed in list
    * of candidates. If you remove all the candidates then the compaction will be canceled.
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplit.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplit.java
index 9c431f9..6e3c018 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplit.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompactSplit.java
@@ -277,6 +277,9 @@ public class CompactSplit implements CompactionRequester, PropagatingConfigurati
         !region.getTableDescriptor().isCompactionEnabled())) {
       return;
     }
+    if (region.getCoprocessorHost() != null) {
+      region.getCoprocessorHost().preRequestCompaction();
+    }
     RegionServerSpaceQuotaManager spaceQuotaManager =
         this.server.getRegionServerSpaceQuotaManager();
 
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 658819c..164c5b2 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
@@ -565,6 +565,18 @@ public class RegionCoprocessorHost
     }
   }
 
+  void preRequestCompaction() throws IOException {
+    if (coprocEnvironments.isEmpty()) {
+      return;
+    }
+    execOperation(new RegionObserverOperationWithoutResult() {
+      @Override
+      public void call(RegionObserver observer) throws IOException {
+        observer.preRequestCompaction(this);
+      }
+    });
+  }
+
   /**
    * Called prior to selecting the {@link HStoreFile}s for compaction from the list of currently
    * available candidates.
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 3e6c769..e26e68d 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
@@ -102,11 +102,7 @@ import org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress;
 import org.apache.hadoop.hbase.regionserver.Region;
 import org.apache.hadoop.hbase.regionserver.RegionScanner;
 import org.apache.hadoop.hbase.regionserver.RegionServerServices;
-import org.apache.hadoop.hbase.regionserver.ScanType;
 import org.apache.hadoop.hbase.regionserver.ScannerContext;
-import org.apache.hadoop.hbase.regionserver.Store;
-import org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker;
-import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest;
 import org.apache.hadoop.hbase.replication.ReplicationEndpoint;
 import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;
 import org.apache.hadoop.hbase.replication.SyncReplicationState;
@@ -1288,12 +1284,10 @@ public class AccessController implements MasterCoprocessor, RegionCoprocessor,
   }
 
   @Override
-  public InternalScanner preCompact(ObserverContext<RegionCoprocessorEnvironment> c, Store store,
-      InternalScanner scanner, ScanType scanType, CompactionLifeCycleTracker tracker,
-      CompactionRequest request) throws IOException {
-    requirePermission(c, "compact", getTableName(c.getEnvironment()),
-        null, null, Action.ADMIN, Action.CREATE);
-    return scanner;
+  public void preRequestCompaction(ObserverContext<RegionCoprocessorEnvironment> c)
+      throws IOException {
+    requirePermission(c, "compact", getTableName(c.getEnvironment()), null, null, Action.ADMIN,
+      Action.CREATE);
   }
 
   private void internalPreRead(final ObserverContext<RegionCoprocessorEnvironment> c,
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java
index c915d76..1a07696 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java
@@ -105,7 +105,6 @@ import org.apache.hadoop.hbase.regionserver.HRegion;
 import org.apache.hadoop.hbase.regionserver.HRegionServer;
 import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;
 import org.apache.hadoop.hbase.regionserver.RegionServerCoprocessorHost;
-import org.apache.hadoop.hbase.regionserver.ScanType;
 import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;
 import org.apache.hadoop.hbase.replication.SyncReplicationState;
 import org.apache.hadoop.hbase.security.Superusers;
@@ -890,8 +889,7 @@ public class TestAccessController extends SecureTestUtil {
     AccessTestAction action = new AccessTestAction() {
       @Override
       public Object run() throws Exception {
-        ACCESS_CONTROLLER.preCompact(ObserverContextImpl.createAndPrepare(RCP_ENV), null, null,
-          ScanType.COMPACT_RETAIN_DELETES, null, null);
+        ACCESS_CONTROLLER.preRequestCompaction(ObserverContextImpl.createAndPrepare(RCP_ENV));
         return null;
       }
     };