Java 类org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall 实例源码

项目:ditb    文件:ProtobufUtil.java   
/**
 * Make a region server endpoint call
 * @param client
 * @param call
 * @return CoprocessorServiceResponse
 * @throws IOException
 */
public static CoprocessorServiceResponse execRegionServerService(
    final RpcController controller, final ClientService.BlockingInterface client,
    final CoprocessorServiceCall call)
    throws IOException {
  CoprocessorServiceRequest request =
      CoprocessorServiceRequest
          .newBuilder()
          .setCall(call)
          .setRegion(
            RequestConverter.buildRegionSpecifier(REGION_NAME, HConstants.EMPTY_BYTE_ARRAY))
          .build();
  try {
    CoprocessorServiceResponse response = client.execRegionServerService(controller, request);
    return response;
  } catch (ServiceException se) {
    throw getRemoteException(se);
  }
}
项目:pbase    文件:ProtobufUtil.java   
/**
 * Make a region server endpoint call
 * @param client
 * @param call
 * @return CoprocessorServiceResponse
 * @throws IOException
 */
public static CoprocessorServiceResponse execRegionServerService(
    final ClientService.BlockingInterface client, final CoprocessorServiceCall call)
    throws IOException {
  CoprocessorServiceRequest request =
      CoprocessorServiceRequest
          .newBuilder()
          .setCall(call)
          .setRegion(
            RequestConverter.buildRegionSpecifier(REGION_NAME, HConstants.EMPTY_BYTE_ARRAY))
          .build();
  try {
    CoprocessorServiceResponse response = client.execRegionServerService(null, request);
    return response;
  } catch (ServiceException se) {
    throw getRemoteException(se);
  }
}
项目:ditb    文件:ProtobufUtil.java   
public static CoprocessorServiceResponse execService(final RpcController controller,
    final ClientService.BlockingInterface client, final CoprocessorServiceCall call,
    final byte[] regionName) throws IOException {
  CoprocessorServiceRequest request = CoprocessorServiceRequest.newBuilder()
      .setCall(call).setRegion(
          RequestConverter.buildRegionSpecifier(REGION_NAME, regionName)).build();
  try {
    CoprocessorServiceResponse response =
        client.execService(controller, request);
    return response;
  } catch (ServiceException se) {
    throw getRemoteException(se);
  }
}
项目:ditb    文件:ProtobufUtil.java   
public static CoprocessorServiceResponse execService(final RpcController controller,
  final MasterService.BlockingInterface client, final CoprocessorServiceCall call)
throws IOException {
  CoprocessorServiceRequest request = CoprocessorServiceRequest.newBuilder()
      .setCall(call).setRegion(
          RequestConverter.buildRegionSpecifier(REGION_NAME, HConstants.EMPTY_BYTE_ARRAY)).build();
  try {
    CoprocessorServiceResponse response =
        client.execMasterService(controller, request);
    return response;
  } catch (ServiceException se) {
    throw getRemoteException(se);
  }
}
项目:pbase    文件:ProtobufUtil.java   
public static CoprocessorServiceResponse execService(final ClientService.BlockingInterface client,
    final CoprocessorServiceCall call, final byte[] regionName) throws IOException {
  CoprocessorServiceRequest request = CoprocessorServiceRequest.newBuilder()
      .setCall(call).setRegion(
          RequestConverter.buildRegionSpecifier(REGION_NAME, regionName)).build();
  try {
    CoprocessorServiceResponse response =
        client.execService(null, request);
    return response;
  } catch (ServiceException se) {
    throw getRemoteException(se);
  }
}
项目:pbase    文件:ProtobufUtil.java   
public static CoprocessorServiceResponse execService(
  final MasterService.BlockingInterface client, final CoprocessorServiceCall call)
