| package org.apache.hadoop.hdfs.server.namenode; |
| |
| import org.apache.hadoop.conf.Configuration; |
| import org.apache.hadoop.hdfs.HdfsConfiguration; |
| import org.apache.hadoop.hdfs.MiniDFSCluster; |
| import org.apache.hadoop.hdfs.protocol.Block; |
| import org.apache.hadoop.hdfs.server.common.GenerationStamp; |
| |
| import junit.framework.TestCase; |
| |
| /** |
| * Test if FSNamesystem handles heartbeat right |
| */ |
| public class TestComputeInvalidateWork extends TestCase { |
| /** |
| * Test if {@link FSNamesystem#computeInvalidateWork(int)} |
| * can schedule invalidate work correctly |
| */ |
| public void testCompInvalidate() throws Exception { |
| final Configuration conf = new HdfsConfiguration(); |
| final int NUM_OF_DATANODES = 3; |
| final MiniDFSCluster cluster = new MiniDFSCluster(conf, NUM_OF_DATANODES, true, null); |
| try { |
| cluster.waitActive(); |
| final FSNamesystem namesystem = cluster.getNamesystem(); |
| DatanodeDescriptor[] nodes = |
| namesystem.heartbeats.toArray(new DatanodeDescriptor[NUM_OF_DATANODES]); |
| assertEquals(nodes.length, NUM_OF_DATANODES); |
| |
| synchronized (namesystem) { |
| for (int i=0; i<nodes.length; i++) { |
| for(int j=0; j<3*namesystem.blockInvalidateLimit+1; j++) { |
| Block block = new Block(i*(namesystem.blockInvalidateLimit+1)+j, 0, |
| GenerationStamp.FIRST_VALID_STAMP); |
| namesystem.blockManager.addToInvalidates(block, nodes[i]); |
| } |
| } |
| |
| assertEquals(namesystem.blockInvalidateLimit*NUM_OF_DATANODES, |
| namesystem.blockManager.computeInvalidateWork(NUM_OF_DATANODES+1)); |
| assertEquals(namesystem.blockInvalidateLimit*NUM_OF_DATANODES, |
| namesystem.blockManager.computeInvalidateWork(NUM_OF_DATANODES)); |
| assertEquals(namesystem.blockInvalidateLimit*(NUM_OF_DATANODES-1), |
| namesystem.blockManager.computeInvalidateWork(NUM_OF_DATANODES-1)); |
| int workCount = namesystem.blockManager.computeInvalidateWork(1); |
| if (workCount == 1) { |
| assertEquals(namesystem.blockInvalidateLimit+1, |
| namesystem.blockManager.computeInvalidateWork(2)); |
| } else { |
| assertEquals(workCount, namesystem.blockInvalidateLimit); |
| assertEquals(2, namesystem.blockManager.computeInvalidateWork(2)); |
| } |
| } |
| } finally { |
| cluster.shutdown(); |
| } |
| } |
| } |