コード例 #1
0
ファイル: ClientBase.java プロジェクト: tengwei/TwApplication
 protected void stopServer() throws Exception {
   LOG.info("STOPPING server");
   shutdownServerInstance(serverFactory, hostPort);
   serverFactory = null;
   // ensure no beans are leftover
   JMXEnv.ensureOnly();
 }
コード例 #2
0
ファイル: ClientBase.java プロジェクト: tengwei/TwApplication
  @After
  public void tearDown() throws Exception {
    LOG.info("tearDown starting");

    tearDownAll();

    stopServer();

    if (tmpDir != null) {
      Assert.assertTrue("delete " + tmpDir.toString(), recursiveDelete(tmpDir));
    }

    // This has to be set to null when the same instance of this class is reused between test cases
    serverFactory = null;

    JMXEnv.tearDown();

    /* some useful information - log the number of fds used before
     * and after a test is run. Helps to verify we are freeing resources
     * correctly. Unfortunately this only works on unix systems (the
     * only place sun has implemented as part of the mgmt bean api.
     */
    OSMXBean osMbean = new OSMXBean();
    if (osMbean.getUnix() == true) {
      long fdCount = osMbean.getOpenFileDescriptorCount();
      String message = "fdcount after test is: " + fdCount + " at start it was " + initialFdCount;
      LOG.info(message);
      if (fdCount > initialFdCount) {
        LOG.info("sleeping for 20 secs");
        // Thread.sleep(60000);
        // assertTrue(message, fdCount <= initialFdCount);
      }
    }
  }
コード例 #3
0
ファイル: ClientBase.java プロジェクト: tengwei/TwApplication
  @Before
  public void setUp() throws Exception {
    /* some useful information - log the number of fds used before
     * and after a test is run. Helps to verify we are freeing resources
     * correctly. Unfortunately this only works on unix systems (the
     * only place sun has implemented as part of the mgmt bean api.
     */
    OSMXBean osMbean = new OSMXBean();
    if (osMbean.getUnix() == true) {
      initialFdCount = osMbean.getOpenFileDescriptorCount();
      LOG.info("Initial fdcount is: " + initialFdCount);
    }

    setupTestEnv();

    JMXEnv.setUp();

    setUpAll();

    tmpDir = createTmpDir(BASETEST);

    startServer();

    LOG.info("Client test setup finished");
  }
コード例 #4
0
  String getAddrPortFromBean(String beanName, String attribute) throws Exception {
    String name = (String) JMXEnv.ensureBeanAttribute(beanName, attribute);

    if (!name.contains(":")) {
      return name;
    }

    return getNumericalAddrPort(name);
  }
コード例 #5
0
ファイル: ClientBase.java プロジェクト: tengwei/TwApplication
 protected void startServer() throws Exception {
   LOG.info("STARTING server");
   serverFactory = createNewServerInstance(serverFactory, hostPort, maxCnxns);
   startServerInstance(tmpDir, serverFactory, hostPort);
   // ensure that server and data bean are registered
   Set<ObjectName> children = JMXEnv.ensureParent("InMemoryDataTree", "StandaloneServer_port");
   // Remove beans which are related to zk client sessions. Strong
   // assertions cannot be done for these client sessions because
   // registeration of these beans with server will happen only on their
   // respective reconnection interval
   verifyUnexpectedBeans(children);
 }
コード例 #6
0
 private void assertLocalPeerMXBeanAttributes(
     QuorumPeer qp, String beanName, Boolean isPartOfEnsemble) throws Exception {
   Assert.assertEquals(
       "Mismatches LearnerType!",
       qp.getLearnerType().name(),
       JMXEnv.ensureBeanAttribute(beanName, "LearnerType"));
   Assert.assertEquals(
       "Mismatches ClientAddress!",
       qp.getClientAddress().getHostString() + ":" + qp.getClientAddress().getPort(),
       JMXEnv.ensureBeanAttribute(beanName, "ClientAddress"));
   Assert.assertEquals(
       "Mismatches LearnerType!",
       qp.getElectionAddress().getHostString() + ":" + qp.getElectionAddress().getPort(),
       JMXEnv.ensureBeanAttribute(beanName, "ElectionAddress"));
   Assert.assertEquals(
       "Mismatches PartOfEnsemble!",
       isPartOfEnsemble,
       JMXEnv.ensureBeanAttribute(beanName, "PartOfEnsemble"));
   Assert.assertEquals(
       "Mismatches ConfigVersion!",
       qp.getQuorumVerifier().getVersion(),
       JMXEnv.ensureBeanAttribute(beanName, "ConfigVersion"));
   Assert.assertEquals(
       "Mismatches QuorumSystemInfo!",
       qp.getQuorumVerifier().toString(),
       JMXEnv.ensureBeanAttribute(beanName, "QuorumSystemInfo"));
 }
