diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 974c51fc02b..0b63ac7f94e 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -11,6 +11,8 @@ Release 0.23-PB - Unreleased HDFS-2518. Add protobuf service for NamenodeProtocol. (suresh) + HDFS-2520. Add protobuf service for InterDatanodeProtocol. (suresh) + IMPROVEMENTS HDFS-2018. Move all journal stream management code into one place. diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/InterDatanodeProtocol.proto b/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/InterDatanodeProtocol.proto new file mode 100644 index 00000000000..9f36e29e0fa --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/InterDatanodeProtocol.proto @@ -0,0 +1,78 @@ +/** + * 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. + */ + +// This file contains protocol buffers that are used throughout HDFS -- i.e. +// by the client, server, and data transfer protocols. + +option java_package = "org.apache.hadoop.hdfs.protocol.proto"; +option java_outer_classname = "InterDatanodeProtocolProtos"; +option java_generic_services = true; +option java_generate_equals_and_hash = true; + +import "hdfs.proto"; + +/** + * Block with location information and new generation stamp + * to be used for recovery. + */ +message InitReplicaRecoveryRequestProto { + required RecoveringBlockProto block = 1; +} + +/** + * Repica recovery information + */ +message InitReplicaRecoveryResponseProto { + required ReplicaState state = 1; // State fo the replica + required BlockProto block = 2; // block information +} + +/** + * Update replica with new generation stamp and length + */ +message UpdateReplicaUnderRecoveryRequestProto { + required ExtendedBlockProto block = 1; // Block identifier + required uint64 recoveryId = 2; // New genstamp of the replica + required uint64 newLength = 3; // New length of the replica +} + +/** + * Response returns updated block information + */ +message UpdateReplicaUnderRecoveryResponseProto { + required ExtendedBlockProto block = 1; // Updated block information +} + +/** + * Protocol used between datanodes for block recovery. + * + * See the request and response for details of rpc call. + */ +service InterDatanodeProtocolService { + /** + * Initialize recovery of a replica + */ + rpc initReplicaRecovery(InitReplicaRecoveryRequestProto) + returns(InitReplicaRecoveryResponseProto); + + /** + * Update a replica with new generation stamp and length + */ + rpc updateReplicaUnderRecovery(UpdateReplicaUnderRecoveryRequestProto) + returns(UpdateReplicaUnderRecoveryResponseProto); +}