@After public void tearDown() { // stop all NN LOG.debug("tearDown"); for (LightWeightNameNode nn : nnList) { nn.stop(); } }
/** Test if the NN are correctly removed from the Active NN list */ @Test public void testDeadNodesRemoval() throws IOException, InterruptedException, CloneNotSupportedException { LOG.debug("start testDeadNodesRemoval"); List<InetSocketAddress> isaList = new ArrayList<InetSocketAddress>(); // create 10 NN for (int i = 0; i < 10; i++) { LightWeightNameNode nn = new LightWeightNameNode( new HdfsLeDescriptorFactory(), DFS_LEADER_CHECK_INTERVAL_IN_MS, DFS_LEADER_MISSED_HB_THRESHOLD, TIME_PERIOD_INCREMENT, HTTP_ADDRESS, "127.0.0.1:" + (50000 + i)); nnList.add(nn); isaList.add(nn.getNameNodeAddress()); } // wait for one HB and the first node should have complete list of nodes Thread.sleep(DFS_LEADER_CHECK_INTERVAL_IN_MS * DFS_LEADER_MISSED_HB_THRESHOLD); // verify that the number of active nn is equal to the number of started NN List<ActiveNode> activesNNs = nnList.get(0).getActiveNameNodes().getActiveNodes(); assertTrue( "wrong number of active NN " + activesNNs.size(), activesNNs.size() == nnList.size()); // verify that there is one and only one leader. int leaderId = 0; int nbLeaders = 0; for (int i = 0; i < nnList.size(); i++) { if (nnList.get(i).isLeader()) { nbLeaders++; leaderId = i; } } assertTrue("there is no leader", nbLeaders > 0); assertTrue("there is more than one leader", nbLeaders == 1); // stop the leader nnList.get(leaderId).stop(); Thread.sleep(DFS_LEADER_CHECK_INTERVAL_IN_MS * (DFS_LEADER_MISSED_HB_THRESHOLD + 2)); // verify that there is one and only one leader. int newLeaderId = 0; nbLeaders = 0; for (int i = 0; i < nnList.size(); i++) { if (i != leaderId) { if (nnList.get(i).isLeader()) { nbLeaders++; newLeaderId = i; } } } assertTrue("there is no leader", nbLeaders > 0); assertTrue("there is more than one leader", nbLeaders == 1); // verify that the stoped leader is not in the active list anymore activesNNs = nnList.get(newLeaderId).getActiveNameNodes().getActiveNodes(); for (ActiveNode ann : activesNNs) { assertFalse( "previous is stil in active nn", ann.getInetSocketAddress().equals(isaList.get(leaderId))); } // stop NN last alive NN int tokill = nnList.size() - 1; while (leaderId == tokill || newLeaderId == tokill) { tokill--; } LOG.debug("stopping node: " + nnList.get(tokill).getLeCurrentId()); nnList.get(tokill).stop(); Thread.sleep(DFS_LEADER_CHECK_INTERVAL_IN_MS * (DFS_LEADER_MISSED_HB_THRESHOLD + 2)); // verify that the killed NN is not in the active NN list anymore activesNNs = nnList.get(newLeaderId).getActiveNameNodes().getActiveNodes(); assertTrue("wrong nb of active nn " + activesNNs.size(), activesNNs.size() == 8); for (ActiveNode ann : activesNNs) { assertFalse( "killed nn is stil in active nn", ann.getInetSocketAddress().equals(isaList.get(tokill))); } }