HBASE-15741 Provide backward compatibility for HBase coprocessor service names
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/d23d600d Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/d23d600d Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/d23d600d Branch: refs/heads/hbase-12439 Commit: d23d600d768cd73125d5be62b7b8e3fa6fac5761 Parents: 29eb3e8 Author: Gary Helmling <ga...@apache.org> Authored: Mon May 2 13:22:43 2016 -0700 Committer: Gary Helmling <ga...@apache.org> Committed: Wed May 4 12:09:57 2016 -0700 ---------------------------------------------------------------------- .../hadoop/hbase/ipc/CoprocessorRpcUtils.java | 72 ++++++++++++++++ .../hbase/ipc/MasterCoprocessorRpcChannel.java | 7 +- .../hbase/ipc/RegionCoprocessorRpcChannel.java | 7 +- .../ipc/RegionServerCoprocessorRpcChannel.java | 6 +- .../org/apache/hadoop/hbase/master/HMaster.java | 10 ++- .../hadoop/hbase/regionserver/HRegion.java | 10 ++- .../hbase/regionserver/HRegionServer.java | 10 ++- .../DummyRegionServerEndpointProtos.java | 88 ++++++++++---------- .../hbase/ipc/TestCoprocessorRpcUtils.java | 44 ++++++++++ .../protobuf/DummyRegionServerEndpoint.proto | 3 + 10 files changed, 185 insertions(+), 72 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/d23d600d/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/CoprocessorRpcUtils.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/CoprocessorRpcUtils.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/CoprocessorRpcUtils.java new file mode 100644 index 0000000..60044d4 --- /dev/null +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/CoprocessorRpcUtils.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.hadoop.hbase.ipc; + +import com.google.protobuf.Descriptors; +import com.google.protobuf.Message; +import org.apache.hadoop.hbase.classification.InterfaceAudience; +import org.apache.hadoop.hbase.protobuf.generated.ClientProtos; +import org.apache.hadoop.hbase.util.ByteStringer; + +/** + * Utilities for handling coprocessor service calls. + */ +@InterfaceAudience.Private +public final class CoprocessorRpcUtils { + /** + * We assume that all HBase protobuf services share a common package name + * (defined in the .proto files). + */ + private static String hbaseServicePackage; + static { + Descriptors.ServiceDescriptor clientService = ClientProtos.ClientService.getDescriptor(); + hbaseServicePackage = clientService.getFullName() + .substring(0, clientService.getFullName().lastIndexOf(clientService.getName())); + } + + private CoprocessorRpcUtils() { + // private for utility class + } + + /** + * Returns the name to use for coprocessor service calls. For core HBase services + * (in the hbase.pb protobuf package), this returns the unqualified name in order to provide + * backward compatibility across the package name change. For all other services, + * the fully-qualified service name is used. + */ + public static String getServiceName(Descriptors.ServiceDescriptor service) { + if (service.getFullName().startsWith(hbaseServicePackage)) { + return service.getName(); + } + return service.getFullName(); + } + + /** + * Returns a service call instance for the given coprocessor request. + */ + public static ClientProtos.CoprocessorServiceCall buildServiceCall(byte[] row, + Descriptors.MethodDescriptor method, Message request) { + return ClientProtos.CoprocessorServiceCall.newBuilder() + .setRow(ByteStringer.wrap(row)) + .setServiceName(CoprocessorRpcUtils.getServiceName(method.getService())) + .setMethodName(method.getName()) + .setRequest(request.toByteString()).build(); + } +} http://git-wip-us.apache.org/repos/asf/hbase/blob/d23d600d/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/MasterCoprocessorRpcChannel.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/MasterCoprocessorRpcChannel.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/MasterCoprocessorRpcChannel.java index 6e59972..ac6a022 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/MasterCoprocessorRpcChannel.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/MasterCoprocessorRpcChannel.java @@ -28,7 +28,6 @@ import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.protobuf.generated.ClientProtos; import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse; -import org.apache.hadoop.hbase.util.ByteStringer; import com.google.protobuf.Descriptors; import com.google.protobuf.Message; @@ -61,11 +60,7 @@ public class MasterCoprocessorRpcChannel extends CoprocessorRpcChannel{ } final ClientProtos.CoprocessorServiceCall call = - ClientProtos.CoprocessorServiceCall.newBuilder() - .setRow(ByteStringer.wrap(HConstants.EMPTY_BYTE_ARRAY)) - .setServiceName(method.getService().getFullName()) - .setMethodName(method.getName()) - .setRequest(request.toByteString()).build(); + CoprocessorRpcUtils.buildServiceCall(HConstants.EMPTY_BYTE_ARRAY, method, request); // TODO: Are we retrying here? Does not seem so. We should use RetryingRpcCaller CoprocessorServiceResponse result = ProtobufUtil.execService(controller, http://git-wip-us.apache.org/repos/asf/hbase/blob/d23d600d/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RegionCoprocessorRpcChannel.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RegionCoprocessorRpcChannel.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RegionCoprocessorRpcChannel.java index 321dd62..0f06af1 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RegionCoprocessorRpcChannel.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RegionCoprocessorRpcChannel.java @@ -30,7 +30,6 @@ import org.apache.hadoop.hbase.client.RpcRetryingCallerFactory; import org.apache.hadoop.hbase.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.protobuf.generated.ClientProtos; import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse; -import org.apache.hadoop.hbase.util.ByteStringer; import org.apache.hadoop.hbase.util.Bytes; import com.google.protobuf.Descriptors; @@ -83,11 +82,7 @@ public class RegionCoprocessorRpcChannel extends CoprocessorRpcChannel{ ? rpcControllerFactory.newController() : controller; final ClientProtos.CoprocessorServiceCall call = - ClientProtos.CoprocessorServiceCall.newBuilder() - .setRow(ByteStringer.wrap(row)) - .setServiceName(method.getService().getFullName()) - .setMethodName(method.getName()) - .setRequest(request.toByteString()).build(); + CoprocessorRpcUtils.buildServiceCall(row, method, request); RegionServerCallable<CoprocessorServiceResponse> callable = new RegionServerCallable<CoprocessorServiceResponse>(connection, table, row) { @Override http://git-wip-us.apache.org/repos/asf/hbase/blob/d23d600d/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RegionServerCoprocessorRpcChannel.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RegionServerCoprocessorRpcChannel.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RegionServerCoprocessorRpcChannel.java index 24d2de4..fba0373 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RegionServerCoprocessorRpcChannel.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RegionServerCoprocessorRpcChannel.java @@ -22,7 +22,6 @@ import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.protobuf.generated.ClientProtos; import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse; -import org.apache.hadoop.hbase.util.ByteStringer; import com.google.protobuf.Descriptors; import com.google.protobuf.Message; @@ -55,10 +54,7 @@ public class RegionServerCoprocessorRpcChannel extends CoprocessorRpcChannel { LOG.trace("Call: " + method.getName() + ", " + request.toString()); } final ClientProtos.CoprocessorServiceCall call = - ClientProtos.CoprocessorServiceCall.newBuilder() - .setRow(ByteStringer.wrap(HConstants.EMPTY_BYTE_ARRAY)) - .setServiceName(method.getService().getFullName()).setMethodName(method.getName()) - .setRequest(request.toByteString()).build(); + CoprocessorRpcUtils.buildServiceCall(HConstants.EMPTY_BYTE_ARRAY, method, request); // TODO: Are we retrying here? Does not seem so. We should use RetryingRpcCaller CoprocessorServiceResponse result = http://git-wip-us.apache.org/repos/asf/hbase/blob/d23d600d/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index d7f7c18..ff3d792 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -91,6 +91,7 @@ import org.apache.hadoop.hbase.coprocessor.BypassCoprocessorException; import org.apache.hadoop.hbase.coprocessor.CoprocessorHost; import org.apache.hadoop.hbase.exceptions.DeserializationException; import org.apache.hadoop.hbase.executor.ExecutorType; +import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils; import org.apache.hadoop.hbase.ipc.RpcServer; import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException; import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode; @@ -2419,16 +2420,17 @@ public class HMaster extends HRegionServer implements MasterServices { * No stacking of instances is allowed for a single service name */ Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType(); - if (coprocessorServiceHandlers.containsKey(serviceDesc.getFullName())) { - LOG.error("Coprocessor service "+serviceDesc.getFullName()+ + String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc); + if (coprocessorServiceHandlers.containsKey(serviceName)) { + LOG.error("Coprocessor service "+serviceName+ " already registered, rejecting request from "+instance ); return false; } - coprocessorServiceHandlers.put(serviceDesc.getFullName(), instance); + coprocessorServiceHandlers.put(serviceName, instance); if (LOG.isDebugEnabled()) { - LOG.debug("Registered master coprocessor service: service="+serviceDesc.getFullName()); + LOG.debug("Registered master coprocessor service: service="+serviceName); } return true; } http://git-wip-us.apache.org/repos/asf/hbase/blob/d23d600d/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index 5676e15..4532317 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -123,6 +123,7 @@ import org.apache.hadoop.hbase.io.HeapSize; import org.apache.hadoop.hbase.io.TimeRange; import org.apache.hadoop.hbase.io.hfile.HFile; import org.apache.hadoop.hbase.ipc.CallerDisconnectedException; +import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils; import org.apache.hadoop.hbase.ipc.RpcCallContext; import org.apache.hadoop.hbase.ipc.RpcServer; import org.apache.hadoop.hbase.mob.MobUtils; @@ -7428,18 +7429,19 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi * No stacking of instances is allowed for a single service name */ Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType(); - if (coprocessorServiceHandlers.containsKey(serviceDesc.getFullName())) { - LOG.error("Coprocessor service " + serviceDesc.getFullName() + + String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc); + if (coprocessorServiceHandlers.containsKey(serviceName)) { + LOG.error("Coprocessor service " + serviceName + " already registered, rejecting request from " + instance ); return false; } - coprocessorServiceHandlers.put(serviceDesc.getFullName(), instance); + coprocessorServiceHandlers.put(serviceName, instance); if (LOG.isDebugEnabled()) { LOG.debug("Registered coprocessor service: region=" + Bytes.toStringBinary(getRegionInfo().getRegionName()) + - " service=" + serviceDesc.getFullName()); + " service=" + serviceName); } return true; } http://git-wip-us.apache.org/repos/asf/hbase/blob/d23d600d/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java index 06a2aff..5b311b1 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java @@ -96,6 +96,7 @@ import org.apache.hadoop.hbase.fs.HFileSystem; import org.apache.hadoop.hbase.http.InfoServer; import org.apache.hadoop.hbase.io.hfile.CacheConfig; import org.apache.hadoop.hbase.io.hfile.HFile; +import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils; import org.apache.hadoop.hbase.ipc.RpcClient; import org.apache.hadoop.hbase.ipc.RpcClientFactory; import org.apache.hadoop.hbase.ipc.RpcControllerFactory; @@ -696,15 +697,16 @@ public class HRegionServer extends HasThread implements * No stacking of instances is allowed for a single service name */ Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType(); - if (coprocessorServiceHandlers.containsKey(serviceDesc.getFullName())) { - LOG.error("Coprocessor service " + serviceDesc.getFullName() + String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc); + if (coprocessorServiceHandlers.containsKey(serviceName)) { + LOG.error("Coprocessor service " + serviceName + " already registered, rejecting request from " + instance); return false; } - coprocessorServiceHandlers.put(serviceDesc.getFullName(), instance); + coprocessorServiceHandlers.put(serviceName, instance); if (LOG.isDebugEnabled()) { - LOG.debug("Registered regionserver coprocessor service: service=" + serviceDesc.getFullName()); + LOG.debug("Registered regionserver coprocessor service: service=" + serviceName); } return true; } http://git-wip-us.apache.org/repos/asf/hbase/blob/d23d600d/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/protobuf/generated/DummyRegionServerEndpointProtos.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/protobuf/generated/DummyRegionServerEndpointProtos.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/protobuf/generated/DummyRegionServerEndpointProtos.java index 12ce551..2ad3c59 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/protobuf/generated/DummyRegionServerEndpointProtos.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/protobuf/generated/DummyRegionServerEndpointProtos.java @@ -1,5 +1,5 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! -// source: DummyRegionServerEndpoint.proto +// source: hbase-server/src/test/protobuf/DummyRegionServerEndpoint.proto package org.apache.hadoop.hbase.coprocessor.protobuf.generated; @@ -12,7 +12,7 @@ public final class DummyRegionServerEndpointProtos { extends com.google.protobuf.MessageOrBuilder { } /** - * Protobuf type {@code DummyRequest} + * Protobuf type {@code hbase.test.pb.DummyRequest} */ public static final class DummyRequest extends com.google.protobuf.GeneratedMessage @@ -75,12 +75,12 @@ public final class DummyRegionServerEndpointProtos { } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_DummyRequest_descriptor; + return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_hbase_test_pb_DummyRequest_descriptor; } protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_DummyRequest_fieldAccessorTable + return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_hbase_test_pb_DummyRequest_fieldAccessorTable .ensureFieldAccessorsInitialized( org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.DummyRequest.class, org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.DummyRequest.Builder.class); } @@ -231,19 +231,19 @@ public final class DummyRegionServerEndpointProtos { return builder; } /** - * Protobuf type {@code DummyRequest} + * Protobuf type {@code hbase.test.pb.DummyRequest} */ public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.DummyRequestOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_DummyRequest_descriptor; + return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_hbase_test_pb_DummyRequest_descriptor; } protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_DummyRequest_fieldAccessorTable + return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_hbase_test_pb_DummyRequest_fieldAccessorTable .ensureFieldAccessorsInitialized( org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.DummyRequest.class, org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.DummyRequest.Builder.class); } @@ -277,7 +277,7 @@ public final class DummyRegionServerEndpointProtos { public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_DummyRequest_descriptor; + return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_hbase_test_pb_DummyRequest_descriptor; } public org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.DummyRequest getDefaultInstanceForType() { @@ -335,7 +335,7 @@ public final class DummyRegionServerEndpointProtos { return this; } - // @@protoc_insertion_point(builder_scope:DummyRequest) + // @@protoc_insertion_point(builder_scope:hbase.test.pb.DummyRequest) } static { @@ -343,7 +343,7 @@ public final class DummyRegionServerEndpointProtos { defaultInstance.initFields(); } - // @@protoc_insertion_point(class_scope:DummyRequest) + // @@protoc_insertion_point(class_scope:hbase.test.pb.DummyRequest) } public interface DummyResponseOrBuilder @@ -365,7 +365,7 @@ public final class DummyRegionServerEndpointProtos { getValueBytes(); } /** - * Protobuf type {@code DummyResponse} + * Protobuf type {@code hbase.test.pb.DummyResponse} */ public static final class DummyResponse extends com.google.protobuf.GeneratedMessage @@ -434,12 +434,12 @@ public final class DummyRegionServerEndpointProtos { } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_DummyResponse_descriptor; + return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_hbase_test_pb_DummyResponse_descriptor; } protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_DummyResponse_fieldAccessorTable + return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_hbase_test_pb_DummyResponse_fieldAccessorTable .ensureFieldAccessorsInitialized( org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.DummyResponse.class, org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.DummyResponse.Builder.class); } @@ -655,19 +655,19 @@ public final class DummyRegionServerEndpointProtos { return builder; } /** - * Protobuf type {@code DummyResponse} + * Protobuf type {@code hbase.test.pb.DummyResponse} */ public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.DummyResponseOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_DummyResponse_descriptor; + return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_hbase_test_pb_DummyResponse_descriptor; } protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { - return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_DummyResponse_fieldAccessorTable + return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_hbase_test_pb_DummyResponse_fieldAccessorTable .ensureFieldAccessorsInitialized( org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.DummyResponse.class, org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.DummyResponse.Builder.class); } @@ -703,7 +703,7 @@ public final class DummyRegionServerEndpointProtos { public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_DummyResponse_descriptor; + return org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.internal_static_hbase_test_pb_DummyResponse_descriptor; } public org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.DummyResponse getDefaultInstanceForType() { @@ -852,7 +852,7 @@ public final class DummyRegionServerEndpointProtos { return this; } - // @@protoc_insertion_point(builder_scope:DummyResponse) + // @@protoc_insertion_point(builder_scope:hbase.test.pb.DummyResponse) } static { @@ -860,11 +860,11 @@ public final class DummyRegionServerEndpointProtos { defaultInstance.initFields(); } - // @@protoc_insertion_point(class_scope:DummyResponse) + // @@protoc_insertion_point(class_scope:hbase.test.pb.DummyResponse) } /** - * Protobuf service {@code DummyService} + * Protobuf service {@code hbase.test.pb.DummyService} */ public static abstract class DummyService implements com.google.protobuf.Service { @@ -872,7 +872,7 @@ public final class DummyRegionServerEndpointProtos { public interface Interface { /** - * <code>rpc dummyCall(.DummyRequest) returns (.DummyResponse);</code> + * <code>rpc dummyCall(.hbase.test.pb.DummyRequest) returns (.hbase.test.pb.DummyResponse);</code> */ public abstract void dummyCall( com.google.protobuf.RpcController controller, @@ -880,7 +880,7 @@ public final class DummyRegionServerEndpointProtos { com.google.protobuf.RpcCallback<org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.DummyResponse> done); /** - * <code>rpc dummyThrow(.DummyRequest) returns (.DummyResponse);</code> + * <code>rpc dummyThrow(.hbase.test.pb.DummyRequest) returns (.hbase.test.pb.DummyResponse);</code> */ public abstract void dummyThrow( com.google.protobuf.RpcController controller, @@ -979,7 +979,7 @@ public final class DummyRegionServerEndpointProtos { } /** - * <code>rpc dummyCall(.DummyRequest) returns (.DummyResponse);</code> + * <code>rpc dummyCall(.hbase.test.pb.DummyRequest) returns (.hbase.test.pb.DummyResponse);</code> */ public abstract void dummyCall( com.google.protobuf.RpcController controller, @@ -987,7 +987,7 @@ public final class DummyRegionServerEndpointProtos { com.google.protobuf.RpcCallback<org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.DummyResponse> done); /** - * <code>rpc dummyThrow(.DummyRequest) returns (.DummyResponse);</code> + * <code>rpc dummyThrow(.hbase.test.pb.DummyRequest) returns (.hbase.test.pb.DummyResponse);</code> */ public abstract void dummyThrow( com.google.protobuf.RpcController controller, @@ -1163,19 +1163,19 @@ public final class DummyRegionServerEndpointProtos { } - // @@protoc_insertion_point(class_scope:DummyService) + // @@protoc_insertion_point(class_scope:hbase.test.pb.DummyService) } private static com.google.protobuf.Descriptors.Descriptor - internal_static_DummyRequest_descriptor; + internal_static_hbase_test_pb_DummyRequest_descriptor; private static com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_DummyRequest_fieldAccessorTable; + internal_static_hbase_test_pb_DummyRequest_fieldAccessorTable; private static com.google.protobuf.Descriptors.Descriptor - internal_static_DummyResponse_descriptor; + internal_static_hbase_test_pb_DummyResponse_descriptor; private static com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_DummyResponse_fieldAccessorTable; + internal_static_hbase_test_pb_DummyResponse_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -1185,31 +1185,33 @@ public final class DummyRegionServerEndpointProtos { descriptor; static { java.lang.String[] descriptorData = { - "\n\037DummyRegionServerEndpoint.proto\"\016\n\014Dum" + - "myRequest\"\036\n\rDummyResponse\022\r\n\005value\030\001 \002(" + - "\t2g\n\014DummyService\022*\n\tdummyCall\022\r.DummyRe" + - "quest\032\016.DummyResponse\022+\n\ndummyThrow\022\r.Du" + - "mmyRequest\032\016.DummyResponseB_\n6org.apache" + - ".hadoop.hbase.coprocessor.protobuf.gener" + - "atedB\037DummyRegionServerEndpointProtos\210\001\001" + - "\240\001\001" + "\n>hbase-server/src/test/protobuf/DummyRe" + + "gionServerEndpoint.proto\022\rhbase.test.pb\"" + + "\016\n\014DummyRequest\"\036\n\rDummyResponse\022\r\n\005valu" + + "e\030\001 \002(\t2\237\001\n\014DummyService\022F\n\tdummyCall\022\033." + + "hbase.test.pb.DummyRequest\032\034.hbase.test." + + "pb.DummyResponse\022G\n\ndummyThrow\022\033.hbase.t" + + "est.pb.DummyRequest\032\034.hbase.test.pb.Dumm" + + "yResponseB_\n6org.apache.hadoop.hbase.cop" + + "rocessor.protobuf.generatedB\037DummyRegion" + + "ServerEndpointProtos\210\001\001\240\001\001" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { public com.google.protobuf.ExtensionRegistry assignDescriptors( com.google.protobuf.Descriptors.FileDescriptor root) { descriptor = root; - internal_static_DummyRequest_descriptor = + internal_static_hbase_test_pb_DummyRequest_descriptor = getDescriptor().getMessageTypes().get(0); - internal_static_DummyRequest_fieldAccessorTable = new + internal_static_hbase_test_pb_DummyRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_DummyRequest_descriptor, + internal_static_hbase_test_pb_DummyRequest_descriptor, new java.lang.String[] { }); - internal_static_DummyResponse_descriptor = + internal_static_hbase_test_pb_DummyResponse_descriptor = getDescriptor().getMessageTypes().get(1); - internal_static_DummyResponse_fieldAccessorTable = new + internal_static_hbase_test_pb_DummyResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_DummyResponse_descriptor, + internal_static_hbase_test_pb_DummyResponse_descriptor, new java.lang.String[] { "Value", }); return null; } http://git-wip-us.apache.org/repos/asf/hbase/blob/d23d600d/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestCoprocessorRpcUtils.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestCoprocessorRpcUtils.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestCoprocessorRpcUtils.java new file mode 100644 index 0000000..82b0341 --- /dev/null +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestCoprocessorRpcUtils.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hbase.ipc; + +import static org.junit.Assert.assertEquals; + +import com.google.protobuf.Descriptors; +import org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos; +import org.apache.hadoop.hbase.protobuf.generated.AuthenticationProtos; +import org.apache.hadoop.hbase.testclassification.SmallTests; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +@Category(SmallTests.class) +public class TestCoprocessorRpcUtils { + @Test + public void testServiceName() throws Exception { + // verify that we de-namespace build in HBase rpc services + Descriptors.ServiceDescriptor authService = + AuthenticationProtos.AuthenticationService.getDescriptor(); + assertEquals(authService.getName(), CoprocessorRpcUtils.getServiceName(authService)); + + // non-hbase rpc services should remain fully qualified + Descriptors.ServiceDescriptor dummyService = + DummyRegionServerEndpointProtos.DummyService.getDescriptor(); + assertEquals(dummyService.getFullName(), CoprocessorRpcUtils.getServiceName(dummyService)); + } +} http://git-wip-us.apache.org/repos/asf/hbase/blob/d23d600d/hbase-server/src/test/protobuf/DummyRegionServerEndpoint.proto ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/protobuf/DummyRegionServerEndpoint.proto b/hbase-server/src/test/protobuf/DummyRegionServerEndpoint.proto index cc76825..539f7da 100644 --- a/hbase-server/src/test/protobuf/DummyRegionServerEndpoint.proto +++ b/hbase-server/src/test/protobuf/DummyRegionServerEndpoint.proto @@ -15,6 +15,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +package hbase.test.pb; + // Coprocessor test option java_package = "org.apache.hadoop.hbase.coprocessor.protobuf.generated"; option java_outer_classname = "DummyRegionServerEndpointProtos";