Ejemplo n.º 1
0
 @After
 public void tearDown() {
   // stop all NN
   LOG.debug("tearDown");
   for (LightWeightNameNode nn : nnList) {
     nn.stop();
   }
 }
Ejemplo n.º 2
0
  /** 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)));
    }
  }