Exemplo n.º 1
0
 public void testLE() throws Exception {
   int count = 30;
   HashMap<Long, QuorumServer> peers = new HashMap<Long, QuorumServer>(count);
   ArrayList<LEThread> threads = new ArrayList<LEThread>(count);
   File tmpdir[] = new File[count];
   int port[] = new int[count];
   votes = new Vote[count];
   for (int i = 0; i < count; i++) {
     peers.put(
         Long.valueOf(i),
         new QuorumServer(i, new InetSocketAddress("127.0.0.1", PortAssignment.unique())));
     tmpdir[i] = ClientBase.createTmpDir();
     port[i] = PortAssignment.unique();
   }
   LeaderElection le[] = new LeaderElection[count];
   leaderDies = true;
   boolean allowOneBadLeader = leaderDies;
   for (int i = 0; i < le.length; i++) {
     QuorumPeer peer = new QuorumPeer(peers, tmpdir[i], tmpdir[i], port[i], 0, i, 1000, 2, 2);
     peer.startLeaderElection();
     le[i] = new LeaderElection(peer);
     LEThread thread = new LEThread(le[i], peer, i);
     thread.start();
     threads.add(thread);
   }
   for (int i = 0; i < threads.size(); i++) {
     threads.get(i).join(15000);
     if (threads.get(i).isAlive()) {
       fail("Threads didn't join");
     }
   }
   long id = votes[0].id;
   for (int i = 1; i < votes.length; i++) {
     if (votes[i] == null) {
       fail("Thread " + i + " had a null vote");
     }
     if (votes[i].id != id) {
       if (allowOneBadLeader && votes[i].id == i) {
         allowOneBadLeader = false;
       } else {
         fail("Thread " + i + " got " + votes[i].id + " expected " + id);
       }
     }
   }
 }
Exemplo n.º 2
0
  @Test
  public void testLENewEpoch() throws Exception {

    FastLeaderElection le[] = new FastLeaderElection[count];

    LOG.info("TestLE: " + getName() + ", " + count);
    for (int i = 0; i < count; i++) {
      peers.put(
          Long.valueOf(i),
          new QuorumServer(
              i,
              new InetSocketAddress(baseport + 100 + i),
              new InetSocketAddress(baseLEport + 100 + i)));
      tmpdir[i] = File.createTempFile("letest", "test");
      port[i] = baseport + i;
    }

    for (int i = 1; i < le.length; i++) {
      QuorumPeer peer = new QuorumPeer(peers, tmpdir[i], tmpdir[i], port[i], 3, i, 2, 2, 2);
      peer.startLeaderElection();
      LEThread thread = new LEThread(peer, i);
      thread.start();
      threads.add(thread);
    }
    Thread.sleep(2000);
    QuorumPeer peer = new QuorumPeer(peers, tmpdir[0], tmpdir[0], port[0], 3, 0, 2, 2, 2);
    peer.startLeaderElection();
    LEThread thread = new LEThread(peer, 0);
    thread.start();
    threads.add(thread);

    LOG.info("Started threads " + getName());

    for (int i = 0; i < threads.size(); i++) {
      threads.get(i).join(10000);
      if (threads.get(i).isAlive()) {
        fail("Threads didn't join");
      }
    }
  }