/** * 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. */ option java_package = "org.apache.hadoop.ipc.protobuf"; option java_outer_classname = "RpcPayloadHeaderProtos"; option java_generate_equals_and_hash = true; /** * This is the rpc payload header. It is sent with every rpc call. * * The format of RPC call is as follows: * +-----------------------------------------------------+ * | Rpc length in bytes | * +-----------------------------------------------------+ * | RpcPayloadHeader - serialized delimited ie has len | * +-----------------------------------------------------+ * | RpcRequest Payload | * +-----------------------------------------------------+ * */ /** * RpcKind determine the rpcEngine and the serialization of the rpc payload */ enum RpcKindProto { RPC_BUILTIN = 0; // Used for built in calls by tests RPC_WRITABLE = 1; // Use WritableRpcEngine RPC_PROTOCOL_BUFFER = 2; // Use ProtobufRpcEngine } enum RpcPayloadOperationProto { RPC_FINAL_PAYLOAD = 0; // The final payload RPC_CONTINUATION_PAYLOAD = 1; // not implemented yet RPC_CLOSE_CONNECTION = 2; // close the rpc connection } message RpcPayloadHeaderProto { // the header for the RpcRequest optional RpcKindProto rpcKind = 1; optional RpcPayloadOperationProto rpcOp = 2; required uint32 callId = 3; // each rpc has a callId that is also used in response } enum RpcStatusProto { SUCCESS = 0; // RPC succeeded ERROR = 1; // RPC Failed FATAL = 2; // Fatal error - connection is closed } /** * Rpc Response Header * - If successfull then the Respose follows after this header * - length (4 byte int), followed by the response * - If error or fatal - the exception info follow * - length (4 byte int) Class name of exception - UTF-8 string * - length (4 byte int) Stacktrace - UTF-8 string * - if the strings are null then the length is -1 * In case of Fatal error then the respose contains the Serverside's IPC version */ message RpcResponseHeaderProto { required uint32 callId = 1; // callId used in Request required RpcStatusProto status = 2; optional uint32 serverIpcVersionNum = 3; // in case of an fatal IPC error }