From 4b326e1b90c529b9335fefe5c95762570cc9d117 Mon Sep 17 00:00:00 2001 From: Michael Stack Date: Thu, 21 Sep 2017 16:28:33 -0700 Subject: [PATCH] HBASE-18859 Purge PB from BulkLoadObserver Signed-off-by: Michael Stack --- .../hbase/security/access/SecureBulkLoadEndpoint.java | 5 +++++ .../apache/hadoop/hbase/coprocessor/BulkLoadObserver.java | 15 +++++++++++---- .../apache/hadoop/hbase/regionserver/RowProcessor.java | 2 +- .../hadoop/hbase/regionserver/SecureBulkLoadManager.java | 5 +++-- .../hadoop/hbase/security/access/AccessController.java | 10 ++++------ .../hbase/security/access/TestAccessController.java | 6 ++---- 6 files changed, 26 insertions(+), 17 deletions(-) diff --git a/hbase-endpoint/src/main/java/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.java b/hbase-endpoint/src/main/java/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.java index f24583d797..2a4b4f3581 100644 --- a/hbase-endpoint/src/main/java/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.java +++ b/hbase-endpoint/src/main/java/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.java @@ -80,6 +80,7 @@ public class SecureBulkLoadEndpoint extends SecureBulkLoadService try { SecureBulkLoadManager secureBulkLoadManager = this.env.getRegionServerServices().getSecureBulkLoadManager(); + String bulkToken = secureBulkLoadManager.prepareBulkLoad(this.env.getRegion(), convert(request)); done.run(PrepareBulkLoadResponse.newBuilder().setBulkToken(bulkToken).build()); @@ -115,6 +116,10 @@ public class SecureBulkLoadEndpoint extends SecureBulkLoadService done.run(null); } + /** + * Convert from CPEP protobuf 2.5 to internal protobuf 3.3. + * @throws org.apache.hadoop.hbase.shaded.com.google.protobuf.InvalidProtocolBufferException + */ org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest convert(CleanupBulkLoadRequest request) throws org.apache.hadoop.hbase.shaded.com.google.protobuf.InvalidProtocolBufferException { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/BulkLoadObserver.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/BulkLoadObserver.java index e9cd4939fb..e891cc0fda 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/BulkLoadObserver.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/BulkLoadObserver.java @@ -23,6 +23,7 @@ import java.io.IOException; import org.apache.hadoop.hbase.Coprocessor; import org.apache.hadoop.hbase.HBaseInterfaceAudience; +import org.apache.hadoop.hbase.TableName; import org.apache.yetus.audience.InterfaceAudience; import org.apache.yetus.audience.InterfaceStability; import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest; @@ -52,16 +53,22 @@ public interface BulkLoadObserver extends Coprocessor { /** * Called as part of SecureBulkLoadEndpoint.prepareBulkLoad() RPC call. * It can't bypass the default action, e.g., ctx.bypass() won't have effect. + * If you need to get the region or table name, get it from the + * ctx as follows: code>ctx.getEnvironment().getRegion(). Use + * getRegionInfo to fetch the encodedName and use getTabldDescriptor() to get the tableName. * @param ctx the environment to interact with the framework and master */ - default void prePrepareBulkLoad(ObserverContext ctx, - PrepareBulkLoadRequest request) throws IOException {} + default void prePrepareBulkLoad(ObserverContext ctx) + throws IOException {} /** * Called as part of SecureBulkLoadEndpoint.cleanupBulkLoad() RPC call. * It can't bypass the default action, e.g., ctx.bypass() won't have effect. + * If you need to get the region or table name, get it from the + * ctx as follows: code>ctx.getEnvironment().getRegion(). Use + * getRegionInfo to fetch the encodedName and use getTabldDescriptor() to get the tableName. * @param ctx the environment to interact with the framework and master */ - default void preCleanupBulkLoad(ObserverContext ctx, - CleanupBulkLoadRequest request) throws IOException {} + default void preCleanupBulkLoad(ObserverContext ctx) + throws IOException {} } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RowProcessor.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RowProcessor.java index f0fae05000..625d9a67b0 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RowProcessor.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RowProcessor.java @@ -32,7 +32,7 @@ import org.apache.hadoop.hbase.wal.WALEdit; import com.google.protobuf.Message; /** - * Defines the procedure to atomically perform multiple scans and mutations + * Defines the procedures to atomically perform multiple scans and mutations * on a HRegion. * * This is invoked by {@link Region#processRowsWithLocks(RowProcessor)}. diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.java index 66773d043c..d2b8567c52 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.java @@ -29,6 +29,7 @@ import org.apache.hadoop.fs.permission.FsPermission; import org.apache.hadoop.hbase.DoNotRetryIOException; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; import org.apache.yetus.audience.InterfaceAudience; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.coprocessor.BulkLoadObserver; @@ -145,7 +146,7 @@ public class SecureBulkLoadManager { .findCoprocessorEnvironment(BulkLoadObserver.class).get(0)); for (BulkLoadObserver bulkLoadObserver : bulkLoadObservers) { - bulkLoadObserver.prePrepareBulkLoad(ctx, request); + bulkLoadObserver.prePrepareBulkLoad(ctx); } } @@ -166,7 +167,7 @@ public class SecureBulkLoadManager { .findCoprocessorEnvironment(BulkLoadObserver.class).get(0)); for (BulkLoadObserver bulkLoadObserver : bulkLoadObservers) { - bulkLoadObserver.preCleanupBulkLoad(ctx, request); + bulkLoadObserver.preCleanupBulkLoad(ctx); } } 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 ea5eb1c83f..bb7af96896 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 @@ -2156,12 +2156,11 @@ public class AccessController implements MasterObserver, RegionObserver, RegionS * Authorization check for * SecureBulkLoadProtocol.prepareBulkLoad() * @param ctx the context - * @param request the request * @throws IOException */ @Override - public void prePrepareBulkLoad(ObserverContext ctx, - PrepareBulkLoadRequest request) throws IOException { + public void prePrepareBulkLoad(ObserverContext ctx) + throws IOException { requireAccess(getActiveUser(ctx), "prePrepareBulkLoad", ctx.getEnvironment().getRegion().getTableDescriptor().getTableName(), Action.CREATE); } @@ -2170,12 +2169,11 @@ public class AccessController implements MasterObserver, RegionObserver, RegionS * Authorization security check for * SecureBulkLoadProtocol.cleanupBulkLoad() * @param ctx the context - * @param request the request * @throws IOException */ @Override - public void preCleanupBulkLoad(ObserverContext ctx, - CleanupBulkLoadRequest request) throws IOException { + public void preCleanupBulkLoad(ObserverContext ctx) + throws IOException { requireAccess(getActiveUser(ctx), "preCleanupBulkLoad", ctx.getEnvironment().getRegion().getTableDescriptor().getTableName(), Action.CREATE); } 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 2c27e4d003..0d99a717f8 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 @@ -2882,16 +2882,14 @@ public class TestAccessController extends SecureTestUtil { AccessTestAction prepareBulkLoadAction = new AccessTestAction() { @Override public Object run() throws Exception { - ACCESS_CONTROLLER.prePrepareBulkLoad(ObserverContext.createAndPrepare(RCP_ENV, null), - null); + ACCESS_CONTROLLER.prePrepareBulkLoad(ObserverContext.createAndPrepare(RCP_ENV, null)); return null; } }; AccessTestAction cleanupBulkLoadAction = new AccessTestAction() { @Override public Object run() throws Exception { - ACCESS_CONTROLLER.preCleanupBulkLoad(ObserverContext.createAndPrepare(RCP_ENV, null), - null); + ACCESS_CONTROLLER.preCleanupBulkLoad(ObserverContext.createAndPrepare(RCP_ENV, null)); return null; } }; -- 2.11.0 (Apple Git-81)