private QuorumZooKeeperServer getConnectedServer(long sessionId) { for (QuorumPeer peer : getPeerList()) { if (peer.getActiveServer().getSessionTracker().isTrackingSession(sessionId)) { return (QuorumZooKeeperServer)peer.getActiveServer(); } } return null; } }
private void checkLeader() { idxLeader = 1; while(qu.getPeer(idxLeader).peer.leader == null) { idxLeader++; } idxFollower = (idxLeader == 1 ? 2 : 1); zksLeader = qu.getPeer(idxLeader).peer.getActiveServer(); }
/** * Wait for all server to have the same lastProccessedZxid. Timeout in seconds */ private boolean waitForSync(QuorumUtil qu, int index, int timeout) throws InterruptedException{ LOG.info("Wait for server to sync"); int leaderIndex = (index == 1) ? 2 : 1; ZKDatabase restartedDb = qu.getPeer(index).peer.getActiveServer().getZKDatabase(); ZKDatabase cleanDb = qu.getPeer(3).peer.getActiveServer().getZKDatabase(); ZKDatabase leadDb = qu.getPeer(leaderIndex).peer.getActiveServer().getZKDatabase(); long leadZxid = 0; long cleanZxid = 0; long restartedZxid = 0; for (int i = 0; i < timeout; ++i) { leadZxid = leadDb.getDataTreeLastProcessedZxid(); cleanZxid = cleanDb.getDataTreeLastProcessedZxid(); restartedZxid = restartedDb.getDataTreeLastProcessedZxid(); if (leadZxid == cleanZxid && leadZxid == restartedZxid) { return true; } Thread.sleep(1000); } LOG.info("Timeout waiting for zxid to sync: leader 0x{}" + "clean 0x{}" + "restarted 0x{}", Long.toHexString(leadZxid), Long.toHexString(cleanZxid), Long.toHexString(restartedZxid)); return false; }
/** * Walk through the target peer commmittedLog. * @param sessionId * @param peerId */ private void validateRequestLog(long sessionId, int peerId) { String session = Long.toHexString(sessionId); LOG.info("Searching for txn of session 0x " + session + " on peer " + peerId); String peerType = peerId == qb.getLeaderIndex() ? "leader" : "follower"; QuorumPeer peer = qb.getPeerList().get(peerId); ZKDatabase db = peer.getActiveServer().getZKDatabase(); for (Proposal p : db.getCommittedLog()) { Assert.assertFalse("Should not see " + TraceFormatter.op2String(p.request.type) + " request from local session 0x" + session + " on the " + peerType, p.request.sessionId == sessionId); } }
(CustomDataTree) mt[followerA].main.quorumPeer.getZkDb().getDataTree(); final ZooKeeperServer zkServer = mt[followerA].main.quorumPeer.getActiveServer();
long sid = qu.getFollowerQuorumPeers().get(0).getActiveServer() .getServerId(); long fakeSessionId = (sid << 56) + 1; leader.getActiveServer().submitRequest(request);
LOG.info("Hook to catch the commitSession event on followerA"); CustomizedQPMain followerAMain = (CustomizedQPMain) mt[followerA].main; final ZooKeeperServer zkServer = followerAMain.quorumPeer.getActiveServer();
long sid = qu.getFollowerQuorumPeers().get(0).getActiveServer() .getServerId(); long locallSession = (sid << 56) + 1; leader.getActiveServer().submitRequest(request);
private void verifyState(QuorumUtil qu, int index, Leader leader) { LOG.info("Verifying state"); assertTrue("Not following", qu.getPeer(index).peer.follower != null); long epochF = (qu.getPeer(index).peer.getActiveServer().getZxid() >> 32L); long epochL = (leader.getEpoch() >> 32L); assertTrue("Zxid: " + qu.getPeer(index).peer.getActiveServer().getZKDatabase().getDataTreeLastProcessedZxid() + "Current epoch: " + epochF, epochF == epochL); int leaderIndex = (index == 1) ? 2 : 1; Collection<Long> sessionsRestarted = qu.getPeer(index).peer.getActiveServer().getZKDatabase().getSessions(); Collection<Long> sessionsNotRestarted = qu.getPeer(leaderIndex).peer.getActiveServer().getZKDatabase().getSessions(); ZKDatabase restarted = qu.getPeer(index).peer.getActiveServer().getZKDatabase(); ZKDatabase clean = qu.getPeer(3).peer.getActiveServer().getZKDatabase(); ZKDatabase lead = qu.getPeer(leaderIndex).peer.getActiveServer().getZKDatabase(); for(Long l : sessionsRestarted) { LOG.info("Validating ephemeral for session id 0x{}", Long.toHexString(l));
/** * It's possible during taking fuzzy snapshot, the parent is serialized * before the child get deleted in the fuzzy range. * * In which case, we need to make sure the pzxid get correctly updated * when replaying the txns. */ @Test public void testPZxidUpdatedWhenLoadingSnapshot() throws Exception { final String parent = "/testPZxidUpdatedDuringTakingSnapshot"; final String child = parent + "/child"; createEmptyNode(zk[followerA], parent); createEmptyNode(zk[followerA], child); LOG.info("Set up ZKDatabase to catch the node serializing in DataTree"); addSerializeListener(followerA, parent, child); LOG.info("Take snapshot on follower A"); ZooKeeperServer zkServer = mt[followerA].main.quorumPeer.getActiveServer(); zkServer.takeSnapshot(true); LOG.info("Restarting follower A to load snapshot"); mt[followerA].shutdown(); QuorumPeerMainTest.waitForOne(zk[followerA], States.CONNECTING); mt[followerA].start(); QuorumPeerMainTest.waitForOne(zk[followerA], States.CONNECTED); LOG.info("Check and make sure the pzxid of the parent is the same " + "on leader and follower A"); compareStat(parent, leaderId, followerA); }
FollowerZooKeeperServer followerZooKeeperServer = (FollowerZooKeeperServer) follower.getQuorumPeer().getActiveServer(); delayRequestProcessor = DelayRequestProcessor.injectDelayRequestProcessor(followerZooKeeperServer);
@Test public void testOnlyUpgradeSessionOnce() throws IOException, InterruptedException, KeeperException { // create a client, and create an ephemeral node to trigger the // upgrading process final String node = "/node-1"; ZooKeeper zk = new ZooKeeper("127.0.0.1:" + clientPorts[0], ClientBase.CONNECTION_TIMEOUT, this); waitForOne(zk, States.CONNECTED); long sessionId = zk.getSessionId(); QuorumZooKeeperServer server = (QuorumZooKeeperServer) mt[0].main.quorumPeer.getActiveServer(); Request create1 = createEphemeralRequest("/data-1", sessionId); Request create2 = createEphemeralRequest("/data-2", sessionId); Assert.assertNotNull("failed to upgrade on a ephemeral create", server.checkUpgradeSession(create1)); Assert.assertNull("tried to upgrade again", server.checkUpgradeSession(create2)); // clean al the setups and close the zk zk.close(); }
qu.getPeer(index).peer.getActiveServer().getZKDatabase() .setSnapshotSizeFactor(1000); } else { qu.getPeer(index).peer.getActiveServer().getZKDatabase() .setSnapshotSizeFactor(-1);
FileTxnSnapLog snapLog = leader.getActiveServer().getTxnLogFactory(); FileTxnSnapLog fileTxnSnapLogWithError = new FileTxnSnapLog( snapLog.getDataDir(), snapLog.getSnapDir()) { ZKDatabase originalZKDatabase = leader.getActiveServer() .getZKDatabase(); long leaderCurrentEpoch = leader.getCurrentEpoch(); leader.getActiveServer().setZKDatabase(newDB); leader.getActiveServer().setZKDatabase(originalZKDatabase);
Map<String, Object> stats = Commands.runCommand("mntr", q3.getQuorumPeer().getActiveServer(), emptyMap).toMap(); Assert.assertTrue("observer not emitting observer_master_id", stats.containsKey("observer_master_id")); stats = Commands.runCommand("mntr", q1.getQuorumPeer().getActiveServer(), emptyMap).toMap(); if (testObserverMaster) { if (q1.getQuorumPeer().leader == null) { stats = Commands.runCommand("mntr", q2.getQuorumPeer().getActiveServer(), emptyMap).toMap(); if (testObserverMaster) { if (q2.getQuorumPeer().leader == null) {