throws IOException {
  CoprocessorServiceRequest request = CoprocessorServiceRequest.newBuilder()
      .setCall(call).setRegion(
          RequestConverter.buildRegionSpecifier(REGION_NAME, HConstants.EMPTY_BYTE_ARRAY)).build();
  try {
    CoprocessorServiceResponse response =
        client.execMasterService(null, request);
    return response;
  } catch (ServiceException se) {
    throw getRemoteException(se);
  }
}
项目:HIndex    文件:ProtobufUtil.java   
public static CoprocessorServiceResponse execService(
    final ClientService.BlockingInterface client, final CoprocessorServiceCall call,
    final byte[] regionName, PayloadCarryingRpcController controller) throws IOException {
  CoprocessorServiceRequest request = CoprocessorServiceRequest.newBuilder()
      .setCall(call).setRegion(
          RequestConverter.buildRegionSpecifier(REGION_NAME, regionName)).build();
  try {
    CoprocessorServiceResponse response =
        client.execService(controller, request);
    return response;
  } catch (ServiceException se) {
    throw getRemoteException(se);
  }
}
项目:HIndex    文件:ProtobufUtil.java   
public static CoprocessorServiceResponse execService(
  final MasterService.BlockingInterface client, final CoprocessorServiceCall call)
throws IOException {
  CoprocessorServiceRequest request = CoprocessorServiceRequest.newBuilder()
      .setCall(call).setRegion(
          RequestConverter.buildRegionSpecifier(REGION_NAME, HConstants.EMPTY_BYTE_ARRAY)).build();
  try {
    CoprocessorServiceResponse response =
        client.execMasterService(null, request);
    return response;
  } catch (ServiceException se) {
    throw getRemoteException(se);
  }
}
项目:PyroDB    文件:ProtobufUtil.java   
public static CoprocessorServiceResponse execService(final ClientService.BlockingInterface client,
    final CoprocessorServiceCall call, final byte[] regionName) throws IOException {
  CoprocessorServiceRequest request = CoprocessorServiceRequest.newBuilder()
      .setCall(call).setRegion(
          RequestConverter.buildRegionSpecifier(REGION_NAME, regionName)).build();
  try {
    CoprocessorServiceResponse response =
        client.execService(null, request);
    return response;
  } catch (ServiceException se) {
    throw getRemoteException(se);
  }
}
项目:PyroDB    文件:ProtobufUtil.java   
public static CoprocessorServiceResponse execService(
  final MasterService.BlockingInterface client, final CoprocessorServiceCall call)
throws IOException {
  CoprocessorServiceRequest request = CoprocessorServiceRequest.newBuilder()
      .setCall(call).setRegion(
          RequestConverter.buildRegionSpecifier(REGION_NAME, HConstants.EMPTY_BYTE_ARRAY)).build();
  try {
    CoprocessorServiceResponse response =
        client.execMasterService(null, request);
    return response;
  } catch (ServiceException se) {
    throw getRemoteException(se);
  }
}
项目:c5    文件:HRegion.java   
/**
 * Executes a single protocol buffer coprocessor endpoint {@link Service} method using
 * the registered protocol handlers.  {@link Service} implementations must be registered via the
 * {@link HRegion#registerService(com.google.protobuf.Service)}
 * method before they are available.
 *
 * @param controller an {@code RpcContoller} implementation to pass to the invoked service
 * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,
 *     and parameters for the method invocation
 * @return a protocol buffer {@code Message} instance containing the method's result
 * @throws IOException if no registered service handler is found or an error
 *     occurs during the invocation
 * @see org.apache.hadoop.hbase.regionserver.HRegion#registerService(com.google.protobuf.Service)
 */
public Message execService(RpcController controller, CoprocessorServiceCall call)
    throws IOException {
  String serviceName = call.getServiceName();
  String methodName = call.getMethodName();
  if (!coprocessorServiceHandlers.containsKey(serviceName)) {
    throw new UnknownProtocolException(null,
        "No registered coprocessor service found for name "+serviceName+
        " in region "+Bytes.toStringBinary(getRegionName()));
  }

  Service service = coprocessorServiceHandlers.get(serviceName);
  Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();
  Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);
  if (methodDesc == null) {
    throw new UnknownProtocolException(service.getClass(),
        "Unknown method "+methodName+" called on service "+serviceName+
            " in region "+Bytes.toStringBinary(getRegionName()));
  }

  Message request = service.getRequestPrototype(methodDesc).newBuilderForType()
      .mergeFrom(call.getRequest()).build();
  final Message.Builder responseBuilder =
      service.getResponsePrototype(methodDesc).newBuilderForType();
  service.callMethod(methodDesc, controller, request, new RpcCallback<Message>() {
    @Override
    public void run(Message message) {
      if (message != null) {
        responseBuilder.mergeFrom(message);
      }
    }
  });

  return responseBuilder.build();
}
项目:c5    文件:ProtobufUtil.java   
public static CoprocessorServiceResponse execService(final ClientService.BlockingInterface client,
    final CoprocessorServiceCall call, final byte[] regionName) throws IOException {
  CoprocessorServiceRequest request = CoprocessorServiceRequest.newBuilder()
      .setCall(call).setRegion(
          RequestConverter.buildRegionSpecifier(REGION_NAME, regionName)).build();
  try {
    CoprocessorServiceResponse response =
        client.execService(null, request);
    return response;
  } catch (ServiceException se) {
    throw getRemoteException(se);
  }
}
项目:c5    文件:ProtobufUtil.java   
public static CoprocessorServiceResponse execService(
  final MasterService.BlockingInterface client, final CoprocessorServiceCall call)
