You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by an...@apache.org on 2018/11/06 17:50:26 UTC

[07/16] zookeeper git commit: ZOOKEEPER-3155: Remove Forrest XMLs and their build process from the …

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/e5fc1228/docs/zookeeperStarted.html
----------------------------------------------------------------------
diff --git a/docs/zookeeperStarted.html b/docs/zookeeperStarted.html
deleted file mode 100644
index 89d9129..0000000
--- a/docs/zookeeperStarted.html
+++ /dev/null
@@ -1,618 +0,0 @@
-<!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 Getting Started Guide</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.6 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_selected_1.1', 'skin/')" id="menu_selected_1.1Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">Overview</div>
-<div id="menu_selected_1.1" class="selectedmenuitemgroup" style="display: block;">
-<div class="menuitem">
-<a href="index.html">Welcome</a>
-</div>
-<div class="menuitem">
-<a href="zookeeperOver.html">Overview</a>
-</div>
-<div class="menupage">
-<div class="menupagetitle">Getting Started</div>
-</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">Admin &amp; Ops</div>
-<div id="menu_1.3" 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 class="menuitem">
-<a href="zookeeperReconfig.html">Dynamic Reconfiguration</a>
-</div>
-</div>
-<div onclick="SwitchMenu('menu_1.4', 'skin/')" id="menu_1.4Title" class="menutitle">Contributor</div>
-<div id="menu_1.4" class="menuitemgroup">
-<div class="menuitem">
-<a href="zookeeperInternals.html">ZooKeeper Internals</a>
-</div>
-</div>
-<div onclick="SwitchMenu('menu_1.5', 'skin/')" id="menu_1.5Title" class="menutitle">Miscellaneous</div>
-<div id="menu_1.5" 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="zookeeperStarted.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
-        PDF</a>
-</div>
-<h1>ZooKeeper Getting Started Guide</h1>
-<div id="front-matter">
-<div id="minitoc-area">
-<ul class="minitoc">
-<li>
-<a href="#ch_GettingStarted">Getting Started: Coordinating Distributed Applications with
-      ZooKeeper</a>
-<ul class="minitoc">
-<li>
-<a href="#sc_Prerequisites">Pre-requisites</a>
-</li>
-<li>
-<a href="#sc_Download">Download</a>
-</li>
-<li>
-<a href="#sc_InstallingSingleMode">Standalone Operation</a>
-</li>
-<li>
-<a href="#sc_FileManagement">Managing ZooKeeper Storage</a>
-</li>
-<li>
-<a href="#sc_ConnectingToZooKeeper">Connecting to ZooKeeper</a>
-</li>
-<li>
-<a href="#sc_ProgrammingToZooKeeper">Programming to ZooKeeper</a>
-</li>
-<li>
-<a href="#sc_RunningReplicatedZooKeeper">Running Replicated ZooKeeper</a>
-</li>
-<li>
-<a href="#Other+Optimizations">Other Optimizations</a>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-  
-
-  
-
-  
-<a name="ch_GettingStarted"></a>
-<h2 class="h3">Getting Started: Coordinating Distributed Applications with
-      ZooKeeper</h2>
-<div class="section">
-<p>This document contains information to get you started quickly with
-    ZooKeeper. It is aimed primarily at developers hoping to try it out, and
-    contains simple installation instructions for a single ZooKeeper server, a
-    few commands to verify that it is running, and a simple programming
-    example. Finally, as a convenience, there are a few sections regarding
-    more complicated installations, for example running replicated
-    deployments, and optimizing the transaction log. However for the complete
-    instructions for commercial deployments, please refer to the <a href="zookeeperAdmin.html">ZooKeeper
-    Administrator's Guide</a>.</p>
-<a name="sc_Prerequisites"></a>
-<h3 class="h4">Pre-requisites</h3>
-<p>See <a href="zookeeperAdmin.html#sc_systemReq">
-          System Requirements</a> in the Admin guide.</p>
-<a name="sc_Download"></a>
-<h3 class="h4">Download</h3>
-<p>To get a ZooKeeper distribution, download a recent
-        <a href="http://zookeeper.apache.org/releases.html">
-          stable</a> release from one of the Apache Download
-        Mirrors.</p>
-<a name="sc_InstallingSingleMode"></a>
-<h3 class="h4">Standalone Operation</h3>
-<p>Setting up a ZooKeeper server in standalone mode is
-      straightforward. The server is contained in a single JAR file,
-      so installation consists of creating a configuration.</p>
-<p>Once you've downloaded a stable ZooKeeper release unpack
-      it and cd to the root</p>
-<p>To start ZooKeeper you need a configuration file. Here is a sample,
-      create it in <strong>conf/zoo.cfg</strong>:</p>
-<pre class="code">
-tickTime=2000
-dataDir=/var/lib/zookeeper
-clientPort=2181
-</pre>
-<p>This file can be called anything, but for the sake of this
-      discussion call
-      it <strong>conf/zoo.cfg</strong>. Change the
-      value of <strong>dataDir</strong> to specify an
-      existing (empty to start with) directory.  Here are the meanings
-      for each of the fields:</p>
-<dl>
-        
-<dt>
-<term>
-<strong>tickTime</strong>
-</term>
-</dt>
-<dd>
-<p>the basic time unit in milliseconds used by ZooKeeper. It is
-            used to do heartbeats and the minimum session timeout will be
-            twice the tickTime.</p>
-</dd>
-      
-</dl>
-<dl>
-        
-<dt>
-<term>
-<strong>dataDir</strong>
-</term>
-</dt>
-<dd>
-<p>the location to store the in-memory database snapshots and,
-            unless specified otherwise, the transaction log of updates to the
-            database.</p>
-</dd>
-
-        
-<dt>
-<term>
-<strong>clientPort</strong>
-</term>
-</dt>
-<dd>
-<p>the port to listen for client connections</p>
-</dd>
-      
-</dl>
-<p>Now that you created the configuration file, you can start
-      ZooKeeper:</p>
-<pre class="code">bin/zkServer.sh start</pre>
-<p>ZooKeeper logs messages using log4j -- more detail
-      available in the
-      <a href="zookeeperProgrammers.html#Logging">Logging</a>
-      section of the Programmer's Guide. You will see log messages
-      coming to the console (default) and/or a log file depending on
-      the log4j configuration.</p>
-<p>The steps outlined here run ZooKeeper in standalone mode. There is
-      no replication, so if ZooKeeper process fails, the service will go down.
-      This is fine for most development situations, but to run ZooKeeper in
-      replicated mode, please see <a href="#sc_RunningReplicatedZooKeeper">Running Replicated
-      ZooKeeper</a>.</p>
-<a name="sc_FileManagement"></a>
-<h3 class="h4">Managing ZooKeeper Storage</h3>
-<p>For long running production systems ZooKeeper storage must
-      be managed externally (dataDir and logs). See the section on
-      <a href="zookeeperAdmin.html#sc_maintenance">maintenance</a> for
-      more details.</p>
-<a name="sc_ConnectingToZooKeeper"></a>
-<h3 class="h4">Connecting to ZooKeeper</h3>
-<pre class="code">$ bin/zkCli.sh -server 127.0.0.1:2181</pre>
-<p>This lets you perform simple, file-like operations.</p>
-<p>Once you have connected, you should see something like:
-        </p>
-<pre class="code">
-
-Connecting to localhost:2181
-log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper).
-log4j:WARN Please initialize the log4j system properly.
-Welcome to ZooKeeper!
-JLine support is enabled
-[zkshell: 0]
-        </pre>
-<p>
-        From the shell, type <span class="codefrag command">help</span> to get a listing of commands that can be executed from the client, as in:
-      </p>
-<pre class="code">
-
-[zkshell: 0] help
-ZooKeeper host:port cmd args
-        get path [watch]
-        ls path [watch]
-        set path data [version]
-        delquota [-n|-b] path
-        quit
-        printwatches on|off
-        create path data acl
-        stat path [watch]
-        listquota path
-        history
-        setAcl path acl
-        getAcl path
-        sync path
-        redo cmdno
-        addauth scheme auth
-        delete path [version]
-        deleteall path
-        setquota -n|-b val path
-
-        </pre>
-<p>From here, you can try a few simple commands to get a feel for this simple command line interface.  First, start by issuing the list command, as
-      in <span class="codefrag command">ls</span>, yielding:
-      </p>
-<pre class="code">
-
-[zkshell: 8] ls /
-[zookeeper]
-        </pre>
-<p>Next, create a new znode by running <span class="codefrag command">create /zk_test my_data</span>. This creates a new znode and associates the string "my_data" with the node.
-      You should see:</p>
-<pre class="code">
-
-[zkshell: 9] create /zk_test my_data
-Created /zk_test
-      </pre>
-<p>  Issue another <span class="codefrag command">ls /</span> command to see what the directory looks like:
-        </p>
-<pre class="code">
-
-[zkshell: 11] ls /
-[zookeeper, zk_test]
-
-        </pre>
-<p>
-      Notice that the zk_test directory has now been created.
-      </p>
-<p>Next, verify that the data was associated with the znode by running the <span class="codefrag command">get</span> command, as in:
-      </p>
-<pre class="code">
-
-[zkshell: 12] get /zk_test
-my_data
-cZxid = 5
-ctime = Fri Jun 05 13:57:06 PDT 2009
-mZxid = 5
-mtime = Fri Jun 05 13:57:06 PDT 2009
-pZxid = 5
-cversion = 0
-dataVersion = 0
-aclVersion = 0
-ephemeralOwner = 0
-dataLength = 7
-numChildren = 0
-        </pre>
-<p>We can change the data associated with zk_test by issuing the <span class="codefrag command">set</span> command, as in:
-        </p>
-<pre class="code">
-
-[zkshell: 14] set /zk_test junk
-cZxid = 5
-ctime = Fri Jun 05 13:57:06 PDT 2009
-mZxid = 6
-mtime = Fri Jun 05 14:01:52 PDT 2009
-pZxid = 5
-cversion = 0
-dataVersion = 1
-aclVersion = 0
-ephemeralOwner = 0
-dataLength = 4
-numChildren = 0
-[zkshell: 15] get /zk_test
-junk
-cZxid = 5
-ctime = Fri Jun 05 13:57:06 PDT 2009
-mZxid = 6
-mtime = Fri Jun 05 14:01:52 PDT 2009
-pZxid = 5
-cversion = 0
-dataVersion = 1
-aclVersion = 0
-ephemeralOwner = 0
-dataLength = 4
-numChildren = 0
-      </pre>
-<p>
-       (Notice we did a <span class="codefrag command">get</span> after setting the data and it did, indeed, change.</p>
-<p>Finally, let's <span class="codefrag command">delete</span> the node by issuing:
-      </p>
-<pre class="code">
-
-[zkshell: 16] delete /zk_test
-[zkshell: 17] ls /
-[zookeeper]
-[zkshell: 18]
-</pre>
-<p>That's it for now.  To explore more, continue with the rest of this document and see the <a href="zookeeperProgrammers.html">Programmer's Guide</a>. </p>
-<a name="sc_ProgrammingToZooKeeper"></a>
-<h3 class="h4">Programming to ZooKeeper</h3>
-<p>ZooKeeper has a Java bindings and C bindings. They are
-      functionally equivalent. The C bindings exist in two variants: single
-      threaded and multi-threaded. These differ only in how the messaging loop
-      is done. For more information, see the <a href="zookeeperProgrammers.html#ch_programStructureWithExample">Programming
-      Examples in the ZooKeeper Programmer's Guide</a> for
-      sample code using of the different APIs.</p>
-<a name="sc_RunningReplicatedZooKeeper"></a>
-<h3 class="h4">Running Replicated ZooKeeper</h3>
-<p>Running ZooKeeper in standalone mode is convenient for evaluation,
-      some development, and testing. But in production, you should run
-      ZooKeeper in replicated mode. A replicated group of servers in the same
-      application is called a <em>quorum</em>, and in replicated
-      mode, all servers in the quorum have copies of the same configuration
-      file.</p>
-<div class="note">
-<div class="label">Note</div>
-<div class="content">
-      
-<p>
-         For replicated mode, a minimum of three servers are required,
-         and it is strongly recommended that you have an odd number of
-         servers. If you only have two servers, then you are in a
-         situation where if one of them fails, there are not enough
-         machines to form a majority quorum. Two servers is inherently
-         <strong>less</strong>
-         stable than a single server, because there are two single
-         points of failure.
-      </p>
-   
-</div>
-</div>
-<p>
-      The required
-      <strong>conf/zoo.cfg</strong>
-      file for replicated mode is similar to the one used in standalone
-      mode, but with a few differences. Here is an example:
-   </p>
-<pre class="code">
-tickTime=2000
-dataDir=/var/lib/zookeeper
-clientPort=2181
-initLimit=5
-syncLimit=2
-server.1=zoo1:2888:3888
-server.2=zoo2:2888:3888
-server.3=zoo3:2888:3888
-</pre>
-<p>The new entry, <strong>initLimit</strong> is
-      timeouts ZooKeeper uses to limit the length of time the ZooKeeper
-      servers in quorum have to connect to a leader. The entry <strong>syncLimit</strong> limits how far out of date a server can
-      be from a leader.</p>
-<p>With both of these timeouts, you specify the unit of time using
-      <strong>tickTime</strong>. In this example, the timeout
-      for initLimit is 5 ticks at 2000 milleseconds a tick, or 10
-      seconds.</p>
-<p>The entries of the form <em>server.X</em> list the
-      servers that make up the ZooKeeper service. When the server starts up,
-      it knows which server it is by looking for the file
-      <em>myid</em> in the data directory. That file has the 
-      contains the server number, in ASCII.</p>
-<p>Finally, note the two port numbers after each server
-       name: " 2888" and "3888". Peers use the former port to connect
-       to other peers. Such a connection is necessary so that peers
-       can communicate, for example, to agree upon the order of
-       updates. More specifically, a ZooKeeper server uses this port
-       to connect followers to the leader. When a new leader arises, a
-       follower opens a TCP connection to the leader using this
-       port. Because the default leader election also uses TCP, we
-       currently require another port for leader election. This is the
-       second port in the server entry.
-       </p>
-<div class="note">
-<div class="label">Note</div>
-<div class="content">
-        
-<p>If you want to test multiple servers on a single
-        machine, specify the servername
-        as <em>localhost</em> with unique quorum &amp;
-        leader election ports (i.e. 2888:3888, 2889:3889, 2890:3890 in
-        the example above) for each server.X in that server's config
-        file. Of course separate <em>dataDir</em>s and
-        distinct <em>clientPort</em>s are also necessary
-        (in the above replicated example, running on a
-        single <em>localhost</em>, you would still have
-        three config files).</p>
-        
-<p>Please be aware that setting up multiple servers on a single
-            machine will not create any redundancy. If something were to
-            happen which caused the machine to die, all of the zookeeper
-            servers would be offline. Full redundancy requires that each
-            server have its own machine. It must be a completely separate
-            physical server. Multiple virtual machines on the same physical
-            host are still vulnerable to the complete failure of that host.</p>
-      
-</div>
-</div>
-<a name="Other+Optimizations"></a>
-<h3 class="h4">Other Optimizations</h3>
-<p>There are a couple of other configuration parameters that can
-      greatly increase performance:</p>
-<ul>
-        
-<li>
-          
-<p>To get low latencies on updates it is important to
-          have a dedicated transaction log directory. By default
-          transaction logs are put in the same directory as the data
-          snapshots and <em>myid</em> file. The dataLogDir
-          parameters indicates a different directory to use for the
-          transaction logs.</p>
-        
-</li>
-
-        
-<li>
-          
-<p>
-<em>[tbd: what is the other config param?]</em>
-</p>
-        
-</li>
-      
-</ul>
-</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>

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/e5fc1228/docs/zookeeperStarted.pdf
----------------------------------------------------------------------
diff --git a/docs/zookeeperStarted.pdf b/docs/zookeeperStarted.pdf
deleted file mode 100644
index 4e8ae7e..0000000
Binary files a/docs/zookeeperStarted.pdf and /dev/null differ

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/e5fc1228/docs/zookeeperTutorial.html
----------------------------------------------------------------------
diff --git a/docs/zookeeperTutorial.html b/docs/zookeeperTutorial.html
deleted file mode 100644
index 2c8e720..0000000
--- a/docs/zookeeperTutorial.html
+++ /dev/null
@@ -1,925 +0,0 @@
-<!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>Programming with ZooKeeper - A basic tutorial</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.6 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="menupage">
-<div class="menupagetitle">Barrier and Queue Tutorial</div>
-</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">Admin &amp; Ops</div>
-<div id="menu_1.3" 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 class="menuitem">
-<a href="zookeeperReconfig.html">Dynamic Reconfiguration</a>
-</div>
-</div>
-<div onclick="SwitchMenu('menu_1.4', 'skin/')" id="menu_1.4Title" class="menutitle">Contributor</div>
-<div id="menu_1.4" class="menuitemgroup">
-<div class="menuitem">
-<a href="zookeeperInternals.html">ZooKeeper Internals</a>
-</div>
-</div>
-<div onclick="SwitchMenu('menu_1.5', 'skin/')" id="menu_1.5Title" class="menutitle">Miscellaneous</div>
-<div id="menu_1.5" 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="zookeeperTutorial.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
-        PDF</a>
-</div>
-<h1>Programming with ZooKeeper - A basic tutorial</h1>
-<div id="front-matter">
-<div id="minitoc-area">
-<ul class="minitoc">
-<li>
-<a href="#ch_Introduction">Introduction</a>
-</li>
-<li>
-<a href="#sc_barriers">Barriers</a>
-</li>
-<li>
-<a href="#sc_producerConsumerQueues">Producer-Consumer Queues</a>
-</li>
-<li>
-<a href="#Complete+example">Complete example</a>
-<ul class="minitoc">
-<li>
-<a href="#Queue+test">Queue test</a>
-</li>
-<li>
-<a href="#Barrier+test">Barrier test</a>
-</li>
-<li>
-<a href="#sc_sourceListing">Source Listing</a>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-  
-
-  
-
-  
-<a name="ch_Introduction"></a>
-<h2 class="h3">Introduction</h2>
-<div class="section">
-<p>In this tutorial, we show simple implementations of barriers and 
-    producer-consumer queues using ZooKeeper. We call the respective classes Barrier and Queue. 
-    These examples assume that you have at least one ZooKeeper server running.</p>
-<p>Both primitives use the following common excerpt of code:</p>
-<pre class="code">
-    static ZooKeeper zk = null;
-    static Integer mutex;
-
-    String root;
-
-    SyncPrimitive(String address) {
-        if(zk == null){
-            try {
-                System.out.println("Starting ZK:");
-                zk = new ZooKeeper(address, 3000, this);
-                mutex = new Integer(-1);
-                System.out.println("Finished starting ZK: " + zk);
-            } catch (IOException e) {
-                System.out.println(e.toString());
-                zk = null;
-            }
-        }
-    }
-
-    synchronized public void process(WatchedEvent event) {
-        synchronized (mutex) {
-            mutex.notify();
-        }
-    }
-</pre>
-<p>Both classes extend SyncPrimitive. In this way, we execute steps that are 
-common to all primitives in the constructor of SyncPrimitive. To keep the examples 
-simple, we create a ZooKeeper object the first time we instantiate either a barrier 
-object or a queue object, and we declare a static variable that is a reference 
-to this object. The subsequent instances of Barrier and Queue check whether a 
-ZooKeeper object exists. Alternatively, we could have the application creating a
-ZooKeeper object and passing it to the constructor of Barrier and Queue.</p>
-<p>
-We use the process() method to process notifications triggered due to watches. 
-In the following discussion, we present code that sets watches. A watch is internal 
-structure that enables ZooKeeper to notify a client of a change to a node. For example, 
-if a client is waiting for other clients to leave a barrier, then it can set a watch and 
-wait for modifications to a particular node, which can indicate that it is the end of the wait. 
-This point becomes clear once we go over the examples.
-</p>
-</div>
-   
- 
-<a name="sc_barriers"></a>
-<h2 class="h3">Barriers</h2>
-<div class="section">
-<p>
- A barrier is a primitive that enables a group of processes to synchronize the 
- beginning and the end of a computation. The general idea of this implementation 
- is to have a barrier node that serves the purpose of being a parent for individual 
- process nodes. Suppose that we call the barrier node "/b1". Each process "p" then 
- creates a node "/b1/p". Once enough processes have created their corresponding 
- nodes, joined processes can start the computation.
- </p>
-<p>In this example, each process instantiates a Barrier object, and its constructor takes as parameters:</p>
-<ul>
-<li>
-<p>the address of a ZooKeeper server (e.g., "zoo1.foo.com:2181")</p>
-</li>
-
-<li>
-<p>the path of the barrier node on ZooKeeper (e.g., "/b1")</p>
-</li>
-
-<li>
-<p>the size of the group of processes</p>
-</li>
-
-</ul>
-<p>The constructor of Barrier passes the address of the Zookeeper server to the 
-constructor of the parent class. The parent class creates a ZooKeeper instance if 
-one does not exist. The constructor of Barrier then creates a 
-barrier node on ZooKeeper, which is the parent node of all process nodes, and 
-we call root (<strong>Note:</strong> This is not the ZooKeeper root "/").</p>
-<pre class="code">
-        /**
-         * Barrier constructor
-         *
-         * @param address
-         * @param root
-         * @param size
-         */
-        Barrier(String address, String root, int size) {
-            super(address);
-            this.root = root;
-            this.size = size;
-
-            // Create barrier node
-            if (zk != null) {
-                try {
-                    Stat s = zk.exists(root, false);
-                    if (s == null) {
-                        zk.create(root, new byte[0], Ids.OPEN_ACL_UNSAFE,
-                                CreateMode.PERSISTENT);
-                    }
-                } catch (KeeperException e) {
-                    System.out
-                            .println("Keeper exception when instantiating queue: "
-                                    + e.toString());
-                } catch (InterruptedException e) {
-                    System.out.println("Interrupted exception");
-                }
-            }
-
-            // My node name
-            try {
-                name = new String(InetAddress.getLocalHost().getCanonicalHostName().toString());
-            } catch (UnknownHostException e) {
-                System.out.println(e.toString());
-            }
-
-        }
-</pre>
-<p>
-To enter the barrier, a process calls enter(). The process creates a node under 
-the root to represent it, using its host name to form the node name. It then wait 
-until enough processes have entered the barrier. A process does it by checking 
-the number of children the root node has with "getChildren()", and waiting for 
-notifications in the case it does not have enough. To receive a notification when 
-there is a change to the root node, a process has to set a watch, and does it 
-through the call to "getChildren()". In the code, we have that "getChildren()" 
-has two parameters. The first one states the node to read from, and the second is
-a boolean flag that enables the process to set a watch. In the code the flag is true.
-</p>
-<pre class="code">
-        /**
-         * Join barrier
-         *
-         * @return
-         * @throws KeeperException
-         * @throws InterruptedException
-         */
-
-        boolean enter() throws KeeperException, InterruptedException{
-            zk.create(root + "/" + name, new byte[0], Ids.OPEN_ACL_UNSAFE,
-                    CreateMode.EPHEMERAL_SEQUENTIAL);
-            while (true) {
-                synchronized (mutex) {
-                    List&lt;String&gt; list = zk.getChildren(root, true);
-
-                    if (list.size() &lt; size) {
-                        mutex.wait();
-                    } else {
-                        return true;
-                    }
-                }
-            }
-        }
-</pre>
-<p>
-Note that enter() throws both KeeperException and InterruptedException, so it is 
-the responsibility of the application to catch and handle such exceptions.</p>
-<p>
-Once the computation is finished, a process calls leave() to leave the barrier. 
-First it deletes its corresponding node, and then it gets the children of the root 
-node. If there is at least one child, then it waits for a notification (obs: note 
-that the second parameter of the call to getChildren() is true, meaning that 
-ZooKeeper has to set a watch on the the root node). Upon reception of a notification, 
-it checks once more whether the root node has any children.</p>
-<pre class="code">
-        /**
-         * Wait until all reach barrier
-         *
-         * @return
-         * @throws KeeperException
-         * @throws InterruptedException
-         */
-
-        boolean leave() throws KeeperException, InterruptedException{
-            zk.delete(root + "/" + name, 0);
-            while (true) {
-                synchronized (mutex) {
-                    List&lt;String&gt; list = zk.getChildren(root, true);
-                        if (list.size() &gt; 0) {
-                            mutex.wait();
-                        } else {
-                            return true;
-                        }
-                    }
-                }
-        }
-    }
-</pre>
-</div>
-
-<a name="sc_producerConsumerQueues"></a>
-<h2 class="h3">Producer-Consumer Queues</h2>
-<div class="section">
-<p>
-A producer-consumer queue is a distributed data structure that groups of processes 
-use to generate and consume items. Producer processes create new elements and add 
-them to the queue. Consumer processes remove elements from the list, and process them. 
-In this implementation, the elements are simple integers. The queue is represented 
-by a root node, and to add an element to the queue, a producer process creates a new node, 
-a child of the root node.
-</p>
-<p>
-The following excerpt of code corresponds to the constructor of the object. As 
-with Barrier objects, it first calls the constructor of the parent class, SyncPrimitive, 
-that creates a ZooKeeper object if one doesn't exist. It then verifies if the root 
-node of the queue exists, and creates if it doesn't.
-</p>
-<pre class="code">
-        /**
-         * Constructor of producer-consumer queue
-         *
-         * @param address
-         * @param name
-         */
-        Queue(String address, String name) {
-            super(address);
-            this.root = name;
-            // Create ZK node name
-            if (zk != null) {
-                try {
-                    Stat s = zk.exists(root, false);
-                    if (s == null) {
-                        zk.create(root, new byte[0], Ids.OPEN_ACL_UNSAFE,
-                                CreateMode.PERSISTENT);
-                    }
-                } catch (KeeperException e) {
-                    System.out
-                            .println("Keeper exception when instantiating queue: "
-                                    + e.toString());
-                } catch (InterruptedException e) {
-                    System.out.println("Interrupted exception");
-                }
-            }
-        }
-</pre>
-<p>
-A producer process calls "produce()" to add an element to the queue, and passes 
-an integer as an argument. To add an element to the queue, the method creates a 
-new node using "create()", and uses the SEQUENCE flag to instruct ZooKeeper to 
-append the value of the sequencer counter associated to the root node. In this way, 
-we impose a total order on the elements of the queue, thus guaranteeing that the 
-oldest element of the queue is the next one consumed.
-</p>
-<pre class="code">
-        /**
-         * Add element to the queue.
-         *
-         * @param i
-         * @return
-         */
-
-        boolean produce(int i) throws KeeperException, InterruptedException{
-            ByteBuffer b = ByteBuffer.allocate(4);
-            byte[] value;
-
-            // Add child with value i
-            b.putInt(i);
-            value = b.array();
-            zk.create(root + "/element", value, Ids.OPEN_ACL_UNSAFE,
-                        CreateMode.PERSISTENT_SEQUENTIAL);
-
-            return true;
-        }
-</pre>
-<p>
-To consume an element, a consumer process obtains the children of the root node, 
-reads the node with smallest counter value, and returns the element. Note that 
-if there is a conflict, then one of the two contending processes won't be able to 
-delete the node and the delete operation will throw an exception.</p>
-<p>
-A call to getChildren() returns the list of children in lexicographic order. 
-As lexicographic order does not necessary follow the numerical order of the counter 
-values, we need to decide which element is the smallest. To decide which one has 
-the smallest counter value, we traverse the list, and remove the prefix "element" 
-from each one.</p>
-<pre class="code">
-        /**
-         * Remove first element from the queue.
-         *
-         * @return
-         * @throws KeeperException
-         * @throws InterruptedException
-         */
-        int consume() throws KeeperException, InterruptedException{
-            int retvalue = -1;
-            Stat stat = null;
-
-            // Get the first element available
-            while (true) {
-                synchronized (mutex) {
-                    List&lt;String&gt; list = zk.getChildren(root, true);
-                    if (list.size() == 0) {
-                        System.out.println("Going to wait");
-                        mutex.wait();
-                    } else {
-                        Integer min = new Integer(list.get(0).substring(7));
-                        for(String s : list){
-                            Integer tempValue = new Integer(s.substring(7));
-                            //System.out.println("Temporary value: " + tempValue);
-                            if(tempValue &lt; min) min = tempValue;
-                        }
-                        System.out.println("Temporary value: " + root + "/element" + min);
-                        byte[] b = zk.getData(root + "/element" + min,
-                                    false, stat);
-                        zk.delete(root + "/element" + min, 0);
-                        ByteBuffer buffer = ByteBuffer.wrap(b);
-                        retvalue = buffer.getInt();
-
-                        return retvalue;
-                    }
-                }
-            }
-        }
-    }
-</pre>
-</div>
-
-
-<a name="Complete+example"></a>
-<h2 class="h3">Complete example</h2>
-<div class="section">
-<p>
-In the following section you can find a complete command line application to demonstrate the above mentioned
-recipes. Use the following command to run it.
-</p>
-<pre class="code">
-ZOOBINDIR="[path_to_distro]/bin"
-. "$ZOOBINDIR"/zkEnv.sh
-java SyncPrimitive [Test Type] [ZK server] [No of elements] [Client type]
-</pre>
-<a name="Queue+test"></a>
-<h3 class="h4">Queue test</h3>
-<p>Start a producer to create 100 elements</p>
-<pre class="code">
-java SyncPrimitive qTest localhost 100 p
-</pre>
-<p>Start a consumer to consume 100 elements</p>
-<pre class="code">
-java SyncPrimitive qTest localhost 100 c
-</pre>
-<a name="Barrier+test"></a>
-<h3 class="h4">Barrier test</h3>
-<p>Start a barrier with 2 participants (start as many times as many participants you'd like to enter)</p>
-<pre class="code">
-java SyncPrimitive bTest localhost 2
-</pre>
-<a name="sc_sourceListing"></a>
-<h3 class="h4">Source Listing</h3>
-<div class="note example">
-<div class="label">SyncPrimitive.Java</div>
-<div class="content">
-
-<title>SyncPrimitive.Java</title>
-
-<pre class="code">
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.nio.ByteBuffer;
-import java.util.List;
-import java.util.Random;
-
-import org.apache.zookeeper.CreateMode;
-import org.apache.zookeeper.KeeperException;
-import org.apache.zookeeper.WatchedEvent;
-import org.apache.zookeeper.Watcher;
-import org.apache.zookeeper.ZooKeeper;
-import org.apache.zookeeper.ZooDefs.Ids;
-import org.apache.zookeeper.data.Stat;
-
-public class SyncPrimitive implements Watcher {
-
-    static ZooKeeper zk = null;
-    static Integer mutex;
-
-    String root;
-
-    SyncPrimitive(String address) {
-        if(zk == null){
-            try {
-                System.out.println("Starting ZK:");
-                zk = new ZooKeeper(address, 3000, this);
-                mutex = new Integer(-1);
-                System.out.println("Finished starting ZK: " + zk);
-            } catch (IOException e) {
-                System.out.println(e.toString());
-                zk = null;
-            }
-        }
-        //else mutex = new Integer(-1);
-    }
-
-    synchronized public void process(WatchedEvent event) {
-        synchronized (mutex) {
-            //System.out.println("Process: " + event.getType());
-            mutex.notify();
-        }
-    }
-
-    /**
-     * Barrier
-     */
-    static public class Barrier extends SyncPrimitive {
-        int size;
-        String name;
-
-        /**
-         * Barrier constructor
-         *
-         * @param address
-         * @param root
-         * @param size
-         */
-        Barrier(String address, String root, int size) {
-            super(address);
-            this.root = root;
-            this.size = size;
-
-            // Create barrier node
-            if (zk != null) {
-                try {
-                    Stat s = zk.exists(root, false);
-                    if (s == null) {
-                        zk.create(root, new byte[0], Ids.OPEN_ACL_UNSAFE,
-                                CreateMode.PERSISTENT);
-                    }
-                } catch (KeeperException e) {
-                    System.out
-                            .println("Keeper exception when instantiating queue: "
-                                    + e.toString());
-                } catch (InterruptedException e) {
-                    System.out.println("Interrupted exception");
-                }
-            }
-
-            // My node name
-            try {
-                name = new String(InetAddress.getLocalHost().getCanonicalHostName().toString());
-            } catch (UnknownHostException e) {
-                System.out.println(e.toString());
-            }
-
-        }
-
-        /**
-         * Join barrier
-         *
-         * @return
-         * @throws KeeperException
-         * @throws InterruptedException
-         */
-
-        boolean enter() throws KeeperException, InterruptedException{
-            zk.create(root + "/" + name, new byte[0], Ids.OPEN_ACL_UNSAFE,
-                    CreateMode.EPHEMERAL_SEQUENTIAL);
-            while (true) {
-                synchronized (mutex) {
-                    List&lt;String&gt; list = zk.getChildren(root, true);
-
-                    if (list.size() &lt; size) {
-                        mutex.wait();
-                    } else {
-                        return true;
-                    }
-                }
-            }
-        }
-
-        /**
-         * Wait until all reach barrier
-         *
-         * @return
-         * @throws KeeperException
-         * @throws InterruptedException
-         */
-
-        boolean leave() throws KeeperException, InterruptedException{
-            zk.delete(root + "/" + name, 0);
-            while (true) {
-                synchronized (mutex) {
-                    List&lt;String&gt; list = zk.getChildren(root, true);
-                        if (list.size() &gt; 0) {
-                            mutex.wait();
-                        } else {
-                            return true;
-                        }
-                    }
-                }
-        }
-    }
-
-    /**
-     * Producer-Consumer queue
-     */
-    static public class Queue extends SyncPrimitive {
-
-        /**
-         * Constructor of producer-consumer queue
-         *
-         * @param address
-         * @param name
-         */
-        Queue(String address, String name) {
-            super(address);
-            this.root = name;
-            // Create ZK node name
-            if (zk != null) {
-                try {
-                    Stat s = zk.exists(root, false);
-                    if (s == null) {
-                        zk.create(root, new byte[0], Ids.OPEN_ACL_UNSAFE,
-                                CreateMode.PERSISTENT);
-                    }
-                } catch (KeeperException e) {
-                    System.out
-                            .println("Keeper exception when instantiating queue: "
-                                    + e.toString());
-                } catch (InterruptedException e) {
-                    System.out.println("Interrupted exception");
-                }
-            }
-        }
-
-        /**
-         * Add element to the queue.
-         *
-         * @param i
-         * @return
-         */
-
-        boolean produce(int i) throws KeeperException, InterruptedException{
-            ByteBuffer b = ByteBuffer.allocate(4);
-            byte[] value;
-
-            // Add child with value i
-            b.putInt(i);
-            value = b.array();
-            zk.create(root + "/element", value, Ids.OPEN_ACL_UNSAFE,
-                        CreateMode.PERSISTENT_SEQUENTIAL);
-
-            return true;
-        }
-
-
-        /**
-         * Remove first element from the queue.
-         *
-         * @return
-         * @throws KeeperException
-         * @throws InterruptedException
-         */
-        int consume() throws KeeperException, InterruptedException{
-            int retvalue = -1;
-            Stat stat = null;
-
-            // Get the first element available
-            while (true) {
-                synchronized (mutex) {
-                    List&lt;String&gt; list = zk.getChildren(root, true);
-                    if (list.size() == 0) {
-                        System.out.println("Going to wait");
-                        mutex.wait();
-                    } else {
-                        Integer min = new Integer(list.get(0).substring(7));
-                        String minNode = list.get(0);
-                        for(String s : list){
-                            Integer tempValue = new Integer(s.substring(7));
-                            //System.out.println("Temporary value: " + tempValue);
-                            if(tempValue &lt; min) {
-                                min = tempValue;
-                                minNode = s;
-                            }
-                        }
-                        System.out.println("Temporary value: " + root + "/" + minNode);
-                        byte[] b = zk.getData(root + "/" + minNode,
-                        false, stat);
-                        zk.delete(root + "/" + minNode, 0);
-                        ByteBuffer buffer = ByteBuffer.wrap(b);
-                        retvalue = buffer.getInt();
-
-                        return retvalue;
-                    }
-                }
-            }
-        }
-    }
-
-    public static void main(String args[]) {
-        if (args[0].equals("qTest"))
-            queueTest(args);
-        else
-            barrierTest(args);
-
-    }
-
-    public static void queueTest(String args[]) {
-        Queue q = new Queue(args[1], "/app1");
-
-        System.out.println("Input: " + args[1]);
-        int i;
-        Integer max = new Integer(args[2]);
-
-        if (args[3].equals("p")) {
-            System.out.println("Producer");
-            for (i = 0; i &lt; max; i++)
-                try{
-                    q.produce(10 + i);
-                } catch (KeeperException e){
-
-                } catch (InterruptedException e){
-
-                }
-        } else {
-            System.out.println("Consumer");
-
-            for (i = 0; i &lt; max; i++) {
-                try{
-                    int r = q.consume();
-                    System.out.println("Item: " + r);
-                } catch (KeeperException e){
-                    i--;
-                } catch (InterruptedException e){
-
-                }
-            }
-        }
-    }
-
-    public static void barrierTest(String args[]) {
-        Barrier b = new Barrier(args[1], "/b1", new Integer(args[2]));
-        try{
-            boolean flag = b.enter();
-            System.out.println("Entered barrier: " + args[2]);
-            if(!flag) System.out.println("Error when entering the barrier");
-        } catch (KeeperException e){
-
-        } catch (InterruptedException e){
-
-        }
-
-        // Generate random integer
-        Random rand = new Random();
-        int r = rand.nextInt(100);
-        // Loop for rand iterations
-        for (int i = 0; i &lt; r; i++) {
-            try {
-                Thread.sleep(100);
-            } catch (InterruptedException e) {
-
-            }
-        }
-        try{
-            b.leave();
-        } catch (KeeperException e){
-
-        } catch (InterruptedException e){
-
-        }
-        System.out.println("Left barrier");
-    }
-}
-</pre>
-</div>
-</div>
-</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>

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/e5fc1228/docs/zookeeperTutorial.pdf
----------------------------------------------------------------------
diff --git a/docs/zookeeperTutorial.pdf b/docs/zookeeperTutorial.pdf
deleted file mode 100644
index 4506d26..0000000
Binary files a/docs/zookeeperTutorial.pdf and /dev/null differ

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/e5fc1228/zookeeper-docs/forrest.properties
----------------------------------------------------------------------
diff --git a/zookeeper-docs/forrest.properties b/zookeeper-docs/forrest.properties
deleted file mode 100644
index 70cf81d..0000000
--- a/zookeeper-docs/forrest.properties
+++ /dev/null
@@ -1,109 +0,0 @@
-# Copyright 2002-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-##############
-# Properties used by forrest.build.xml for building the website
-# These are the defaults, un-comment them if you need to change them.
-##############
-
-# Prints out a summary of Forrest settings for this project
-#forrest.echo=true 
-
-# Project name (used to name .war file)
-#project.name=my-project
-
-# Specifies name of Forrest skin to use
-#project.skin=tigris
-#project.skin=pelt
-
-# comma separated list, file:// is supported
-#forrest.skins.descriptors=http://forrest.apache.org/skins/skins.xml,file:///c:/myskins/skins.xml
-
-##############
-# behavioural properties
-#project.menu-scheme=tab_attributes
-#project.menu-scheme=directories
-
-##############
-# layout properties
-
-# Properties that can be set to override the default locations
-#
-# Parent properties must be set. This usually means uncommenting
-# project.content-dir if any other property using it is uncommented
-
-#project.status=status.xml
-#project.content-dir=src/documentation
-project.configfile=${project.home}/src/documentation/conf/cli.xconf
-#project.raw-content-dir=${project.content-dir}/content
-#project.conf-dir=${project.content-dir}/conf
-#project.sitemap-dir=${project.content-dir}
-#project.xdocs-dir=${project.content-dir}/content/xdocs
-#project.resources-dir=${project.content-dir}/resources
-#project.stylesheets-dir=${project.resources-dir}/stylesheets
-#project.images-dir=${project.resources-dir}/images
-#project.schema-dir=${project.resources-dir}/schema
-#project.skins-dir=${project.content-dir}/skins
-#project.skinconf=${project.content-dir}/skinconf.xml
-#project.lib-dir=${project.content-dir}/lib
-#project.classes-dir=${project.content-dir}/classes
-#project.translations-dir=${project.content-dir}/translations
-
-##############
-# validation properties
-
-# This set of properties determine if validation is performed
-# Values are inherited unless overridden.
-# e.g. if forrest.validate=false then all others are false unless set to true.
-forrest.validate=true
-forrest.validate.xdocs=${forrest.validate}
-forrest.validate.skinconf=${forrest.validate}
-forrest.validate.stylesheets=${forrest.validate}
-forrest.validate.skins=${forrest.validate}
-forrest.validate.skins.stylesheets=${forrest.validate.skins}
-
-# Make Forrest work with JDK6
-forrest.validate.sitemap=false
-
-# *.failonerror=(true|false) - stop when an XML file is invalid
-forrest.validate.failonerror=true
-
-# *.excludes=(pattern) - comma-separated list of path patterns to not validate
-# e.g.
-#forrest.validate.xdocs.excludes=samples/subdir/**, samples/faq.xml
-#forrest.validate.xdocs.excludes=
-
-
-##############
-# General Forrest properties
-
-# The URL to start crawling from
-#project.start-uri=linkmap.html
-# Set logging level for messages printed to the console
-# (DEBUG, INFO, WARN, ERROR, FATAL_ERROR)
-#project.debuglevel=ERROR
-# Max memory to allocate to Java
-#forrest.maxmemory=64m
-# Any other arguments to pass to the JVM. For example, to run on an X-less
-# server, set to -Djava.awt.headless=true
-#forrest.jvmargs=
-# The bugtracking URL - the issue number will be appended
-#project.bugtracking-url=http://issues.apache.org/bugzilla/show_bug.cgi?id=
-#project.bugtracking-url=http://issues.apache.org/jira/browse/
-# The issues list as rss
-#project.issues-rss-url=
-#I18n Property only works for the "forrest run" target.
-#project.i18n=true
-
-project.required.plugins=org.apache.forrest.plugin.output.pdf,org.apache.forrest.plugin.input.simplifiedDocbook

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/e5fc1228/zookeeper-docs/src/documentation/README.txt
----------------------------------------------------------------------
diff --git a/zookeeper-docs/src/documentation/README.txt b/zookeeper-docs/src/documentation/README.txt
deleted file mode 100644
index 9bc261b..0000000
--- a/zookeeper-docs/src/documentation/README.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-This is the base documentation directory.
-
-skinconf.xml     # This file customizes Forrest for your project. In it, you
-                 # tell forrest the project name, logo, copyright info, etc
-
-sitemap.xmap     # Optional. This sitemap is consulted before all core sitemaps.
-                 # See http://forrest.apache.org/docs/project-sitemap.html

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/e5fc1228/zookeeper-docs/src/documentation/TODO.txt
----------------------------------------------------------------------
diff --git a/zookeeper-docs/src/documentation/TODO.txt b/zookeeper-docs/src/documentation/TODO.txt
deleted file mode 100644
index 84e7dfa..0000000
--- a/zookeeper-docs/src/documentation/TODO.txt
+++ /dev/null
@@ -1,227 +0,0 @@
-This is a running list of todo documentation items. Feel free
-to add to the list or take on an item as you wish (in the form
-of a JIRA patch of course).
--------------------------------------------------------------
-
-recipes.xml:110:    
-[maybe an illustration would be nice for each recipe?]
-
-recipes.xml:167:                     
-"wait for each watch event". [how do you wait?]
-
-recipes.xml:457:          
-<remark>[tbd: myabe helpful to indicate which step this refers to?]</remark>
-
-zookeeperAdmin.xml:77:      
-because requires a majority <remark>[tbd: why?]</remark>, it is best to use...
-
-zookeeperAdmin.xml:112:   
- <screen>$yinst -i jdk-1.6.0.00_3 -br test  <remark>[y! prop - replace with open equiv]</remark></screen>
- 
-zookeeperAdmin.xml:99:         
-- use a maximum heap size of 3GB for a 4GB machine.  <remark>[tbd:  where would they do this? Environment variable, etc?]</remark>
-
-zookeeperAdmin.xml:120
-<screen>$ yinst install -nostart zookeeper_server <remark>[Y! prop - replace with open eq]</remark></screen>
-
-zookeeperAdmin.xml:171:              
-In Java, you can run the following command to execute simple operations:<remark> [tbd: also, maybe give some of those simple operations?]
-
-zookeeperAdmin.xml:194:          
-Running either program gives you a shell in which to execute simple file-system-like operations. <remark>[tbd: again, sample
-          operations?]
-
-zookeeperAdmin.xml:252:       
-If servers use different configuration files,
-care must be taken to ensure that the list of servers in all of the
-standard form, with legal values, etc]</remark>
-
-zookeeperAdmin.xml:408:
-(Note: The system property has no zookeeper
-prefix, and the configuration variable name is different from
-the system property. Yes - it's not consistent, and it's
-annoying.<remark> [tbd: is there any explanation for
-this?]</remark>)
-		
-zookeeperAdmin.xml:445:               When the election algorithm is
-                "0" a UDP port with the same port number as the port listed in
-                the <emphasis role="bold">server.num</emphasis> option will be
-                used. <remark>[tbd: should that be <emphasis
-                role="bold">server.id</emphasis>? Also, why isn't server.id
-                documented anywhere?]</remark>
-		
-zookeeperAdmin.xml:481:                The default to this option is yes, which
-                means that a leader will accept client connections.
-                <remark>[tbd: how do you specifiy which server is the
-                leader?]</remark>
-		
-zookeeperAdmin.xml:495		When the server
-                starts up, it determines which server it is by looking for the
-                file <filename>myid</filename> in the data directory.<remark>
-                [tdb: should we mention somewhere about creating this file,
-                myid, in the setup procedure?]</remark>
-		
-zookeeperAdmin.xml:508:               [tbd: is the next sentence explanation an of what the
-                election port or is it a description of a special case?]
-                </remark>If you want to test multiple servers on a single
-                machine, the individual choices of electionPort for each
-                server can be defined in each server's config files using the
-                line electionPort=xxxx to avoid clashes.
-		
-zookeeperAdmin.xml:524:               If followers fall too far behind a
-                leader, they will be dropped. <remark>[tbd: is this a correct
-                rewording: if followers fall beyond this limit, they are
-                dropped?]</remark>
-		
-zookeeperAdmin.xml:551:               ZooKeeper will not require updates
-                to be synced to the media. <remark>[tbd: useful because...,
-                dangerous because...]</remark>
-		
-zookeeperAdmin.xml:580:                Skips ACL checks. <remark>[tbd: when? where?]</remark>
-                
-zookeeperAdmin.xml:649:        <remark>[tbd: Patrick, Ben, et al: I believe the Message Broker
-        team does perform routine monitoring of Zookeeper. But I might be
-        wrong. To your knowledge, is there any monitoring of a Zookeeper
-        deployment that will a Zookeeper sys admin will want to do, outside of
-        Yahoo?]</remark>
-	
-zookeeperAdmin.xml:755:            Also,
-            the server lists in each Zookeeper server configuration file
-            should be consistent with one another. <remark>[tbd: I'm assuming
-            this last part is true. Is it?]</remark>
-	    
-zookeeperAdmin.xml:812:     For best results, take note of the following list of good
-      Zookeeper practices. <remark>[tbd: I just threw this section in. Do we
-      have list that is is different from the "things to avoid"? If not, I can
-      easily remove this section.]</remark>
-      
-
-zookeeperOver.xml:162:      Ephemeral nodes are useful when you
-      want to implement <remark>[tbd]</remark>.
-      
-zookeeperOver.xml:174:     And if the
-      connection between the client and one of the Zoo Keeper servers is
-      broken, the client will receive a local notification. These can be used
-      to <remark>[tbd]</remark>
-
-zookeeperOver.xml:215:            <para>For more information on these (guarantees), and how they can be used, see
-      <remark>[tbd]</remark></para>
-      
-zookeeperOver.xml:294:           <para><xref linkend="fg_zkComponents" /> shows the high-level components
-      of the ZooKeeper service. With the exception of the request processor,
-      <remark>[tbd: where does the request processor live?]</remark> 
-      
-zookeeperOver.xml:298:      <para><xref linkend="fg_zkComponents" /> shows the high-level components
-      of the ZooKeeper service. With the exception of the request processor,
-     each of
-      the servers that make up the ZooKeeper service replicates its own copy
-      of each of components. <remark>[tbd: I changed the wording in this
-      sentence from the white paper. Can someone please make sure it is still
-      correct?]</remark>
-      
-zookeeperOver.xml:342:      The programming interface to ZooKeeper is deliberately simple.
-      With it, however, you can implement higher order operations, such as
-      synchronizations primitives, group membership, ownership, etc. Some
-      distributed applications have used it to: <remark>[tbd: add uses from
-      white paper and video presentation.]</remark> 
-      
-
-zookeeperProgrammers.xml:94:              <listitem>
-        <para><xref linkend="ch_programStructureWithExample" />
-        <remark>[tbd]</remark></para>
-      </listitem>
-      
-zookeeperProgrammers.xml:115:     Also,
-    the <ulink url="#ch_programStructureWithExample">Simple Programmming
-    Example</ulink> <remark>[tbd]</remark> is helpful for understand the basic
-    structure of a ZooKeeper client application.
-    
-zookeeperProgrammers.xml:142:      The following characters are not
-				allowed  because <remark>[tbd:
-				do we need reasons?]</remark> 
-
-zookeeperProgrammers.xml:172:     If
-      the version it supplies doesn't match the actual version of the data,
-      the update will fail. (This behavior can be overridden. For more
-      information see... )<remark>[tbd... reference here to the section
-      describing the special version number -1]</remark>
-      
-zookeeperProgrammers.xml:197:        More information about watches can be
-        found in the section 
-	<ulink url="recipes.html#sc_recipes_Locks">
-	Zookeeper Watches</ulink>.
-        <remark>[tbd: fix this link] [tbd: Ben there is note from to emphasize
-        that "it is queued". What is "it" and is what we have here
-        sufficient?]</remark></para>
-	
-zookeeperProgrammers.xml:335:    it will send the session id as a part of the connection handshake.
-    As a security measure, the server creates a password for the session id
-    that any ZooKeeper server can validate. <remark>[tbd: note from Ben:
-    "perhaps capability is a better word." need clarification on that.]
-    </remark>
-    
-zookeeperProgrammers.xml:601:              <ulink
-              url="recipes.html#sc_recipes_Locks">Locks</ulink>
-              <remark>[tbd:...]</remark> in <ulink
-              url="recipes.html">Zookeeper Recipes</ulink>.
-              <remark>[tbd:..]</remark>).</para>
-	      
-zookeeperProgrammers.xml:766:             <para>See INSTALL for general information about running
-              <emphasis role="bold">configure</emphasis>. <remark>[tbd: what
-              is INSTALL? a directory? a file?]</remark></para>
-	     
-	      
-	      
-zookeeperProgrammers.xml:813:                <para>To verify that the node's been created:</para>
-
-        <para>You should see a list of node who are children of the root node
-        "/".</para><remark>[tbd: document all the cli commands (I think this is ben's comment)
-
-zookeeperProgrammers.xml:838:                <para>Refer to <xref linkend="ch_programStructureWithExample"/>for examples of usage in Java and C.
-        <remark>[tbd]</remark></para>
-
-zookeeperProgrammers.xml 847: <remark>[tbd: This is a new section. The below
-    is just placeholder. Eventually, a subsection on each of those operations, with a little
-    bit of illustrative code for each op.] </remark>
-    
-zookeeperProgrammers.xml:915:    Program Structure, with Simple Example</title>
-
-zookeeperProgrammers.xml:999:        <term>ZooKeeper Whitepaper <remark>[tbd: find url]</remark></term>
-
-zookeeperProgrammers.xml:1008:        <term>API Reference <remark>[tbd: find url]</remark></term>
-
-zookeeperProgrammers.xml:1062:        [tbd]</remark></term><listitem>
-          <para>Any other good sources anyone can think of...</para>
-        </listitem>
-
-zookeeperStarted.xml:73:            <para>[tbd: should we start w/ a word here about were to get the source,
-      exactly what to download, how to unpack it, and where to put it? Also,
-      does the user need to be in sudo, or can they be under their regular
-      login?]</para>
-      
-zookeeperStarted.xml:84:      <para>This should generate a JAR file called zookeeper.jar. To start
-      Zookeeper, compile and run zookeeper.jar. <emphasis>[tbd, some more
-      instruction here. Perhaps a command line? Are these two steps or
-      one?]</emphasis></para>
-      
-zookeeperStarted.xml:139:      <para>ZooKeeper logs messages using log4j -- more detail available in
-      the <ulink url="zookeeperProgrammers.html#Logging">Logging</ulink>
-      section of the Programmer's Guide.<remark revision="include_tbd">[tbd:
-      real reference needed]</remark> 
-      
-zookeeperStarted.xml:201:      The C bindings exist in two variants: single
-      threaded and multi-threaded. These differ only in how the messaging loop
-      is done. <remark>[tbd: what is the messaging loop? Do we talk about it
-      anywyhere? is this too much info for a getting started guide?]</remark>
-      
-zookeeperStarted.xml:217:      The entry <emphasis
-      role="bold">syncLimit</emphasis> limits how far out of date a server can
-      be from a leader. [TBD: someone please verify that the previous is
-      true.] 
-
-zookeeperStarted.xml:232:	These are the "electionPort" numbers of the servers (as opposed to
-      clientPorts), that is ports for <remark>[tbd: feedback need: what are
-      these ports, exactly?]
-      
-zookeeperStarted.xml:258:          <remark>[tbd: what is the other config param?
-          (I believe two are mentioned above.)]</remark>

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/e5fc1228/zookeeper-docs/src/documentation/classes/CatalogManager.properties
----------------------------------------------------------------------
diff --git a/zookeeper-docs/src/documentation/classes/CatalogManager.properties b/zookeeper-docs/src/documentation/classes/CatalogManager.properties
deleted file mode 100644
index ac060b9..0000000
--- a/zookeeper-docs/src/documentation/classes/CatalogManager.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 2002-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-#=======================================================================
-# CatalogManager.properties
-#
-# This is the default properties file for Apache Forrest.
-# This facilitates local configuration of application-specific catalogs.
-#
-# See the Apache Forrest documentation:
-# http://forrest.apache.org/docs/your-project.html
-# http://forrest.apache.org/docs/validation.html
-
-# verbosity ... level of messages for status/debug
-# See forrest/src/core/context/WEB-INF/cocoon.xconf
-
-# catalogs ... list of additional catalogs to load
-#  (Note that Apache Forrest will automatically load its own default catalog
-#  from src/core/context/resources/schema/catalog.xcat)
-# use full pathnames
-# pathname separator is always semi-colon (;) regardless of operating system
-# directory separator is always slash (/) regardless of operating system
-#
-#catalogs=/home/me/forrest/my-site/src/documentation/resources/schema/catalog.xcat
-catalogs=
-

http://git-wip-us.apache.org/repos/asf/zookeeper/blob/e5fc1228/zookeeper-docs/src/documentation/conf/cli.xconf
----------------------------------------------------------------------
diff --git a/zookeeper-docs/src/documentation/conf/cli.xconf b/zookeeper-docs/src/documentation/conf/cli.xconf
deleted file mode 100644
index c671340..0000000
--- a/zookeeper-docs/src/documentation/conf/cli.xconf
+++ /dev/null
@@ -1,328 +0,0 @@
-<?xml version="1.0"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<!--+
-    |  This is the Apache Cocoon command line configuration file.
-    |  Here you give the command line interface details of where
-    |  to find various aspects of your Cocoon installation.
-    |
-    |  If you wish, you can also use this file to specify the URIs
-    |  that you wish to generate.
-    |
-    |  The current configuration information in this file is for
-    |  building the Cocoon documentation. Therefore, all links here
-    |  are relative to the build context dir, which, in the build.xml
-    |  file, is set to ${build.context}
-    |
-    |  Options:
-    |    verbose:            increase amount of information presented
-    |                        to standard output (default: false)
-    |    follow-links:       whether linked pages should also be
-    |                        generated (default: true)
-    |    precompile-only:    precompile sitemaps and XSP pages, but
-    |                        do not generate any pages (default: false)
-    |    confirm-extensions: check the mime type for the generated page
-    |                        and adjust filename and links extensions
-    |                        to match the mime type
-    |                        (e.g. text/html->.html)
-    |
-    |  Note: Whilst using an xconf file to configure the Cocoon
-    |        Command Line gives access to more features, the use of
-    |        command line parameters is more stable, as there are
-    |        currently plans to improve the xconf format to allow
-    |        greater flexibility. If you require a stable and
-    |        consistent method for accessing the CLI, it is recommended
-    |        that you use the command line parameters to configure
-    |        the CLI. See documentation at:
-    |        http://cocoon.apache.org/2.1/userdocs/offline/
-    |        http://wiki.apache.org/cocoon/CommandLine
-    |
-    +-->
-
-<cocoon verbose="true"
-        follow-links="true"
-        precompile-only="false"
-        confirm-extensions="false">
-
-   <!--+
-       |  The context directory is usually the webapp directory
-       |  containing the sitemap.xmap file.
-       |
-       |  The config file is the cocoon.xconf file.
-       |
-       |  The work directory is used by Cocoon to store temporary
-       |  files and cache files.
-       |
-       |  The destination directory is where generated pages will
-       |  be written (assuming the 'simple' mapper is used, see
-       |  below)
-       +-->
-   <context-dir>.</context-dir>
-   <config-file>WEB-INF/cocoon.xconf</config-file>
-   <work-dir>../tmp/cocoon-work</work-dir>
-   <dest-dir>../site</dest-dir>
-
-   <!--+
-       |  A checksum file can be used to store checksums for pages
-       |  as they are generated. When the site is next generated,
-       |  files will not be written if their checksum has not changed.
-       |  This means that it will be easier to detect which files
-       |  need to be uploaded to a server, using the timestamp.
-       |
-       |  The default path is relative to the core webapp directory.
-       |  An asolute path can be used.
-       +-->
-   <!--   <checksums-uri>build/work/checksums</checksums-uri>-->
-
-   <!--+
-       | Broken link reporting options:
-       |   Report into a text file, one link per line:
-       |     <broken-links type="text" report="filename"/>
-       |   Report into an XML file:
-       |     <broken-links type="xml" report="filename"/>
-       |   Ignore broken links (default):
-       |     <broken-links type="none"/>
-       |
-       |   Two attributes to this node specify whether a page should
-       |   be generated when an error has occurred. 'generate' specifies
-       |   whether a page should be generated (default: true) and
-       |   extension specifies an extension that should be appended
-       |   to the generated page's filename (default: none)
-       |
-       |   Using this, a quick scan through the destination directory
-       |   will show broken links, by their filename extension.
-       +-->
-   <broken-links type="xml"
-                 file="../brokenlinks.xml"
-                 generate="false"
-                 extension=".error"
-                 show-referrers="true"/>
-
-   <!--+
-       |  Load classes at startup. This is necessary for generating
-       |  from sites that use SQL databases and JDBC.
-       |  The <load-class> element can be repeated if multiple classes
-       |  are needed.
-       +-->
-   <!--
-   <load-class>org.firebirdsql.jdbc.Driver</load-class>
-   -->
-
-   <!--+
-       |  Configures logging.
-       |  The 'log-kit' parameter specifies the location of the log kit
-       |  configuration file (usually called logkit.xconf.
-       |
-       |  Logger specifies the logging category (for all logging prior
-       |  to other Cocoon logging categories taking over)
-       |
-       |  Available log levels are:
-       |    DEBUG:        prints all level of log messages.
-       |    INFO:         prints all level of log messages except DEBUG
-       |                  ones.
-       |    WARN:         prints all level of log messages except DEBUG
-       |                  and INFO ones.
-       |    ERROR:        prints all level of log messages except DEBUG,
-       |                  INFO and WARN ones.
-       |    FATAL_ERROR:  prints only log messages of this level
-       +-->
-   <!-- <logging log-kit="WEB-INF/logkit.xconf" logger="cli" level="ERROR" /> -->
-
-   <!--+
-       |  Specifies the filename to be appended to URIs that
-       |  refer to a directory (i.e. end with a forward slash).
-       +-->
-   <default-filename>index.html</default-filename>
-
-   <!--+
-       |  Specifies a user agent string to the sitemap when
-       |  generating the site.
-       |
-       |  A generic term for a web browser is "user agent". Any
-       |  user agent, when connecting to a web server, will provide
-       |  a string to identify itself (e.g. as Internet Explorer or
-       |  Mozilla). It is possible to have Cocoon serve different
-       |  content depending upon the user agent string provided by
-       |  the browser. If your site does this, then you may want to
-       |  use this <user-agent> entry to provide a 'fake' user agent
-       |  to Cocoon, so that it generates the correct version of your
-       |  site.
-       |
-       |  For most sites, this can be ignored.
-       +-->
-   <!--
-   <user-agent>Cocoon Command Line Environment 2.1</user-agent>
-   -->
-
-   <!--+
-       |  Specifies an accept string to the sitemap when generating
-       |  the site.
-       |  User agents can specify to an HTTP server what types of content
-       |  (by mime-type) they are able to receive. E.g. a browser may be
-       |  able to handle jpegs, but not pngs. The HTTP accept header
-       |  allows the server to take the browser's capabilities into account,
-       |  and only send back content that it can handle.
-       |
-       |  For most sites, this can be ignored.
-       +-->
-
-   <accept>*/*</accept>
-
-   <!--+
-       | Specifies which URIs should be included or excluded, according
-       | to wildcard patterns.
-       |
-       | These includes/excludes are only relevant when you are following
-       | links. A link URI must match an include pattern (if one is given)
-       | and not match an exclude pattern, if it is to be followed by
-       | Cocoon. It can be useful, for example, where there are links in
-       | your site to pages that are not generated by Cocoon, such as
-       | references to api-documentation.
-       |
-       | By default, all URIs are included. If both include and exclude
-       | patterns are specified, a URI is first checked against the
-       | include patterns, and then against the exclude patterns.
-       |
-       | Multiple patterns can be given, using muliple include or exclude
-       | nodes.
-       |
-       | The order of the elements is not significant, as only the first
-       | successful match of each category is used.
-       |
-       | Currently, only the complete source URI can be matched (including
-       | any URI prefix). Future plans include destination URI matching
-       | and regexp matching. If you have requirements for these, contact
-       | dev@cocoon.apache.org.
-       +-->
-
-   <exclude pattern="**/"/>
-   <exclude pattern="**apidocs**"/>
-   <exclude pattern="api/**"/>
-
-   <!-- ZOOKEEPER-2364 - we build our own release notes separately -->
-   <exclude pattern="releasenotes.**"/>
-
-<!--
-  This is a workaround for FOR-284 "link rewriting broken when
-  linking to xml source views which contain site: links".
-  See the explanation there and in declare-broken-site-links.xsl
--->
-   <exclude pattern="site:**"/>
-   <exclude pattern="ext:**"/>
-   <exclude pattern="lm:**"/>
-   <exclude pattern="**/site:**"/>
-   <exclude pattern="**/ext:**"/>
-   <exclude pattern="**/lm:**"/>
-
-   <!-- Exclude tokens used in URLs to ASF mirrors (interpreted by a CGI) -->
-   <exclude pattern="[preferred]/**"/>
-   <exclude pattern="[location]"/>
-
-   <!--   <include-links extension=".html"/>-->
-
-   <!--+
-       |  <uri> nodes specify the URIs that should be generated, and
-       |  where required, what should be done with the generated pages.
-       |  They describe the way the URI of the generated file is created
-       |  from the source page's URI. There are three ways that a generated
-       |  file URI can be created: append, replace and insert.
-       |
-       |  The "type" attribute specifies one of (append|replace|insert):
-       |
-       |  append:
-       |  Append the generated page's URI to the end of the source URI:
-       |
-       |   <uri type="append" src-prefix="documents/" src="index.html"
-       |   dest="build/dest/"/>
-       |
-       |  This means that
-       |   (1) the "documents/index.html" page is generated
-       |   (2) the file will be written to "build/dest/documents/index.html"
-       |
-       |  replace:
-       |  Completely ignore the generated page's URI - just
-       |  use the destination URI:
-       |
-       |   <uri type="replace" src-prefix="documents/" src="index.html"
-       |   dest="build/dest/docs.html"/>
-       |
-       |  This means that
-       |   (1) the "documents/index.html" page is generated
-       |   (2) the result is written to "build/dest/docs.html"
-       |   (3) this works only for "single" pages - and not when links
-       |       are followed
-       |
-       |  insert:
-       |  Insert generated page's URI into the destination
-       |  URI at the point marked with a * (example uses fictional
-       |  zip protocol)
-       |
-       |   <uri type="insert" src-prefix="documents/" src="index.html"
-       |   dest="zip://*.zip/page.html"/>
-       |
-       |  This means that
-       |   (1)
-       |
-       |  In any of these scenarios, if the dest attribute is omitted,
-       |  the value provided globally using the <dest-dir> node will
-       |  be used instead.
-       +-->
-   <!--
-   <uri type="replace"
-        src-prefix="samples/"
-        src="hello-world/hello.html"
-        dest="build/dest/hello-world.html"/>
-   -->
-
-   <!--+
-       | <uri> nodes can be grouped together in a <uris> node. This
-       | enables a group of URIs to share properties. The following
-       | properties can be set for a group of URIs:
-       |   * follow-links:       should pages be crawled for links
-       |   * confirm-extensions: should file extensions be checked
-       |                         for the correct mime type
-       |   * src-prefix:         all source URIs should be
-       |                         pre-pended with this prefix before
-       |                         generation. The prefix is not
-       |                         included when calculating the
-       |                         destination URI
-       |   * dest:               the base destination URI to be
-       |                         shared by all pages in this group
-       |   * type:               the method to be used to calculate
-       |                         the destination URI. See above
-       |                         section on <uri> node for details.
-       |
-       | Each <uris> node can have a name attribute. When a name
-       | attribute has been specified, the -n switch on the command
-       | line can be used to tell Cocoon to only process the URIs
-       | within this URI group. When no -n switch is given, all
-       | <uris> nodes are processed. Thus, one xconf file can be
-       | used to manage multiple sites.
-       +-->
-   <!--
-   <uris name="mirrors" follow-links="false">
-     <uri type="append" src="mirrors.html"/>
-   </uris>
-   -->
-
-   <!--+
-       |  File containing URIs (plain text, one per line).
-       +-->
-   <!--
-   <uri-file>uris.txt</uri-file>
-   -->
-</cocoon>