コード例 #7
0
  @After
  @Override
  protected void tearDown() throws Exception {
    LOG.info("TearDown started");
    shutdownServers();

    for (String hp : hostPort.split(",")) {
      assertTrue(
          "waiting for server down",
          ClientBase.waitForServerDown(hp, ClientBase.CONNECTION_TIMEOUT));
      LOG.info(hp + " is no longer accepting client connections");
    }

    JMXEnv.tearDown();

    LOG.info("FINISHED " + getName());
  }
コード例 #8
0
 private void assertRemotePeerMXBeanAttributes(QuorumServer qs, String beanName) throws Exception {
   Assert.assertEquals(
       "Mismatches LearnerType!",
       qs.type.name(),
       JMXEnv.ensureBeanAttribute(beanName, "LearnerType"));
   Assert.assertEquals(
       "Mismatches ClientAddress!",
       getNumericalAddrPort(qs.clientAddr.getHostString() + ":" + qs.clientAddr.getPort()),
       getAddrPortFromBean(beanName, "ClientAddress"));
   Assert.assertEquals(
       "Mismatches ElectionAddress!",
       getNumericalAddrPort(qs.electionAddr.getHostString() + ":" + qs.electionAddr.getPort()),
       getAddrPortFromBean(beanName, "ElectionAddress"));
   Assert.assertEquals(
       "Mismatches QuorumAddress!",
       getNumericalAddrPort(qs.addr.getHostString() + ":" + qs.addr.getPort()),
       getAddrPortFromBean(beanName, "QuorumAddress"));
 }
コード例 #9
0
ファイル: ClientBase.java プロジェクト: tengwei/TwApplication
  protected TestableZooKeeper createClient(CountdownWatcher watcher, String hp, int timeout)
      throws IOException, InterruptedException {
    watcher.reset();
    TestableZooKeeper zk = new TestableZooKeeper(hp, timeout, watcher);
    if (!watcher.clientConnected.await(timeout, TimeUnit.MILLISECONDS)) {
      Assert.fail("Unable to connect to server");
    }
    synchronized (this) {
      if (!allClientsSetup) {
        LOG.error("allClients never setup");
        Assert.fail("allClients never setup");
      }
      if (allClients != null) {
        allClients.add(zk);
        JMXEnv.ensureAll(getHexSessionId(zk.getSessionId()));
      } else {
        // test done - close the zk, not needed
        zk.close();
      }
    }

    return zk;
  }
コード例 #10
0
  void startServers() throws Exception {
    int tickTime = 2000;
    int initLimit = 3;
    int syncLimit = 3;
    JMXEnv.setUp();

    HashMap<Long, QuorumServer> peers = new HashMap<Long, QuorumServer>();
    peers.put(Long.valueOf(1), new QuorumServer(1, new InetSocketAddress("127.0.0.1", 3181)));
    peers.put(Long.valueOf(2), new QuorumServer(2, new InetSocketAddress("127.0.0.1", 3182)));
    peers.put(Long.valueOf(3), new QuorumServer(3, new InetSocketAddress("127.0.0.1", 3183)));
    peers.put(Long.valueOf(4), new QuorumServer(4, new InetSocketAddress("127.0.0.1", 3184)));
    peers.put(Long.valueOf(5), new QuorumServer(5, new InetSocketAddress("127.0.0.1", 3185)));

    LOG.info("creating QuorumPeer 1");
    s1 = new QuorumPeer(peers, s1dir, s1dir, 2181, 0, 1, tickTime, initLimit, syncLimit);
    assertEquals(2181, s1.getClientPort());
    LOG.info("creating QuorumPeer 2");
    s2 = new QuorumPeer(peers, s2dir, s2dir, 2182, 0, 2, tickTime, initLimit, syncLimit);
    assertEquals(2182, s2.getClientPort());
    LOG.info("creating QuorumPeer 3");
    s3 = new QuorumPeer(peers, s3dir, s3dir, 2183, 0, 3, tickTime, initLimit, syncLimit);
    assertEquals(2183, s3.getClientPort());
    LOG.info("creating QuorumPeer 4");
    s4 = new QuorumPeer(peers, s4dir, s4dir, 2184, 0, 4, tickTime, initLimit, syncLimit);
    assertEquals(2184, s4.getClientPort());
    LOG.info("creating QuorumPeer 5");
    s5 = new QuorumPeer(peers, s5dir, s5dir, 2185, 0, 5, tickTime, initLimit, syncLimit);
    assertEquals(2185, s5.getClientPort());
    LOG.info("start QuorumPeer 1");
    s1.start();
    LOG.info("start QuorumPeer 2");
    s2.start();
    LOG.info("start QuorumPeer 3");
    s3.start();
    LOG.info("start QuorumPeer 4");
    s4.start();
    LOG.info("start QuorumPeer 5");
    s5.start();
    LOG.info("started QuorumPeer 5");
    for (String hp : hostPort.split(",")) {
      assertTrue("waiting for server up", ClientBase.waitForServerUp(hp, CONNECTION_TIMEOUT));
      LOG.info(hp + " is accepting client connections");
    }

    // interesting to see what's there...
    JMXEnv.dump();
    // make sure we have these 5 servers listed
    Set<String> ensureNames = new LinkedHashSet<String>();
    for (int i = 1; i <= 5; i++) {
      ensureNames.add("InMemoryDataTree");
    }
    for (int i = 1; i <= 5; i++) {
      ensureNames.add("name0=ReplicatedServer_id" + i + ",name1=replica." + i + ",name2=");
    }
    for (int i = 1; i <= 5; i++) {
      for (int j = 1; j <= 5; j++) {
        ensureNames.add("name0=ReplicatedServer_id" + i + ",name1=replica." + j);
      }
    }
    for (int i = 1; i <= 5; i++) {
      ensureNames.add("name0=ReplicatedServer_id" + i);
    }
    JMXEnv.ensureAll(ensureNames.toArray(new String[ensureNames.size()]));
  }