throws IOException {
  CoprocessorServiceRequest request = CoprocessorServiceRequest.newBuilder()
      .setCall(call).setRegion(
          RequestConverter.buildRegionSpecifier(REGION_NAME, HConstants.EMPTY_BYTE_ARRAY)).build();
  try {
    CoprocessorServiceResponse response =
        client.execMasterService(null, request);
    return response;
  } catch (ServiceException se) {
    throw getRemoteException(se);
  }
}
项目:DominoHBase    文件:ProtobufUtil.java   
public static CoprocessorServiceResponse execService(final ClientProtocol client,
    final CoprocessorServiceCall call, final byte[] regionName) throws IOException {
  CoprocessorServiceRequest request = CoprocessorServiceRequest.newBuilder()
      .setCall(call).setRegion(
          RequestConverter.buildRegionSpecifier(REGION_NAME, regionName)).build();
  try {
    CoprocessorServiceResponse response =
        client.execService(null, request);
    return response;
  } catch (ServiceException se) {
    throw getRemoteException(se);
  }
}
项目:DominoHBase    文件:ProtobufUtil.java   
public static CoprocessorServiceResponse execService(final MasterAdminProtocol client,
    final CoprocessorServiceCall call) throws IOException {
  CoprocessorServiceRequest request = CoprocessorServiceRequest.newBuilder()
      .setCall(call).setRegion(
          RequestConverter.buildRegionSpecifier(REGION_NAME, HConstants.EMPTY_BYTE_ARRAY)).build();
  try {
    CoprocessorServiceResponse response =
        client.execMasterService(null, request);
    return response;
  } catch (ServiceException se) {
    throw getRemoteException(se);
  }
}
项目:DominoHBase    文件:HRegion.java   
/**
 * Executes a single protocol buffer coprocessor endpoint {@link Service} method using
 * the registered protocol handlers.  {@link Service} implementations must be registered via the
 * {@link org.apache.hadoop.hbase.regionserver.HRegion#registerService(com.google.protobuf.Service)}
 * method before they are available.
 *
 * @param controller an {@code RpcContoller} implementation to pass to the invoked service
 * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,
 *     and parameters for the method invocation
 * @return a protocol buffer {@code Message} instance containing the method's result
 * @throws IOException if no registered service handler is found or an error
 *     occurs during the invocation
 * @see org.apache.hadoop.hbase.regionserver.HRegion#registerService(com.google.protobuf.Service)
 */
