You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by ca...@apache.org on 2013/05/16 18:55:42 UTC
svn commit: r1483441 - in /zookeeper/branches/branch-3.4: CHANGES.txt
src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java
Author: camille
Date: Thu May 16 16:55:41 2013
New Revision: 1483441
URL: http://svn.apache.org/r1483441
Log:
ZOOKEEPER-1642. Leader loading database twice (fpj via camille)
Modified:
zookeeper/branches/branch-3.4/CHANGES.txt
zookeeper/branches/branch-3.4/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java
Modified: zookeeper/branches/branch-3.4/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/branches/branch-3.4/CHANGES.txt?rev=1483441&r1=1483440&r2=1483441&view=diff
==============================================================================
--- zookeeper/branches/branch-3.4/CHANGES.txt (original)
+++ zookeeper/branches/branch-3.4/CHANGES.txt Thu May 16 16:55:41 2013
@@ -64,6 +64,8 @@ BUGFIXES:
(phunt via fpj)
ZOOKEEPER-1706. Typo in Double Barriers example (Jingguo Yao via fpj)
+
+ ZOOKEEPER-1642. Leader Loading Database Twice (fpj via camille)
IMPROVEMENTS:
Modified: zookeeper/branches/branch-3.4/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java
URL: http://svn.apache.org/viewvc/zookeeper/branches/branch-3.4/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java?rev=1483441&r1=1483440&r2=1483441&view=diff
==============================================================================
--- zookeeper/branches/branch-3.4/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java (original)
+++ zookeeper/branches/branch-3.4/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java Thu May 16 16:55:41 2013
@@ -247,7 +247,31 @@ public class ZooKeeperServer implements
* Restore sessions and data
*/
public void loadData() throws IOException, InterruptedException {
- setZxid(zkDb.loadDataBase());
+ /*
+ * When a new leader starts executing Leader#lead, it
+ * invokes this method. The database, however, has been
+ * initialized before running leader election so that
+ * the server could pick its zxid for its initial vote.
+ * It does it by invoking QuorumPeer#getLastLoggedZxid.
+ * Consequently, we don't need to initialize it once more
+ * and avoid the penalty of loading it a second time. Not
+ * reloading it is particularly important for applications
+ * that host a large database.
+ *
+ * The following if block checks whether the database has
+ * been initialized or not. Note that this method is
+ * invoked by at least one other method:
+ * ZooKeeperServer#startdata.
+ *
+ * See ZOOKEEPER-1642 for more detail.
+ */
+ if(zkDb.isInitialized()){
+ setZxid(zkDb.getDataTreeLastProcessedZxid());
+ }
+ else {
+ setZxid(zkDb.loadDataBase());
+ }
+
// Clean up dead sessions
LinkedList<Long> deadSessions = new LinkedList<Long>();
for (Long session : zkDb.getSessions()) {