You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by bu...@apache.org on 2017/11/17 00:09:37 UTC

svn commit: r1020972 [35/42] - in /websites/staging/zookeeper/trunk/content: ./ doc/r3.4.11/ doc/r3.4.11/api/ doc/r3.4.11/api/org/ doc/r3.4.11/api/org/apache/ doc/r3.4.11/api/org/apache/jute/ doc/r3.4.11/api/org/apache/jute/class-use/ doc/r3.4.11/api/o...

Added: websites/staging/zookeeper/trunk/content/doc/r3.4.11/jdiff/changes/pkg_org.apache.zookeeper.html
==============================================================================
--- websites/staging/zookeeper/trunk/content/doc/r3.4.11/jdiff/changes/pkg_org.apache.zookeeper.html (added)
+++ websites/staging/zookeeper/trunk/content/doc/r3.4.11/jdiff/changes/pkg_org.apache.zookeeper.html Fri Nov 17 00:09:32 2017
@@ -0,0 +1,448 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
+<HTML>
+<HEAD>
+<meta name="generator" content="JDiff v1.0.9">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+org.apache.zookeeper
+</TITLE>
+<LINK REL="stylesheet" TYPE="text/css" HREF="../stylesheet-jdiff.css" TITLE="Style">
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<TABLE summary="Navigation bar" BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+  <TR>
+    <TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+    <TABLE summary="Navigation bar" BORDER="0" CELLPADDING="0" CELLSPACING="3">
+    <TR ALIGN="center" VALIGN="top">
+      <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../api/org/apache/zookeeper/package-summary.html" target="_top"><FONT CLASS="NavBarFont1"><B><tt>zookeeper 3.4.11</tt></B></FONT></A>&nbsp;</TD>
+      <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="changes-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+      <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+      <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"> &nbsp;<FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+      <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="jdiff_statistics.html"><FONT CLASS="NavBarFont1"><B>Statistics</B></FONT></A>&nbsp;</TD>
+      <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="jdiff_help.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+    </TR>
+    </TABLE>
+  </TD>
+  <TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM><b>Generated by<br><a href="http://www.jdiff.org" class="staysblack" target="_top">JDiff</a></b></EM></TD>
+</TR>
+<TR>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<B>PREV PACKAGE</B>&nbsp;
+&nbsp;<B>NEXT PACKAGE</B>&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+  <A HREF="../changes.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
+  &nbsp;<A HREF="pkg_org.apache.zookeeper.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell3"><FONT SIZE="-2"> DETAIL: &nbsp;
+REMOVED&nbsp;|&nbsp;
+<a href="#Added">ADDED</a>&nbsp;|&nbsp;
+<a href="#Changed">CHANGED</a>
+  </FONT></TD>
+</TR>
+</TABLE>
+<HR>
+<!-- End of nav bar -->
+<H2>
+Package <A HREF="../../api/org/apache/zookeeper/package-summary.html" target="_top"><tt>org.apache.zookeeper</tt></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes and Interfaces" BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+  <TD VALIGN="TOP" COLSPAN=2><FONT SIZE="+1"><B>Added Classes and Interfaces</B></FONT></TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="AsyncCallback.Children2Callback"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/AsyncCallback.Children2Callback.html" target="_top"><tt><I>AsyncCallback.Children2Callback</I></tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">This callback is used to retrieve the children and stat of the node.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="AsyncCallback.MultiCallback"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/AsyncCallback.MultiCallback.html" target="_top"><tt><I>AsyncCallback.MultiCallback</I></tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">This callback is used to process the multiple results from a single multi call.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="ClientCnxnSocketNIO"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/ClientCnxnSocketNIO.html" target="_top"><tt>ClientCnxnSocketNIO</tt></A></nobr>
+  </TD>
+  <TD>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="KeeperException.NotReadOnlyException"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/KeeperException.NotReadOnlyException.html" target="_top"><tt>KeeperException.NotReadOnlyException</tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">@see Code#NOTREADONLY</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="KeeperException.SessionMovedException"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/KeeperException.SessionMovedException.html" target="_top"><tt>KeeperException.SessionMovedException</tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">@see Code#SESSIONMOVED</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="Login"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/Login.html" target="_top"><tt>Login</tt></A></nobr>
+  </TD>
+  <TD>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="MultiResponse"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/MultiResponse.html" target="_top"><tt>MultiResponse</tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">Handles the response from a multi request.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="MultiTransactionRecord"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/MultiTransactionRecord.html" target="_top"><tt>MultiTransactionRecord</tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">Encodes a composite transaction.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="Op"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/Op.html" target="_top"><tt>Op</tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">Represents a single operation in a multi-operation transaction.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="Op.Check"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/Op.Check.html" target="_top"><tt>Op.Check</tt></A></nobr>
+  </TD>
+  <TD>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="Op.Create"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/Op.Create.html" target="_top"><tt>Op.Create</tt></A></nobr>
+  </TD>
+  <TD>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="Op.Delete"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/Op.Delete.html" target="_top"><tt>Op.Delete</tt></A></nobr>
+  </TD>
+  <TD>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="Op.SetData"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/Op.SetData.html" target="_top"><tt>Op.SetData</tt></A></nobr>
+  </TD>
+  <TD>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="OpResult"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/OpResult.html" target="_top"><tt>OpResult</tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">Encodes the result of a single part of a multiple operation commit.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="OpResult.CheckResult"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/OpResult.CheckResult.html" target="_top"><tt>OpResult.CheckResult</tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">A result from a version check operation.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="OpResult.CreateResult"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/OpResult.CreateResult.html" target="_top"><tt>OpResult.CreateResult</tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">A result from a create operation.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="OpResult.DeleteResult"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/OpResult.DeleteResult.html" target="_top"><tt>OpResult.DeleteResult</tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">A result from a delete operation.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="OpResult.ErrorResult"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/OpResult.ErrorResult.html" target="_top"><tt>OpResult.ErrorResult</tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">An error result from any kind of operation.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="OpResult.SetDataResult"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/OpResult.SetDataResult.html" target="_top"><tt>OpResult.SetDataResult</tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">A result from a setData operation.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="SaslClientCallbackHandler"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/SaslClientCallbackHandler.html" target="_top"><tt>SaslClientCallbackHandler</tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">This is used by the SASL mechanisms to get further information to complete the authentication.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="Shell"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/Shell.html" target="_top"><tt>Shell</tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">A base class for running a Unix command.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="Shell.ExitCodeException"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/Shell.ExitCodeException.html" target="_top"><tt>Shell.ExitCodeException</tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">This is an IOException with exit code added.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="Shell.ShellCommandExecutor"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/Shell.ShellCommandExecutor.html" target="_top"><tt>Shell.ShellCommandExecutor</tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">A simple shell command executor.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="Transaction"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/Transaction.html" target="_top"><tt>Transaction</tt></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">Provides a builder style interface for doing multiple updates.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="ZKUtil"></A>
+  <nobr><A HREF="../../api/org/apache/zookeeper/ZKUtil.html" target="_top"><tt>ZKUtil</tt></A></nobr>
+  </TD>
+  <TD>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes and Interfaces" BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+  <TD VALIGN="TOP" COLSPAN=2><FONT SIZE="+1"><B>Changed Classes and Interfaces</B></FONT></TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="AsyncCallback.ACLCallback"></A>
+  <nobr><A HREF="org.apache.zookeeper.AsyncCallback.ACLCallback.html"><I>AsyncCallback.ACLCallback</I></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">This callback is used to retrieve the ACL and stat of the node.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="AsyncCallback.ChildrenCallback"></A>
+  <nobr><A HREF="org.apache.zookeeper.AsyncCallback.ChildrenCallback.html"><I>AsyncCallback.ChildrenCallback</I></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">This callback is used to retrieve the children of the node.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="AsyncCallback.DataCallback"></A>
+  <nobr><A HREF="org.apache.zookeeper.AsyncCallback.DataCallback.html"><I>AsyncCallback.DataCallback</I></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">This callback is used to retrieve the data and stat of the node.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="AsyncCallback.StatCallback"></A>
+  <nobr><A HREF="org.apache.zookeeper.AsyncCallback.StatCallback.html"><I>AsyncCallback.StatCallback</I></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">This callback is used to retrieve the stat of the node.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="AsyncCallback.StringCallback"></A>
+  <nobr><A HREF="org.apache.zookeeper.AsyncCallback.StringCallback.html"><I>AsyncCallback.StringCallback</I></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">This callback is used to retrieve the name of the node.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="AsyncCallback.VoidCallback"></A>
+  <nobr><A HREF="org.apache.zookeeper.AsyncCallback.VoidCallback.html"><I>AsyncCallback.VoidCallback</I></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">This callback doesn't retrieve anything from the node.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="ClientCnxn"></A>
+  <nobr><A HREF="org.apache.zookeeper.ClientCnxn.html">ClientCnxn</A></nobr>
+  </TD>
+  <TD VALIGN="TOP">This class manages the socket i/o for the client.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="ClientWatchManager"></A>
+  <nobr><A HREF="org.apache.zookeeper.ClientWatchManager.html"><I>ClientWatchManager</I></A></nobr>
+  </TD>
+  <TD>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="Environment"></A>
+  <nobr><A HREF="org.apache.zookeeper.Environment.html">Environment</A></nobr>
+  </TD>
+  <TD VALIGN="TOP">Provide insight into the runtime environment.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="KeeperException"></A>
+  <nobr><A HREF="org.apache.zookeeper.KeeperException.html">KeeperException</A></nobr>
+  </TD>
+  <TD>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="KeeperException.BadArgumentsException"></A>
+  <nobr><A HREF="org.apache.zookeeper.KeeperException.BadArgumentsException.html">KeeperException.BadArgumentsException</A></nobr>
+  </TD>
+  <TD VALIGN="TOP">@see Code#BADARGUMENTS</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="KeeperException.BadVersionException"></A>
+  <nobr><A HREF="org.apache.zookeeper.KeeperException.BadVersionException.html">KeeperException.BadVersionException</A></nobr>
+  </TD>
+  <TD VALIGN="TOP">@see Code#BADVERSION</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="KeeperException.Code"></A>
+  <nobr><A HREF="org.apache.zookeeper.KeeperException.Code.html">KeeperException.Code</A></nobr>
+  </TD>
+  <TD VALIGN="TOP">Codes which represent the various KeeperException types.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="KeeperException.InvalidACLException"></A>
+  <nobr><A HREF="org.apache.zookeeper.KeeperException.InvalidACLException.html">KeeperException.InvalidACLException</A></nobr>
+  </TD>
+  <TD VALIGN="TOP">@see Code#INVALIDACL</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="KeeperException.NoChildrenForEphemeralsException"></A>
+  <nobr><A HREF="org.apache.zookeeper.KeeperException.NoChildrenForEphemeralsException.html">KeeperException.NoChildrenForEphemeralsException</A></nobr>
+  </TD>
+  <TD VALIGN="TOP">@see Code#NOCHILDRENFOREPHEMERALS</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="KeeperException.NoNodeException"></A>
+  <nobr><A HREF="org.apache.zookeeper.KeeperException.NoNodeException.html">KeeperException.NoNodeException</A></nobr>
+  </TD>
+  <TD VALIGN="TOP">@see Code#NONODE</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="KeeperException.NodeExistsException"></A>
+  <nobr><A HREF="org.apache.zookeeper.KeeperException.NodeExistsException.html">KeeperException.NodeExistsException</A></nobr>
+  </TD>
+  <TD VALIGN="TOP">@see Code#NODEEXISTS</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="KeeperException.NotEmptyException"></A>
+  <nobr><A HREF="org.apache.zookeeper.KeeperException.NotEmptyException.html">KeeperException.NotEmptyException</A></nobr>
+  </TD>
+  <TD VALIGN="TOP">@see Code#NOTEMPTY</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="Version"></A>
+  <nobr><A HREF="org.apache.zookeeper.Version.html">Version</A></nobr>
+  </TD>
+  <TD>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="Watcher"></A>
+  <nobr><A HREF="org.apache.zookeeper.Watcher.html"><I>Watcher</I></A></nobr>
+  </TD>
+  <TD VALIGN="TOP">This interface specifies the public interface an event handler class must implement.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="Watcher.Event.KeeperState"></A>
+  <nobr><A HREF="org.apache.zookeeper.Watcher.Event.KeeperState.html">Watcher.Event.KeeperState</A></nobr>
+  </TD>
+  <TD VALIGN="TOP">Enumeration of states the ZooKeeper may be at the event</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="ZooDefs.OpCode"></A>
+  <nobr><A HREF="org.apache.zookeeper.ZooDefs.OpCode.html"><I>ZooDefs.OpCode</I></A></nobr>
+  </TD>
+  <TD>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="ZooKeeper"></A>
+  <nobr><A HREF="org.apache.zookeeper.ZooKeeper.html">ZooKeeper</A></nobr>
+  </TD>
+  <TD VALIGN="TOP">This is the main class of ZooKeeper client library.</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="ZooKeeper.States"></A>
+  <nobr><A HREF="org.apache.zookeeper.ZooKeeper.States.html">ZooKeeper.States</A></nobr>
+  </TD>
+  <TD>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+  <TD VALIGN="TOP" WIDTH="25%">
+  <A NAME="ZooKeeperMain"></A>
+  <nobr><A HREF="org.apache.zookeeper.ZooKeeperMain.html">ZooKeeperMain</A></nobr>
+  </TD>
+  <TD VALIGN="TOP">The command line client to ZooKeeper.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<HR>
+<!-- Start of nav bar -->
+<TABLE summary="Navigation bar" BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+  <TR>
+    <TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+    <TABLE summary="Navigation bar" BORDER="0" CELLPADDING="0" CELLSPACING="3">
+    <TR ALIGN="center" VALIGN="top">
+      <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../api/org/apache/zookeeper/package-summary.html" target="_top"><FONT CLASS="NavBarFont1"><B><tt>zookeeper 3.4.11</tt></B></FONT></A>&nbsp;</TD>
+      <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="changes-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+      <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+      <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"> &nbsp;<FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+      <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="jdiff_statistics.html"><FONT CLASS="NavBarFont1"><B>Statistics</B></FONT></A>&nbsp;</TD>
+      <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="jdiff_help.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+    </TR>
+    </TABLE>
+  </TD>
+  <TD ALIGN="right" VALIGN="top" ROWSPAN=3></TD>
+</TR>
+<TR>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<B>PREV PACKAGE</B>&nbsp;
+&nbsp;<B>NEXT PACKAGE</B>&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+  <A HREF="../changes.html" TARGET="_top"><B>FRAMES</B></A>  &nbsp;
+  &nbsp;<A HREF="pkg_org.apache.zookeeper.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
+<TD BGCOLOR="0xFFFFFF" CLASS="NavBarCell3"></TD>
+</TR>
+</TABLE>
+<HR>
+<!-- End of nav bar -->
+</BODY>
+</HTML>