public Message execService(RpcController controller, CoprocessorServiceCall call)
    throws IOException {
  String serviceName = call.getServiceName();
  String methodName = call.getMethodName();
  if (!coprocessorServiceHandlers.containsKey(serviceName)) {
    throw new UnknownProtocolException(null,
        "No registered coprocessor service found for name "+serviceName+
        " in region "+Bytes.toStringBinary(getRegionName()));
  }

  Service service = coprocessorServiceHandlers.get(serviceName);
  Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();
  Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);
  if (methodDesc == null) {
    throw new UnknownProtocolException(service.getClass(),
        "Unknown method "+methodName+" called on service "+serviceName+
            " in region "+Bytes.toStringBinary(getRegionName()));
  }

  Message request = service.getRequestPrototype(methodDesc).newBuilderForType()
      .mergeFrom(call.getRequest()).build();
  final Message.Builder responseBuilder =
      service.getResponsePrototype(methodDesc).newBuilderForType();
  service.callMethod(methodDesc, controller, request, new RpcCallback<Message>() {
    @Override
    public void run(Message message) {
      if (message != null) {
        responseBuilder.mergeFrom(message);
      }
    }
  });

  return responseBuilder.build();
}
项目:ditb    文件:HRegionServer.java   
public CoprocessorServiceResponse execRegionServerService(
    @SuppressWarnings("UnusedParameters") final RpcController controller,
    final CoprocessorServiceRequest serviceRequest) throws ServiceException {
  try {
    ServerRpcController serviceController = new ServerRpcController();
    CoprocessorServiceCall call = serviceRequest.getCall();
    String serviceName = call.getServiceName();
    String methodName = call.getMethodName();
    if (!coprocessorServiceHandlers.containsKey(serviceName)) {
      throw new UnknownProtocolException(null,
          "No registered coprocessor service found for name " + serviceName);
    }
    Service service = coprocessorServiceHandlers.get(serviceName);
    Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();
    Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);
    if (methodDesc == null) {
      throw new UnknownProtocolException(service.getClass(),
          "Unknown method " + methodName + " called on service " + serviceName);
    }
    Message.Builder builderForType = service.getRequestPrototype(methodDesc).newBuilderForType();
    ProtobufUtil.mergeFrom(builderForType, call.getRequest());
    Message request = builderForType.build();
    final Message.Builder responseBuilder =
        service.getResponsePrototype(methodDesc).newBuilderForType();
    service.callMethod(methodDesc, serviceController, request, new RpcCallback<Message>() {
      @Override public void run(Message message) {
        if (message != null) {
          responseBuilder.mergeFrom(message);
        }
      }
    });
    IOException exception = ResponseConverter.getControllerException(serviceController);
    if (exception != null) {
      throw exception;
    }
    Message execResult = responseBuilder.build();
    ClientProtos.CoprocessorServiceResponse.Builder builder =
        ClientProtos.CoprocessorServiceResponse.newBuilder();
    builder.setRegion(RequestConverter
        .buildRegionSpecifier(RegionSpecifierType.REGION_NAME, HConstants.EMPTY_BYTE_ARRAY));
    builder.setValue(builder.getValueBuilder().setName(execResult.getClass().getName())
        .setValue(execResult.toByteString()));
    return builder.build();
  } catch (IOException ie) {
    throw new ServiceException(ie);
  }
}
项目:ditb    文件:HRegion.java   
@Override public Message execService(RpcController controller, CoprocessorServiceCall call)
    throws IOException {
  String serviceName = call.getServiceName();
  String methodName = call.getMethodName();
  if (!coprocessorServiceHandlers.containsKey(serviceName)) {
    throw new UnknownProtocolException(null,
        "No registered coprocessor service found for name " + serviceName + " in region " + Bytes
            .toStringBinary(getRegionInfo().getRegionName()));
  }

  Service service = coprocessorServiceHandlers.get(serviceName);
  Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();
  Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);
  if (methodDesc == null) {
    throw new UnknownProtocolException(service.getClass(),
        "Unknown method " + methodName + " called on service " + serviceName + " in region "
            + Bytes.toStringBinary(getRegionInfo().getRegionName()));
  }

  Message.Builder builder = service.getRequestPrototype(methodDesc).newBuilderForType();
  ProtobufUtil.mergeFrom(builder, call.getRequest());
  Message request = builder.build();

  if (coprocessorHost != null) {
    request = coprocessorHost.preEndpointInvocation(service, methodName, request);
  }

  final Message.Builder responseBuilder =
      service.getResponsePrototype(methodDesc).newBuilderForType();
  service.callMethod(methodDesc, controller, request, new RpcCallback<Message>() {
    @Override public void run(Message message) {
      if (message != null) {
        responseBuilder.mergeFrom(message);
      }
    }
  });

  if (coprocessorHost != null) {
    coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);
  }

  IOException exception = ResponseConverter.getControllerException(controller);
  if (exception != null) {
    throw exception;
  }

  return responseBuilder.build();
}
项目:pbase    文件:HRegionServer.java   
public CoprocessorServiceResponse execRegionServerService(final RpcController controller,
                                                          final CoprocessorServiceRequest serviceRequest) throws ServiceException {
    try {
        ServerRpcController execController = new ServerRpcController();
        CoprocessorServiceCall call = serviceRequest.getCall();
        String serviceName = call.getServiceName();
        String methodName = call.getMethodName();
        if (!coprocessorServiceHandlers.containsKey(serviceName)) {
            throw new UnknownProtocolException(null,
                    "No registered coprocessor service found for name " + serviceName);
        }
        Service service = coprocessorServiceHandlers.get(serviceName);
        Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();
        Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);
        if (methodDesc == null) {
            throw new UnknownProtocolException(service.getClass(), "Unknown method " + methodName
                    + " called on service " + serviceName);
        }
        Message request =
                service.getRequestPrototype(methodDesc).newBuilderForType().mergeFrom(call.getRequest())
                        .build();
        final Message.Builder responseBuilder =
                service.getResponsePrototype(methodDesc).newBuilderForType();
        service.callMethod(methodDesc, controller, request, new RpcCallback<Message>() {
            @Override
            public void run(Message message) {
                if (message != null) {
                    responseBuilder.mergeFrom(message);
                }
            }
        });
        Message execResult = responseBuilder.build();
        if (execController.getFailedOn() != null) {
            throw execController.getFailedOn();
        }
        ClientProtos.CoprocessorServiceResponse.Builder builder =
                ClientProtos.CoprocessorServiceResponse.newBuilder();
        builder.setRegion(RequestConverter.buildRegionSpecifier(RegionSpecifierType.REGION_NAME,
                HConstants.EMPTY_BYTE_ARRAY));
        builder.setValue(builder.getValueBuilder().setName(execResult.getClass().getName())
                .setValue(execResult.toByteString()));
        return builder.build();
    } catch (IOException ie) {
        throw new ServiceException(ie);
    }
}
项目:pbase    文件:HRegion.java   
/**
 * Executes a single protocol buffer coprocessor endpoint {@link Service} method using
 * the registered protocol handlers.  {@link Service} implementations must be registered via the
 * {@link HRegion#registerService(com.google.protobuf.Service)}
 * method before they are available.
 *
 * @param controller an {@code RpcController} implementation to pass to the invoked service
 * @param call       a {@code CoprocessorServiceCall} instance identifying the service, method,
 *                   and parameters for the method invocation
 * @return a protocol buffer {@code Message} instance containing the method's result
 * @throws IOException if no registered service handler is found or an error
 *                     occurs during the invocation
 * @see org.apache.hadoop.hbase.regionserver.HRegion#registerService(com.google.protobuf.Service)
 */
