/// <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())));
 }
Esempio n. 3
0
        /// <exception cref="System.IO.IOException"/>
        private ICollection <BlockRecoveryCommand.RecoveringBlock> InitRecoveringBlocks()
        {
            ICollection <BlockRecoveryCommand.RecoveringBlock> blocks = new AList <BlockRecoveryCommand.RecoveringBlock
                                                                                   >(1);
            DatanodeInfo mockOtherDN = DFSTestUtil.GetLocalDatanodeInfo();

            DatanodeInfo[] locs = new DatanodeInfo[] { new DatanodeInfo(dn.GetDNRegistrationForBP
                                                                            (block.GetBlockPoolId())), mockOtherDN };
            BlockRecoveryCommand.RecoveringBlock rBlock = new BlockRecoveryCommand.RecoveringBlock
                                                              (block, locs, RecoveryId);
            blocks.AddItem(rBlock);
            return(blocks);
        }
Esempio n. 4
0
        public virtual void TestConvertRecoveringBlock()
        {
            DatanodeInfo di1 = DFSTestUtil.GetLocalDatanodeInfo();
            DatanodeInfo di2 = DFSTestUtil.GetLocalDatanodeInfo();

            DatanodeInfo[] dnInfo = new DatanodeInfo[] { di1, di2 };
            BlockRecoveryCommand.RecoveringBlock b = new BlockRecoveryCommand.RecoveringBlock
                                                         (GetExtendedBlock(), dnInfo, 3);
            HdfsProtos.RecoveringBlockProto      bProto = PBHelper.Convert(b);
            BlockRecoveryCommand.RecoveringBlock b1     = PBHelper.Convert(bProto);
            NUnit.Framework.Assert.AreEqual(b.GetBlock(), b1.GetBlock());
            DatanodeInfo[] dnInfo1 = b1.GetLocations();
            NUnit.Framework.Assert.AreEqual(dnInfo.Length, dnInfo1.Length);
            for (int i = 0; i < dnInfo.Length; i++)
            {
                Compare(dnInfo[0], dnInfo1[0]);
            }
        }
Esempio n. 5
0
 public override void Run()
 {
     try
     {
         DatanodeInfo[] locations = block.GetLocations();
         BlockRecoveryCommand.RecoveringBlock recoveringBlock = new BlockRecoveryCommand.RecoveringBlock
                                                                    (block.GetBlock(), locations, block.GetBlock().GetGenerationStamp() + 1);
         lock (dataNode.data)
         {
             Sharpen.Thread.Sleep(2000);
             dataNode.InitReplicaRecovery(recoveringBlock);
         }
     }
     catch (Exception)
     {
         recoveryInitResult.Set(false);
     }
 }
Esempio n. 6
0
        /// <summary>Sync two replicas</summary>
        /// <exception cref="System.IO.IOException"/>
        private void TestSyncReplicas(ReplicaRecoveryInfo replica1, ReplicaRecoveryInfo replica2
                                      , InterDatanodeProtocol dn1, InterDatanodeProtocol dn2, long expectLen)
        {
            DatanodeInfo[] locs = new DatanodeInfo[] { Org.Mockito.Mockito.Mock <DatanodeInfo>
                                                           (), Org.Mockito.Mockito.Mock <DatanodeInfo>() };
            BlockRecoveryCommand.RecoveringBlock rBlock = new BlockRecoveryCommand.RecoveringBlock
                                                              (block, locs, RecoveryId);
            AList <DataNode.BlockRecord> syncList = new AList <DataNode.BlockRecord>(2);

            DataNode.BlockRecord record1 = new DataNode.BlockRecord(DFSTestUtil.GetDatanodeInfo
                                                                        ("1.2.3.4", "bogus", 1234), dn1, replica1);
            DataNode.BlockRecord record2 = new DataNode.BlockRecord(DFSTestUtil.GetDatanodeInfo
                                                                        ("1.2.3.4", "bogus", 1234), dn2, replica2);
            syncList.AddItem(record1);
            syncList.AddItem(record2);
            Org.Mockito.Mockito.When(dn1.UpdateReplicaUnderRecovery((ExtendedBlock)Matchers.AnyObject
                                                                        (), Matchers.AnyLong(), Matchers.AnyLong(), Matchers.AnyLong())).ThenReturn("storage1"
                                                                                                                                                    );
            Org.Mockito.Mockito.When(dn2.UpdateReplicaUnderRecovery((ExtendedBlock)Matchers.AnyObject
                                                                        (), Matchers.AnyLong(), Matchers.AnyLong(), Matchers.AnyLong())).ThenReturn("storage2"
                                                                                                                                                    );
            dn.SyncBlock(rBlock, syncList);
        }
Esempio n. 7
0
 /// <summary>Initialize a replica recovery.</summary>
 /// <returns>
 /// actual state of the replica on this data-node or
 /// null if data-node does not have the replica.
 /// </returns>
 /// <exception cref="System.IO.IOException"/>
 public abstract ReplicaRecoveryInfo InitReplicaRecovery(BlockRecoveryCommand.RecoveringBlock
                                                         rBlock);
Esempio n. 8
0
 /// <exception cref="System.IO.IOException"/>
 public override ReplicaRecoveryInfo InitReplicaRecovery(BlockRecoveryCommand.RecoveringBlock
                                                         rBlock)
 {
     return(new ReplicaRecoveryInfo(0, 0, 0, HdfsServerConstants.ReplicaState.Finalized
                                    ));
 }