|
@@ -32,9 +32,6 @@ import org.apache.hadoop.fs.FileSystem;
|
|
|
import org.apache.hadoop.fs.Path;
|
|
|
import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
|
|
|
import org.apache.hadoop.hdfs.protocol.ExtendedBlock;
|
|
|
-import org.apache.hadoop.hdfs.protocol.LocatedBlock;
|
|
|
-import org.apache.hadoop.hdfs.protocolPB.DatanodeProtocolClientSideTranslatorPB;
|
|
|
-import org.apache.hadoop.hdfs.server.blockmanagement.DatanodeDescriptor;
|
|
|
import org.apache.hadoop.hdfs.server.datanode.DataNode;
|
|
|
import org.apache.hadoop.hdfs.server.datanode.DataNodeFaultInjector;
|
|
|
import org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException;
|
|
@@ -530,51 +527,4 @@ public class TestClientProtocolForPipelineRecovery {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testUpdatePipeLineAfterDNReg()throws Exception {
|
|
|
- Configuration conf = new HdfsConfiguration();
|
|
|
- MiniDFSCluster cluster = null;
|
|
|
- try {
|
|
|
- cluster = new MiniDFSCluster.Builder(conf).numDataNodes(2).build();
|
|
|
- cluster.waitActive();
|
|
|
- FileSystem fileSys = cluster.getFileSystem();
|
|
|
-
|
|
|
- Path file = new Path("/testUpdatePipeLineAfterDNReg");
|
|
|
- FSDataOutputStream out = fileSys.create(file);
|
|
|
- out.write(1);
|
|
|
- out.hflush();
|
|
|
- //Get the First DN and disable the heartbeats and then put in Deadstate
|
|
|
- DFSOutputStream dfsOut = (DFSOutputStream) out.getWrappedStream();
|
|
|
- DatanodeInfo[] pipeline = dfsOut.getPipeline();
|
|
|
- DataNode dn1 = cluster.getDataNode(pipeline[0].getIpcPort());
|
|
|
- dn1.setHeartbeatsDisabledForTests(true);
|
|
|
- DatanodeDescriptor dn1Desc = cluster.getNamesystem(0).getBlockManager()
|
|
|
- .getDatanodeManager().getDatanode(dn1.getDatanodeId());
|
|
|
- cluster.setDataNodeDead(dn1Desc);
|
|
|
- //Re-register the DeadNode
|
|
|
- DatanodeProtocolClientSideTranslatorPB dnp =
|
|
|
- new DatanodeProtocolClientSideTranslatorPB(
|
|
|
- cluster.getNameNode().getNameNodeAddress(), conf);
|
|
|
- dnp.registerDatanode(
|
|
|
- dn1.getDNRegistrationForBP(cluster.getNamesystem().getBlockPoolId()));
|
|
|
- DFSOutputStream dfsO = (DFSOutputStream) out.getWrappedStream();
|
|
|
- String clientName = ((DistributedFileSystem) fileSys).getClient()
|
|
|
- .getClientName();
|
|
|
- NamenodeProtocols namenode = cluster.getNameNodeRpc();
|
|
|
- //Update the genstamp and call updatepipeline
|
|
|
- LocatedBlock newBlock = namenode
|
|
|
- .updateBlockForPipeline(dfsO.getBlock(), clientName);
|
|
|
- dfsO.getStreamer()
|
|
|
- .updatePipeline(newBlock.getBlock().getGenerationStamp());
|
|
|
- newBlock = namenode.updateBlockForPipeline(dfsO.getBlock(), clientName);
|
|
|
- //Should not throw any error Pipeline should be success
|
|
|
- dfsO.getStreamer()
|
|
|
- .updatePipeline(newBlock.getBlock().getGenerationStamp());
|
|
|
- } finally {
|
|
|
- if (cluster != null) {
|
|
|
- cluster.shutdown();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
}
|