public Message execService(RpcController controller, CoprocessorServiceCall call)
        throws IOException {
    String serviceName = call.getServiceName();
    String methodName = call.getMethodName();
    if (!coprocessorServiceHandlers.containsKey(serviceName)) {
        throw new UnknownProtocolException(null,
                "No registered coprocessor service found for name " + serviceName +
                        " in region " + Bytes.toStringBinary(getRegionName()));
    }

    Service service = coprocessorServiceHandlers.get(serviceName);
    Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();
    Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);
    if (methodDesc == null) {
        throw new UnknownProtocolException(service.getClass(),
                "Unknown method " + methodName + " called on service " + serviceName +
                        " in region " + Bytes.toStringBinary(getRegionName()));
    }

    Message request = service.getRequestPrototype(methodDesc).newBuilderForType()
            .mergeFrom(call.getRequest()).build();

    if (coprocessorHost != null) {
        request = coprocessorHost.preEndpointInvocation(service, methodName, request);
    }

    final Message.Builder responseBuilder =
            service.getResponsePrototype(methodDesc).newBuilderForType();
    service.callMethod(methodDesc, controller, request, new RpcCallback<Message>() {
        @Override
        public void run(Message message) {
            if (message != null) {
                responseBuilder.mergeFrom(message);
            }
        }
    });

    if (coprocessorHost != null) {
        coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);
    }

    return responseBuilder.build();
}
项目:HIndex    文件:HRegion.java   
/**
 * Executes a single protocol buffer coprocessor endpoint {@link Service} method using
 * the registered protocol handlers.  {@link Service} implementations must be registered via the
 * {@link HRegion#registerService(com.google.protobuf.Service)}
 * method before they are available.
 *
 * @param controller an {@code RpcContoller} implementation to pass to the invoked service
 * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,
 *     and parameters for the method invocation
 * @return a protocol buffer {@code Message} instance containing the method's result
 * @throws IOException if no registered service handler is found or an error
 *     occurs during the invocation
 * @see org.apache.hadoop.hbase.regionserver.HRegion#registerService(com.google.protobuf.Service)
 */