Added: websites/staging/zookeeper/trunk/content/doc/r3.4.11/jdiff/missingSinces.txt
==============================================================================
--- websites/staging/zookeeper/trunk/content/doc/r3.4.11/jdiff/missingSinces.txt (added)
+++ websites/staging/zookeeper/trunk/content/doc/r3.4.11/jdiff/missingSinces.txt Fri Nov 17 00:09:32 2017
@@ -0,0 +1,93 @@
+MISSING @SINCE TAG: org.apache.zookeeper.AsyncCallback.Children2Callback Interface
+OK: org.apache.zookeeper.AsyncCallback.MultiCallback Interface
+NO DOC BLOCK: org.apache.zookeeper.ClientCnxnSocketNIO Class
+MISSING @SINCE TAG: org.apache.zookeeper.KeeperException.NotReadOnlyException Class
+MISSING @SINCE TAG: org.apache.zookeeper.KeeperException.SessionMovedException Class
+NO DOC BLOCK: org.apache.zookeeper.Login Class
+MISSING @SINCE TAG: org.apache.zookeeper.MultiResponse Class
+MISSING @SINCE TAG: org.apache.zookeeper.MultiTransactionRecord Class
+MISSING @SINCE TAG: org.apache.zookeeper.Op Class
+NO DOC BLOCK: org.apache.zookeeper.Op.Check Class
+NO DOC BLOCK: org.apache.zookeeper.Op.Create Class
+NO DOC BLOCK: org.apache.zookeeper.Op.Delete Class
+NO DOC BLOCK: org.apache.zookeeper.Op.SetData Class
+MISSING @SINCE TAG: org.apache.zookeeper.OpResult Class
+MISSING @SINCE TAG: org.apache.zookeeper.OpResult.CheckResult Class
+MISSING @SINCE TAG: org.apache.zookeeper.OpResult.CreateResult Class
+MISSING @SINCE TAG: org.apache.zookeeper.OpResult.DeleteResult Class
+MISSING @SINCE TAG: org.apache.zookeeper.OpResult.ErrorResult Class
+MISSING @SINCE TAG: org.apache.zookeeper.OpResult.SetDataResult Class
+MISSING @SINCE TAG: org.apache.zookeeper.SaslClientCallbackHandler Class
+MISSING @SINCE TAG: org.apache.zookeeper.Shell Class
+MISSING @SINCE TAG: org.apache.zookeeper.Shell.ExitCodeException Class
+MISSING @SINCE TAG: org.apache.zookeeper.Shell.ShellCommandExecutor Class
+OK: org.apache.zookeeper.Transaction Class
+NO DOC BLOCK: org.apache.zookeeper.ZKUtil Class
+MISSING @SINCE TAG: org.apache.zookeeper.ClientCnxn Constructor (java.lang.String, org.apache.zookeeper.client.HostProvider, int, org.apache.zookeeper.ZooKeeper, org.apache.zookeeper.ClientWatchManager, org.apache.zookeeper.ClientCnxnSocket, boolean)
+MISSING @SINCE TAG: org.apache.zookeeper.ClientCnxn Constructor (java.lang.String, org.apache.zookeeper.client.HostProvider, int, org.apache.zookeeper.ZooKeeper, org.apache.zookeeper.ClientWatchManager, org.apache.zookeeper.ClientCnxnSocket, long, byte[], boolean)
+NO DOC BLOCK: org.apache.zookeeper.KeeperException.BadArgumentsException Constructor (java.lang.String)
+NO DOC BLOCK: org.apache.zookeeper.KeeperException.BadVersionException Constructor (java.lang.String)
+NO DOC BLOCK: org.apache.zookeeper.KeeperException.InvalidACLException Constructor (java.lang.String)
+NO DOC BLOCK: org.apache.zookeeper.KeeperException.NoChildrenForEphemeralsException Constructor (java.lang.String)
+NO DOC BLOCK: org.apache.zookeeper.KeeperException.NodeExistsException Constructor (java.lang.String)
+NO DOC BLOCK: org.apache.zookeeper.KeeperException.NoNodeException Constructor (java.lang.String)
+NO DOC BLOCK: org.apache.zookeeper.KeeperException.NotEmptyException Constructor (java.lang.String)
+MISSING @SINCE TAG: org.apache.zookeeper.ZooKeeper Constructor (java.lang.String, int, org.apache.zookeeper.Watcher, boolean)
+MISSING @SINCE TAG: org.apache.zookeeper.ZooKeeper Constructor (java.lang.String, int, org.apache.zookeeper.Watcher, long, byte[], boolean)
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeperMain Constructor (java.lang.String[])
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeperMain Constructor (org.apache.zookeeper.ZooKeeper)
+MISSING @SINCE TAG: org.apache.zookeeper.ZooKeeperMain Method addToHistory(int, java.lang.String)
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeperMain Method connectToZK(java.lang.String)
+NO DOC BLOCK: org.apache.zookeeper.ClientCnxn Method enableWrite()
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeperMain Method executeLine(java.lang.String)
+OK: org.apache.zookeeper.ZooKeeper Method getChildren(java.lang.String, boolean, org.apache.zookeeper.data.Stat)
+OK: org.apache.zookeeper.ZooKeeper Method getChildren(java.lang.String, org.apache.zookeeper.Watcher, org.apache.zookeeper.data.Stat)
+OK: org.apache.zookeeper.ZooKeeper Method getChildren(java.lang.String, boolean, org.apache.zookeeper.AsyncCallback.Children2Callback, java.lang.Object)
+OK: org.apache.zookeeper.ZooKeeper Method getChildren(java.lang.String, org.apache.zookeeper.Watcher, org.apache.zookeeper.AsyncCallback.Children2Callback, java.lang.Object)
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeperMain Method getCommands()
+MISSING @SINCE TAG: org.apache.zookeeper.ClientCnxn Method getDisableAutoResetWatch()
+NO DOC BLOCK: org.apache.zookeeper.ClientCnxn Method getLastZxid()
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeperMain Method getPrintWatches()
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeperMain Method getPrompt()
+OK: org.apache.zookeeper.KeeperException Method getResults()
+NO DOC BLOCK: org.apache.zookeeper.Version Method getRevisionHash()
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeper Method getSaslClient()
+NO DOC BLOCK: org.apache.zookeeper.ClientCnxn Method getSessionTimeout()
+MISSING @SINCE TAG: org.apache.zookeeper.ZooKeeper Method getSessionTimeout()
+NO DOC BLOCK: org.apache.zookeeper.ClientCnxn Method getXid()
+MISSING @SINCE TAG: org.apache.zookeeper.ZooKeeper.States Method isConnected()
+OK: org.apache.zookeeper.ZooKeeper Method multi(java.lang.Iterable)
+OK: org.apache.zookeeper.ZooKeeper Method multi(java.lang.Iterable, org.apache.zookeeper.AsyncCallback.MultiCallback, java.lang.Object)
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeper Method multiInternal(org.apache.zookeeper.MultiTransactionRecord)
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeper Method multiInternal(org.apache.zookeeper.MultiTransactionRecord, org.apache.zookeeper.AsyncCallback.MultiCallback, java.lang.Object)
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeperMain Method printMessage(java.lang.String)
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeperMain Method processCmd(org.apache.zookeeper.ZooKeeperMain.MyCommandOptions)
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeperMain Method processZKCmd(org.apache.zookeeper.ZooKeeperMain.MyCommandOptions)
+NO DOC BLOCK: org.apache.zookeeper.ClientCnxn Method sendPacket(org.apache.jute.Record, org.apache.jute.Record, org.apache.zookeeper.AsyncCallback, int)
+MISSING @SINCE TAG: org.apache.zookeeper.ClientCnxn Method setDisableAutoResetWatch(boolean)
+NO DOC BLOCK: org.apache.zookeeper.ClientCnxn Method start()
+OK: org.apache.zookeeper.ZooKeeper Method testableLocalSocketAddress()
+OK: org.apache.zookeeper.ZooKeeper Method testableRemoteSocketAddress()
+OK: org.apache.zookeeper.ZooKeeper Method testableWaitForShutdown(int)
+OK: org.apache.zookeeper.ZooKeeper Method toString()
+OK: org.apache.zookeeper.ZooKeeper Method transaction()
+MISSING @SINCE TAG: org.apache.zookeeper.Watcher.Event.KeeperState Field AuthFailed
+NO DOC BLOCK: org.apache.zookeeper.ZooDefs.OpCode Field check
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeperMain Field cl
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeperMain Field commandCount
+MISSING @SINCE TAG: org.apache.zookeeper.Watcher.Event.KeeperState Field ConnectedReadOnly
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeper.States Field CONNECTEDREADONLY
+NO DOC BLOCK: org.apache.zookeeper.ZooDefs.OpCode Field getChildren2
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeperMain Field history
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeperMain Field host
+NO DOC BLOCK: org.apache.zookeeper.Environment Field JAAS_CONF_KEY
+NO DOC BLOCK: org.apache.zookeeper.ZooDefs.OpCode Field multi
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeper.States Field NOT_CONNECTED
+MISSING @SINCE TAG: org.apache.zookeeper.KeeperException.Code Field NOTREADONLY
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeperMain Field printWatches
+NO DOC BLOCK: org.apache.zookeeper.ZooDefs.OpCode Field sasl
+MISSING @SINCE TAG: org.apache.zookeeper.Watcher.Event.KeeperState Field SaslAuthenticated
+MISSING @SINCE TAG: org.apache.zookeeper.KeeperException.Code Field SESSIONMOVED
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeperMain Field zk
+NO DOC BLOCK: org.apache.zookeeper.ZooKeeper Field ZOOKEEPER_CLIENT_CNXN_SOCKET
+NO DOC BLOCK: org.apache.zookeeper.ClientCnxn Field zooKeeperSaslClient

