Search in sources :

Example 1 with GetProtocolSignatureResponseProto

use of org.apache.hadoop.ipc.protobuf.ProtocolInfoProtos.GetProtocolSignatureResponseProto in project hadoop by apache.

the class ProtocolMetaInfoServerSideTranslatorPB method getProtocolSignature.

@Override
public GetProtocolSignatureResponseProto getProtocolSignature(RpcController controller, GetProtocolSignatureRequestProto request) throws ServiceException {
    GetProtocolSignatureResponseProto.Builder builder = GetProtocolSignatureResponseProto.newBuilder();
    String protocol = request.getProtocol();
    String rpcKind = request.getRpcKind();
    long[] versions;
    try {
        versions = getProtocolVersionForRpcKind(RPC.RpcKind.valueOf(rpcKind), protocol);
    } catch (ClassNotFoundException e1) {
        throw new ServiceException(e1);
    }
    if (versions == null) {
        return builder.build();
    }
    for (long v : versions) {
        ProtocolSignatureProto.Builder sigBuilder = ProtocolSignatureProto.newBuilder();
        sigBuilder.setVersion(v);
        try {
            ProtocolSignature signature = ProtocolSignature.getProtocolSignature(protocol, v);
            for (int m : signature.getMethods()) {
                sigBuilder.addMethods(m);
            }
        } catch (ClassNotFoundException e) {
            throw new ServiceException(e);
        }
        builder.addProtocolSignature(sigBuilder.build());
    }
    return builder.build();
}
Also used : ProtocolSignatureProto(org.apache.hadoop.ipc.protobuf.ProtocolInfoProtos.ProtocolSignatureProto) ServiceException(com.google.protobuf.ServiceException) GetProtocolSignatureResponseProto(org.apache.hadoop.ipc.protobuf.ProtocolInfoProtos.GetProtocolSignatureResponseProto)

Example 2 with GetProtocolSignatureResponseProto

use of org.apache.hadoop.ipc.protobuf.ProtocolInfoProtos.GetProtocolSignatureResponseProto in project hadoop by apache.

the class RpcClientUtil method isMethodSupported.

/**
   * Returns whether the given method is supported or not.
   * The protocol signatures are fetched and cached. The connection id for the
   * proxy provided is re-used.
   * @param rpcProxy Proxy which provides an existing connection id.
   * @param protocol Protocol for which the method check is required.
   * @param rpcKind The RpcKind for which the method check is required.
   * @param version The version at the client.
   * @param methodName Name of the method.
   * @return true if the method is supported, false otherwise.
   * @throws IOException
   */
public static boolean isMethodSupported(Object rpcProxy, Class<?> protocol, RPC.RpcKind rpcKind, long version, String methodName) throws IOException {
    InetSocketAddress serverAddress = RPC.getServerAddress(rpcProxy);
    Map<Long, ProtocolSignature> versionMap = getVersionSignatureMap(serverAddress, protocol.getName(), rpcKind.toString());
    if (versionMap == null) {
        Configuration conf = new Configuration();
        RPC.setProtocolEngine(conf, ProtocolMetaInfoPB.class, ProtobufRpcEngine.class);
        ProtocolMetaInfoPB protocolInfoProxy = getProtocolMetaInfoProxy(rpcProxy, conf);
        GetProtocolSignatureRequestProto.Builder builder = GetProtocolSignatureRequestProto.newBuilder();
        builder.setProtocol(protocol.getName());
        builder.setRpcKind(rpcKind.toString());
        GetProtocolSignatureResponseProto resp;
        try {
            resp = protocolInfoProxy.getProtocolSignature(NULL_CONTROLLER, builder.build());
        } catch (ServiceException se) {
            throw ProtobufHelper.getRemoteException(se);
        }
        versionMap = convertProtocolSignatureProtos(resp.getProtocolSignatureList());
        putVersionSignatureMap(serverAddress, protocol.getName(), rpcKind.toString(), versionMap);
    }
    // Assuming unique method names.
    Method desiredMethod;
    Method[] allMethods = protocol.getMethods();
    desiredMethod = null;
    for (Method m : allMethods) {
        if (m.getName().equals(methodName)) {
            desiredMethod = m;
            break;
        }
    }
    if (desiredMethod == null) {
        return false;
    }
    int methodHash = ProtocolSignature.getFingerprint(desiredMethod);
    return methodExists(methodHash, version, versionMap);
}
Also used : Configuration(org.apache.hadoop.conf.Configuration) GetProtocolSignatureRequestProto(org.apache.hadoop.ipc.protobuf.ProtocolInfoProtos.GetProtocolSignatureRequestProto) InetSocketAddress(java.net.InetSocketAddress) Method(java.lang.reflect.Method) ServiceException(com.google.protobuf.ServiceException) GetProtocolSignatureResponseProto(org.apache.hadoop.ipc.protobuf.ProtocolInfoProtos.GetProtocolSignatureResponseProto)

Aggregations

ServiceException (com.google.protobuf.ServiceException)2 GetProtocolSignatureResponseProto (org.apache.hadoop.ipc.protobuf.ProtocolInfoProtos.GetProtocolSignatureResponseProto)2 Method (java.lang.reflect.Method)1 InetSocketAddress (java.net.InetSocketAddress)1 Configuration (org.apache.hadoop.conf.Configuration)1 GetProtocolSignatureRequestProto (org.apache.hadoop.ipc.protobuf.ProtocolInfoProtos.GetProtocolSignatureRequestProto)1 ProtocolSignatureProto (org.apache.hadoop.ipc.protobuf.ProtocolInfoProtos.ProtocolSignatureProto)1