Repository: hbase Updated Branches: refs/heads/0.98 c7edb453a -> 81a6fffb3
Revert "HBASE-15198 RPC client not using Codec and CellBlock for puts by default." This reverts commit c7edb453a16591fec196018c163e574b6ede4150. Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/81a6fffb Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/81a6fffb Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/81a6fffb Branch: refs/heads/0.98 Commit: 81a6fffb3c45a1afbbbfea751c26ea061319b0a5 Parents: c7edb45 Author: anoopsjohn <[email protected]> Authored: Thu Feb 11 16:48:06 2016 +0530 Committer: anoopsjohn <[email protected]> Committed: Thu Feb 11 16:48:06 2016 +0530 ---------------------------------------------------------------------- .../hadoop/hbase/client/HConnectionManager.java | 8 ------ .../hbase/client/MultiServerCallable.java | 11 +++++--- .../org/apache/hadoop/hbase/ipc/RpcClient.java | 8 ------ .../hadoop/hbase/protobuf/ProtobufUtil.java | 4 +++ .../hadoop/hbase/protobuf/RequestConverter.java | 9 +------ .../security/access/TestAccessController.java | 27 ++++++++++++++++++++ 6 files changed, 39 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/81a6fffb/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java index f7c0843..327b501 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java @@ -2820,14 +2820,6 @@ public class HConnectionManager { throws IOException { return getHTableDescriptor(TableName.valueOf(tableName)); } - - /** - * @return true when this connection uses a {@link org.apache.hadoop.hbase.codec.Codec} and so - * supports cell blocks. - */ - public boolean hasCellBlockSupport() { - return this.rpcClient.hasCellBlockSupport(); - } } /** http://git-wip-us.apache.org/repos/asf/hbase/blob/81a6fffb/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MultiServerCallable.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MultiServerCallable.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MultiServerCallable.java index 1241e02..57ea476 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MultiServerCallable.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MultiServerCallable.java @@ -19,15 +19,16 @@ package org.apache.hadoop.hbase.client; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; +import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.CellScannable; import org.apache.hadoop.hbase.DoNotRetryIOException; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.HRegionLocation; import org.apache.hadoop.hbase.TableName; -import org.apache.hadoop.hbase.client.HConnectionManager.HConnectionImplementation; import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController; import org.apache.hadoop.hbase.ipc.RpcControllerFactory; import org.apache.hadoop.hbase.protobuf.ProtobufUtil; @@ -126,9 +127,11 @@ class MultiServerCallable<R> extends RegionServerCallable<MultiResponse> { // This is not exact -- the configuration could have changed on us after connection was set up // but it will do for now. HConnection connection = getConnection(); - // Default is to do cellblocks. - if (!(connection instanceof HConnectionImplementation)) return true; - return ((HConnectionImplementation) connection).hasCellBlockSupport(); + if (connection == null) return true; // Default is to do cellblocks. + Configuration configuration = connection.getConfiguration(); + if (configuration == null) return true; + String codec = configuration.get(HConstants.RPC_CODEC_CONF_KEY, ""); + return codec != null && codec.length() > 0; } @Override http://git-wip-us.apache.org/repos/asf/hbase/blob/81a6fffb/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RpcClient.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RpcClient.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RpcClient.java index 7080d1e..7f11038 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RpcClient.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RpcClient.java @@ -1724,14 +1724,6 @@ public class RpcClient { } /** - * @return true when this client uses a {@link org.apache.hadoop.hbase.codec.Codec} and so - * supports cell blocks. - */ - public boolean hasCellBlockSupport() { - return this.codec != null; - } - - /** * Blocking rpc channel that goes via hbase rpc. */ // Public so can be subclassed for tests. http://git-wip-us.apache.org/repos/asf/hbase/blob/81a6fffb/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java index e173ab1..cee0ace 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java @@ -1137,6 +1137,10 @@ public final class ProtobufUtil { valueBuilder.setValue(ByteStringer.wrap( kv.getValueArray(), kv.getValueOffset(), kv.getValueLength())); valueBuilder.setTimestamp(kv.getTimestamp()); + if(cell.getTagsLengthUnsigned() > 0) { + valueBuilder.setTags(ByteStringer.wrap(kv.getTagsArray(), kv.getTagsOffset(), + kv.getTagsLengthUnsigned())); + } if (type == MutationType.DELETE || (type == MutationType.PUT && CellUtil.isDelete(kv))) { KeyValue.Type keyValueType = KeyValue.Type.codeToType(kv.getType()); valueBuilder.setDeleteType(toDeleteType(keyValueType)); http://git-wip-us.apache.org/repos/asf/hbase/blob/81a6fffb/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java index 650f7ad..30ceb09 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java @@ -663,15 +663,8 @@ public final class RequestConverter { cells.add(i); builder.addAction(actionBuilder.setMutation(ProtobufUtil.toMutationNoData( MutationType.INCREMENT, i, mutationBuilder, action.getNonce()))); - } else if (row instanceof RegionCoprocessorServiceExec) { - RegionCoprocessorServiceExec exec = (RegionCoprocessorServiceExec) row; - builder.addAction(actionBuilder.setServiceCall(ClientProtos.CoprocessorServiceCall - .newBuilder().setRow(ByteStringer.wrap(exec.getRow())) - .setServiceName(exec.getMethod().getService().getFullName()) - .setMethodName(exec.getMethod().getName()) - .setRequest(exec.getRequest().toByteString()))); } else if (row instanceof RowMutations) { - throw new UnsupportedOperationException("No RowMutations in multi calls; use mutateRow"); + continue; // ignore RowMutations } else { throw new DoNotRetryIOException("Multi doesn't support " + row.getClass().getName()); } http://git-wip-us.apache.org/repos/asf/hbase/blob/81a6fffb/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController.java ---------------------------------------------------------------------- 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 60b3e46..179045b 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 @@ -51,6 +51,7 @@ import org.apache.hadoop.hbase.NamespaceDescriptor; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.TableNotFoundException; +import org.apache.hadoop.hbase.Tag; import org.apache.hadoop.hbase.client.Append; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Get; @@ -2385,6 +2386,32 @@ public class TestAccessController extends SecureTestUtil { } @Test + public void testReservedCellTags() throws Exception { + AccessTestAction putWithReservedTag = new AccessTestAction() { + @Override + public Object run() throws Exception { + HTable t = new HTable(conf, TEST_TABLE); + try { + KeyValue kv = new KeyValue(TEST_ROW, TEST_FAMILY, TEST_QUALIFIER, + HConstants.LATEST_TIMESTAMP, HConstants.EMPTY_BYTE_ARRAY, + new Tag[] { new Tag(AccessControlLists.ACL_TAG_TYPE, + ProtobufUtil.toUsersAndPermissions(USER_OWNER.getShortName(), + new Permission(Permission.Action.READ)).toByteArray()) }); + t.put(new Put(TEST_ROW).add(kv)); + } finally { + t.close(); + } + return null; + } + }; + + // Current user is superuser + verifyAllowed(putWithReservedTag, User.getCurrent()); + // No other user should be allowed + verifyDenied(putWithReservedTag, USER_OWNER, USER_ADMIN, USER_CREATE, USER_RW, USER_RO); + } + + @Test public void testGetNamespacePermission() throws Exception { String namespace = "testNamespace"; NamespaceDescriptor desc = NamespaceDescriptor.create(namespace).build();