コード例 #11
0
ファイル: ClientBase.java プロジェクト: tengwei/TwApplication
 public static MBeanServerConnection jmxConn() throws IOException {
   return JMXEnv.conn();
 }
コード例 #12
0
  /**
   * Tests verifies the jmx attributes of local and remote peer bean - remove one quorum peer and
   * again adding it back
   */
  @Test
  public void testJMXBeanAfterRemoveAddOne() throws Exception {
    qu = new QuorumUtil(1); // create 3 servers
    qu.disableJMXTest = true;
    qu.startAll();
    ZooKeeper[] zkArr = createHandles(qu);

    List<String> leavingServers = new ArrayList<String>();
    List<String> joiningServers = new ArrayList<String>();

    // assert remotePeerBean.1 of ReplicatedServer_2
    int leavingIndex = 1;
    int replica2 = 2;
    QuorumPeer peer2 = qu.getPeer(replica2).peer;
    QuorumServer leavingQS2 = peer2.getView().get(new Long(leavingIndex));
    String remotePeerBean2 =
        CommonNames.DOMAIN
            + ":name0=ReplicatedServer_id"
            + replica2
            + ",name1=replica."
            + leavingIndex;
    assertRemotePeerMXBeanAttributes(leavingQS2, remotePeerBean2);

    // assert remotePeerBean.1 of ReplicatedServer_3
    int replica3 = 3;
    QuorumPeer peer3 = qu.getPeer(replica3).peer;
    QuorumServer leavingQS3 = peer3.getView().get(new Long(leavingIndex));
    String remotePeerBean3 =
        CommonNames.DOMAIN
            + ":name0=ReplicatedServer_id"
            + replica3
            + ",name1=replica."
            + leavingIndex;
    assertRemotePeerMXBeanAttributes(leavingQS3, remotePeerBean3);

    ZooKeeper zk = zkArr[leavingIndex];

    leavingServers.add(Integer.toString(leavingIndex));

    // remember this server so we can add it back later
    joiningServers.add(
        "server."
            + leavingIndex
            + "=127.0.0.1:"
            + qu.getPeer(leavingIndex).peer.getQuorumAddress().getPort()
            + ":"
            + qu.getPeer(leavingIndex).peer.getElectionAddress().getPort()
            + ":participant;127.0.0.1:"
            + qu.getPeer(leavingIndex).peer.getClientPort());

    // Remove ReplicatedServer_1 from the ensemble
    reconfig(zk, null, leavingServers, null, -1);

    // localPeerBean.1 of ReplicatedServer_1
    QuorumPeer removedPeer = qu.getPeer(leavingIndex).peer;
    String localPeerBean =
        CommonNames.DOMAIN
            + ":name0=ReplicatedServer_id"
            + leavingIndex
            + ",name1=replica."
            + leavingIndex;
    assertLocalPeerMXBeanAttributes(removedPeer, localPeerBean, false);

    // remotePeerBean.1 shouldn't exists in ReplicatedServer_2
    JMXEnv.ensureNone(remotePeerBean2);
    // remotePeerBean.1 shouldn't exists in ReplicatedServer_3
    JMXEnv.ensureNone(remotePeerBean3);

    // Add ReplicatedServer_1 back to the ensemble
    reconfig(zk, joiningServers, null, null, -1);

    // localPeerBean.1 of ReplicatedServer_1
    assertLocalPeerMXBeanAttributes(removedPeer, localPeerBean, true);

    // assert remotePeerBean.1 of ReplicatedServer_2
    leavingQS2 = peer2.getView().get(new Long(leavingIndex));
    assertRemotePeerMXBeanAttributes(leavingQS2, remotePeerBean2);

    // assert remotePeerBean.1 of ReplicatedServer_3
    leavingQS3 = peer3.getView().get(new Long(leavingIndex));
    assertRemotePeerMXBeanAttributes(leavingQS3, remotePeerBean3);

    closeAllHandles(zkArr);
  }