/// <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()))); }
/// <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); }
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]); } }
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); } }
/// <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); }
/// <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);
/// <exception cref="System.IO.IOException"/> public override ReplicaRecoveryInfo InitReplicaRecovery(BlockRecoveryCommand.RecoveringBlock rBlock) { return(new ReplicaRecoveryInfo(0, 0, 0, HdfsServerConstants.ReplicaState.Finalized )); }