Added: websites/staging/zookeeper/trunk/content/doc/r3.4.11/jdiff/stylesheet-jdiff.css
==============================================================================
--- websites/staging/zookeeper/trunk/content/doc/r3.4.11/jdiff/stylesheet-jdiff.css (added)
+++ websites/staging/zookeeper/trunk/content/doc/r3.4.11/jdiff/stylesheet-jdiff.css Fri Nov 17 00:09:32 2017
@@ -0,0 +1,47 @@
+
+/* The JDiff style sheet, derived from the Javadoc style sheet. */
+/* Generated by the JDiff Javadoc doclet */
+/* (http://www.jdiff.org) */
+
+/* Define colors, fonts and other style attributes here to override the defaults  */
+
+/* Page background color */
+body { background: #CCFFFF url(background.gif); font-family: arial; }
+
+/* Table colors */
+.TableHeadingColor     { background: #CCCCFF } /* Dark mauve */
+.TableSubHeadingColor  { background: #EEEEFF } /* Light mauve */
+.TableRowColor         { background: #FFFFFF } /* White */
+
+/* Font used in left-hand frame lists */
+.FrameTitleFont   { font-size: normal; font-family: normal }
+.FrameHeadingFont { font-size: normal; font-family: normal }
+.FrameItemFont    { font-size: normal; font-family: normal }
+
+/* Example of smaller, sans-serif font in frames */
+/* .FrameItemFont  { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */
+
+/* Navigation bar fonts and colors */
+.NavBarCell1    { background-color:#FFFFCC;} /* Changed to yellowish to make difference from Javadoc clear */
+.NavBarCell1Rev { background-color:#00008B;}/* Dark Blue */
+.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;}
+.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}
+
+.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
+.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
+
+/* 
+ Links which become blue when hovered upon and show that they have been 
+ visited. 
+*/
+a.hiddenlink:link      {color: black; text-decoration: none}
+a.hiddenlink:visited   {color: purple; text-decoration: none}
+a.hiddenlink:hover     {color: blue; text-decoration: underline;}
+
+/* 
+ Links which become blue when hovered upon but do not show that they have 
+ been visited. 
+*/
+a.staysblack:link     {color: black; text-decoration: none}
+a.staysblack:visited  {color: black; text-decoration: none}
+a.staysblack:hover    {color: blue; text-decoration: underline;}

Added: websites/staging/zookeeper/trunk/content/doc/r3.4.11/jdiff/user_comments_for_zookeeper_3.1.1_to_zookeeper_3.4.11.xml
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/zookeeper/trunk/content/doc/r3.4.11/jdiff/user_comments_for_zookeeper_3.1.1_to_zookeeper_3.4.11.xml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: websites/staging/zookeeper/trunk/content/doc/r3.4.11/linkmap.html
==============================================================================
--- websites/staging/zookeeper/trunk/content/doc/r3.4.11/linkmap.html (added)
+++ websites/staging/zookeeper/trunk/content/doc/r3.4.11/linkmap.html Fri Nov 17 00:09:32 2017
@@ -0,0 +1,434 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta content="Apache Forrest" name="Generator">
+<meta name="Forrest-version" content="0.9">
+<meta name="Forrest-skin-name" content="pelt">
+<title>Site Linkmap Table of Contents</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">
+<link type="text/css" href="skin/profile.css" rel="stylesheet">
+<script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script>
+<link rel="shortcut icon" href="images/favicon.ico">
+</head>
+<body onload="init()">
+<script type="text/javascript">ndeSetTextSize();</script>
+<div id="top">
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://zookeeper.apache.org/">ZooKeeper</a> &gt; <a href="http://zookeeper.apache.org/">ZooKeeper</a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
+</div>
+<!--+
+    |header
+    +-->
+<div class="header">
+<!--+
+    |start group logo
+    +-->
+<div class="grouplogo">
+<a href="http://hadoop.apache.org/"><img class="logoImage" alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a>
+</div>
+<!--+
+    |end group logo
+    +-->
+<!--+
+    |start Project Logo
+    +-->
+<div class="projectlogo">
+<a href="http://zookeeper.apache.org/"><img class="logoImage" alt="ZooKeeper" src="images/zookeeper_small.gif" title="ZooKeeper: distributed coordination"></a>
+</div>
+<!--+
+    |end Project Logo
+    +-->
+<!--+
+    |start Search
+    +-->
+<div class="searchbox">
+<form action="http://www.google.com/search" method="get" class="roundtopsmall">
+<input value="zookeeper.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp; 
+                    <input name="Search" value="Search" type="submit">
+</form>
+</div>
+<!--+
+    |end search
+    +-->
+<!--+
+    |start Tabs
+    +-->
+<ul id="tabs">
+<li>
+<a class="unselected" href="http://zookeeper.apache.org/">Project</a>
+</li>
+<li>
+<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>
+</li>
+</ul>
+<!--+
+    |end Tabs
+    +-->
+</div>
+</div>
+<div id="main">
+<div id="publishedStrip">
+<!--+
+    |start Subtabs
+    +-->
+<div id="level2tabs"></div>
+<!--+
+    |end Endtabs
+    +-->
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+
+             &nbsp;
+           </div>
+<!--+
+    |start Menu, mainarea
+    +-->
+<!--+
+    |start Menu
+    +-->
+<div id="menu">
+<div onclick="SwitchMenu('menu_1.1', 'skin/')" id="menu_1.1Title" class="menutitle">Overview</div>
+<div id="menu_1.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="index.html">Welcome</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperOver.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperStarted.html">Getting Started</a>
+</div>
+<div class="menuitem">
+<a href="releasenotes.html">Release Notes</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2', 'skin/')" id="menu_1.2Title" class="menutitle">Developer</div>
+<div id="menu_1.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="api/index.html">API Docs</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperProgrammers.html">Programmer's Guide</a>
+</div>
+<div class="menuitem">
+<a href="javaExample.html">Java Example</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperTutorial.html">Barrier and Queue Tutorial</a>
+</div>
+<div class="menuitem">
+<a href="recipes.html">Recipes</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.3', 'skin/')" id="menu_1.3Title" class="menutitle">BookKeeper</div>
+<div id="menu_1.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="bookkeeperStarted.html">Getting started</a>
+</div>
+<div class="menuitem">
+<a href="bookkeeperOverview.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="bookkeeperConfig.html">Setup guide</a>
+</div>
+<div class="menuitem">
+<a href="bookkeeperProgrammer.html">Programmer's guide</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.4', 'skin/')" id="menu_1.4Title" class="menutitle">Admin &amp; Ops</div>
+<div id="menu_1.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="zookeeperAdmin.html">Administrator's Guide</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperQuotas.html">Quota Guide</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperJMX.html">JMX</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperObservers.html">Observers Guide</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.5', 'skin/')" id="menu_1.5Title" class="menutitle">Contributor</div>
+<div id="menu_1.5" class="menuitemgroup">
+<div class="menuitem">
+<a href="zookeeperInternals.html">ZooKeeper Internals</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.6', 'skin/')" id="menu_1.6Title" class="menutitle">Miscellaneous</div>
+<div id="menu_1.6" class="menuitemgroup">
+<div class="menuitem">
+<a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER">Wiki</a>
+</div>
+<div class="menuitem">
+<a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/FAQ">FAQ</a>
+</div>
+<div class="menuitem">
+<a href="http://zookeeper.apache.org/mailing_lists.html">Mailing Lists</a>
+</div>
+</div>
+<div id="credit"></div>
+<div id="roundbottom">
+<img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
+<!--+
+  |alternative credits
+  +-->
+<div id="credit2"></div>
+</div>
+<!--+
+    |end Menu
+    +-->
+<!--+
+    |start content
+    +-->
+<div id="content">
+<div title="Portable Document Format" class="pdflink">
+<a class="dida" href="linkmap.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
+        PDF</a>
+</div>
+<h1>Site Linkmap Table of Contents</h1>
+<div id="front-matter"></div>
+<p>
+          This is a map of the complete site and its structure.
+        </p>
+<ul>
+<li>
+<a>ZooKeeper</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>site</em>
+</li>
+<ul>
+
+  
+<ul>
+<li>
+<a>Overview</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>docs</em>
+</li>
+<ul> 
+    
+<ul>
+<li>
+<a href="index.html">Welcome</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>welcome</em>
+</li>
+</ul>
+    
+<ul>
+<li>
+<a href="zookeeperOver.html">Overview</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>overview</em>
+</li>
+</ul>
+    
+<ul>
+<li>
+<a href="zookeeperStarted.html">Getting Started</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>started</em>
+</li>
+</ul>
+    
+<ul>
+<li>
+<a href="releasenotes.html">Release Notes</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>relnotes</em>
+</li>
+</ul>
+  
+</ul>
+</ul>
+  
+  
+<ul>
+<li>
+<a>Developer</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>docs</em>
+</li>
+<ul>
+    
+<ul>
+<li>
+<a href="api/index.html">API Docs</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>api</em>
+</li>
+</ul>
+    
+<ul>
+<li>
+<a href="zookeeperProgrammers.html">Programmer's Guide</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>program</em>
+</li>
+</ul>
+    
+<ul>
+<li>
+<a href="javaExample.html">Java Example</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>javaEx</em>
+</li>
+</ul>
+    
+<ul>
+<li>
+<a href="zookeeperTutorial.html">Barrier and Queue Tutorial</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>barTutor</em>
+</li>
+</ul>
+    
+<ul>
+<li>
+<a href="recipes.html">Recipes</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>recipes</em>
+</li>
+</ul>
+  
+</ul>
+</ul>
+  
+  
+<ul>
+<li>
+<a>BookKeeper</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>docs</em>
+</li>
+<ul>
+      
+<ul>
+<li>
+<a href="bookkeeperStarted.html">Getting started</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>bkStarted</em>
+</li>
+</ul>
+      
+<ul>
+<li>
+<a href="bookkeeperOverview.html">Overview</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>bkOverview</em>
+</li>
+</ul>
+      
+<ul>
+<li>
+<a href="bookkeeperConfig.html">Setup guide</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>bkProgrammer</em>
+</li>
+</ul>
+      
+<ul>
+<li>
+<a href="bookkeeperProgrammer.html">Programmer's guide</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>bkProgrammer</em>
+</li>
+</ul>
+  
+</ul>
+</ul>
+  
+  
+<ul>
+<li>
+<a>Admin &amp; Ops</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>docs</em>
+</li>
+<ul>
+      
+<ul>
+<li>
+<a href="zookeeperAdmin.html">Administrator's Guide</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>admin</em>
+</li>
+</ul>
+      
+<ul>
+<li>
+<a href="zookeeperQuotas.html">Quota Guide</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>quota</em>
+</li>
+</ul>
+      
+<ul>
+<li>
+<a href="zookeeperJMX.html">JMX</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>jmx</em>
+</li>
+</ul>
+      
+<ul>
+<li>
+<a href="zookeeperObservers.html">Observers Guide</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>observers</em>
+</li>
+</ul>
+  
+</ul>
+</ul>
+  
+  
+<ul>
+<li>
+<a>Contributor</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>docs</em>
+</li>
+<ul>
+      
+<ul>
+<li>
+<a href="zookeeperInternals.html">ZooKeeper Internals</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>internals</em>
+</li>
+</ul>
+  
+</ul>
+</ul>
+  
+  
+<ul>
+<li>
+<a>Miscellaneous</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>docs</em>
+</li>
+<ul>
+    
+<ul>
+<li>
+<a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER">Wiki</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>wiki</em>
+</li>
+</ul>
+    
+<ul>
+<li>
+<a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/FAQ">FAQ</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>faq</em>
+</li>
+</ul>
+    
+<ul>
+<li>
+<a href="http://zookeeper.apache.org/mailing_lists.html">Mailing Lists</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>lists</em>
+</li>
+</ul>
+    
+  
+</ul>
+</ul>
+  
+  
+
+  
+ 
+
+</ul>
+</ul>
+</div>
+<!--+
+    |end content
+    +-->
+<div class="clearboth">&nbsp;</div>
+</div>
+<div id="footer">
+<!--+
+    |start bottomstrip
+    +-->
+<div class="lastmodified">
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<div class="copyright">
+        Copyright &copy;
+          <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
+</div>
+<!--+
+    |end bottomstrip
+    +-->
+</div>
+</body>
+</html>

Added: websites/staging/zookeeper/trunk/content/doc/r3.4.11/linkmap.pdf
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/zookeeper/trunk/content/doc/r3.4.11/linkmap.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/pdf

Added: websites/staging/zookeeper/trunk/content/doc/r3.4.11/recipes.html
==============================================================================
--- websites/staging/zookeeper/trunk/content/doc/r3.4.11/recipes.html (added)
+++ websites/staging/zookeeper/trunk/content/doc/r3.4.11/recipes.html Fri Nov 17 00:09:32 2017
@@ -0,0 +1,974 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta content="Apache Forrest" name="Generator">
+<meta name="Forrest-version" content="0.9">
+<meta name="Forrest-skin-name" content="pelt">
+<title>ZooKeeper Recipes and Solutions</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">
+<link type="text/css" href="skin/profile.css" rel="stylesheet">
+<script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script>
+<link rel="shortcut icon" href="images/favicon.ico">
+</head>
+<body onload="init()">
+<script type="text/javascript">ndeSetTextSize();</script>
+<div id="top">
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://zookeeper.apache.org/">ZooKeeper</a> &gt; <a href="http://zookeeper.apache.org/">ZooKeeper</a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
+</div>
+<!--+
+    |header
+    +-->
+<div class="header">
+<!--+
+    |start group logo
+    +-->
+<div class="grouplogo">
+<a href="http://hadoop.apache.org/"><img class="logoImage" alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a>
+</div>
+<!--+
+    |end group logo
+    +-->
+<!--+
+    |start Project Logo
+    +-->
+<div class="projectlogo">
+<a href="http://zookeeper.apache.org/"><img class="logoImage" alt="ZooKeeper" src="images/zookeeper_small.gif" title="ZooKeeper: distributed coordination"></a>
+</div>
+<!--+
+    |end Project Logo
+    +-->
+<!--+
+    |start Search
+    +-->
+<div class="searchbox">
+<form action="http://www.google.com/search" method="get" class="roundtopsmall">
+<input value="zookeeper.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp; 
+                    <input name="Search" value="Search" type="submit">
+</form>
+</div>
+<!--+
+    |end search
+    +-->
+<!--+
+    |start Tabs
+    +-->
+<ul id="tabs">
+<li>
+<a class="unselected" href="http://zookeeper.apache.org/">Project</a>
+</li>
+<li>
+<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>
+</li>
+</ul>
+<!--+
+    |end Tabs
+    +-->
+</div>
+</div>
+<div id="main">
+<div id="publishedStrip">
+<!--+
+    |start Subtabs
+    +-->
+<div id="level2tabs"></div>
+<!--+
+    |end Endtabs
+    +-->
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+
+             &nbsp;
+           </div>
+<!--+
+    |start Menu, mainarea
+    +-->
+<!--+
+    |start Menu
+    +-->
+<div id="menu">
+<div onclick="SwitchMenu('menu_1.1', 'skin/')" id="menu_1.1Title" class="menutitle">Overview</div>
+<div id="menu_1.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="index.html">Welcome</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperOver.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperStarted.html">Getting Started</a>
+</div>
+<div class="menuitem">
+<a href="releasenotes.html">Release Notes</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_selected_1.2', 'skin/')" id="menu_selected_1.2Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">Developer</div>
+<div id="menu_selected_1.2" class="selectedmenuitemgroup" style="display: block;">
+<div class="menuitem">
+<a href="api/index.html">API Docs</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperProgrammers.html">Programmer's Guide</a>
+</div>
+<div class="menuitem">
+<a href="javaExample.html">Java Example</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperTutorial.html">Barrier and Queue Tutorial</a>
+</div>
+<div class="menupage">
+<div class="menupagetitle">Recipes</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.3', 'skin/')" id="menu_1.3Title" class="menutitle">BookKeeper</div>
+<div id="menu_1.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="bookkeeperStarted.html">Getting started</a>
+</div>
+<div class="menuitem">
+<a href="bookkeeperOverview.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="bookkeeperConfig.html">Setup guide</a>
+</div>
+<div class="menuitem">
+<a href="bookkeeperProgrammer.html">Programmer's guide</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.4', 'skin/')" id="menu_1.4Title" class="menutitle">Admin &amp; Ops</div>
+<div id="menu_1.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="zookeeperAdmin.html">Administrator's Guide</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperQuotas.html">Quota Guide</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperJMX.html">JMX</a>
+</div>
+<div class="menuitem">
+<a href="zookeeperObservers.html">Observers Guide</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.5', 'skin/')" id="menu_1.5Title" class="menutitle">Contributor</div>
+<div id="menu_1.5" class="menuitemgroup">
+<div class="menuitem">
+<a href="zookeeperInternals.html">ZooKeeper Internals</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.6', 'skin/')" id="menu_1.6Title" class="menutitle">Miscellaneous</div>
+<div id="menu_1.6" class="menuitemgroup">
+<div class="menuitem">
+<a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER">Wiki</a>
+</div>
+<div class="menuitem">
+<a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/FAQ">FAQ</a>
+</div>
+<div class="menuitem">
+<a href="http://zookeeper.apache.org/mailing_lists.html">Mailing Lists</a>
+</div>
+</div>
+<div id="credit"></div>
+<div id="roundbottom">
+<img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
+<!--+
+  |alternative credits
+  +-->
+<div id="credit2"></div>
+</div>
+<!--+
+    |end Menu
+    +-->
+<!--+
+    |start content
+    +-->
+<div id="content">
+<div title="Portable Document Format" class="pdflink">
+<a class="dida" href="recipes.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
+        PDF</a>
+</div>
+<h1>ZooKeeper Recipes and Solutions</h1>
+<div id="front-matter">
+<div id="minitoc-area">
+<ul class="minitoc">
+<li>
+<a href="#ch_recipes">A Guide to Creating Higher-level Constructs with ZooKeeper</a>
+<ul class="minitoc">
+<li>
+<a href="#sc_outOfTheBox">Out of the Box Applications: Name Service, Configuration, Group
+    Membership</a>
+</li>
+<li>
+<a href="#sc_recipes_eventHandles">Barriers</a>
+<ul class="minitoc">
+<li>
+<a href="#sc_doubleBarriers">Double Barriers</a>
+</li>
+</ul>
+</li>
+<li>
+<a href="#sc_recipes_Queues">Queues</a>
+<ul class="minitoc">
+<li>
+<a href="#sc_recipes_priorityQueues">Priority Queues</a>
+</li>
+</ul>
+</li>
+<li>
+<a href="#sc_recipes_Locks">Locks</a>
+<ul class="minitoc">
+<li>
+<a href="#Shared+Locks">Shared Locks</a>
+</li>
+<li>
+<a href="#sc_recoverableSharedLocks">Recoverable Shared Locks</a>
+</li>
+</ul>
+</li>
+<li>
+<a href="#sc_recipes_twoPhasedCommit">Two-phased Commit</a>
+</li>
+<li>
+<a href="#sc_leaderElection">Leader Election</a>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+  
+
+  
+
+  
+<a name="ch_recipes"></a>
+<h2 class="h3">A Guide to Creating Higher-level Constructs with ZooKeeper</h2>
+<div class="section">
+<p>In this article, you'll find guidelines for using
+    ZooKeeper to implement higher order functions. All of them are conventions
+    implemented at the client and do not require special support from
+    ZooKeeper. Hopfully the community will capture these conventions in client-side libraries 
+    to ease their use and to encourage standardization.</p>
+<p>One of the most interesting things about ZooKeeper is that even
+    though ZooKeeper uses <em>asynchronous</em> notifications, you
+    can use it to build <em>synchronous</em> consistency
+    primitives, such as queues and locks. As you will see, this is possible
+    because ZooKeeper imposes an overall order on updates, and has mechanisms
+    to expose this ordering.</p>
+<p>Note that the recipes below attempt to employ best practices. In
+    particular, they avoid polling, timers or anything else that would result
+    in a "herd effect", causing bursts of traffic and limiting
+    scalability.</p>
+<p>There are many useful functions that can be imagined that aren't
+    included here - revocable read-write priority locks, as just one example.
+    And some of the constructs mentioned here - locks, in particular -
+    illustrate certain points, even though you may find other constructs, such
+    as event handles or queues, a more practical means of performing the same
+    function. In general, the examples in this section are designed to
+    stimulate thought.</p>
+<a name="sc_outOfTheBox"></a>
+<h3 class="h4">Out of the Box Applications: Name Service, Configuration, Group
+    Membership</h3>
+<p>Name service and configuration are two of the primary applications
+    of ZooKeeper. These two functions are provided directly by the ZooKeeper
+    API.</p>
+<p>Another function directly provided by ZooKeeper is <em>group
+    membership</em>. The group is represented by a node. Members of the
+    group create ephemeral nodes under the group node. Nodes of the members
+    that fail abnormally will be removed automatically when ZooKeeper detects
+    the failure.</p>
+<a name="sc_recipes_eventHandles"></a>
+<h3 class="h4">Barriers</h3>
+<p>Distributed systems use <em>barriers</em>
+      to block processing of a set of nodes until a condition is met
+      at which time all the nodes are allowed to proceed. Barriers are
+      implemented in ZooKeeper by designating a barrier node. The
+      barrier is in place if the barrier node exists. Here's the
+      pseudo code:</p>
+<ol>
+      
+<li>
+        
+<p>Client calls the ZooKeeper API's <strong>exists()</strong> function on the barrier node, with
+        <em>watch</em> set to true.</p>
+      
+</li>
+
+      
+<li>
+        
+<p>If <strong>exists()</strong> returns false, the
+        barrier is gone and the client proceeds</p>
+      
+</li>
+
+      
+<li>
+        
+<p>Else, if <strong>exists()</strong> returns true,
+        the clients wait for a watch event from ZooKeeper for the barrier
+        node.</p>
+      
+</li>
+
+      
+<li>
+        
+<p>When the watch event is triggered, the client reissues the
+        <strong>exists( )</strong> call, again waiting until
+        the barrier node is removed.</p>
+      
+</li>
+    
+</ol>
+<a name="sc_doubleBarriers"></a>
+<h4>Double Barriers</h4>
+<p>Double barriers enable clients to synchronize the beginning and
+      the end of a computation. When enough processes have joined the barrier,
+      processes start their computation and leave the barrier once they have
+      finished. This recipe shows how to use a ZooKeeper node as a
+      barrier.</p>
+<p>The pseudo code in this recipe represents the barrier node as
+      <em>b</em>. Every client process <em>p</em>
+      registers with the barrier node on entry and unregisters when it is
+      ready to leave. A node registers with the barrier node via the <strong>Enter</strong> procedure below, it waits until
+      <em>x</em> client process register before proceeding with
+      the computation. (The <em>x</em> here is up to you to
+      determine for your system.)</p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+        
+            
+<tr>
+              
+<td><strong>Enter</strong></td>
+
+              <td><strong>Leave</strong></td>
+            
+</tr>
+
+            
+<tr>
+              
+<td>
+<ol>
+                  
+<li>
+                    
+<p>Create a name <em><em>n</em> =
+                        <em>b</em>+&ldquo;/&rdquo;+<em>p</em></em>
+</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>Set watch: <strong>exists(<em>b</em> + &lsquo;&lsquo;/ready&rsquo;&rsquo;,
+                        true)</strong>
+</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>Create child: <strong>create(
+                        <em>n</em>, EPHEMERAL)</strong>
+</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>
+<strong>L = getChildren(b,
+                        false)</strong>
+</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>if fewer children in L than<em>
+                        x</em>, wait for watch event</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>else <strong>create(b + &lsquo;&lsquo;/ready&rsquo;&rsquo;,
+                        REGULAR)</strong>
+</p>
+                  
+</li>
+                
+</ol>
+</td>
+
+              <td>
+<ol>
+                  
+<li>
+                    
+<p>
+<strong>L = getChildren(b,
+                        false)</strong>
+</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>if no children, exit</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>if <em>p</em> is only process node in
+                      L, delete(n) and exit</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>if <em>p</em> is the lowest process
+                      node in L, wait on highest process node in L</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>else <strong>delete(<em>n</em>) </strong>if
+                      still exists and wait on lowest process node in L</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>goto 1</p>
+                  
+</li>
+                
+</ol>
+</td>
+            
+</tr>
+          
+      
+</table>
+<p>On entering, all processes watch on a ready node and
+        create an ephemeral node as a child of the barrier node. Each process
+        but the last enters the barrier and waits for the ready node to appear
+        at line 5. The process that creates the xth node, the last process, will
+        see x nodes in the list of children and create the ready node, waking up
+        the other processes. Note that waiting processes wake up only when it is
+        time to exit, so waiting is efficient.
+      </p>
+<p>On exit, you can't use a flag such as <em>ready</em>
+      because you are watching for process nodes to go away. By using
+      ephemeral nodes, processes that fail after the barrier has been entered
+      do not prevent correct processes from finishing. When processes are
+      ready to leave, they need to delete their process nodes and wait for all
+      other processes to do the same.</p>
+<p>Processes exit when there are no process nodes left as children of
+      <em>b</em>. However, as an efficiency, you can use the
+      lowest process node as the ready flag. All other processes that are
+      ready to exit watch for the lowest existing process node to go away, and
+      the owner of the lowest process watches for any other process node
+      (picking the highest for simplicity) to go away. This means that only a
+      single process wakes up on each node deletion except for the last node,
+      which wakes up everyone when it is removed.</p>
+<a name="sc_recipes_Queues"></a>
+<h3 class="h4">Queues</h3>
+<p>Distributed queues are a common data structure. To implement a
+    distributed queue in ZooKeeper, first designate a znode to hold the queue,
+    the queue node. The distributed clients put something into the queue by
+    calling create() with a pathname ending in "queue-", with the
+    <em>sequence</em> and <em>ephemeral</em> flags in
+    the create() call set to true. Because the <em>sequence</em>
+    flag is set, the new pathnames will have the form
+    _path-to-queue-node_/queue-X, where X is a monotonic increasing number. A
+    client that wants to be removed from the queue calls ZooKeeper's <strong>getChildren( )</strong> function, with
+    <em>watch</em> set to true on the queue node, and begins
+    processing nodes with the lowest number. The client does not need to issue
+    another <strong>getChildren( )</strong> until it exhausts
+    the list obtained from the first <strong>getChildren(
+    )</strong> call. If there are are no children in the queue node, the
+    reader waits for a watch notification to check the queue again.</p>
+<div class="note">
+<div class="label">Note</div>
+<div class="content">
+      
+<p>There now exists a Queue implementation in ZooKeeper
+      recipes directory. This is distributed with the release --
+      src/recipes/queue directory of the release artifact.
+      </p>
+    
+</div>
+</div>
+<a name="sc_recipes_priorityQueues"></a>
+<h4>Priority Queues</h4>
+<p>To implement a priority queue, you need only make two simple
+      changes to the generic <a href="#sc_recipes_Queues">queue
+      recipe</a> . First, to add to a queue, the pathname ends with
+      "queue-YY" where YY is the priority of the element with lower numbers
+      representing higher priority (just like UNIX). Second, when removing
+      from the queue, a client uses an up-to-date children list meaning that
+      the client will invalidate previously obtained children lists if a watch
+      notification triggers for the queue node.</p>
+<a name="sc_recipes_Locks"></a>
+<h3 class="h4">Locks</h3>
+<p>Fully distributed locks that are globally synchronous, meaning at
+    any snapshot in time no two clients think they hold the same lock. These
+    can be implemented using ZooKeeeper. As with priority queues, first define
+    a lock node.</p>
+<div class="note">
+<div class="label">Note</div>
+<div class="content">
+      
+<p>There now exists a Lock implementation in ZooKeeper
+      recipes directory. This is distributed with the release --
+      src/recipes/lock directory of the release artifact.
+      </p>
+    
+</div>
+</div>
+<p>Clients wishing to obtain a lock do the following:</p>
+<ol>
+      
+<li>
+        
+<p>Call <strong>create( )</strong> with a pathname
+        of "_locknode_/lock-" and the <em>sequence</em> and
+        <em>ephemeral</em> flags set.</p>
+      
+</li>
+
+      
+<li>
+        
+<p>Call <strong>getChildren( )</strong> on the lock
+        node <em>without</em> setting the watch flag (this is
+        important to avoid the herd effect).</p>
+      
+</li>
+
+      
+<li>
+        
+<p>If the pathname created in step <strong>1</strong> has the lowest sequence number suffix, the
+        client has the lock and the client exits the protocol.</p>
+      
+</li>
+
+      
+<li>
+        
+<p>The client calls <strong>exists( )</strong> with
+        the watch flag set on the path in the lock directory with the next
+        lowest sequence number.</p>
+      
+</li>
+
+      
+<li>
+        
+<p>if <strong>exists( )</strong> returns false, go
+        to step <strong>2</strong>. Otherwise, wait for a
+        notification for the pathname from the previous step before going to
+        step <strong>2</strong>.</p>
+      
+</li>
+    
+</ol>
+<p>The unlock protocol is very simple: clients wishing to release a
+    lock simply delete the node they created in step 1.</p>
+<p>Here are a few things to notice:</p>
+<ul>
+      
+<li>
+        
+<p>The removal of a node will only cause one client to wake up
+        since each node is watched by exactly one client. In this way, you
+        avoid the herd effect.</p>
+      
+</li>
+    
+</ul>
+<ul>
+      
+<li>
+        
+<p>There is no polling or timeouts.</p>
+      
+</li>
+    
+</ul>
+<ul>
+      
+<li>
+        
+<p>Because of the way you implement locking, it is easy to see the
+        amount of lock contention, break locks, debug locking problems,
+        etc.</p>
+      
+</li>
+    
+</ul>
+<a name="Shared+Locks"></a>
+<h4>Shared Locks</h4>
+<p>You can implement shared locks by with a few changes to the lock
+      protocol:</p>
+<table class="ForrestTable" cellspacing="1" cellpadding="4">
+        
+            
+<tr>
+              
+<td><strong>Obtaining a read
+              lock:</strong></td>
+
+              <td><strong>Obtaining a write
+              lock:</strong></td>
+            
+</tr>
+
+            
+<tr>
+              
+<td>
+<ol>
+                  
+<li>
+                    
+<p>Call <strong>create( )</strong> to
+                    create a node with pathname
+                    "<span class="codefrag filename">_locknode_/read-</span>". This is the
+                    lock node use later in the protocol. Make sure to set both
+                    the <em>sequence</em> and
+                    <em>ephemeral</em> flags.</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>Call <strong>getChildren( )</strong>
+                    on the lock node <em>without</em> setting the
+                    <em>watch</em> flag - this is important, as it
+                    avoids the herd effect.</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>If there are no children with a pathname starting
+                    with "<span class="codefrag filename">write-</span>" and having a lower
+                    sequence number than the node created in step <strong>1</strong>, the client has the lock and can
+                    exit the protocol. </p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>Otherwise, call <strong>exists(
+                    )</strong>, with <em>watch</em> flag, set on
+                    the node in lock directory with pathname staring with
+                    "<span class="codefrag filename">write-</span>" having the next lowest
+                    sequence number.</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>If <strong>exists( )</strong>
+                    returns <em>false</em>, goto step <strong>2</strong>.</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>Otherwise, wait for a notification for the pathname
+                    from the previous step before going to step <strong>2</strong>
+</p>
+                  
+</li>
+                
+</ol>
+</td>
+
+              <td>
+<ol>
+                  
+<li>
+                    
+<p>Call <strong>create( )</strong> to
+                    create a node with pathname
+                    "<span class="codefrag filename">_locknode_/write-</span>". This is the
+                    lock node spoken of later in the protocol. Make sure to
+                    set both <em>sequence</em> and
+                    <em>ephemeral</em> flags.</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>Call <strong>getChildren( )
+                    </strong> on the lock node <em>without</em>
+                    setting the <em>watch</em> flag - this is
+                    important, as it avoids the herd effect.</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>If there are no children with a lower sequence
+                    number than the node created in step <strong>1</strong>, the client has the lock and the
+                    client exits the protocol.</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>Call <strong>exists( ),</strong>
+                    with <em>watch</em> flag set, on the node with
+                    the pathname that has the next lowest sequence
+                    number.</p>
+                  
+</li>
+
+                  
+<li>
+                    
+<p>If <strong>exists( )</strong>
+                    returns <em>false</em>, goto step <strong>2</strong>. Otherwise, wait for a
+                    notification for the pathname from the previous step
+                    before going to step <strong>2</strong>.</p>
+                  
+</li>
+                
+</ol>
+</td>
+            
+</tr>
+          
+      
+</table>
+<div class="note">
+<div class="label">Note</div>
+<div class="content">
+        
+<p>It might appear that this recipe creates a herd effect:
+          when there is a large group of clients waiting for a read
+          lock, and all getting notified more or less simultaneously
+          when the "<span class="codefrag filename">write-</span>" node with the lowest
+          sequence number is deleted. In fact. that's valid behavior:
+          as all those waiting reader clients should be released since
+          they have the lock. The herd effect refers to releasing a
+          "herd" when in fact only a single or a small number of
+          machines can proceed.
+        </p>
+      
+</div>
+</div>
+<a name="sc_recoverableSharedLocks"></a>
+<h4>Recoverable Shared Locks</h4>
+<p>With minor modifications to the Shared Lock protocol, you make
+      shared locks revocable by modifying the shared lock protocol:</p>
+<p>In step <strong>1</strong>, of both obtain reader
+      and writer lock protocols, call <strong>getData(
+      )</strong> with <em>watch</em> set, immediately after the
+      call to <strong>create( )</strong>. If the client
+      subsequently receives notification for the node it created in step
+      <strong>1</strong>, it does another <strong>getData( )</strong> on that node, with
+      <em>watch</em> set and looks for the string "unlock", which
+      signals to the client that it must release the lock. This is because,
+      according to this shared lock protocol, you can request the client with
+      the lock give up the lock by calling <strong>setData()
+      </strong> on the lock node, writing "unlock" to that node.</p>
+<p>Note that this protocol requires the lock holder to consent to
+      releasing the lock. Such consent is important, especially if the lock
+      holder needs to do some processing before releasing the lock. Of course
+      you can always implement <em>Revocable Shared Locks with Freaking
+      Laser Beams</em> by stipulating in your protocol that the revoker
+      is allowed to delete the lock node if after some length of time the lock
+      isn't deleted by the lock holder.</p>
+<a name="sc_recipes_twoPhasedCommit"></a>
+<h3 class="h4">Two-phased Commit</h3>
+<p>A two-phase commit protocol is an algorithm that lets all clients in
+    a distributed system agree either to commit a transaction or abort.</p>
+<p>In ZooKeeper, you can implement a two-phased commit by having a
+    coordinator create a transaction node, say "/app/Tx", and one child node
+    per participating site, say "/app/Tx/s_i". When coordinator creates the
+    child node, it leaves the content undefined. Once each site involved in
+    the transaction receives the transaction from the coordinator, the site
+    reads each child node and sets a watch. Each site then processes the query
+    and votes "commit" or "abort" by writing to its respective node. Once the
+    write completes, the other sites are notified, and as soon as all sites
+    have all votes, they can decide either "abort" or "commit". Note that a
+    node can decide "abort" earlier if some site votes for "abort".</p>
+<p>An interesting aspect of this implementation is that the only role
+    of the coordinator is to decide upon the group of sites, to create the
+    ZooKeeper nodes, and to propagate the transaction to the corresponding
+    sites. In fact, even propagating the transaction can be done through
+    ZooKeeper by writing it in the transaction node.</p>
+<p>There are two important drawbacks of the approach described above.
+    One is the message complexity, which is O(n&sup2;). The second is the
+    impossibility of detecting failures of sites through ephemeral nodes. To
+    detect the failure of a site using ephemeral nodes, it is necessary that
+    the site create the node.</p>
+<p>To solve the first problem, you can have only the coordinator
+    notified of changes to the transaction nodes, and then notify the sites
+    once coordinator reaches a decision. Note that this approach is scalable,
+    but it's is slower too, as it requires all communication to go through the
+    coordinator.</p>
+<p>To address the second problem, you can have the coordinator
+    propagate the transaction to the sites, and have each site creating its
+    own ephemeral node.</p>
+<a name="sc_leaderElection"></a>
+<h3 class="h4">Leader Election</h3>
+<p>A simple way of doing leader election with ZooKeeper is to use the
+    <strong>SEQUENCE|EPHEMERAL</strong> flags when creating
+    znodes that represent "proposals" of clients. The idea is to have a znode,
+    say "/election", such that each znode creates a child znode "/election/n_"
+    with both flags SEQUENCE|EPHEMERAL. With the sequence flag, ZooKeeper
+    automatically appends a sequence number that is greater that any one
+    previously appended to a child of "/election". The process that created
+    the znode with the smallest appended sequence number is the leader.
+    </p>
+<p>That's not all, though. It is important to watch for failures of the
+    leader, so that a new client arises as the new leader in the case the
+    current leader fails. A trivial solution is to have all application
+    processes watching upon the current smallest znode, and checking if they
+    are the new leader when the smallest znode goes away (note that the
+    smallest znode will go away if the leader fails because the node is
+    ephemeral). But this causes a herd effect: upon of failure of the current
+    leader, all other processes receive a notification, and execute
+    getChildren on "/election" to obtain the current list of children of
+    "/election". If the number of clients is large, it causes a spike on the
+    number of operations that ZooKeeper servers have to process. To avoid the
+    herd effect, it is sufficient to watch for the next znode down on the
+    sequence of znodes. If a client receives a notification that the znode it
+    is watching is gone, then it becomes the new leader in the case that there
+    is no smaller znode. Note that this avoids the herd effect by not having
+    all clients watching the same znode. </p>
+<p>Here's the pseudo code:</p>
+<p>Let ELECTION be a path of choice of the application. To volunteer to
+    be a leader: </p>
+<ol>
+      
+<li>
+        
+<p>Create znode z with path "ELECTION/n_" with both SEQUENCE and
+        EPHEMERAL flags;</p>
+      
+</li>
+
+      
+<li>
+        
+<p>Let C be the children of "ELECTION", and i be the sequence
+        number of z;</p>
+      
+</li>
+
+      
+<li>
+        
+<p>Watch for changes on "ELECTION/n_j", where j is the largest
+        sequence number such that j &lt; i and n_j is a znode in C;</p>
+      
+</li>
+    
+</ol>
+<p>Upon receiving a notification of znode deletion: </p>
+<ol>
+      
+<li>
+        
+<p>Let C be the new set of children of ELECTION; </p>
+      
+</li>
+
+      
+<li>
+        
+<p>If z is the smallest node in C, then execute leader
+        procedure;</p>
+      
+</li>
+
+      
+<li>
+        
+<p>Otherwise, watch for changes on "ELECTION/n_j", where j is the
+        largest sequence number such that j &lt; i and n_j is a znode in C;
+        </p>
+      
+</li>
+    
+</ol>
+<p>Note that the znode having no preceding znode on the list of
+    children does not imply that the creator of this znode is aware that it is
+    the current leader. Applications may consider creating a separate znode
+    to acknowledge that the leader has executed the leader procedure. </p>
+</div>
+
+<p align="right">
+<font size="-2"></font>
+</p>
+</div>
+<!--+
+    |end content
+    +-->
+<div class="clearboth">&nbsp;</div>
+</div>
+<div id="footer">
+<!--+
+    |start bottomstrip
+    +-->
+<div class="lastmodified">
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<div class="copyright">
+        Copyright &copy;
+          <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
+</div>
+<!--+
+    |end bottomstrip
+    +-->
+</div>
+</body>
+</html>

Added: websites/staging/zookeeper/trunk/content/doc/r3.4.11/recipes.pdf
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/zookeeper/trunk/content/doc/r3.4.11/recipes.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/pdf