Commit ecd7b9f8 authored by Patrick D. Hunt's avatar Patrick D. Hunt
Browse files

Preparing for release 3.5.0

git-svn-id: https://svn.apache.org/repos/asf/zookeeper/branches/branch-3.5@1615247 13f79535-47bb-0310-9956-ffa450edef68
parent 47d8b90c
......@@ -32,7 +32,7 @@ xmlns:maven="antlib:org.apache.maven.artifact.ant">
<property name="version-major" value="3" />
<property name="version-minor" value="5" />
<property name="version-patch" value="0" />
<property name="version" value="${version-major}.${version-minor}.${version-patch}-SNAPSHOT" />
<property name="version" value="${version-major}.${version-minor}.${version-patch}" />
<property name="final.name" value="${name}-${version}"/>
<property name="revision.dir" value="${basedir}/.revision" />
......
......@@ -67,7 +67,7 @@
<a class="unselected" href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/">Wiki</a>
</li>
<li class="current">
<a class="selected" href="index.html">ZooKeeper 3.4 Documentation</a>
<a class="selected" href="index.html">ZooKeeper 3.5 Documentation</a>
</li>
</ul>
<!--+
......
No preview for this file type
......@@ -67,7 +67,7 @@
<a class="unselected" href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/">Wiki</a>
</li>
<li class="current">
<a class="selected" href="index.html">ZooKeeper 3.4 Documentation</a>
<a class="selected" href="index.html">ZooKeeper 3.5 Documentation</a>
</li>
</ul>
<!--+
......
No preview for this file type
......@@ -67,7 +67,7 @@
<a class="unselected" href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/">Wiki</a>
</li>
<li class="current">
<a class="selected" href="index.html">ZooKeeper 3.4 Documentation</a>
<a class="selected" href="index.html">ZooKeeper 3.5 Documentation</a>
</li>
</ul>
<!--+
......
No preview for this file type
......@@ -67,7 +67,7 @@
<a class="unselected" href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/">Wiki</a>
</li>
<li class="current">
<a class="selected" href="index.html">ZooKeeper 3.4 Documentation</a>
<a class="selected" href="index.html">ZooKeeper 3.5 Documentation</a>
</li>
</ul>
<!--+
......
No preview for this file type
......@@ -5,7 +5,7 @@
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.9">
<meta name="Forrest-skin-name" content="pelt">
<title>ZooKeeper 3.0.0 Release Notes</title>
<title>ZooKeeper Release Notes</title>
<link type="text/css" href="skin/basic.css" rel="stylesheet">
<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
<link media="print" type="text/css" href="skin/print.css" rel="stylesheet">
......@@ -67,7 +67,7 @@
<a class="unselected" href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/">Wiki</a>
</li>
<li class="current">
<a class="selected" href="index.html">ZooKeeper 3.4 Documentation</a>
<a class="selected" href="index.html">ZooKeeper 3.5 Documentation</a>
</li>
</ul>
<!--+
......@@ -187,1685 +187,1188 @@ document.write("Last Published: " + document.lastModified);
<a class="dida" href="releasenotes.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
PDF</a>
</div>
<h1>ZooKeeper 3.0.0 Release Notes</h1>
<div id="front-matter">
<div id="minitoc-area">
<ul class="minitoc">
<li>
<a href="#migration">Migration Instructions when Upgrading to 3.0.0</a>
<ul class="minitoc">
<li>
<a href="#migration_code">Migrating Client Code</a>
<ul class="minitoc">
<li>
<a href="#Watch+Management">Watch Management</a>
Release Notes - ZooKeeper - Version 3.5.0
<h2> Sub-task
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-442'>ZOOKEEPER-442</a>] - need a way to remove watches that are no longer of interest
</li>
<li>
<a href="#Java+API">Java API</a>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-762'>ZOOKEEPER-762</a>] - Allow dynamic addition/removal of server nodes in the client API
</li>
<li>
<a href="#C+API">C API</a>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-827'>ZOOKEEPER-827</a>] - enable r/o mode in C client library
</li>
</ul>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-837'>ZOOKEEPER-837</a>] - cyclic dependency ClientCnxn, ZooKeeper
</li>
<li>
<a href="#migration_data">Migrating Server Data</a>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-878'>ZOOKEEPER-878</a>] - finishPacket and conLossPacket should be methods of Packet
</li>
<li>
<a href="#migration_config">Migrating Server Configuration</a>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-910'>ZOOKEEPER-910</a>] - Use SelectionKey.isXYZ() methods instead of complicated binary logic
</li>
</ul>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-932'>ZOOKEEPER-932</a>] - Move blocking read/write calls to SendWorker and RecvWorker Threads
</li>
<li>
<a href="#changes">Changes Since ZooKeeper 2.2.1</a>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-933'>ZOOKEEPER-933</a>] - Remove wildcard QuorumPeer.OBSERVER_ID
</li>
</ul>
</div>
</div>
<p>
These release notes include new developer and user facing incompatibilities, features, and major improvements.
</p>
<ul>
<li>
<p>
<a href="#migration">Migration Instructions</a>
</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-934'>ZOOKEEPER-934</a>] - Add sanity check for server ID
</li>
<li>
<p>
<a href="#changes">Changes</a>
</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1044'>ZOOKEEPER-1044</a>] - Allow dynamic changes to roles of a peer
</li>
</ul>
<a name="migration"></a>
<h2 class="h3">Migration Instructions when Upgrading to 3.0.0</h2>
<div class="section">
<p>
<em>You should only have to read this section if you are upgrading from a previous version of ZooKeeper to version 3.0.0, otw skip down to <a href="#changes">changes</a></em>
</p>
<p>
A small number of changes in this release have resulted in non-backward compatible Zookeeper client user code and server instance data. The following instructions provide details on how to migrate code and date from version 2.2.1 to version 3.0.0.
</p>
<p>
Note: ZooKeeper increments the major version number (major.minor.fix) when backward incompatible changes are made to the source base. As part of the migration from SourceForge we changed the package structure (com.yahoo.zookeeper.* to org.apache.zookeeper.*) and felt it was a good time to incorporate some changes that we had been withholding. As a result the following will be required when migrating from 2.2.1 to 3.0.0 version of ZooKeeper.
</p>
<ul>
<li>
<p>
<a href="#migration_code">Migrating Client Code</a>
</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1113'>ZOOKEEPER-1113</a>] - QuorumMaj counts the number of ACKs but does not check who sent the ACK
</li>
<li>
<p>
<a href="#migration_data">Migrating Server Data</a>
</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1191'>ZOOKEEPER-1191</a>] - Synchronization issue - wait not in guarded block
</li>
<li>
<p>
<a href="#migration_config">Migrating Server Configuration</a>
</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1200'>ZOOKEEPER-1200</a>] - Remove obsolete DataTreeBuilder
</li>
</ul>
<a name="migration_code"></a>
<h3 class="h4">Migrating Client Code</h3>
<p>
The underlying client-server protocol has changed in version 3.0.0
of ZooKeeper. As a result clients must be upgraded along with
serving clusters to ensure proper operation of the system (old
pre-3.0.0 clients are not guaranteed to operate against upgraded
3.0.0 servers and vice-versa).
</p>
<a name="Watch+Management"></a>
<h4>Watch Management</h4>
<p>
In previous releases of ZooKeeper any watches registered by clients were lost if the client lost a connection to a ZooKeeper server.
This meant that developers had to track watches they were interested in and reregister them if a session disconnect event was recieved.
In this release the client library tracks watches that a client has registered and reregisters the watches when a connection is made to a new server.
Applications that still manually reregister interest should continue working properly as long as they are able to handle unsolicited watches.
For example, an old application may register a watch for /foo and /goo, lose the connection, and reregister only /goo.
As long as the application is able to recieve a notification for /foo, (probably ignoring it) the applications does not to be changes.
One caveat to the watch management: it is possible to miss an event for the creation and deletion of a znode if watching for creation and both the create and delete happens while the client is disconnected from ZooKeeper.
</p>
<p>
This release also allows clients to specify call specific watch functions.
This gives the developer the ability to modularize logic in different watch functions rather than cramming everything in the watch function attached to the ZooKeeper handle.
Call specific watch functions receive all session events for as long as they are active, but will only receive the watch callbacks for which they are registered.
</p>
<a name="Java+API"></a>
<h4>Java API</h4>
<ol>
<li>
<p>The java package structure has changed from <strong>com.yahoo.zookeeper*</strong> to <strong>org.apache.zookeeper*</strong>. This will probably effect all of your java code which makes use of ZooKeeper APIs (typically import statements)</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1201'>ZOOKEEPER-1201</a>] - Clean SaslServerCallbackHandler.java
</li>
<li>
<p>A number of constants used in the client ZooKeeper API were re-specified using enums (rather than ints). See <a href="https://issues.apache.org/jira/browse/ZOOKEEPER-7">ZOOKEEPER-7</a>, <a href="https://issues.apache.org/jira/browse/ZOOKEEPER-132">ZOOKEEPER-132</a> and <a href="https://issues.apache.org/jira/browse/ZOOKEEPER-139">ZOOKEEPER-139</a> for full details</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1213'>ZOOKEEPER-1213</a>] - ZooKeeper server startup fails if configured only with the &#39;minSessionTimeout&#39; and not &#39;maxSessionTimeout&#39;
</li>
<li>
<p>
<a href="https://issues.apache.org/jira/browse/ZOOKEEPER-18">ZOOKEEPER-18</a> removed KeeperStateChanged, use KeeperStateDisconnected instead</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1216'>ZOOKEEPER-1216</a>] - Fix more eclipse compiler warnings, also in Tests
</li>
</ol>
<p>
Also see <a href="http://zookeeper.apache.org/docs/current/api/index.html">the current java API</a>
</p>
<a name="C+API"></a>
<h4>C API</h4>
<ol>
<li>
<p>A number of constants used in the client ZooKeeper API were renamed in order to reduce namespace collision, see <a href="https://issues.apache.org/jira/browse/ZOOKEEPER-6">ZOOKEEPER-6</a> for full details</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1221'>ZOOKEEPER-1221</a>] - Provide accessors for Request.{hdr|txn}
</li>
</ol>
<a name="migration_data"></a>
<h3 class="h4">Migrating Server Data</h3>
<p>
The following issues resulted in changes to the on-disk data format (the snapshot and transaction log files contained within the ZK data directory) and require a migration utility to be run.
</p>
<ul>
<li>
<p>
<a href="https://issues.apache.org/jira/browse/ZOOKEEPER-27">ZOOKEEPER-27 Unique DB identifiers for servers and clients</a>
</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1227'>ZOOKEEPER-1227</a>] - Zookeeper logs is showing -1 as min/max session timeout if there is no sessiontimeout value configured
</li>
<li>
<p>
<a href="https://issues.apache.org/jira/browse/ZOOKEEPER-32">ZOOKEEPER-32 CRCs for ZooKeeper data</a>
</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1235'>ZOOKEEPER-1235</a>] - store KeeperException messages in the Code enum
</li>
<li>
<p>
<a href="https://issues.apache.org/jira/browse/ZOOKEEPER-33">ZOOKEEPER-33 Better ACL management</a>
</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1246'>ZOOKEEPER-1246</a>] - Dead code in PrepRequestProcessor catch Exception block
</li>
<li>
<p>
<a href="https://issues.apache.org/jira/browse/ZOOKEEPER-38">ZOOKEEPER-38 headers (version+) in log/snap files</a>
</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1247'>ZOOKEEPER-1247</a>] - dead code in PrepRequestProcessor.pRequest multi case
</li>
</ul>
<p>
<strong>The following must be run once, and only once, when upgrading the ZooKeeper server instances to version 3.0.0.</strong>
</p>
<div class="note">
<div class="label">Note</div>
<div class="content">
<p>
The &lt;dataLogDir&gt; and &lt;dataDir&gt; directories referenced
below are specified by the <em>dataLogDir</em>
and <em>dataDir</em> specification in your
ZooKeeper config file
respectively. <em>dataLogDir</em> defaults to the
value of <em>dataDir</em> if not specified explicitly
in the ZooKeeper server config file (in which case provide the
same directory for both parameters to the upgrade utility).
</p>
</div>
</div>
<ol>
<li>
<p>Shutdown the ZooKeeper server cluster.</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1248'>ZOOKEEPER-1248</a>] - multi transaction sets request.exception without reason
</li>
<li>
<p>Backup your &lt;dataLogDir&gt; and &lt;dataDir&gt; directories</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1252'>ZOOKEEPER-1252</a>] - remove unused method o.a.z.test.AxyncTest.restart()
</li>
<li>
<p>Run upgrade using</p>
<ul>
<li>
<p>
<span class="codefrag computeroutput">bin/zkServer.sh upgrade &lt;dataLogDir&gt; &lt;dataDir&gt;</span>
</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1253'>ZOOKEEPER-1253</a>] - return value of DataTree.createNode is never used
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1259'>ZOOKEEPER-1259</a>] - central mapping from type to txn record class
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1282'>ZOOKEEPER-1282</a>] - Learner.java not following Zab 1.0 protocol - setCurrentEpoch should be done upon receipt of NEWLEADER (before acking it) and not upon receipt of UPTODATE
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1291'>ZOOKEEPER-1291</a>] - AcceptedEpoch not updated at leader before it proposes the epoch to followers
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1347'>ZOOKEEPER-1347</a>] - Fix the cnxns to use a concurrent data structures
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1411'>ZOOKEEPER-1411</a>] - Consolidate membership management, distinguish between static and dynamic configuration parameters
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1414'>ZOOKEEPER-1414</a>] - QuorumPeerMainTest.testQuorum, testBadPackets are failing intermittently
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1459'>ZOOKEEPER-1459</a>] - Standalone ZooKeeperServer is not closing the transaction log files on shutdown
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1626'>ZOOKEEPER-1626</a>] - Zookeeper C client should be tolerant of clock adjustments
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1660'>ZOOKEEPER-1660</a>] - Add documentation for dynamic reconfiguration
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1730'>ZOOKEEPER-1730</a>] - Make ZooKeeper easier to test - support simulating a session expiration
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1761'>ZOOKEEPER-1761</a>] - Expose &#39;check&#39; version api in ZooKeeper client
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1762'>ZOOKEEPER-1762</a>] - Implement &#39;check&#39; version cli command
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1830'>ZOOKEEPER-1830</a>] - Support command line shell for removing watches
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1831'>ZOOKEEPER-1831</a>] - Document remove watches details to the guide
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1834'>ZOOKEEPER-1834</a>] - Catch IOException in FileTxnLog
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1837'>ZOOKEEPER-1837</a>] - Fix JMXEnv checks (potential race conditions)
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1849'>ZOOKEEPER-1849</a>] - Need to properly tear down tests in various cases
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1852'>ZOOKEEPER-1852</a>] - ServerCnxnFactory instance is not properly cleanedup
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1854'>ZOOKEEPER-1854</a>] - ClientBase ZooKeeper server clean-up
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1857'>ZOOKEEPER-1857</a>] - PrepRequestProcessotTest doesn&#39;t shutdown ZooKeeper server
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1858'>ZOOKEEPER-1858</a>] - JMX checks - potential race conditions while stopping and starting server
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1867'>ZOOKEEPER-1867</a>] - Bug in ZkDatabaseCorruptionTest
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1872'>ZOOKEEPER-1872</a>] - QuorumPeer is not shutdown in few cases
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1873'>ZOOKEEPER-1873</a>] - Unnecessarily InstanceNotFoundException is coming when unregister failed jmxbeans
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1874'>ZOOKEEPER-1874</a>] - Add proper teardown/cleanups in ReconfigTest to shutdown quorumpeer
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1904'>ZOOKEEPER-1904</a>] - WatcherTest#testWatchAutoResetWithPending is failing
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1972'>ZOOKEEPER-1972</a>] - Fix invalid volatile long/int increment (++)
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1975'>ZOOKEEPER-1975</a>] - Turn off &quot;internationalization warnings&quot; in findbugs exclude file
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1978'>ZOOKEEPER-1978</a>] - Fix Multithreaded correctness Warnings
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1979'>ZOOKEEPER-1979</a>] - Fix Performance Warnings found by Findbugs 2.0.3
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1981'>ZOOKEEPER-1981</a>] - Fix Dodgy Code Warnings identified by findbugs 2.0.3
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1988'>ZOOKEEPER-1988</a>] - new test patch to verify dynamic reconfig backward compatibility
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1989'>ZOOKEEPER-1989</a>] - backward compatibility of zoo.cfg
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1993'>ZOOKEEPER-1993</a>] - Keep the client port upon parsing config
</li>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-1995'>ZOOKEEPER-1995</a>] - Safely remove client port in old config file on reconfig itself
</li>
</ul>
<p>or</p>
<h2> Bug
</h2>
<ul>
<li>
<p>
<span class="codefrag computeroutput">java -classpath pathtolog4j:pathtozookeeper.jar UpgradeMain &lt;dataLogDir&gt; &lt;dataDir&gt;</span>
</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-10'>ZOOKEEPER-10</a>] - Bad error message
</li>
</ul>
<p>where &lt;dataLogDir&gt; is the directory where all transaction logs (log.*) are stored. &lt;dataDir&gt; is the directory where all the snapshots (snapshot.*) are stored.</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-87'>ZOOKEEPER-87</a>] - Follower does not shut itself down if its too far behind the leader.
</li>
<li>
<p>Restart the cluster. </p>
</li>
</ol>
<p>
If you have any failure during the upgrade procedure keep reading to sanitize your database.
</p>
<p>This is how upgrade works in ZooKeeper. This will help you troubleshoot in case you have problems while upgrading</p>
<ol>
<li>
<p>Upgrade moves files from &lt;dataLogDir&gt; and &lt;dataDir&gt; to &lt;dataLogDir&gt;/version-1/ and &lt;dataDir&gt;/version-1 respectively (version-1 sub-directory is created by the upgrade utility). </p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-366'>ZOOKEEPER-366</a>] - Session timeout detection can go wrong if the leader system time changes
</li>
<li>
<p>Upgrade creates a new version sub-directory &lt;dataDir&gt;/version-2 and &lt;dataLogDir&gt;/version-2</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-445'>ZOOKEEPER-445</a>] - Potential bug in leader code
</li>
<li>
<p>Upgrade reads the old database from &lt;dataDir&gt;/version-1 and &lt;dataLogDir&gt;/version-1 into the memory and creates a new upgraded snapshot. </p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-463'>ZOOKEEPER-463</a>] - C++ tests can&#39;t be built on Mac OS using XCode command line tools
</li>
<li>
<p>Upgrade writes the new database in &lt;dataDir&gt;/version-2. </p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-492'>ZOOKEEPER-492</a>] - the tests should have their own log4j.properties
</li>
</ol>
<p>Troubleshooting.</p>
<ol>
<li>
<p>In case you start ZooKeeper 3.0 without upgrading from 2.0 on a 2.0 database - the servers will start up with an empty database.
This is because the servers assume that &lt;dataDir&gt;/version-2 and &lt;dataLogDir&gt;/version-2 will have the database to start with. Since this will be empty
in case of no upgrade, the servers will start with an empty database. In such a case, shutdown the ZooKeeper servers, remove the version-2 directory (remember
this will lead to loss of updates after you started 3.0.)
and then start the upgrade procedure.</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-513'>ZOOKEEPER-513</a>] - C client disconnect with stand-alone server abnormally
</li>
<li>
<p>If the upgrade fails while trying to rename files into the version-1 directory, you should try and move all the files under &lt;dataDir&gt;/version-1
and &lt;dataLogDir&gt;/version-1 to &lt;dataDir&gt; and &lt;dataLogDir&gt; respectively. Then try upgrade again.
</p>
<li>[<a href='https://issues.apache.org/jira/browse/ZOOKEEPER-515'>ZOOKEEPER-515</a>] - Zookeeper quorum didn&#39;t provide service when restart after an &quot;Out of memory&quot; crash
</li>
<li>
<p> If you do not wish to run with ZooKeeper 3.0 and prefer to run with ZooKeeper 2.0 and have already upgraded - you can run ZooKeeper 2 with
the &lt;dataDir&gt; and &lt;dataLogDir&gt; directories changed to &lt;dataDir&gt;/version-1 and &lt;dataLogDir&gt;/version-1. Remember that you will lose all the updates that you made after the upgrade.
</p>
</li>
</ol>
<a name="migration_config"></a>
<h3 class="h4">Migrating Server Configuration</h3>
<p>
There is a significant change to the ZooKeeper server configuration file.
</p>
<p>The default election algorithm, specified by
the <em>electionAlg</em> configuration attribute, has
changed from a default of <em>0</em> to a default
of <em>3</em>. See
<a href="zookeeperAdmin.html#sc_clusterOptions">Cluster
Options</a> section of the administrators guide, specifically
the <em>electionAlg</em>
and <em>server.X</em> properties.
</p>
<p>
You will either need to explicitly
set <em>electionAlg</em> to it's previous default value
of <em>0</em> or change
your <em>server.X</em> options to include the leader
election port.
</p>
</div>
<a name="changes"></a>
<h2 class="h3">Changes Since ZooKeeper 2.2.1</h2>
<div class="section">
<p>
Version 2.2.1 code, documentation, binaries, etc... are still accessible on <a href="http://sourceforge.net/projects/zookeeper">SourceForge</a>
</p>
<table class="ForrestTable" cellspacing="1" cellpadding="4">
<caption>Changes Since ZooKeeper 2.2.1</caption>
<title>Changes Since ZooKeeper 2.2.1</title>
<tr>
<th>Issue</th>
<th>Notes</th>
</tr>
<tr>
<td>
<a href="https://issues.apache.org/jira/browse/ZOOKEEPER-43">
ZOOKEEPER-43</a>
</td>
<td>
Server side of auto reset watches.
</td>
</tr>
<tr>
<td>
<a href="https://issues.apache.org/jira/browse/ZOOKEEPER-132">
ZOOKEEPER-132</a>
</td>
<td>
Create Enum to replace CreateFlag in ZooKepper.create method
</td>
</tr>
<tr>
<td>
<a href="https://issues.apache.org/jira/browse/ZOOKEEPER-139">
ZOOKEEPER-139</a>
</td>
<td>
Create Enums for WatcherEvent's KeeperState and EventType
</td>
</tr>
<tr>
<td>
<a href="https://issues.apache.org/jira/browse/ZOOKEEPER-18">
ZOOKEEPER-18</a>
</td>
<td>
keeper state inconsistency
</td>
</tr>
<tr>
<td>
<a href="https://issues.apache.org/jira/browse/ZOOKEEPER-38">
ZOOKEEPER-38</a>
</td>
<td>
headers in log/snap files
</td>
</tr>
<tr>
<td>
<a href="https://issues.apache.org/jira/browse/ZOOKEEPER-8">
ZOOKEEPER-8</a>
</td>
<td>
Stat enchaned to include num of children and size
</td>
</tr>
<tr>
<td>
<a href="https://issues.apache.org/jira/browse/ZOOKEEPER-6">
ZOOKEEPER-6</a>
</td>
<td>
List of problem identifiers in zookeeper.h
</td>
</tr>
<tr>
<td>
<a href="https://issues.apache.org/jira/browse/ZOOKEEPER-7">
ZOOKEEPER-7</a>
</td>
<td>