/// <exception cref="Com.Google.Protobuf.ServiceException"/>
        public virtual InterDatanodeProtocolProtos.InitReplicaRecoveryResponseProto InitReplicaRecovery
            (RpcController unused, InterDatanodeProtocolProtos.InitReplicaRecoveryRequestProto
            request)
        {
            BlockRecoveryCommand.RecoveringBlock b = PBHelper.Convert(request.GetBlock());
            ReplicaRecoveryInfo r;

            try
            {
                r = impl.InitReplicaRecovery(b);
            }
            catch (IOException e)
            {
                throw new ServiceException(e);
            }
            if (r == null)
            {
                return((InterDatanodeProtocolProtos.InitReplicaRecoveryResponseProto)InterDatanodeProtocolProtos.InitReplicaRecoveryResponseProto
                       .NewBuilder().SetReplicaFound(false).Build());
            }
            else
            {
                return((InterDatanodeProtocolProtos.InitReplicaRecoveryResponseProto)InterDatanodeProtocolProtos.InitReplicaRecoveryResponseProto
                       .NewBuilder().SetReplicaFound(true).SetBlock(PBHelper.Convert(r)).SetState(PBHelper
                                                                                                  .Convert(r.GetOriginalReplicaState())).Build());
            }
        }
 /// <exception cref="System.IO.IOException"/>
 public virtual ReplicaRecoveryInfo InitReplicaRecovery(BlockRecoveryCommand.RecoveringBlock
                                                        rBlock)
 {
     InterDatanodeProtocolProtos.InitReplicaRecoveryRequestProto req = ((InterDatanodeProtocolProtos.InitReplicaRecoveryRequestProto
                                                                         )InterDatanodeProtocolProtos.InitReplicaRecoveryRequestProto.NewBuilder().SetBlock
                                                                            (PBHelper.Convert(rBlock)).Build());
     InterDatanodeProtocolProtos.InitReplicaRecoveryResponseProto resp;
     try
     {
         resp = rpcProxy.InitReplicaRecovery(NullController, req);
     }
     catch (ServiceException e)
     {
         throw ProtobufHelper.GetRemoteException(e);
     }
     if (!resp.GetReplicaFound())
     {
         // No replica found on the remote node.
         return(null);
     }
     else
     {
         if (!resp.HasBlock() || !resp.HasState())
         {
             throw new IOException("Replica was found but missing fields. " + "Req: " + req +
                                   "\n" + "Resp: " + resp);
         }
     }
     HdfsProtos.BlockProto b = resp.GetBlock();
     return(new ReplicaRecoveryInfo(b.GetBlockId(), b.GetNumBytes(), b.GetGenStamp(),
                                    PBHelper.Convert(resp.GetState())));
 }