public Message execService(RpcController controller, CoprocessorServiceCall call)
    throws IOException {
  String serviceName = call.getServiceName();
  String methodName = call.getMethodName();
  if (!coprocessorServiceHandlers.containsKey(serviceName)) {
    throw new UnknownProtocolException(null,
        "No registered coprocessor service found for name "+serviceName+
        " in region "+Bytes.toStringBinary(getRegionName()));
  }

  Service service = coprocessorServiceHandlers.get(serviceName);
  Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();
  Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);
  if (methodDesc == null) {
    throw new UnknownProtocolException(service.getClass(),
        "Unknown method "+methodName+" called on service "+serviceName+
            " in region "+Bytes.toStringBinary(getRegionName()));
  }

  Message request = service.getRequestPrototype(methodDesc).newBuilderForType()
      .mergeFrom(call.getRequest()).build();

  if (coprocessorHost != null) {
    request = coprocessorHost.preEndpointInvocation(service, methodName, request);
  }

  final Message.Builder responseBuilder =
      service.getResponsePrototype(methodDesc).newBuilderForType();
  service.callMethod(methodDesc, controller, request, new RpcCallback<Message>() {
    @Override
    public void run(Message message) {
      if (message != null) {
        responseBuilder.mergeFrom(message);
      }
    }
  });

  if (coprocessorHost != null) {
    coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);
  }

  return responseBuilder.build();
}
项目:HIndex    文件:ProtobufUtil.java   
public static CoprocessorServiceResponse execService(final ClientService.BlockingInterface client,
    final CoprocessorServiceCall call, final byte[] regionName) throws IOException {
  return execService(client, call, regionName, null);
}
项目:PyroDB    文件:HRegion.java   
/**
 * Executes a single protocol buffer coprocessor endpoint {@link Service} method using
 * the registered protocol handlers.  {@link Service} implementations must be registered via the
 * {@link HRegion#registerService(com.google.protobuf.Service)}
 * method before they are available.
 *
 * @param controller an {@code RpcContoller} implementation to pass to the invoked service
 * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,
 *     and parameters for the method invocation
 * @return a protocol buffer {@code Message} instance containing the method's result
 * @throws IOException if no registered service handler is found or an error
 *     occurs during the invocation
 * @see org.apache.hadoop.hbase.regionserver.HRegion#registerService(com.google.protobuf.Service)
 */
public Message execService(RpcController controller, CoprocessorServiceCall call)
    throws IOException {
  String serviceName = call.getServiceName();
  String methodName = call.getMethodName();
  if (!coprocessorServiceHandlers.containsKey(serviceName)) {
    throw new UnknownProtocolException(null,
        "No registered coprocessor service found for name "+serviceName+
        " in region "+Bytes.toStringBinary(getRegionName()));
  }

  Service service = coprocessorServiceHandlers.get(serviceName);
  Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();
  Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);
  if (methodDesc == null) {
    throw new UnknownProtocolException(service.getClass(),
        "Unknown method "+methodName+" called on service "+serviceName+
            " in region "+Bytes.toStringBinary(getRegionName()));
  }

  Message request = service.getRequestPrototype(methodDesc).newBuilderForType()
      .mergeFrom(call.getRequest()).build();

  if (coprocessorHost != null) {
    request = coprocessorHost.preEndpointInvocation(service, methodName, request);
  }

  final Message.Builder responseBuilder =
      service.getResponsePrototype(methodDesc).newBuilderForType();
  service.callMethod(methodDesc, controller, request, new RpcCallback<Message>() {
    @Override
    public void run(Message message) {
      if (message != null) {
        responseBuilder.mergeFrom(message);
      }
    }
  });

  if (coprocessorHost != null) {
    coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);
  }

  return responseBuilder.build();
}
项目:ditb    文件:Region.java   
/**
 * Executes a single protocol buffer coprocessor endpoint {@link Service} method using
 * the registered protocol handlers.  {@link Service} implementations must be registered via the
 * {@link Region#registerService(com.google.protobuf.Service)}
 * method before they are available.
 *
 * @param controller an {@code RpcContoller} implementation to pass to the invoked service
 * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,
 *     and parameters for the method invocation
 * @return a protocol buffer {@code Message} instance containing the method's result
 * @throws IOException if no registered service handler is found or an error
 *     occurs during the invocation
 * @see org.apache.hadoop.hbase.regionserver.Region#registerService(com.google.protobuf.Service)
 */
Message execService(RpcController controller, CoprocessorServiceCall call) throws IOException;