public void takeSnapshot() { takeSnapshot(false); }
public void run() { try { zks.takeSnapshot(); } catch(Exception e) { LOG.warn("Unexpected exception", e); } } };
public void run() { try { zks.takeSnapshot(); } catch(Exception e) { LOG.warn("Unexpected exception", e); } } };
@Override public void process(String path) { LOG.info("Take a snapshot"); zkServer.takeSnapshot(true); } });
@Override public void process(long sessionId) { LOG.info("Take snapshot"); if (shouldTakeSnapshot.getAndSet(false)) { zkServer.takeSnapshot(true); } } });
/** * 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); }
/** * ZOOKEEPER-1573: test restoring a snapshot with deleted txns ahead of the * snapshot file's zxid. */ @Test public void testReloadSnapshotWithMissingParent() throws Exception { // create transactions to create the snapshot with create/delete pattern ZooKeeper zk = createZKClient(hostPort); zk.create("/a", "".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); Stat stat = zk.exists("/a", false); long createZxId = stat.getMzxid(); zk.create("/a/b", "".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); zk.delete("/a/b", -1); zk.delete("/a", -1); // force the zxid to be behind the content ZooKeeperServer zks = getServer(serverFactory); zks.getZKDatabase().setlastProcessedZxid(createZxId); LOG.info("Set lastProcessedZxid to {}", zks.getZKDatabase() .getDataTreeLastProcessedZxid()); // Force snapshot and restore zks.takeSnapshot(); zks.shutdown(); stopServer(); startServer(); } }
+ zks.getZKDatabase().getDataTreeLastProcessedZxid()); zks.takeSnapshot(); zks.shutdown(); stopServer();
zks.takeSnapshot(); zks.shutdown(); stopServer();
CreateMode.PERSISTENT); zks.takeSnapshot();
public void run() { try { zks.takeSnapshot(); } catch(Exception e) { LOG.warn("Unexpected exception", e); } } };
/** * Restore sessions and data */ public void loadData() throws IOException, InterruptedException { zkDb.loadDataBase(); setZxid(zkDb.loadDataBase()); // Clean up dead sessions LinkedList<Long> deadSessions = new LinkedList<Long>(); for (long session : zkDb.getSessions()) { sessionsWithTimeouts = zkDb.getSessionWithTimeOuts(); if (sessionsWithTimeouts.get(session) == null) { deadSessions.add(session); } } zkDb.setDataTreeInit(true); for (long session : deadSessions) { // XXX: Is lastProcessedZxid really the best thing to use? killSession(session, zkDb.getDataTreeLastProcessedZxid()); } // Make a clean snapshot takeSnapshot(); }