You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@curator.apache.org by ti...@apache.org on 2023/08/16 00:00:21 UTC

[curator] branch master updated: CURATOR-685. Cleanup docs and setups for the old site deployment (#476)

This is an automated email from the ASF dual-hosted git repository.

tison pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/curator.git


The following commit(s) were added to refs/heads/master by this push:
     new ec775931 CURATOR-685. Cleanup docs and setups for the old site deployment (#476)
ec775931 is described below

commit ec7759317d3e0bcdc7d6220f01297dc522184b17
Author: tison <wa...@gmail.com>
AuthorDate: Wed Aug 16 08:00:16 2023 +0800

    CURATOR-685. Cleanup docs and setups for the old site deployment (#476)
    
    Signed-off-by: tison <wa...@gmail.com>
---
 .../src/site/confluence/index.confluence           |  73 -------
 curator-client/src/site/site.xml                   |  33 ----
 .../src/site/confluence/index.confluence           |  13 --
 curator-examples/src/site/site.xml                 |  33 ----
 .../src/site/confluence/index.confluence           | 135 -------------
 .../src/site/confluence/schema.confluence          | 135 -------------
 curator-framework/src/site/site.xml                |  37 ----
 .../src/site/confluence/barrier.confluence         |  35 ----
 .../src/site/confluence/curator-cache.confluence   |  36 ----
 .../confluence/distributed-atomic-long.confluence  |  55 ------
 .../confluence/distributed-delay-queue.confluence  |  61 ------
 .../confluence/distributed-id-queue.confluence     |  35 ----
 .../distributed-priority-queue.confluence          |  77 --------
 .../site/confluence/distributed-queue.confluence   |  68 -------
 .../src/site/confluence/double-barrier.confluence  |  39 ----
 .../src/site/confluence/group-member.confluence    |  44 -----
 .../src/site/confluence/index.confluence           |  43 -----
 .../src/site/confluence/leader-election.confluence |  61 ------
 .../src/site/confluence/leader-latch.confluence    |  80 --------
 .../site/confluence/multi-shared-lock.confluence   |  36 ----
 .../src/site/confluence/node-cache.confluence      |  35 ----
 .../src/site/confluence/path-cache.confluence      |  61 ------
 .../src/site/confluence/persistent-node.confluence |  41 ----
 .../site/confluence/persistent-ttl-node.confluence |  41 ----
 .../site/confluence/persistent-watcher.confluence  |  35 ----
 .../src/site/confluence/shared-counter.confluence  |  69 -------
 .../src/site/confluence/shared-lock.confluence     |  48 -----
 .../confluence/shared-reentrant-lock.confluence    |  72 -------
 .../shared-reentrant-read-write-lock.confluence    |  46 -----
 .../site/confluence/shared-semaphore.confluence    | 102 ----------
 .../confluence/simple-distributed-queue.confluence |  51 -----
 .../src/site/confluence/tree-cache.confluence      |  39 ----
 curator-recipes/src/site/site.xml                  |  36 ----
 curator-test/src/site/confluence/index.confluence  |  10 -
 curator-test/src/site/site.xml                     |  28 ---
 .../src/site/confluence/async.confluence           | 212 ---------------------
 .../src/site/confluence/index.confluence           |  59 ------
 .../src/site/confluence/migrations.confluence      |  99 ----------
 .../site/confluence/modeled-components.confluence  | 186 ------------------
 .../src/site/confluence/modeled-typed.confluence   |  89 ---------
 .../src/site/confluence/modeled.confluence         |  48 -----
 curator-x-async/src/site/site.xml                  |  39 ----
 .../src/site/confluence/index.confluence           |  90 ---------
 curator-x-discovery-server/src/site/site.xml       |  33 ----
 .../src/site/confluence/index.confluence           | 166 ----------------
 curator-x-discovery/src/site/site.xml              |  33 ----
 pom.xml                                            |  68 -------
 src/site/confluence/breaking-changes.confluence    |  15 --
 src/site/confluence/compatibility.confluence       |  10 -
 src/site/confluence/errors.confluence              |  42 ----
 src/site/confluence/getting-started.confluence     |  84 --------
 src/site/confluence/index.confluence               |  54 ------
 src/site/confluence/logging.confluence             |  14 --
 src/site/confluence/releases.confluence            |  22 ---
 src/site/confluence/utilities.confluence           |  73 -------
 src/site/confluence/zk-compatibility-34.confluence |  67 -------
 src/site/resources/css/site.css                    |  51 -----
 src/site/resources/images/arrow.png                | Bin 2159 -> 0 bytes
 src/site/resources/images/curator-logo.png         | Bin 26387 -> 0 bytes
 src/site/resources/images/ph-quote.png             | Bin 35331 -> 0 bytes
 src/site/site.xml                                  | 133 -------------
 61 files changed, 3530 deletions(-)

diff --git a/curator-client/src/site/confluence/index.confluence b/curator-client/src/site/confluence/index.confluence
deleted file mode 100644
index 38360ead..00000000
--- a/curator-client/src/site/confluence/index.confluence
+++ /dev/null
@@ -1,73 +0,0 @@
-h1. Client
-
-h2. IMPORTANT NOTE
-The Curator Client is a low\-level API. It is strongly recommended that you use the Curator [[Framework|../curator-framework/index.html]]
-instead of directly using CuratorZookeeperClient.
-
-h2. Background
-CuratorZookeeperClient is a wrapper around ZooKeeper's Java client that makes client access to ZooKeeper much simpler and
-less error prone. It provides the following features:
-
-* Continuous connection management \- ZooKeeper has many caveats regarding connection management (see the ZooKeeper FAQ for
-details). CuratorZookeeperClient takes care of most of them automatically.
-
-* Operation retry utilities \- a method for retrying operations is provided
-* Test ZooKeeper server \- an in\-process, self\-contained ZooKeeper test server is provided that can be used for test cases and experimentation
-
-h2. Method Documentation
-||Method||Description||
-|_Constructor_|Create a connection to a given ZooKeeper cluster. You can pass in an optional watcher. You must provide a Retry Policy.|
-|getZooKeeper()|Returns the managed ZooKeeper instance. *IMPORTANT NOTES:* a) It takes time for a connection to complete, you should validate that the connection is complete before using other methods. b) The managed ZooKeeper instance can change due to certain events. Do not hold on to the instance for long periods. Always get a fresh reference from getZooKeeper().|
-|isConnected()|Returns true if the ZooKeeper client is currently connected (this can always change due to errors)|
-|blockUntilConnectedOrTimedOut()|A convenience method that blocks until the initial connection is successful or times out|
-|close()|Close the connection|
-|setRetryPolicy()|Change the retry policy|
-|newRetryLoop()|Allocate a new Retry Loop \- see details below|
-
-h2. Retry Loop
-For a variety of reasons, operations on a ZooKeeper cluster can fail. Best practices dictate that these operations should be retried. The Retry Loop mechanism provides the means to do this. *Every operation should be wrapped in a retry loop*. Here's the canonical usage:
-{code}
-RetryLoop retryLoop = client.newRetryLoop();
-while ( retryLoop.shouldContinue() )
-{
-   try
-   {
-       // perform your work
-       ...
-       // it's important to re\-get the ZK instance as there may have been an error and the instance was re\-created
-       ZooKeeper      zk = client.getZookeeper();
-       retryLoop.markComplete();
-   }
-   catch ( Exception e )
-   {
-       retryLoop.takeException(e);
-   }
-}
-{code}
-
-The Retry Loop maintains a count of retries and determines if a given error is retry\-able. If an operation is a candidate for retrying, the Retry Policy is invoked to determine if the retry should proceed.
-
-As a convenience, RetryLoop has a static method that takes a Callable to perform a complete retry loop on. E.g.
-{code}
-RetryLoop.callWithRetry(client, new Callable<Void>()
-{
-      @Override
-      public Void call() throws Exception
-      {
-          // do your work here - it will get retried if needed
-          return null;
-      }
-});
-{code}
-
-h2. Retry Policies
-A retry policy is a mechanism to alter retry behavior. It is abstracted by the RetryPolicy interface which has one method:
-{{public boolean      allowRetry(int retryCount, long elapsedTimeMs);}}
-Before a retry is attempted, allowRetry() is called with the current retry count and the elapsed time of the operation. If the policy allows it, the retry is attempted. If not, an exception is thrown.
-
-Several retry policy implementations are provided (in the package {{com.netflix.curator.retry}}):
-||Policy Name||Description||
-|ExponentialBackoffRetry|Retry policy that retries a set number of times with increasing sleep time between retries|
-|RetryNTimes|Retry policy that retries a max number of times|
-|RetryOneTime|A retry policy that retries only once|
-|RetryUntilElapsed|A retry policy that retries until a given amount of time elapses|
diff --git a/curator-client/src/site/site.xml b/curator-client/src/site/site.xml
deleted file mode 100644
index 5a84db18..00000000
--- a/curator-client/src/site/site.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<project xmlns="http://maven.apache.org/DECORATION/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.0.xsd" name="Apache Curator Client">
-    <body>
-        <head><![CDATA[
-            <link rel="stylesheet" href="../css/site.css" />
-            <script type="text/javascript">
-                $(function(){
-                    $('a[title="Client"]').parent().addClass("active");
-                });
-            </script>
-        ]]></head>
-    </body>
-</project>
diff --git a/curator-examples/src/site/confluence/index.confluence b/curator-examples/src/site/confluence/index.confluence
deleted file mode 100644
index 6c5a30dc..00000000
--- a/curator-examples/src/site/confluence/index.confluence
+++ /dev/null
@@ -1,13 +0,0 @@
-h1. Examples
-
-This module contains example usages of various Curator features. Each directory in the module is a separate example.
-
-|/leader|Example leader selector code|
-|/cache|Example CuratorCache usage|
-|/locking|Example of using InterProcessMutex|
-|/discovery|Example usage of the Curator's ServiceDiscovery|
-|/framework|A few examples of how to use the CuratorFramework class|
-|/async|Example AsyncCuratorFramework code|
-|/modeled|ModeledFramework and Modeled Cache examples|
-
-See the [examples source repo|https://github.com/apache/curator/tree/master/curator-examples/src/main/java] for each example.
diff --git a/curator-examples/src/site/site.xml b/curator-examples/src/site/site.xml
deleted file mode 100644
index eab17514..00000000
--- a/curator-examples/src/site/site.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<project xmlns="http://maven.apache.org/DECORATION/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.0.xsd" name="Apache Curator Examples">
-    <body>
-        <head><![CDATA[
-            <link rel="stylesheet" href="../css/site.css" />
-            <script type="text/javascript">
-                $(function(){
-                    $('a[title="Examples"]').parent().addClass("active");
-                });
-            </script>
-        ]]></head>
-    </body>
-</project>
diff --git a/curator-framework/src/site/confluence/index.confluence b/curator-framework/src/site/confluence/index.confluence
deleted file mode 100644
index 4d1dcb6c..00000000
--- a/curator-framework/src/site/confluence/index.confluence
+++ /dev/null
@@ -1,135 +0,0 @@
-h1. Framework
-
-The Curator Framework is a high\-level API that greatly simplifies using ZooKeeper. It adds many features that build on
-ZooKeeper and handles the complexity of managing connections to the ZooKeeper cluster and retrying operations. Some of the features are:
-
-* Automatic connection management:
-** There are potential error cases that require ZooKeeper clients to recreate a connection and/or retry operations. Curator
- automatically and transparently (mostly) handles these cases.
-** Watches for NodeDataChanged events and calls updateServerList() as needed.
-** Watches are automatically removed by Curator recipes
-* Cleaner API:
-** simplifies the raw ZooKeeper methods, events, etc.
-** provides a modern, fluent interface
-* Recipe implementations (see [[Recipes|../curator\-recipes/index.html]]):
-** Leader election
-** Shared lock
-** Path cache and watcher
-** Distributed Queue
-** Distributed Priority Queue
-** ...
-
-_NOTE:_ A Java 8 asynchronous version of CuratorFramework is available: [[Curator Async|../curator\-x\-async/index.html]].
-
-h2. Allocating a Curator Framework Instance
-CuratorFrameworks are allocated using the CuratorFrameworkFactory which provides both factory methods and a builder for
-creating instances. IMPORTANT: CuratorFramework instances are fully thread\-safe. You should share one CuratorFramework per
-ZooKeeper cluster in your application.
-
-The factory methods (newClient()) provide a simplified way of creating an instance. The Builder gives control over all
-parameters. Once you have a CuratorFramework instance, you must call the start() method. At the end of your application, you should call close().
-
-h2. CuratorFramework API
-The CuratorFramework uses a Fluent\-style interface. Operations are constructed using builders returned by the CuratorFramework
-instance. When strung together, the methods form sentence\-like statements. e.g.
-{code}
-client.create().forPath("/head", new byte[0]);
-client.delete().inBackground().forPath("/head");
-client.create().withMode(CreateMode.EPHEMERAL_SEQUENTIAL).forPath("/head/child", new byte[0]);
-client.getData().watched().inBackground().forPath("/test");
-{code}
-
-h3. Methods
-|create()|Begins a create operation. Call additional methods (mode or background) and finalize the operation by calling forPath()|
-|delete()|Begins a delete operation. Call additional methods (version or background) and finalize the operation by calling forPath()|
-|checkExists()|Begins an operation to check that a ZNode exists. Call additional methods (watch or background) and finalize the operation by calling forPath()|
-|getData()|Begins an operation to get a ZNode's data. Call additional methods (watch, background or get stat) and finalize the operation by calling forPath()|
-|setData()|Begins an operation to set a ZNode's data. Call additional methods (version or background) and finalize the operation by calling forPath()|
-|getChildren()|Begins an operation to get a ZNode's list of children ZNodes. Call additional methods (watch, background or get stat) and finalize the operation by calling forPath()|
-|transactionOp()|Used to allocate operations to be used with transaction().|
-|transaction()|Atomically submit a set of operations as a transaction.|
-|getACL()|Begins an operation to return a ZNode's ACL settings. Call additional methods and finalize the operation by calling forPath()|
-|setACL()|Begins an operation to set a ZNode's ACL settings. Call additional methods and finalize the operation by calling forPath()|
-|getConfig()|Begins an operation to return the last committed configuration. Call additional methods and finalize the operation by calling forEnsemble()|
-|reconfig()|Begins an operation to change the configuration. Call additional methods and finalize the operation by calling forEnsemble()|
-
-h3. Notifications
-Notifications for background operations and watches are published via the ClientListener interface. You register listeners with the
-CuratorFramework instance using the addListener() method. The listener implements two methods:
-
-|eventReceived()|A background operation has completed or a watch has triggered. Examine the given event for details|
-<td>clientClosedDueToError()|An unrecoverable error has occurred. The CuratorFramework instance has been shut down|
-
-h3. CuratorEvent
-The CuratorEvent object is a super\-set POJO that can hold every type of background notification and triggered watch. The useful fields of
-CuratorEvent depend on the type of event which is exposed via the getType() method.
-
-||Event Type||Event Methods||
-|CREATE|getResultCode() and getPath()|
-|DELETE|getResultCode() and getPath()|
-|EXISTS|getResultCode(), getPath() and getStat()|
-|GET\_DATA|getResultCode(), getPath(), getStat() and getData()|
-|SET\_DATA|getResultCode(), getPath() and getStat()|
-|CHILDREN|getResultCode(), getPath(), getStat(), getChildren()|
-|SYNC|getResultCode(), getStat()|
-|GET\_ACL|getResultCode(), getACLList()|
-|SET\_ACL|getResultCode()|
-|TRANSACTION|getResultCode(), getOpResults()|
-|WATCHED|getWatchedEvent()|
-|GET\_CONFIG|getResultCode(), getData()|
-|RECONFIG|getResultCode(), getData()|
-
-h2. Namespaces
-Because a ZooKeeper cluster is a shared environment, it's vital that a namespace convention is
-observed so that various applications that use a given cluster don't use conflicting ZK paths.
-
-The CuratorFramework has a concept of a "namespace". You set the namespace when creating a CuratorFramework
-instance (via the Builder). The CuratorFramework will then prepend the namespace to all paths when one of its APIs is called. i.e.
-{code}
-CuratorFramework    client = CuratorFrameworkFactory.builder().namespace("MyApp") ... build();
- ...
-client.create().forPath("/test", data);
-// node was actually written to: "/MyApp/test"
-{code}
-
-h2. Temporary Connections
-
-Temporary CuratorFramework instances are meant for single requests to ZooKeeper ensembles over a failure prone network
-such as a WAN. The APIs available from CuratorTempFramework are limited. Further, the connection will be closed
-after a period of inactivity.
-
-This is based on an idea mentioned in a post by Camille Fournier:
-[[http://whilefalse.blogspot.com/2012/12/building-global-highly-available.html]].
-
-h3. Creating a CuratorTempFramework
-
-CuratorTempFramework instances are created via the CuratorFrameworkFactory just like normal CuratorFramework instances.
-However, instead of calling the {{build()}} method, call {{buildTemp()}}. {{buildTemp()}} creates a CuratorTempFramework
-instance that closes itself after 3 minutes of inactivity. There is an alternate version of {{buildTemp()}} that allows you to specify the inactivity period.
-
-h3. Limited API
-
-CuratorTempFramework instances provide the following methods:
-
-{code}
-    /**
-     * Stop the client
-     */
-    public void     close();
-
-    /**
-     * Start a transaction builder
-     *
-     * @return builder object
-     * @throws Exception errors
-     */
-    public CuratorTransaction inTransaction() throws Exception;
-
-    /**
-     * Start a get data builder
-     *
-     * @return builder object
-     * @throws Exception errors
-     */
-    public TempGetDataBuilder getData() throws Exception;
-{code}
diff --git a/curator-framework/src/site/confluence/schema.confluence b/curator-framework/src/site/confluence/schema.confluence
deleted file mode 100644
index 0a033e0a..00000000
--- a/curator-framework/src/site/confluence/schema.confluence
+++ /dev/null
@@ -1,135 +0,0 @@
-h1. Schema/Documentation Support
-
-In larger ZooKeeper applications you will end with many paths to ZNodes that have specific meanings and
-uses. E.g. "/myapp/clients/clusters/instances" or "/myapp/writers/locks". These paths can become unwieldy
-and difficult to reason about. Ideally, you should have a simple way to commonly refer to these paths,
-a way to validate how they are used, and a way to document what they are used for.
-
-Curator provides a mechanism to:
-
-* Document your ZooKeeper paths
-* Validate operations on ZooKeeper paths
-* Map a simple string to a ZooKeeper path
-
-When a Curator operation violates a schema, {{SchemaViolation}} is thrown.
-
-h2. Schema and SchemaSet
-
-The basic specification is the Schema class:
-
-|| Field || Type || Required || Description ||
-| name | String | Y | A unique name for this schema |
-| path | String | Y | A full path to a ZNode or a regex pattern to a ZNode |
-| documentation | String | N | User displayable documentation for this schema |
-| schemaValidator | SchemaValidator | N | _see below_ |
-| ephemeral | can/must/cannot | N | Whether the schema allows for ephemerals at the path |
-| sequential | can/must/cannot | N | Whether the schema allows for sequentials at the path |
-| watched | can/must/cannot | N | Whether the schema allows for watchers at the path |
-| canBeDeleted | true/false | N | Whether the schema allows the path to be deleted |
-| metadata | map | N | Any fields\-to\-values you want |
-
-All the Schema instances are combined into a SchemaSet and this can be set in the CuratorFrameworkFactory
-when creating a CuratorFramework instance. Schemas in a SchemaSet are applied in the following order:
-
-# Exact match on full path (i.e. non-regex)
-# Match on the first regex path, searched in the order given to the SchemaSet constructor
-
-h3. SchemaValidator
-
-SchemaValidators are used to optionally validate a ZNode operation when the node is created or
-modified. It is a functor of the form:
-
-{code}
-boolean isValid(Schema schema, String path, byte[] data, List<ACL> acl);
-{code}
-
-h2. Getting ZNode paths/schemas by name
-
-Use SchemaSets to access ZNode paths by a simple name. E.g.
-
-{code}
-CuratorFramework client = ...
-String path = SchemaSet.getNamedPath(client, "locks");
-client.create().forPath(path);
-{code}
-
-h2. Loading JSON Schema from a file/stream
-
-An optional utility is provided to load SchemaSets from a JSON file or stream: SchemaSetLoader.
-*NOTE:* to avoid adding a new dependency to Curator, the Jackson library has been used with "provided" scope.
-You will need to add a dependency to jackson\-core and jackson\-databind to your project.
-
-The JSON stream should be an array of schemas:
-
-{code}
-[
-   {
-       "name": "name",                       required - name of the schema
-       "path": "path or pattern",            required - full path or regex pattern
-       "isRegex": true/false,                optional - true if path is a regular expression - default is false
-       "schemaValidator": "name",            optional - name of a schema validator - default is no validator
-       "documentation": "docs",              optional - user displayable docs - default is ""
-       "ephemeral": "allowance",             optional - "can", "must" or "cannot" - default is "can"
-       "sequential": "allowance",            optional - "can", "must" or "cannot" - default is "can"
-       "watched": "allowance",               optional - "can", "must" or "cannot" - default is "can"
-       "canBeDeleted": true/false,           optional - true if ZNode at path can be deleted - default is true
-       "metadata": {                         optional - any fields -> values that you want
-           "field1": "value1",
-           "field2": "value2"
-       }
-   }
-]
-{code}
-
-h2. Examples
-
-h3. Example 1
-
-{code}
-[
-    {
-        "name": "test",
-        "path": "/a/b/c",
-        "ephemeral": "must",
-        "sequential": "cannot",
-        "metadata": {
-            "origin": "outside",
-            "type": "large"
-        }
-    }
-]
-{code}
-
-* This SchemaSet has only 1 schema
-* The schema applies only to the path "/a/b/c"
-* The ZNode "/a/b/c" must be ephemeral, cannot be sequential, can be watched, and can be deleted
-
-h3. Example 2
-
-{code}
-[
-    {
-        "name": "test",
-        "path": "/a/b/c",
-        "ephemeral": "must",
-        "sequential": "cannot"
-    },
-
-    {
-        "name": "test2",
-        "path": "/a/.*",
-        "isRegex": true,
-        "schemaValidator": "test"
-        "ephemeral": "cannot",
-        "canBeDeleted": false
-    }
-]
-{code}
-
-* This SchemaSet has 2 schemas
-* The first schema applies only to the path "/a/b/c"
-* The ZNode "/a/b/c" must be ephemeral, cannot be sequential, can be watched, and can be deleted
-* The second schema is regex and applies to any path that matches the expression "/a/.\*"
-* The ZNodes that match "/a/.\*" cannot be ephemeral, can be sequential, can be watched, and cannot be deleted
-* The second schema also has a schema validator. The schema validator named "test" (configured when constructing the SchemaSetLoader) will
-be called to validate ZNodes that match "/a/.\*".
diff --git a/curator-framework/src/site/site.xml b/curator-framework/src/site/site.xml
deleted file mode 100644
index 9f2767bf..00000000
--- a/curator-framework/src/site/site.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<project xmlns="http://maven.apache.org/DECORATION/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.0.xsd" name="Apache Curator Framework">
-    <body>
-        <head><![CDATA[
-            <link rel="stylesheet" href="../css/site.css" />
-            <script type="text/javascript">
-                $(function(){
-                    if ( location.pathname.endsWith('schema.html') ) {
-                        $('a[title="Schema Support"]').parent().addClass("active");
-                    } else {
-                        $('a[title="Framework"]').parent().addClass("active");
-                    }
-                });
-            </script>
-        ]]></head>
-    </body>
-</project>
diff --git a/curator-recipes/src/site/confluence/barrier.confluence b/curator-recipes/src/site/confluence/barrier.confluence
deleted file mode 100644
index 2cf2e087..00000000
--- a/curator-recipes/src/site/confluence/barrier.confluence
+++ /dev/null
@@ -1,35 +0,0 @@
-h1. Barrier
-
-h2. Description
-An implementation of the Distributed Barrier ZK recipe.
-
-Distributed systems use barriers to block processing of a set of nodes until a condition is met at which time all the nodes are allowed to proceed.
-
-h2. Participating Classes
-* DistributedBarrier
-
-h2. Usage
-h3. Creating a DistributedBarrier
-{code}
-public DistributedBarrier(CuratorFramework client,
-                          String barrierPath)
-Parameters:
-client - client
-barrierPath - path to use as the barrier
-{code}
-
-h2. General Usage
-To wait on the barrier:
-{code}
-public void waitOnBarrier()
-{code}
-
-There are utilities for setting/removing the barrier:
-
-{code}
-setBarrier();
-removeBarrier();
-{code}
-
-h2. Error Handling
-DistributedBarrier instances watch for connection loss and will throw an exception from {{waitOnBarrier()}}.
diff --git a/curator-recipes/src/site/confluence/curator-cache.confluence b/curator-recipes/src/site/confluence/curator-cache.confluence
deleted file mode 100644
index fa34d14c..00000000
--- a/curator-recipes/src/site/confluence/curator-cache.confluence
+++ /dev/null
@@ -1,36 +0,0 @@
-h1. Curator Cache
-
-*Note: * CuratorCache requires ZooKeeper 3.6\+.
-
-h2. Description
-A utility that attempts to keep the data from a node locally cached. Optionally the entire tree of children below the node can also be cached.
-Will respond to update/create/delete events, pull down the data, etc. You can register listeners that will get notified when changes occur.
-
-h2. Participating Classes
-* CuratorCache
-* CuratorCacheListener
-* ChildData
-
-h2. Usage
-h3. Creating a CuratorCache
-{code}
-CuratorCache.build(CuratorFramework client, String path, Options... options)
-
-Parameters:
-client - the client
-path - path to watch
-options - empty or one or more options
-{code}
-
-Note: there is a builder factory available for additional options when building the cache instance. See {{CuratorCacheBuilder}} for details.
-
-h2. General Usage
-The cache must be started by calling {{start()}}. Call {{close()}} when you are through with the cache.
-
-At any time, call the various accessor methods to get the current state of the cache. You can also register to be notified when a change occurs by calling {{listenable()}} and then registering
-a listener for events.
-
-See the examples for an example usage.
-
-h2. Error Handling
-CuratorCache instances internally monitor connection losses, etc. automatically rebuilding the cache on reconnection.
diff --git a/curator-recipes/src/site/confluence/distributed-atomic-long.confluence b/curator-recipes/src/site/confluence/distributed-atomic-long.confluence
deleted file mode 100644
index 43d8155f..00000000
--- a/curator-recipes/src/site/confluence/distributed-atomic-long.confluence
+++ /dev/null
@@ -1,55 +0,0 @@
-h1. Distributed Atomic Long
-
-h2. Description
-A counter that attempts atomic increments. It first tries using optimistic locking. If that fails, an optional
-InterProcessMutex is taken. For both optimistic and mutex, a retry policy is used to retry the increment
-
-h2. Participating Classes
-* DistributedAtomicLong
-* AtomicValue
-* PromotedToLock
-
-h2. Usage
-h3. Creating a DistributedAtomicLong
-Optimistic mode only:
-{code}
-public DistributedAtomicLong(CuratorFramework client,
-                                String counterPath,
-                                RetryPolicy retryPolicy)
-Creates the counter in optimistic mode only - i.e. the promotion to a mutex is not done
-Parameters:
-client - the client
-counterPath - path to hold the counter value
-retryPolicy - the retry policy to use
-{code}
-
-Mutex promotion mode:
-{code}
-public DistributedAtomicLong(CuratorFramework client,
-                                String counterPath,
-                                RetryPolicy retryPolicy,
-                                PromotedToLock promotedToLock)
-Creates the counter in mutex promotion mode. The optimistic lock will be tried first using
-the given retry policy. If the increment does not succeed, a InterProcessMutex will be
-tried with its own retry policy
-Parameters:
-client - the client
-counterPath - path to hold the counter value
-retryPolicy - the retry policy to use
-promotedToLock - the arguments for the mutex promotion
-{code}
-
-h2. General Usage
-# Perform an operation on the counter:
-** {{get()}}
-** {{increment()}}
-** {{decrement()}}
-** {{add()}}
-** {{subtract()}}
-# Examine the result AtomicValue:
-** You *must* first check {{succeeded()}} which returns true if the operation succeeded. If false is returned, the operation failed and the atomic was not updated.
-** If the operation succeeded, you can get the value prior to the operation via {{preValue()}} and the value after the operation {{postValue()}}
-
-h2. Error Handling
-All the atomic instances access the ZooKeeper server for each method call. Therefore, the standard retry
-mechanism will be applied and any errors executing the operations will result in an Exception being thrown.
diff --git a/curator-recipes/src/site/confluence/distributed-delay-queue.confluence b/curator-recipes/src/site/confluence/distributed-delay-queue.confluence
deleted file mode 100644
index 9765c163..00000000
--- a/curator-recipes/src/site/confluence/distributed-delay-queue.confluence
+++ /dev/null
@@ -1,61 +0,0 @@
-h1. Distributed Delay Queue
-
-h2. *IMPORTANT* \- We recommend that you do NOT use ZooKeeper for Queues. Please see [[Tech Note 4|https://cwiki.apache.org/confluence/display/CURATOR/TN4]] for details.
-
-h2. Description
-An implementation of a Distributed Delay Queue. A Delay Queue is similar to a Priority Queue. When items are added to the queue,
-a delay value is given. The item will not be sent to a consumer until the time elapses.
-
-h2. Participating Classes
-* QueueBuilder
-* QueueConsumer
-* QueueSerializer
-* DistributedDelayQueue
-
-h2. Usage
-h3. Creating a DistributedDelayQueue
-{code}
-public static <T> QueueBuilder<T> builder(CuratorFramework client,
-                                          QueueConsumer<T> consumer,
-                                          QueueSerializer<T> serializer,
-                                          java.lang.String queuePath)
-Parameters:
-client - the curator client
-consumer - message consumer
-serializer - serializer to use for items
-queuePath - path to store queue
-{code}
-
-{code}
-QueueBuilder<MessageType>    builder = QueueBuilder.builder(client, consumer, serializer, path);
-... more builder method calls as needed ...
-DistributedDelayQueue<MessageType> queue = builder.buildDelayQueue();
-{code}
-
-h2. General Usage
-The queue must be started via the {{start()}} method. Call {{close()}} when you are done with the queue.
-
-To add messages to the queue:
-{code}{code}
-queue.put(aMessage, delayUntilEpoch);
-{code}
-
-The consumer ({{QueueConsumer.consumeMessage()}}) will get called as messages arrive. {{delayUntilEpoch}}
-is a future epoch (milliseconds) when this item will be available to consumers.
-
-h2. Lock Safety
-In the general usage case, the message is removed from the queue prior to the consumer being called. A more atomic mode is provided
-that removes the item from the queue only after the consumer successfully returns. To enable this mode, call the {{lockPath()}}
-method of the Queue Builder. This uses a lock to make the message recoverable. A lock is held while the message is being processed \- this
-prevents other processes from taking the message. The message will not be removed from the queue until the consumer functor returns. Thus,
-if there is a failure or the process dies, the message will get sent to another process. There is a small performance penalty for this behavior however.
-
-h2. Data Format
-Same as [[Distributed Queue|distributed-queue.html]].
-
-h2. Error Handling
-The {{QueueConsumer}} class extends {{ConnectionStateListener}}. When the queue is started, it adds the listener to the
-Curator instance. Users of the {{DistributedPriorityQueue}} must pay attention to any connection state changes.
-
-If the SUSPENDED state is reported, the instance must assume that, until it receives a RECONNECTED state, the queue is no longer being updated.
-If the LOST state is reported, the queue is permanently down.
diff --git a/curator-recipes/src/site/confluence/distributed-id-queue.confluence b/curator-recipes/src/site/confluence/distributed-id-queue.confluence
deleted file mode 100644
index 9c0b117e..00000000
--- a/curator-recipes/src/site/confluence/distributed-id-queue.confluence
+++ /dev/null
@@ -1,35 +0,0 @@
-h1. Distributed ID Queue
-
-h2. *IMPORTANT* \- We recommend that you do NOT use ZooKeeper for Queues. Please see [[Tech Note 4|https://cwiki.apache.org/confluence/display/CURATOR/TN4]] for details.
-
-h2. Description
-This is an alternate version of [[Distributed Queue|distributed-queue.html]] that supports assigning IDs to the items
-added to the queue. Items put into the queue are guaranteed to be ordered (by means of ZK's PERSISTENT_SEQUENTIAL node).
-If a single consumer takes items out of the queue, they will be ordered FIFO. If ordering is important, use a LeaderSelector to nominate a single consumer.
-
-h2. Participating Classes
-* QueueBuilder
-* QueueConsumer
-* QueueSerializer
-* DistributedQueue
-
-h2. Usage
-h3. Creating a DistributedIdQueue
-See [[Distributed Queue|distributed-queue.html]] for details of using the builder, the only difference is to use the {{buildIdQueue()}} method.
-
-h2. General Usage
-The queue must be started via the {{start()}} method. Call {{close()}} when you are done with the queue.
-
-To add messages to the queue:
-{code}
-queue.put(aMessage, messageId);
-{code}
-
-To remove messages from the queue:
-{code}
-int numberRemoved = queue.remove(messageId);
-{code}
-
-Your consumer ({{QueueConsumer.consumeMessage()}}) will get called as messages arrive.
-
-The lock safety and error handling are the same as for [[Distributed Queue|distributed-queue.html]].
\ No newline at end of file
diff --git a/curator-recipes/src/site/confluence/distributed-priority-queue.confluence b/curator-recipes/src/site/confluence/distributed-priority-queue.confluence
deleted file mode 100644
index a45834ba..00000000
--- a/curator-recipes/src/site/confluence/distributed-priority-queue.confluence
+++ /dev/null
@@ -1,77 +0,0 @@
-h1. Distributed Priority Queue
-
-h2. *IMPORTANT* \- We recommend that you do NOT use ZooKeeper for Queues. Please see [[Tech Note 4|https://cwiki.apache.org/confluence/display/CURATOR/TN4]] for details.
-
-h2. Description
-An implementation of the Distributed Priority Queue ZK recipe.
-
-h2. Participating Classes
-* QueueBuilder
-* QueueConsumer
-* QueueSerializer
-* DistributedPriorityQueue
-
-h2. Usage
-h3. Creating a DistributedPriorityQueue
-{code}
-public static <T> QueueBuilder<T> builder(CuratorFramework client,
-                                          QueueConsumer<T> consumer,
-                                          QueueSerializer<T> serializer,
-                                          java.lang.String queuePath)
-Parameters:
-client - the curator client
-consumer - message consumer
-serializer - serializer to use for items
-queuePath - path to store queue
-{code}
-
-{code}
-QueueBuilder<MessageType>    builder = QueueBuilder.builder(client, consumer, serializer, path);
-... more builder method calls as needed ...
-DistributedPriorityQueue<MessageType> queue = builder.buildPriorityQueue(minItemsBeforeRefresh);
-{code}
-
-{code}
-public DistributedPriorityQueue<T> buildPriorityQueue(int minItemsBeforeRefresh)
-Build a DistributedPriorityQueue from the current builder values.
-
-When the priority queue detects an item addition/removal, it will stop processing its current list of items and refresh the
-list. minItemsBeforeRefresh modifies this. It determines the minimum number of items from the active list that will get processed before a refresh.
-
-Due to a quirk in the way ZooKeeper notifies changes, the queue will get an item addition/remove notification after every item is
-processed. This can lead to poor performance. Set minItemsBeforeRefresh to the value your application can tolerate being out of sync.
-
-For example: if the queue sees 10 items to process, it will end up making 10 calls to ZooKeeper to check status. You can control
-this by setting minItemsBeforeRefresh to 10 (or more) and the queue will only refresh with ZooKeeper after 10 items are processed
-
-Parameters:
-minItemsBeforeRefresh - minimum items to process before refreshing the item list
-{code}
-
-h2. General Usage
-The queue must be started via the {{start()}} method. Call {{close()}} when you are done with the queue.
-
-To add messages to the queue:
-{code}
-queue.put(aMessage, priority);
-{code}
-
-The consumer ({{QueueConsumer.consumeMessage()}}) will get called as messages arrive.
-
-h2. Lock Safety
-In the general usage case, the message is removed from the queue prior to the consumer being called. A more atomic mode is
-provided that removes the item from the queue only after the consumer successfully returns. To enable this mode, call the
-{{lockPath()}} method of the Queue Builder. This uses a lock to make the message recoverable. A lock is held while the
-message is being processed \- this prevents other processes from taking the message. The message will not be removed from the queue
-until the consumer functor returns. Thus, if there is a failure or the process dies, the message will get sent to another process.
-There is a small performance penalty for this behavior however.
-
-h2. Data Format
-Same as [[Distributed Queue|distributed-queue.html]].
-
-h2. Error Handling
-The {{QueueConsumer}} class extends {{ConnectionStateListener}}. When the queue is started, it adds the listener to the
-Curator instance. Users of the {{DistributedPriorityQueue}} must pay attention to any connection state changes.
-
-If the SUSPENDED state is reported, the instance must assume that, until it receives a RECONNECTED state, the queue is no longer being
-updated. If the LOST state is reported, the queue is permanently down.
diff --git a/curator-recipes/src/site/confluence/distributed-queue.confluence b/curator-recipes/src/site/confluence/distributed-queue.confluence
deleted file mode 100644
index e80f015d..00000000
--- a/curator-recipes/src/site/confluence/distributed-queue.confluence
+++ /dev/null
@@ -1,68 +0,0 @@
-h1. Distributed Queue
-
-h2. *IMPORTANT* \- We recommend that you do NOT use ZooKeeper for Queues. Please see [[Tech Note 4|https://cwiki.apache.org/confluence/display/CURATOR/TN4]] for details.
-
-h2. Description
-An implementation of the Distributed Queue ZK recipe. Items put into the queue are guaranteed to be ordered (by means of ZK's PERSISTENT_SEQUENTIAL node). If a single consumer takes items out of the queue, they will be ordered FIFO. If ordering is important, use a LeaderSelector to nominate a single consumer.
-
-h2. Participating Classes
-* QueueBuilder
-* QueueConsumer
-* QueueSerializer
-* DistributedQueue
-
-h2. Usage
-h3. Creating a DistributedQueue
-{code}
-public static <T> QueueBuilder<T> builder(CuratorFramework client,
-                                          QueueConsumer<T> consumer,
-                                          QueueSerializer<T> serializer,
-                                          java.lang.String queuePath)
-Parameters:
-client - the curator client
-consumer - functor to receive messages
-serializer - serializer to use for items
-queuePath - path to store queue
-{code}
-
-{code}
-QueueBuilder<MessageType>    builder = QueueBuilder.builder(client, consumer, serializer, path);
-... more builder method calls as needed ...
-DistributedQueue<MessageType queue = builder.build();
-{code}
-
-h2. General Usage
-The queue must be started via the {{start()}} method. Call {{close()}} when you are done with the queue.
-
-To add messages to the queue:
-{code}
-queue.put(aMessage);
-{code}
-
-Your consumer ({{QueueConsumer.consumeMessage()}}) will get called as messages arrive.
-
-h2. Lock Safety
-In the general usage case, the message is removed from the queue prior to the consumer being called. A more
-atomic mode is provided that removes the item from the queue only after the consumer successfully returns. To
-enable this mode, call the {{lockPath()}} method of the Queue Builder. This uses a lock to make the
-message recoverable. A lock is held while the message is being processed \- this prevents other processes
-from taking the message. The message will not be removed from the queue until the consumer functor returns.
-Thus, if there is a failure or the process dies, the message will get sent to another process. There is a
-small performance penalty for this behavior however.
-
-h2. Data Format
-The Distributed queue writes messages using this format:
-
-||OFFSET||SIZE||DESCRIPTION||
-|0|4|Format version. Currently 0x00010001|
-|4|1|Opcode: 0x01 = message, 0x02 = End of data|
-|5|4|Message byte length|
-|9|n|Message: serialized message bytes|
-|9 + n|...|Next set of opcode\-size\-bytes until end of data|
-
-h2. Error Handling
-The {{QueueConsumer}} class extends {{ConnectionStateListener}}. When the queue is started,
-it adds the listener to the Curator instance. Users of the {{DistributedQueue}} must pay attention to any connection state changes.
-
-If the SUSPENDED state is reported, the instance must assume that, until it receives a RECONNECTED state,
-the queue is no longer being updated. If the LOST state is reported, the queue is permanently down.
diff --git a/curator-recipes/src/site/confluence/double-barrier.confluence b/curator-recipes/src/site/confluence/double-barrier.confluence
deleted file mode 100644
index 246927e8..00000000
--- a/curator-recipes/src/site/confluence/double-barrier.confluence
+++ /dev/null
@@ -1,39 +0,0 @@
-h1. Double Barrier
-
-h2. Description
-An implementation of the Distributed Double Barrier ZK recipe.
-
-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.
-
-h2. Participating Classes
-* DistributedDoubleBarrier
-
-h2. Usage
-h3. Creating a DistributedBarrier
-{code}
-public DistributedDoubleBarrier(CuratorFramework client,
-                                String barrierPath,
-                                int memberQty)
-Creates the barrier abstraction. memberQty is the number of members in the barrier. When enter() is called, it blocks until
-all members have entered. When leave() is called, it blocks until all members have left.
-
-Parameters:
-client - the client
-barrierPath - path to use
-memberQty - the number of members in the barrier
-{code}
-
-h2. General Usage
-To enter on the barrier:
-{code}
-public void     enter();
-{code}
-
-To leave on the barrier:
-{code}
-public void     leave();
-{code}
-
-h2. Error Handling
-DistributedDoubleBarrier instances watch for connection loss and will throw an exception from {{enter()}} and/or {{leave()}}.
diff --git a/curator-recipes/src/site/confluence/group-member.confluence b/curator-recipes/src/site/confluence/group-member.confluence
deleted file mode 100644
index 5c24c751..00000000
--- a/curator-recipes/src/site/confluence/group-member.confluence
+++ /dev/null
@@ -1,44 +0,0 @@
-h1. Group Member
-
-h2. Description
-Group membership management. Adds this instance into a group and keeps a cache of members in the group.
-
-h2. Participating Classes
-* GroupMember
-* PersistentNode
-* PathChildrenCache
-
-h2. Usage
-h3. Creating a GroupMember
-{code}
-public GroupMember(CuratorFramework client,
-                        String membershipPath,
-                        String thisId,
-                        byte[] payload)
-Parameters:
-client - client instance
-membershipPath - the path to use for membership
-thisId - ID of this group member. MUST be unique for the group
-payload - the payload to write in our member node
-{code}
-
-h3. General Usage
-GroupMember must be started:
-{code}
-group.start();
-{code}
-
-When you are through with the GroupMember instance, you should call close:
-{code}
-group.close();
-{code}
-
-NOTE: this will remove the instance from the group
-
-You can get a current view of the members by calling:
-{code}
-group.getCurrentMembers();
-{code}
-
-h2. Error Handling
-GroupMember instances internally handle all error states recreating the node as necessary.
diff --git a/curator-recipes/src/site/confluence/index.confluence b/curator-recipes/src/site/confluence/index.confluence
deleted file mode 100644
index ab8dc533..00000000
--- a/curator-recipes/src/site/confluence/index.confluence
+++ /dev/null
@@ -1,43 +0,0 @@
-h1. Recipes
-
-Curator implements all of the recipes listed on the ZooKeeper recipes doc (except two phase commit). Click on the recipe name below for detailed documentation.
-NOTE: Most Curator recipes will auto-create parent nodes of paths given to the recipe as CreateMode.CONTAINER. Also, see [[Tech Note 7|https://cwiki.apache.org/confluence/display/CURATOR/TN7]]
-regarding "Curator Recipes Own Their ZNode/Paths".
-
-||Elections||
-|[[Leader Latch|leader-latch.html]] \- In distributed computing, leader election is the process of designating a single process as the organizer of some task distributed among several computers (nodes). Before the task is begun, all network nodes are unaware which node will serve as the "leader," or coordinator, of the task. After a leader election algorithm has been run, however, each node throughout the network recognizes a particular, unique node as the task leader.|
-|[[Leader Election|leader-election.html]] \- Initial Curator leader election recipe.|
-
-||Locks||
-|[[Shared Reentrant Lock|shared-reentrant-lock.html]] \- Fully distributed locks that are globally synchronous, meaning at any snapshot in time no two clients think they hold the same lock.|
-|[[Shared Lock|shared-lock.html]] \- Similar to Shared Reentrant Lock but not reentrant.|
-|[[Shared Reentrant Read Write Lock|shared-reentrant-read-write-lock.html]] \- A re\-entrant read/write mutex that works across JVMs. A read write lock maintains a pair of associated locks, one for read\-only operations and one for writing. The read lock may be held simultaneously by multiple reader processes, so long as there are no writers. The write lock is exclusive.|
-|[[Shared Semaphore|shared-semaphore.html]] \- A counting semaphore that works across JVMs. All processes in all JVMs that use the same lock path will achieve an inter\-process limited set of leases. Further, this semaphore is mostly "fair" \- each user will get a lease in the order requested (from ZK's point of view).|
-|[[Multi Shared Lock|multi-shared-lock.html]] \- A container that manages multiple locks as a single entity. When acquire() is called, all the locks are acquired. If that fails, any paths that were acquired are released. Similarly, when release() is called, all locks are released (failures are ignored).|
-
-||Barriers||
-|[[Barrier|barrier.html]] \- Distributed systems use barriers to block processing of a set of nodes until a condition is met at which time all the nodes are allowed to proceed.|
-|[[Double Barrier|double-barrier.html]] \- 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.|
-
-||Counters||
-|[[Shared Counter|shared-counter.html]] \- Manages a shared integer. All clients watching the same path will have the up\-to\-date value of the shared integer (considering ZK's normal consistency guarantees).|
-|[[Distributed Atomic Long|distributed-atomic-long.html]] \- A counter that attempts atomic increments. It first tries using optimistic locking. If that fails, an optional InterProcessMutex is taken. For both optimistic and mutex, a retry policy is used to retry the increment.|
-
-||Caches||
-|[[Curator Cache|curator-cache.html]] \- A utility that attempts to keep the data from a node locally cached. Optionally the entire tree of children below the node can also be cached. Will respond to update/create/delete events, pull down the data, etc. You can register listeners that will get notified when changes occur.|
-|[[Path Cache|path-cache.html]] \- (For pre-ZooKeeper 3.6.x) A Path Cache is used to watch a ZNode. Whenever a child is added, updated or removed, the Path Cache will change its state to contain the current set of children, the children's data and the children's state. Path caches in the Curator Framework are provided by the PathChildrenCache class. Changes to the path are passed to registered PathChildrenCacheListener instances.|
-|[[Node Cache|node-cache.html]] \- (For pre-ZooKeeper 3.6.x) A utility that attempts to keep the data from a node locally cached. This class will watch the node, respond to update/create/delete events, pull down the data, etc. You can register a listener that will get notified when changes occur.|
-|[[Tree Cache|tree-cache.html]] \- (For pre-ZooKeeper 3.6.x) A utility that attempts to keep all data from all children of a ZK path locally cached. This class will watch the ZK path, respond to update/create/delete events, pull down the data, etc. You can register a listener that will get notified when changes occur.|
-
-||Nodes/Watches||
-|[[Persistent Recursive Watcher|persistent-watcher.html]] \- A managed persistent recursive watcher. The watch will be managed such that it stays set through connection lapses, etc.|
-|[[Persistent Node|persistent-node.html]] \- A node that attempts to stay present in ZooKeeper, even through connection and session interruptions.|
-|[[Persistent TTL Node|persistent-ttl-node.html]] \- Useful when you need to create a TTL node but don't want to keep it alive manually by periodically setting data.|
-|[Group Member|group-member.html]] \- Group membership management. Adds this instance into a group and keeps a cache of members in the group.|
-
-||Queues||
-|[[Distributed Queue|distributed-queue.html]] \- An implementation of the Distributed Queue ZK recipe. Items put into the queue are guaranteed to be ordered (by means of ZK's PERSISTENT_SEQUENTIAL node). If a single consumer takes items out of the queue, they will be ordered FIFO. If ordering is important, use a LeaderSelector to nominate a single consumer.|
-|[[Distributed Id Queue|distributed-id-queue.html]] \- A version of DistributedQueue that allows IDs to be associated with queue items. Items can then be removed from the queue if needed.|
-|[[Distributed Priority Queue|distributed-priority-queue.html]] \- An implementation of the Distributed Priority Queue ZK recipe.|
-|[[Distributed Delay Queue|distributed-delay-queue.html]] \- An implementation of a Distributed Delay Queue.|
-|[[Simple Distributed Queue|simple-distributed-queue.html]] \- A drop\-in replacement for the DistributedQueue that comes with the ZK distribution.|
diff --git a/curator-recipes/src/site/confluence/leader-election.confluence b/curator-recipes/src/site/confluence/leader-election.confluence
deleted file mode 100644
index 1830beaa..00000000
--- a/curator-recipes/src/site/confluence/leader-election.confluence
+++ /dev/null
@@ -1,61 +0,0 @@
-h1. Leader Election
-
-h2. Description
-In distributed computing, leader election is the process of designating a single process as the organizer of some task distributed among several computers (nodes). Before the task is begun, all network nodes are unaware which node will serve as the "leader," or coordinator, of the task. After a leader election algorithm has been run, however, each node throughout the network recognizes a particular, unique node as the task leader.
-
-NOTE: Curator has two leader election recipes. Which one to use depends on your requirements.
-
-h2. Participating Classes
-* LeaderSelector
-* LeaderSelectorListener
-* LeaderSelectorListenerAdapter
-* CancelLeadershipException
-
-h2. Usage
-h3. Creating a LeaderSelector
-{code}
-public LeaderSelector(CuratorFramework client,
-                      String mutexPath,
-                      LeaderSelectorListener listener)
-Parameters:
-client - the client
-mutexPath - the path for this leadership group
-listener - listener
-{code}
-
-{code}
-public LeaderSelector(CuratorFramework client,
-                      String mutexPath,
-                      ThreadFactory threadFactory,
-                      Executor executor,
-                      LeaderSelectorListener listener)
-Parameters:
-client - the client
-mutexPath - the path for this leadership group
-threadFactory - factory to use for making internal threads
-executor - the executor to run in
-listener - listener
-{code}
-
-h3. General Usage
-LeaderSelectors must be started:
-{code}
-leaderSelector.start();
-{code}
-
-Once started, the {{takeLeadership()}} of your listener will be called when you have leadership. Your {{takeLeadership()}} method should only return when leadership is being relinquished.
-
-When you are through with the LeaderSelector instance, you should call close:
-{code}
-leaderSelector.close();
-{code}
-
-h2. Error Handling
-The {{LeaderSelectorListener}} class extends {{ConnectionStateListener}}. When the LeaderSelector is started, it adds the listener to the Curator instance.
-Users of the {{LeaderSelector}} must pay attention to any connection state changes. If an instance becomes the leader, it should respond to notification of
-being SUSPENDED or LOST. If the SUSPENDED state is reported, the instance must assume that it might no longer be the leader until it receives a RECONNECTED state. If the LOST
-state is reported, the instance is no longer the leader and its {{takeLeadership}} method should exit.
-
-IMPORTANT: The recommended action for receiving SUSPENDED or LOST is to throw {{CancelLeadershipException}}. This will cause the LeaderSelector instance to attempt
-to interrupt and cancel the thread that is executing the {{takeLeadership}} method. Because this is so important, you should consider extending {{LeaderSelectorListenerAdapter}}.
-{{LeaderSelectorListenerAdapter}} has the recommended handling already written for you.
diff --git a/curator-recipes/src/site/confluence/leader-latch.confluence b/curator-recipes/src/site/confluence/leader-latch.confluence
deleted file mode 100644
index b8b24c74..00000000
--- a/curator-recipes/src/site/confluence/leader-latch.confluence
+++ /dev/null
@@ -1,80 +0,0 @@
-h1. Leader Latch
-
-h2. Description
-In distributed computing, leader election is the process of designating a single process as the organizer of some task distributed
-among several computers (nodes). Before the task is begun, all network nodes are unaware which node will serve as the "leader,"
-or coordinator, of the task. After a leader election algorithm has been run, however, each node throughout the network recognizes
-a particular, unique node as the task leader.
-
-NOTE: Curator has two leader election recipes. Which one to use depends on your requirements.
-
-h2. Participating Classes
-* LeaderLatch
-
-h2. Usage
-h3. Creating a LeaderLatch
-{code}
-public LeaderLatch(CuratorFramework client,
-                   String latchPath)
-Parameters:
-client - the client
-latchPath - the path for this leadership group
-{code}
-
-{code}
-public LeaderLatch(CuratorFramework client,
-                   String latchPath,
-                   String id)
-Parameters:
-client - the client
-latchPath - the path for this leadership group
-id - participant ID
-{code}
-
-h3. General Usage
-LeaderLatches must be started:
-{code}
-leaderLatch.start();
-{code}
-
-Once started, the LeaderLatch will negotiate with any other LeaderLatch participants that use the same latch path and randomly choose one of them to be the leader. At any time, you can determine if a given instance is the leader by calling:
-
-{code}
-public boolean hasLeadership()
-Return true if leadership is currently held by this instance
-{code}
-
-Similar to the JDK's CountDownLatch, LeaderLatch has methods that block until leadership is acquired:
-
-{code}
-public void await()
-          throws InterruptedException,
-                 EOFException
-Causes the current thread to wait until this instance acquires leadership
-unless the thread is interrupted or closed.
-{code}
-
-{code}
-public boolean await(long timeout,
-                     TimeUnit unit)
-             throws InterruptedException
-Causes the current thread to wait until this instance acquires leadership unless
-the thread is interrupted, the specified waiting time elapses or the instance is closed.
-&nbsp;
-Parameters:
-timeout - the maximum time to wait
-unit - the time unit of the timeout argument
-Returns:
-true if the count reached zero and false if the waiting time elapsed before the count
-reached zero or the instances was closed
-{code}
-
-When you are through with the LeaderLatch instance, you must call close. This removes the instance from the leader election and releases leadership if the instance has it. Once leadership is released, another participating instance (if any) will be chosen as leader.
-{code}
-leaderLatch.close();
-{code}
-
-h2. Error Handling
-LeaderLatch instances add a ConnectionStateListener to watch for connection problems. If SUSPENDED or LOST is reported, the LeaderLatch that is the leader will report that it is no longer the leader (i.e. there will not be a leader until the connection is re\-established). If a LOST connection is RECONNECTED, the LeaderLatch will delete its previous ZNode and create a new one.
-
-Users of LeaderLatch must take account that connection issues can cause leadership to be lost. i.e. hasLeadership() returns true but some time later the connection is SUSPENDED or LOST. At that point hasLeadership() will return false. It is highly recommended that LeaderLatch users register a ConnectionStateListener.
diff --git a/curator-recipes/src/site/confluence/multi-shared-lock.confluence b/curator-recipes/src/site/confluence/multi-shared-lock.confluence
deleted file mode 100644
index 7d2bcd7e..00000000
--- a/curator-recipes/src/site/confluence/multi-shared-lock.confluence
+++ /dev/null
@@ -1,36 +0,0 @@
-h1. Multi Shared Lock
-
-h2. Description
-A container that manages multiple locks as a single entity. When acquire() is called, all the locks are acquired. If that fails,
-any paths that were acquired are released. Similarly, when release() is called, all locks are released (failures are ignored).
-
-h2. Participating Classes
-* InterProcessMultiLock
-* InterProcessLock
-
-h2. Usage
-h3. Creating a InterProcessMultiLock
-{code}
-public InterProcessMultiLock(List<InterProcessLock> locks)
-Creates a multi lock of any type of inter process lock
-Parameters:
-locks - the locks
-{code}
-
-{code}
-public InterProcessMultiLock(CuratorFramework client,
-                             List<String> paths)
-Creates a multi lock of InterProcessMutexes
-Parameters:
-client - client
-paths - list of paths to manage in the order that they are to be locked
-{code}
-
-h2. General Usage
-The usage is the same as for [[Shared Lock|shared-lock.html]]. However, When acquire() is called, all the locks are acquired. If that
-fails, any paths that were acquired are released. Similarly, when release() is called, all locks are released (failures are ignored).
-
-h2. Error Handling
-It is strongly recommended that you add a {{ConnectionStateListener}} and watch for SUSPENDED and LOST state changes. If a
-SUSPENDED state is reported you cannot be certain that you still hold the lock unless you subsequently receive a
-RECONNECTED state. If a LOST state is reported it is certain that you no longer hold the lock.
diff --git a/curator-recipes/src/site/confluence/node-cache.confluence b/curator-recipes/src/site/confluence/node-cache.confluence
deleted file mode 100644
index ca13b8ed..00000000
--- a/curator-recipes/src/site/confluence/node-cache.confluence
+++ /dev/null
@@ -1,35 +0,0 @@
-h1. Node Cache
-
-h2. Description
-A Node Cache is used to watch a ZNode. Whenever the data is modified or the ZNode is deleted, the Node Cache will change its
-state to contain the current data (or null if ZNode was deleted).
-
-h2. Participating Classes
-* NodeCache
-* NodeCacheListener
-* ChildData
-
-h2. Usage
-h3. Creating a NodeChildrenCache
-{code}
-public NodeCache(CuratorFramework client,
-                         String path)
-Parameters:
-client - the client
-path - path to cache
-{code}
-
-h2. General Usage
-The cache must be started by calling {{start()}}. Call {{close()}} when you are through with the cache.
-
-At any time, call {{getCurrentData()}} to get the current state of the cache. You can also register to be notified
-when a change occurs by calling {{getListenable()}} and then:
-{code}
-public void addListener(NodeCacheListener listener)
-     Add a change listener
-Parameters:
-listener - the listener
-{code}
-
-h2. Error Handling
-NodeCache instances internally monitor a {{ConnectionStateListener}}.
diff --git a/curator-recipes/src/site/confluence/path-cache.confluence b/curator-recipes/src/site/confluence/path-cache.confluence
deleted file mode 100644
index 1ced99df..00000000
--- a/curator-recipes/src/site/confluence/path-cache.confluence
+++ /dev/null
@@ -1,61 +0,0 @@
-h1. Path Cache
-
-h2. Description
-A Path Cache is used to watch a ZNode. Whenever a child is added, updated or removed, the Path Cache will change its state to contain the current set of children, the children's data and the children's state.
-
-h2. Participating Classes
-* PathChildrenCache
-* PathChildrenCacheEvent
-* PathChildrenCacheListener
-* ChildData
-
-h2. Usage
-h3. Creating a PathChildrenCache
-{code}
-public PathChildrenCache(CuratorFramework client,
-                         String path,
-                         boolean cacheData)
-Parameters:
-client - the client
-path - path to watch
-cacheData - if true, node contents are cached in addition to the stat
-{code}
-
-h2. General Usage
-The cache must be started by calling {{start()}}. Call {{close()}} when you are through with the cache.
-
-There are two versions of {{start()}}. The no\-arg version gives default behavior. The other version takes an enumeration that allows you to control how the initial cache is warmed:
-
-{code}
-public enum StartMode
-{
-    /**
-     * cache will _not_ be primed. i.e. it will start empty and you will receive
-     * events for all nodes added, etc.
-     */
-    NORMAL,
-
-    /**
-     * rebuild() will be called before this method returns in
-     * order to get an initial view of the node.
-     */
-    BUILD_INITIAL_CACHE,
-
-    /**
-     * After cache is primed with initial values (in the background) a
-     * PathChildrenCacheEvent.Type.INITIALIZED event will be posted
-     */
-    POST_INITIALIZED_EVENT
-}
-{code}
-
-At any time, call {{getCurrentData()}} to get the current state of the cache. You can also register to be notified when a change occurs by calling {{getListenable()}} and then:
-{code}
-public void addListener(PathChildrenCacheListener listener)
-     Add a change listener
-Parameters:
-listener - the listener
-{code}
-
-h2. Error Handling
-PathChildrenCache instances internally monitor a {{ConnectionStateListener}}. If the connection state changes, the cache is reset (the {{PathChildrenCacheListener}} will receive a RESET).
diff --git a/curator-recipes/src/site/confluence/persistent-node.confluence b/curator-recipes/src/site/confluence/persistent-node.confluence
deleted file mode 100644
index ffbe5d99..00000000
--- a/curator-recipes/src/site/confluence/persistent-node.confluence
+++ /dev/null
@@ -1,41 +0,0 @@
-h1. Persistent Node
-
-h2. Description
-A persistent node is a node that attempts to stay present in ZooKeeper, even through connection and session interruptions.
-
-h2. Participating Classes
-* PersistentNode
-
-h2. Usage
-h3. Creating a PersistentNode
-{code}
-public PersistentNode(CuratorFramework client,
-                               CreateMode mode,
-                               boolean useProtection,
-                               String basePath,
-                               byte[] data,
-                               boolean useParentCreation)
-Parameters:
-client - client instance
-mode - creation mode
-useProtection - if true, call CreateBuilder.withProtection()
-basePath - the base path for the node
-data - data for the node
-useParentCreation - if true, call CreateBuilder.creatingParentContainersIfNeeded()
-{code}
-
-h3. General Usage
-PersistentNodes must be started:
-{code}
-node.start();
-{code}
-
-When you are through with the PersistentNode instance, you should call close:
-{code}
-node.close();
-{code}
-
-NOTE: this will delete the node
-
-h2. Error Handling
-PersistentNode instances internally handle all error states recreating the node as necessary.
diff --git a/curator-recipes/src/site/confluence/persistent-ttl-node.confluence b/curator-recipes/src/site/confluence/persistent-ttl-node.confluence
deleted file mode 100644
index f123c1df..00000000
--- a/curator-recipes/src/site/confluence/persistent-ttl-node.confluence
+++ /dev/null
@@ -1,41 +0,0 @@
-h1. Persistent TTL Node
-
-h2. Description
-PersistentTtlNode is useful when you need to create a TTL node but don't want to keep it alive manually by periodically setting data \-
-PersistentTtlNode does that for you. Further the keep\-alive is done in a way that does not generate watch triggers on the parent node.
-It also provides similar guarantees that a [[Persistent Node|persistent-node.html]] does: the node attempts to stay present in ZooKeeper,
-even through connection and session interruptions.
-
-h2. Participating Classes
-* PersistentNode
-* PersistentTtlNode
-
-h2. Usage
-h3. Creating a PersistentTtlNode
-{code}
-public PersistentTtlNode(CuratorFramework client,
-                               String path,
-                               long ttlMs,
-                               byte[] initData)
-Parameters:
-client - client instance
-path path for the parent ZNode
-ttlMs max ttl for the node in milliseconds
-initData - initData for the node
-{code}
-
-h3. General Usage
-PersistentTtlNode must be started:
-{code}
-node.start();
-{code}
-
-When you are through with the PersistentTtlNode instance, you should call close:
-{code}
-node.close();
-{code}
-
-NOTE: this will NOT delete the node immediately. The node will get deleted based on the ttl.
-
-h2. Error Handling
-PersistentTtlNode instances internally handle all error states recreating the node as necessary.
diff --git a/curator-recipes/src/site/confluence/persistent-watcher.confluence b/curator-recipes/src/site/confluence/persistent-watcher.confluence
deleted file mode 100644
index 45516691..00000000
--- a/curator-recipes/src/site/confluence/persistent-watcher.confluence
+++ /dev/null
@@ -1,35 +0,0 @@
-h1. Persistent Recursive Watcher
-
-*Note: * PersistentWatcher requires ZooKeeper 3.6\+.
-
-h2. Description
-A managed persistent persistent watcher. The watch will be managed such that it stays set through connection lapses, etc.
-
-h2. Participating Classes
-* PersistentWatcher
-
-h2. Usage
-h3. Creating a PersistentWatcher
-{code}
-public PersistentWatcher(CuratorFramework client,
-                               String basePath,
-                               boolean recursive)
-
-Parameters:
-client - the client
-basePath - path to set the watch on
-recursive - ZooKeeper persistent watches can optionally be recursive
-{code}
-
-h2. General Usage
-The instance must be started by calling {{start()}}. Call {{close()}} when you want to remove the watch.
-
-PersistentWatcher presents two listener types:
-
-* {{Listenable<Watcher> getListenable()}} \- Use this to add watchers. These will behave in the same manner that watchers added
-via {{ZooKeeper.addWatch()}} behave.
-* {{Listenable<Runnable> getResetListenable()}} \- The Runnables added with this get called once the Persistent Watcher has been successfully set
-(or reset after a connection partition).
-
-h2. Error Handling
-PersistentWatcher instances internally monitor connection losses, etc. automatically resetting on reconnection.
diff --git a/curator-recipes/src/site/confluence/shared-counter.confluence b/curator-recipes/src/site/confluence/shared-counter.confluence
deleted file mode 100644
index 3041ff15..00000000
--- a/curator-recipes/src/site/confluence/shared-counter.confluence
+++ /dev/null
@@ -1,69 +0,0 @@
-h1. Shared Counter
-
-h2. Description
-Manages a shared integer. All clients watching the same path will have the up\-to\-date value of the shared integer
-(considering ZK's normal consistency guarantees).
-
-h2. Participating Classes
-* SharedCount
-* SharedCountReader
-* SharedCountListener
-
-h2. Usage
-h3. Creating a SharedCounter
-{code}
-public SharedCount(CuratorFramework client,
-                   String path,
-                   int seedValue)
-Parameters:
-client - the client
-path - the shared path - i.e. where the shared count is stored
-seedValue - the initial value for the count if/f the path has not yet been created
-{code}
-
-h3. General Usage
-SharedCounts must be started:
-{code}
-count.start();
-{code}
-
-When you are through with the instance, you should call close:
-{code}
-count.close();
-{code}
-
-{code}
-int getCount()
-Return the current value of the count
-{code}
-
-{code}
-void addListener(SharedCountListener listener)
-Add a listener for changes to the count
-{code}
-
-{code}
-public void setCount(int newCount)
-
-Change the shared count value irrespective of its previous state
-{code}
-
-{code}
-public boolean trySetCount(int newCount)
-
-Changes the shared count only if its value has not changed since this client last read it. If the count
-has changed, the value is not set and this client's view of the value is updated. i.e. if the count is
-not successful you can get the updated value by calling getCount().
-Parameters:
-newCount - the new value to attempt
-Returns:
-true if the change attempt was successful, false if not. If the change was not successful, getCount()
-will return the updated value
-{code}
-
-h2. Error Handling
-The {{SharedCountListener}} class extends {{ConnectionStateListener}}. When the SharedCount
-is started, it adds the listener to the Curator instance. Users of the {{SharedCount}} must pay attention to any connection state changes.
-
-If the SUSPENDED state is reported, the instance must assume that, until it receives a RECONNECTED state, the count
-is no longer accurate and isn't being updated. If the LOST state is reported, the count is permanently down.
diff --git a/curator-recipes/src/site/confluence/shared-lock.confluence b/curator-recipes/src/site/confluence/shared-lock.confluence
deleted file mode 100644
index aeb2eb06..00000000
--- a/curator-recipes/src/site/confluence/shared-lock.confluence
+++ /dev/null
@@ -1,48 +0,0 @@
-h1. Shared Lock
-
-h2. Description
-Fully distributed locks that are globally synchronous, meaning at any snapshot in time no two clients think
-they hold the same lock. Note: unlike InterProcessMutex this lock is *not* reentrant.
-
-h2. Participating Classes
-* InterProcessSemaphoreMutex
-
-h2. Usage
-h3. Create an InterProcessSemaphoreMutex
-{code}
-public InterProcessSemaphoreMutex(CuratorFramework client,
-                         String path)
-Parameters:
-client - client
-path - the path to lock
-{code}
-
-h3. General Usage
-To acquire the lock, use one of the acquire methods:
-{code}
-public void acquire()
-Acquire the mutex - blocking until it's available. Must be balanced by a call to release().
-{code}
-
-{code}
-public boolean acquire(long time,
-                       TimeUnit unit)
-Acquire the mutex - blocks until it's available or the given time expires. Must be balanced by a call to release().
-    &nbsp;
-Parameters:
-time - time to wait
-unit - time unit
-Returns:
-true if the mutex was acquired, false if not
-{code}
-
-To release the mutex, call:
-{code}
-public void release()
-Perform one release of the mutex if the calling thread is the same thread that acquired it.
-{code}
-
-h2. Error Handling
-It is strongly recommended that you add a {{ConnectionStateListener}} and watch for SUSPENDED and LOST state changes.
-If a SUSPENDED state is reported you cannot be certain that you still hold the lock unless you subsequently receive a
-RECONNECTED state. If a LOST state is reported it is certain that you no longer hold the lock.
diff --git a/curator-recipes/src/site/confluence/shared-reentrant-lock.confluence b/curator-recipes/src/site/confluence/shared-reentrant-lock.confluence
deleted file mode 100644
index f1e91de0..00000000
--- a/curator-recipes/src/site/confluence/shared-reentrant-lock.confluence
+++ /dev/null
@@ -1,72 +0,0 @@
-h1. Shared Reentrant Lock
-
-h2. Description
-Fully distributed locks that are globally synchronous, meaning at any snapshot in time no two clients think they hold the same lock.
-
-h2. Participating Classes
-* InterProcessMutex
-
-h2. Usage
-h3. Create an InterProcessMutex
-{code}
-public InterProcessMutex(CuratorFramework client,
-                         String path)
-Parameters:
-client - client
-path - the path to lock
-{code}
-
-h3. General Usage
-To acquire the lock, use one of the acquire methods:
-{code}
-public void acquire()
-Acquire the mutex - blocking until it's available. Note: the same thread can call acquire
-re-entrantly. Each call to acquire must be balanced by a call to release()
-{code}
-{code}
-public boolean acquire(long time,
-                       TimeUnit unit)
-Acquire the mutex - blocks until it's available or the given time expires. Note: the same thread can
-call acquire re-entrantly. Each call to acquire that returns true must be balanced by a call to release()
-
-Parameters:
-time - time to wait
-unit - time unit
-Returns:
-true if the mutex was acquired, false if not
-{code}
-
-To release the mutex, call:
-{code}
-public void release()
-Perform one release of the mutex if the calling thread is the same thread that acquired it. If the
-thread had made multiple calls to acquire, the mutex will still be held when this method returns.
-{code}
-
-*NOTE:* A InterProcessMutex instance is reusable. i.e. don't create a new instance every time. Re\-use a single instance.
-
-h3. Revoking
-InterProcessMutex supports a cooperative revocation mechanism as described on the ZooKeeper recipes wiki.
-
-To make a mutex revocable, call:
-{code}
-public void makeRevocable(RevocationListener<T> listener)
-Make the lock revocable. Your listener will get called when another process/thread wants you to release the lock. Revocation is cooperative.
-Parameters:
-listener - the listener
-{code}
-
-To ask for a lock to revoke/release, use the static method in the {{Revoker}} class:
-{code}
-public static void attemptRevoke(CuratorFramework client,
-                                 String path)
-                         throws Exception
-Utility to mark a lock for revocation. Assuming that the lock has been registered
-with a RevocationListener, it will get called and the lock should be released. Note,
-however, that revocation is cooperative.
-Parameters:
-client - the client
-path - the path of the lock - usually from something like InterProcessMutex.getParticipantNodes()
-{code}
-h2. Error Handling
-It is strongly recommended that you add a {{ConnectionStateListener}} and watch for SUSPENDED and LOST state changes. If a SUSPENDED state is reported you cannot be certain that you still hold the lock unless you subsequently receive a RECONNECTED state. If a LOST state is reported it is certain that you no longer hold the lock.
diff --git a/curator-recipes/src/site/confluence/shared-reentrant-read-write-lock.confluence b/curator-recipes/src/site/confluence/shared-reentrant-read-write-lock.confluence
deleted file mode 100644
index 749680fc..00000000
--- a/curator-recipes/src/site/confluence/shared-reentrant-read-write-lock.confluence
+++ /dev/null
@@ -1,46 +0,0 @@
-h1. Shared Reentrant Read Write Lock
-
-h2. Description
-A re\-entrant read/write mutex that works across JVMs. Uses Zookeeper to hold the lock. All processes in all
-JVMs that use the same lock path will achieve an inter\-process critical section. Further, this mutex is "fair" -
-each user will get the mutex in the order requested (from ZK's point of view).
-
-A read write lock maintains a pair of associated locks, one for read\-only operations and one for writing. The read
-lock may be held simultaneously by multiple reader processes, so long as there are no writers. The write lock is exclusive.
-
-_Reentrancy_
-This lock allows both readers and writers to reacquire read or write locks in the style of a re\-entrant lock.
-Non\-re\-entrant readers are not allowed until all write locks held by the writing thread/process have been released.
-Additionally, a writer can acquire the read lock, but not vice\-versa. If a reader tries to acquire the write lock it will never succeed.
-
-_Lock Downgrading_
-Re\-entrancy also allows downgrading from the write lock to a read lock, by acquiring the write lock, then the read
-lock and then releasing the write lock. However, upgrading from a read lock to the write lock is not possible.
-
-h2. Participating Classes
-* InterProcessReadWriteLock
-* InterProcessLock
-
-h2. Usage
-h3. Create an InterProcessReadWriteLock
-{code}
-public InterProcessReadWriteLock(CuratorFramework client,
-                                 String basePath)
-Parameters:
-client - the client
-basePath - path to use for locking
-{code}
-
-h3. General Usage
-Access either the read lock or the write lock and then use the methods as described for [[Shared lock|shared-lock.html]].
-
-{code}
-public InterProcessLock readLock()
-
-public InterProcessLock writeLock()
-{code}
-
-h2. Error Handling
-It is strongly recommended that you add a {{ConnectionStateListener}} and watch for SUSPENDED and
-LOST state changes. If a SUSPENDED state is reported you cannot be certain that you still hold the lock unless you
-subsequently receive a RECONNECTED state. If a LOST state is reported it is certain that you no longer hold the lock.
diff --git a/curator-recipes/src/site/confluence/shared-semaphore.confluence b/curator-recipes/src/site/confluence/shared-semaphore.confluence
deleted file mode 100644
index 2ab2de94..00000000
--- a/curator-recipes/src/site/confluence/shared-semaphore.confluence
+++ /dev/null
@@ -1,102 +0,0 @@
-h1. Shared Semaphore
-
-h2. Description
-A counting semaphore that works across JVMs. All processes in all JVMs that use the same lock path will achieve an inter\-process limited set of leases. Further, this semaphore is mostly "fair" \- each user will get a lease in the order requested (from ZK's point of view).
-
-There are two modes for determining the max leases for the semaphore. In the first mode the max leases is a convention maintained by the users of a given path. In the second mode a SharedCountReader is used as the method for semaphores of a given path to determine the max leases.
-
-If a SharedCountReader is not used, no internal checks are done to prevent Process A acting as if there are 10 leases and Process B acting as if there are 20. Therefore, make sure that all instances in all processes use the same numberOfLeases value.
-
-The various acquire methods return Lease objects that represent acquired leases. Clients must take care to close lease objects (ideally in a {{finally}} block) else the lease will be lost. However, if the client session drops (crash, etc.), any leases held by the client are automatically closed and made available to other clients.
-
-h2. Participating Classes
-* InterProcessSemaphoreV2
-* Lease
-* SharedCountReader
-
-h2. Usage
-h3. Creating an InterProcessSemaphoreV2
-{code}
-public InterProcessSemaphoreV2(CuratorFramework client,
-                             String path,
-                             int numberOfLeases)
-Parameters:
-client - client
-path - the path to lock
-numberOfLeases - the number of leases allowed by this semaphore
-{code}
-
-{code}
-public InterProcessSemaphoreV2(CuratorFramework client,
-                             String path,
-                             SharedCountReader count)
-Parameters:
-client - the client
-path - path for the semaphore
-count - the shared count to use for the max leases
-{code}
-
-h2. General Usage
-To acquire one lease/usage, use one of the acquire methods:
-
-{code}
-public Lease acquire()
-
-Acquire a lease. If no leases are available, this method blocks until either the maximum number of
-leases is increased or another client/process closes a lease.
-The client must close the lease when it is done with it. You should do this in a finally block.
-Returns:
-the new lease
-{code}
-
-{code}
-public Collection<Lease> acquire(int qty)
-
-Acquire qty leases. If there are not enough leases available, this method blocks until either the
-maximum number of leases is increased enough or other clients/processes close enough leases.
-The client must close the leases when it is done with them. You should do this in a finally block.
-NOTE: You can use returnAll(Collection) for this.
-Parameters:
-qty - number of leases to acquire
-Returns:
-the new leases
-{code}
-
-{code}
-public Lease acquire(long time,
-                     TimeUnit unit)
-Acquire a lease. If no leases are available, this method blocks until either the maximum number of
-leases is increased or another client/process closes a lease. However, this method will only block
-to a maximum of the time parameters given.
-The client must close the lease when it is done with it. You should do this in a finally block.
-Parameters:
-time - time to wait
-unit - time unit
-Returns:
-the new lease or null if time ran out
-{code}
-
-{code}
-public Collection<Lease> acquire(int qty,
-                               long time,
-                               TimeUnit unit)
-Acquire qty leases. If there are not enough leases available, this method blocks until either the
-maximum number of leases is increased enough or other clients/processes close enough leases. However,
-this method will only block to a maximum of the time parameters given. If time expires before all
-leases are acquired, the subset of acquired leases are automatically closed.
-The client must close the leases when it is done with them. You should do this in a finally block.
-NOTE: You can use returnAll(Collection) for this.
-Parameters:
-qty - number of leases to acquire
-time - time to wait
-unit - time unit
-{code}
-
-{{Lease}} instances can either be closed directly or you can use these convenience methods:
-{code}
-public void returnAll(Collection<Lease> leases)
-public void returnLease(Lease lease)
-{code}
-
-h2. Error Handling
-It is strongly recommended that you add a {{ConnectionStateListener}} and watch for SUSPENDED and LOST state changes. If a SUSPENDED state is reported you cannot be certain that you still hold the lock unless you subsequently receive a RECONNECTED state. If a LOST state is reported it is certain that you no longer hold the lock.
diff --git a/curator-recipes/src/site/confluence/simple-distributed-queue.confluence b/curator-recipes/src/site/confluence/simple-distributed-queue.confluence
deleted file mode 100644
index 711d4e11..00000000
--- a/curator-recipes/src/site/confluence/simple-distributed-queue.confluence
+++ /dev/null
@@ -1,51 +0,0 @@
-h1. Simple Distributed Queue
-
-h2. *IMPORTANT* \- We recommend that you do NOT use ZooKeeper for Queues. Please see [[Tech Note 4|https://cwiki.apache.org/confluence/display/CURATOR/TN4]] for details.
-
-h2. Description
-
-A drop\-in replacement for the DistributedQueue that comes with the ZK distribution.
-
-h2. Participating Classes
-
-* SimpleDistributedQueue
-
-h2. Usage
-
-*Creating a SimpleDistributedQueue*
-
-{code}
-public SimpleDistributedQueue(CuratorFramework client,
-                              String path)
-Parameters:
-client - the client
-path - path to store queue nodes
-{code}
-
-*Add to the queue*
-
-{code}
-public boolean offer(byte[] data)
-             throws Exception
-Inserts data into queue.
-Parameters:
-data - the data
-Returns:
-true if data was successfully added
-{code}
-
-*Take from the queue*
-
-{code}
-public byte[] take()
-           throws Exception
-Removes the head of the queue and returns it, blocks until it succeeds.
-Returns:
-The former head of the queue
-{code}
-
-NOTE: see the Javadoc for additional methods
-
-h2. Error Handling
-It is strongly recommended that you add a {{ConnectionStateListener}} and watch for SUSPENDED and LOST state changes.
-
diff --git a/curator-recipes/src/site/confluence/tree-cache.confluence b/curator-recipes/src/site/confluence/tree-cache.confluence
deleted file mode 100644
index 0d678571..00000000
--- a/curator-recipes/src/site/confluence/tree-cache.confluence
+++ /dev/null
@@ -1,39 +0,0 @@
-h1. Tree Cache
-
-h2. Description
-A utility that attempts to keep all data from all children of a ZK path locally cached. This class will watch the ZK path, respond to update/create/delete events, pull down the data, etc. You can register a listener that will get notified when changes occur.
-
-h2. Participating Classes
-* TreeCache
-* TreeCacheListener
-* TreeCacheEvent
-* ChildData
-
-h2. Usage
-h3. Creating a TreeCache
-{code}
-public TreeCache(CuratorFramework client,
-                         String path,
-                         boolean cacheData)
-Parameters:
-client - the client
-path - path to watch
-cacheData - if true, node contents are cached in addition to the stat
-{code}
-
-h2. General Usage
-The cache must be started by calling {{start()}}. Call {{close()}} when you are through with the cache.
-
-At any time, call {{getCurrentChildren()}} to get the current state of the cache. Alternatively, call {{getCurrentData()}} to get
-the data for a given path that's being monitored.
-
-You can also register to be notified when a change occurs by calling {{getListenable()}} and then:
-{code}
-public void addListener(TreeCacheListener listener)
-     Add a change listener
-Parameters:
-listener - the listener
-{code}
-
-h2. Error Handling
-TreeCache instances internally monitor a {{ConnectionStateListener}}. If the connection state changes, the cache will receive messages detailing the change.
diff --git a/curator-recipes/src/site/site.xml b/curator-recipes/src/site/site.xml
deleted file mode 100644
index 5ea4837d..00000000
--- a/curator-recipes/src/site/site.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<project xmlns="http://maven.apache.org/DECORATION/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.0.xsd" name="Apache Curator Recipes">
-    <body>
-        <head><![CDATA[
-            <link rel="stylesheet" href="../css/site.css" />
-            <script type="text/javascript">
-                $(function(){
-                    if ( location.pathname.match(".*index\.html") )
-                    {
-                        $('a[title="Recipes"]').parent().addClass("active");
-                    }
-                });
-            </script>
-        ]]></head>
-    </body>
-</project>
diff --git a/curator-test/src/site/confluence/index.confluence b/curator-test/src/site/confluence/index.confluence
deleted file mode 100644
index 507b4233..00000000
--- a/curator-test/src/site/confluence/index.confluence
+++ /dev/null
@@ -1,10 +0,0 @@
-h1. Testing Utilities
-
-h2. Test Server
-In the curator\-test sub\-model the {{TestingServer}} class is provided. This class creates a local, in\-process ZooKeeper server that can be used for testing.
-
-h2. Test Cluster
-In the curator\-test sub\-model the {{TestingCluster}} class is provided. This class creates an internally running ensemble of ZooKeeper servers.
-
-h2. Usage
-Look at the various Curator unit tests to see how these utilities are used.
diff --git a/curator-test/src/site/site.xml b/curator-test/src/site/site.xml
deleted file mode 100644
index f71dd75d..00000000
--- a/curator-test/src/site/site.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<project xmlns="http://maven.apache.org/DECORATION/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.0.xsd" name="Apache Curator Test">
-    <body>
-        <head><![CDATA[
-            <link rel="stylesheet" href="../css/site.css" />
-        ]]></head>
-    </body>
-</project>
diff --git a/curator-x-async/src/site/confluence/async.confluence b/curator-x-async/src/site/confluence/async.confluence
deleted file mode 100644
index 619f5c84..00000000
--- a/curator-x-async/src/site/confluence/async.confluence
+++ /dev/null
@@ -1,212 +0,0 @@
-h1. Curator Async
-
-With this DSL you can do asynchronous tasks in a more natural, functional way using
-[Java 8 lambdas|https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html]. For example:
-
-{code}
-// let "client" be a CuratorFramework instance
-AsyncCuratorFramework async = AsyncCuratorFramework.wrap(client);
-async.checkExists().forPath(somePath).thenAccept(stat -> mySuccessOperation(stat));
-{code}
-
-h2. Usage
-
-Note: To use Curator Async, you should be familiar with Java 8's lambdas, CompletedFuture and CompletionStage.
-
-Create a [[CuratorFramework|../curator\-framework/index.html]] instance in the normal way. You then wrap this instance using
-AsyncCuratorFramework. i.e.
-
-{code}
-// let "client" be a CuratorFramework instance
-AsyncCuratorFramework async = AsyncCuratorFramework.wrap(client);
-{code}
-
-AsyncCuratorFramework has most of the same builder methods that CuratorFramework does with some important
-differences:
-
-* AsyncCuratorFramework builders return {{AsyncStage}} instances
-* AsyncCuratorFramework builders have no checked exceptions
-* Many of the builder methods have been simplified/clarified
-* All builders invoke the asynchronous versions of ZooKeeper APIs
-* Watchers also use CompletionStages \- see below for details
-
-h4. AsyncStage
-
-AsyncStage instances extend Java 8's CompletionStage. CompletionStage objects can be "completed" with a success
-value or an exception. The parameterized type of the AsyncStage will
-be whatever the builder used would naturally return as a success value. E.g. the async getData() builder's AsyncStage is
-parameterized with "byte\[\]".
-
-h4. Watchers
-
-ZooKeeper watchers also get the CompletionStage treatment in Curator Async. To add a watcher, call
-watched() prior to starting the appropriate builders. E.g.
-
-{code}
-async.watched().getData().forPath(path) ...
-{code}
-
-Thus, a data watcher will be set on the specified path. You access the CompletionStage for the watcher
-by using the event() method of AsyncStage. Here is a complete example:
-
-{code}
-async.watched().getData().forPath(path).event().thenAccept(watchedEvent -> watchWasTriggered(watchedEvent));
-{code}
-
-ZooKeeper calls watchers when there is a connection loss. This can make using the CompletionStage
-somewhat complicated (see AsyncEventException below). If you are not interested in watcher connection
-problems, you can tell Curator Async to not send them by calling:
-
-{code}
-// only complete the CompletionStage when the watcher is successfully triggered
-// i.e. don't complete on connection issues
-async.with(WatchMode.successOnly).watched()...
-{code}
-
-h4. AsyncEventException
-
-When an async watcher fails the exception set in the CompletionStage will be of type {{AsyncEventException}}.
-This exception allows you to see the KeeperState that caused the trigger and allows you to reset the
-completion stage. Reset is needed because ZooKeeper temporarily triggers watchers when there is a connection
-event (unless {{WatchMode.successOnly}} is used). However, the watcher stays set for the original operation. Use {{AsyncEventException#reset}}
-to start a new completion stage that will wait on the next trigger of the watcher.
-
-E.g.
-
-{code}
-AsyncStage stage = ...
-stage.event().exceptionally(e -> {
-    AsyncEventException asyncEx = (AsyncEventException)e;
-
-    ... note a connection problem ...
-
-    asyncEx.reset().thenAccept(watchedEvent -> watchWasTriggered(watchedEvent));
-});
-{code}
-
-h4. AsyncResult
-
-As a convenience, you can use {{AsyncResult}} to combine ZooKeeper method value, the ZooKeeper result
-code and any exception in one object allowing you to not worry about exceptional completions. i.e. the {{CompletionStage}}
-returned by {{AsyncResult.of()}} always completes successfully with an AsyncResult object.
-
-AsyncResult has methods to get either the method result (a path, Stat, etc.), a KeeperException code
-or a general exception:
-
-{code}
-Optional<T> getValue();
-
-KeeperException.Code getCode();
-
-Optional<Throwable> getException();
-{code}
-
-Use AsyncResult by wrapping an {{AsyncStage}} value. i.e.
-
-{code}
-CompletionStage<AsyncResult<Stat>> resultStage = AsyncResult.of(async.checkExists().forPath(path));
-resultStage.thenAccept(result -> {
-    if ( result.getValue().isPresent() ) {
-        // ...
-    } else if ( result.getCode() == KeeperException.Code.NOAUTH ) {
-        // ...
-    }
-    // etc.
-});
-{code}
-
-h2. Examples
-
-h4. Create a sequential ZNode
-
-Create a sequential ZNode and, once successfully completed, set a watcher
-on the ZNode. Note: this code does not deal with errors. Should a connection
-problem occur or another exception occur, the completion lambda will never be called.
-
-{code}
-async.create().withMode(PERSISTENT_SEQUENTIAL).forPath(path).thenAccept(actualPath ->
-    async.watched().getData().forPath(actualPath).thenApply(() -> watchTriggered()));
-{code}
-
-----
-
-h4. AsyncStage canonical usage
-
-This is the canonical way to deal with AsyncStage. Use the handle() method which provides
-both the success value and the exception. The exception will be non\-null on error.
-
-{code}
-async.create().withOptions(EnumSet.of(doProtected)).forPath(path).handle((actualPath, exception) -> {
-    if ( exception != null )
-    {
-        // handle problem
-    }
-    else
-    {
-        // actualPath is the path created
-    }
-    return null;
-});
-{code}
-
-----
-
-h4. Simplified usage via AsyncResult
-
-{code}
-AsyncResult.of(async.create().withOptions(EnumSet.of(doProtected)).forPath(path)).thenAccept(result -> {
-    if ( result.getRawValue() != null )
-    {
-        // result.getRawValue() is the path created
-    }
-    else
-    {
-        // ...
-    }
-});
-{code}
-
-----
-
-h4. Using executors
-
-Your completion routines can operate in a separate thread if you provide an executor.
-
-{code}
-async.create().withOptions(EnumSet.of(createParentsIfNeeded)).forPath("/a/b/c")
-    .thenAcceptAsync(path -> handleCreate(path), executor);
-{code}
-
-----
-
-h4. Separate handlers
-
-This example shows specifying separate completion handlers for success and exception.
-
-{code}
-AsyncStage<byte[]> stage = async.getData().forPath("/my/path");
-stage.exceptionally(e -> {
-    if ( e instanceof KeeperException.NoNodeException )
-    {
-        // handle no node
-    }
-    else
-    {
-        // handle other
-    }
-    return null;
-});
-stage.thenAccept(data -> processData(data));
-{code}
-
-----
-
-h4. Synchronous usage
-
-CompletionStage provides a blocking method as well so that you can block to get the result
-of an operation. i.e. this makes it possible to use the async APIs in a synchronous way.
-
-{code}
-// NOTE: get() specifies a checked exception
-async.create().forPath("/foo").toCompletableFuture().get();
-{code}
diff --git a/curator-x-async/src/site/confluence/index.confluence b/curator-x-async/src/site/confluence/index.confluence
deleted file mode 100644
index 64f3786b..00000000
--- a/curator-x-async/src/site/confluence/index.confluence
+++ /dev/null
@@ -1,59 +0,0 @@
-h1. Curator Async
-
-h2. Packaging
-
-Curator Async is in its own package in Maven Central: curator\-x\-async
-
-h2. What Is Curator Async?
-
-Curator Async is a [DSL|https://en.wikipedia.org/wiki/Domain-specific_language] that wraps existing
-{{CuratorFramework}} instances. This DSL is entirely asynchronous and uses
-[Java 8's CompletionStage|https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionStage.html]
-mechanism for chaining, composing, etc. Additionally, Curator's original DSL has been cleaned up
-and simplified, in particular for operations such as {{create()}}.
-
-With this DSL you can do asynchronous tasks in a more natural, functional way using
-[Java 8 lambdas|https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html].
-
-The Curator Async package also contains a strongly typed DSL and strongly typed Cache Recipe wrappers that
-allows you to map a ZooKeeper path to a serializable class as opposed to raw byte arrays.
-
-h2. [[Curator Async|async.html]]
-
-With this DSL you can do asynchronous tasks in a more natural, functional way using
-[Java 8 lambdas|https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html]. For example:
-
-{code}
-// let "client" be a CuratorFramework instance
-AsyncCuratorFramework async = AsyncCuratorFramework.wrap(client);
-async.checkExists().forPath(somePath).thenAccept(stat -> mySuccessOperation(stat));
-{code}
-
-See [[Curator Async|async.html]] for details.
-
-h2. [[Modeled Curator|modeled.html]]
-
-This is a strongly typed DSL that allows you to map a Curator\-style client to:
-
-* A ZooKeeper path (supporting parameterized substitutions)
-* A serializer for the data stored at the path
-* Options for how nodes should be created (sequential, compressed data, ttl, etc.)
-* ACLs for the nodes at the path
-* Options for how to delete nodes (guaranteed, deleting children, etc.)
-
-For example:
-
-{code}
-ModeledFramework<Foo> modeled = ModeledFramework.wrap(client, fooModelSpec);
-modeled.set(new Foo());
-{code}
-
-See [[Modeled Curator|modeled.html]] for details.
-
-h2. [[Migrations|migrations.html]]
-
-Curator Migrations allow you pre\-apply transactions in a staged manner so that you
-can ensure a consistent state for parts of your ZooKeeper node hierarchy in a manner
-similar to database migration utilities.
-
-See [[Migrations|migrations.html]] for details.
diff --git a/curator-x-async/src/site/confluence/migrations.confluence b/curator-x-async/src/site/confluence/migrations.confluence
deleted file mode 100644
index 403e64a7..00000000
--- a/curator-x-async/src/site/confluence/migrations.confluence
+++ /dev/null
@@ -1,99 +0,0 @@
-h1. Migrations
-
-Curator Migrations allow you pre\-apply transactions in a staged manner so that you
-can ensure a consistent state for parts of your ZooKeeper node hierarchy in a manner
-similar to database migration utilities.
-
-h2. Background and Usage
-
-Note: To use Migrations, you should be familiar with Java 8's lambdas, CompletedFuture and CompletionStage.
-
-A "migration" is a set of operations to be performed in a transaction. A "migration set" is a list
-of migrations. Combined, this can be used to ensure an initial state for your ZooKeeper nodes as
-well as supporting upgrading/modifying existing state.
-
-For example, given a brand new ZooKeeper instance you might want to populate a few nodes
-and data. E.g.
-
-{code}
-CuratorOp op1 = client.transactionOp().create().forPath("/parent");
-CuratorOp op2 = client.transactionOp().create().forPath("/parent/one");
-CuratorOp op3 = client.transactionOp().create().forPath("/parent/two");
-CuratorOp op4 = client.transactionOp().create().forPath("/parent/three");
-CuratorOp op5 = client.transactionOp().create().forPath("/main", someData);
-{code}
-
-All 5 of these operations would be combined into a migration and set:
-
-{code}
-Migration migration = () -> Arrays.asList(op1, op2, op3, op4, op5);
-MigrationSet set = MigrationSet.build("main", Collections.singletonList(migration));
-{code}
-
-This set can then be passed to a {{MigrationManager}} for processing. The MigrationManager
-checks to see if the migration has been applied already and, if not, processes the transaction.
-
-At a future date, the migration set could be expanded to update/modify things. E.g.
-
-{code}
-CuratorOp newOp1 = client.transactionOp().create().forPath("/new");
-CuratorOp newOp2 = client.transactionOp().delete().forPath("/main");    // maybe this is no longer needed
-{code}
-
-This would be combined with the previous migration:
-
-{code}
-Migration initialMigration = () -> Arrays.asList(op1, op2, op3, op4, op5);
-Migration newMigration = () -> Arrays.asList(newOp1, newOp2);
-MigrationSet set = MigrationSet.build("main", Arrays.asList(initialMigration, newMigration));
-{code}
-
-When this set is run, the MigrationManager will perform both migration operations on new
-ZooKeeper databases but only the second "newMigration" on ZK databases that already have
-the first migration applied.
-
-h2. Details/Reference
-
-_Migration_
-
-A Migration is a wrapper around a list of operations that constitute one stage in a migration
-set and are applied as a single transaction.
-
-_MigrationSet_
-
-A MigrationSet is an ordered list of Migrations. Curator keeps track of which migrations in a
-set have been previously applied and only processes un\-applied migrations. Each migration
-set must have a unique identifier. Create a MigrationSet via its builder:
-
-{code}
-MigrationSet set = MigrationSet.build(migrationId, migrations);
-{code}
-
-_MigrationManager_
-
-The MigrationManager processes MigrationSets. Usually, you'd run this only on new ZooKeeper
-databases or as part of a maintenance operation to update the ZooKeeper database. E.g.
-
-{code}
-MigrationManager manager = new MigrationManager(client,
-    lockPath,       // base path for locks used by the manager
-    metaDataPath,   // base path to store the meta data
-    executor,       // the executor to use
-    lockMax         // max time to wait for locks
-);
-manager.migrate(set).exceptionally(e -> {
-    if ( e instanceof MigrationException ) {
-        // migration checksum failed, etc.
-    } else {
-        // some other kind of error
-    }
-    return null;
-});
-{code}
-
-* Each migration in the set is applied in a single transaction - i.e. all operations that comprise
-a migration set (the sum of all individual migration operations) are sent to ZooKeeper as a single
-transaction.
-* MigrationManager stores a hash of all operations in a migration so that it can be compared for future operations. i.e.
-if, in the future, a migration set is attempted but the hash of one of the previous migrations
-does not match, the stage completes exceptionally with {{MigrationException}}.
diff --git a/curator-x-async/src/site/confluence/modeled-components.confluence b/curator-x-async/src/site/confluence/modeled-components.confluence
deleted file mode 100644
index 62bcdebb..00000000
--- a/curator-x-async/src/site/confluence/modeled-components.confluence
+++ /dev/null
@@ -1,186 +0,0 @@
-h1. Modeled Curator \- Components
-
-Modeled Curator components are intended to allow you to model your ZooKeeper usage early in your application
-so that the majority of the code that interacts with ZooKeeper doesn't need to be concerned with
-paths, byte arrays, ACLs, options, etc. The [[Pub\-Sub Example|https://github.com/apache/curator/tree/master/curator-examples/src/main/java/pubsub]]
-can give you some ideas on how to accomplish this.
-
-h2. ZPath
-
-Instead of using raw string paths, Modeled Curator defines the {{ZPath}} interface that abstracts
-ZooKeeper paths. ZPaths can be simple static paths or can contain parameters that can be replaced
-as needed.
-
-To build a simple static path, use:
-
-{code}
-ZPath path = ZPath.parse("/my/static/path");
-{code}
-
-To build a path with parameters, use. {{ZPath.parseWithIds()}} using the value "\{XXXX\}" to
-denote a parameter. You can then use the {{resolve()}} method to replace the parameters. The value
-between "\{\}" can be any value. E.g.
-
-{code}
-ZPath path = ZPath.parseWithIds("/foo/{first param}/bar/{second param}");
-
-...
-
-ZPath resolvedPath = path.resolve(param1, param2);
-{code}
-
-h3. NodeName
-
-Parameters are resolved by calling {{toString()}} on the parameter. You can use {{NodeName}}
-to change this behavior. If a parameter implements {{NodeName}} the {{nodeName()}} method
-is used as the parameter value.
-
-h3. Partial Resolution
-
-Note: ZPaths can be partially resolved. E.g.
-
-{code}
-ZPath path = ZPath.parseWithIds("/foo/{type}/bar/{id}");
-
-...
-
-ZPath partial = path.resolve("standard");
-// partial is now "/foo/standard/bar/{id}"
-{code}
-
-ModeledFramework takes advantage of this. [[See below|#ModeledFramework]] for details.
-
-h2. ModelSpec
-
-A {{ModelSpec}} contains all the metadata needed to operate on a ZooKeeper path:
-
-* A ZPath
-* A serializer for the data stored at the path
-* Options for how nodes should be created (sequential, compressed data, ttl, etc.)
-* ACLs for the nodes at the path
-* Options for how to delete nodes (guaranteed, deleting children, etc.)
-
-ModelSpec instances are created via a builder. The builder sets defaults that should be
-useful for most applications but you can alter any of these as needed.
-
-{code}
-// a standard model spec for the given path and serializer
-// the model spec will have no ACLs and the options:
-// * createParentsAsContainers
-// * setDataIfExists
-// * DeleteOption.guaranteed
-ModelSpec<MyModel> spec = ModelSpec.builder(path, JacksonModelSerializer.build(MyModel.class)).build();
-{code}
-
-As a convenience, ModelSpec provides {{resolve()}} methods in case the ZPath used has parameters.
-E.g.
-
-{code}
-ZPath path = ZPath.parseWithIds("/foo/{id}/bar/{id}");
-ModelSpec<MyModel> spec = ModelSpec.builder(path, JacksonModelSerializer.build(MyModel.class)).build();
-
-...
-
-ModelSpec<MyModel> resolvedSpec = spec.resolve(param1, param2);
-{code}
-
-h3. JacksonModelSerializer
-
-A Jackson serializer, {{JacksonModelSerializer}}, is included. However, the Jackson dependency for it is
-specified as "provided" in the curator\-x\-async Maven POM file to avoid adding a new dependency to Curator.
-Therefore, if you wish to use the JacksonModelSerializer you must manually add the dependency to your build system.
-
-E.g. for Maven:
-
-{code}
-<dependency>
-    <groupId>com.fasterxml.jackson.core</groupId>
-    <artifactId>jackson-databind</artifactId>
-    <version>XXXX</version>
-</dependency>
-{code}
-
-h2. ModeledFramework
-
-{{ModeledFramework}} ties together all the metadata into a Curator\-style instance that is
-used to perform ZooKeeper operations. E.g.
-
-{code}
-ModeledFramework<MyModel> modeledClient = ModeledFramework.wrap(client, myModelSpec);
-
-...
-
-MyModel instance = ...
-modeledClient.set(instance);
-{code}
-
-The "set" call in the above example is the equivalent of:
-
-{code}
-MyModel instance = ...
-String path = "/foo/bar/" + instance.getId();
-byte[] data = serializer.serialize(instance);
-client.create()
-    .withOptions(Sets.newHashSet(CreateOption.createParentsAsContainers, CreateOption.setDataIfExists))
-    .forPath(path, data);
-{code}
-
-To get a value:
-
-{code}
-ModeledFramework<MyModel> modeledClient = ModeledFramework.wrap(client, myModelSpec);
-
-...
-
-modeledClient.read().whenComplete((value, e) -> {
-    if ( e != null ) {
-        // handle the error
-    } else {
-        // "value" is the MyModel instance
-    }
-});
-{code}
-
-The "read" call in the above example is the equivalent of:
-
-{code}
-String path = "/foo/bar/" + instanceId;
-client.getData().forPath(path).whenComplete((data, e) -> {
-    if ( e != null ) {
-        // handle the error
-    } else {
-        // NOTE: you must deal with possible deserialization problems
-        // caused by clients that write bad data
-        // If all of your code uses ModeledFramework you can guarantee that
-        // the data is always correctly written
-        MyModel model = serializer.deserialize(data);
-        // ...
-    }
-});
-{code}
-
-h3. Partially Resolved ZPaths and Set/Update
-
-ModeledFramework's various {{set}} and {{update}} methods check for unresolved ZPaths. If the current
-modelSpec has an unresolved ZPath when set/update is called, it is automatically resolved using the model
-instance being set/updated. E.g.
-
-{code}
-ZPath path = ZPath.parseWithIds("/root/{type}/instance/{id}");
-ModelSpec<MyModel> modelSpec = ModelSpec.builder(path, serializer);
-ModeledFramework<MyModel> modeledClient = ModeledFramework.wrap(modelSpec, client, modelSpec);
-
-...
-
-String currentType = ...
-MyModel model = ...
-modeledClient.resolved(currentType).set(model); // internally, ModeledFramework calls ZPath.resolved()
-                                                // using "model" as the argument to get the actual ZPath
-{code}
-
-h2. Caching and Typed Parameters
-
-In addition to the above features, Modeled Curator supports [[Integrated Caching|modeled-typed.html]],
-[[Typed Parameters|modeled-typed.html]] and [[Versioning|modeled-typed.html]]. See
-[[Caching and Typed Parameters|modeled-typed.html]] for details.
-
diff --git a/curator-x-async/src/site/confluence/modeled-typed.confluence b/curator-x-async/src/site/confluence/modeled-typed.confluence
deleted file mode 100644
index c02ea806..00000000
--- a/curator-x-async/src/site/confluence/modeled-typed.confluence
+++ /dev/null
@@ -1,89 +0,0 @@
-h1. Modeled Curator \- Caching, Typed Parameters and Versioning
-
-In addition to its [[main features|modeled-components.html]] Modeled Curator also supports
-integrated caching, typed parameters and versioning.
-
-h2. Caching
-
-{{ModeledFramework}} instances can be wrapped with a facade that uses a Curator cache internally.
-All read operations use this cache instead of making direct ZooKeeper calls. You can also
-listen for node changes. E.g.
-
-{code}
-ModeledFramework<MyModel> modeledClient = ModeledFramework.wrap(client, myModelSpec);
-CachedModeledFramework<MyModel> cached = modeledClient.cached();
-cached.start();
-
-// reads come from the cache
-cached.read().whenComplete(...) ...
-
-cached.listenable.addListener((type, path, stat, model) -> {
-    // type is NODE_ADDED, NODE_UPDATED, etc.
-});
-{code}
-
-h3. Unresolved Paths and Caching
-
-If the last node in the ModelSpec's path is a parameter, CachedModeledFramework will automatically
-listen to the parent path. E.g.
-
-{code}
-ZPath path = ZPath.parseWithIds("/root/instance/{id}");
-ModelSpec<MyModel> modelSpec = ModelSpec.builder(path, serializer);
-ModeledFramework<MyModel> modeledClient = ModeledFramework.wrap(modelSpec, client, modelSpec);
-
-CachedModeledFramework<MyModel> cached = modeledClient.cached();
-cached.start(); // automatically listens to "/root/instance" and below
-{code}
-
-h2. Typed Parameters
-
-The "resolve" methods in ZPath et al consume untyped Objects. Ideally, we should be able to
-specify parameters in a strongly typed manner. Modeled Curator's "type" templates provide this. You
-can specify typed parameters for ZPaths, ModelSpecs and ModeledFramework.
-The [[Pub\-Sub Example|https://github.com/apache/curator/tree/master/curator-examples/src/main/java/pubsub]]
-shows how to use typed parameters with ModeledFramework.
-
-Typed interfaces are provided for up to 10 parameters and are named
-{{TypedZPath}}, {{TypedZPath2}}, {{TypedModelSpec}}, {{TypedModelSpec2}}, {{TypedModeledFramework}},
-{{TypedModeledFramework2}}, etc.
-
-Here's an example of a TypedModeledFramework that models a Person and uses two parameters
-to generate the path, a Group and an Organization:
-
-{code}
-TypedModeledFramework2<Person, Group, Organization> clientTemplate = TypedModeledFramework2.from(
-    ModeledFrameworkBuilder.build(),
-    personModelSpec
-);
-
-...
-
-Group group = ...
-Organization organization = ...
-ModeledFramework<Person> modeledClient = clientTemplate.resolve(asyncClient, group, organization);
-client.set(person);
-{code}
-
-TypedZPath and TypedModelSpec work similarly.
-
-h2. Versioning
-
-Modeled Curator supports associating a ZNode version with a model object via
-the {{Versioned}} interface and the {{VersionedModeledFramework}} APIs. To
-read a model along with its ZNode version use:
-
-{code}
-ModeledFramework<Person> client = ...
-
-client.versioned().read().whenComplete((value, e) -> {
-    if ( value != null ) {
-        // value's type is Versioned<Person>
-        Person personModel = value.model();
-        int znodeVersion = value.version();
-    }
-});
-{code}
-
-{{VersionedModeledFramework}} has set/update APIs which automatically use the version
-from the {{Versioned}} instance.
diff --git a/curator-x-async/src/site/confluence/modeled.confluence b/curator-x-async/src/site/confluence/modeled.confluence
deleted file mode 100644
index 32e87279..00000000
--- a/curator-x-async/src/site/confluence/modeled.confluence
+++ /dev/null
@@ -1,48 +0,0 @@
-h1. Modeled Curator
-
-This is a strongly typed DSL that allows you to map a Curator\-style client to:
-
-* A ZooKeeper path (supporting parameterized substitutions)
-* A serializer for the data stored at the path
-* Options for how nodes should be created (sequential, compressed data, ttl, etc.)
-* ACLs for the nodes at the path
-* Options for how to delete nodes (guaranteed, deleting children, etc.)
-
-For example:
-
-{code}
-ModeledFramework<Foo> modeled = ModeledFramework.wrap(client, fooModelSpec);
-modeled.set(new Foo());
-{code}
-
-This ModeledFramework instance knows the path to use, how to serialize the "Foo" instance,
-which create options and ACLs to use, etc.
-
-h2. Background and Usage
-
-Note: To use Modeled Curator, you should be familiar with Java 8's lambdas, CompletedFuture and CompletionStage.
-You should also be familiar with [[Curator Async|async.html]] as Modeled Curator is based on it.
-
-Modeled Curator consists of the components:
-
-* [[ZPath|modeled-components.html]]
-* [[ModelSpec|modeled-components.html]]
-* [[ModeledFramework|modeled-components.html]]
-
-Additional functionality is provided by:
-
-* [[CachedModeledFramework|modeled-typed.html]]
-* [[Typed Parameter Templates|modeled-typed.html]]
-* [[Versioning|modeled-typed.html]]
-
-h2. Example
-
-A complete example usage of Modeled Curator along with CachedModeledFramework and Typed Parameter Templates
-can be found here: [[https://github.com/apache/curator/tree/master/curator-examples/src/main/java/pubsub]].
-
-h2. Details
-
-For more details see:
-
-* [[Components|modeled-components.html]]
-* [[Caching, Typed Parameters and Versioning|modeled-typed.html]]
diff --git a/curator-x-async/src/site/site.xml b/curator-x-async/src/site/site.xml
deleted file mode 100644
index c8707f43..00000000
--- a/curator-x-async/src/site/site.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<project xmlns="http://maven.apache.org/DECORATION/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.0.xsd" name="Curator Async">
-    <body>
-        <head><![CDATA[
-            <link rel="stylesheet" href="../css/site.css" />
-            <script type="text/javascript">
-                $(function(){
-                    if ( location && location.pathname && location.pathname.endsWith('/index.html') ) {
-                        $('a[title="Java 8/Async"]').parent().addClass("active");
-                    } else if ( location && location.pathname && location.pathname.endsWith('/migrations.html') ) {
-                        $('a[title="Migrations"]').parent().addClass("active");
-                    } else {
-                        $('a[title="Strongly Typed Models"]').parent().addClass("active");
-                    }
-                });
-            </script>
-        ]]></head>
-    </body>
-</project>
diff --git a/curator-x-discovery-server/src/site/confluence/index.confluence b/curator-x-discovery-server/src/site/confluence/index.confluence
deleted file mode 100644
index df253e92..00000000
--- a/curator-x-discovery-server/src/site/confluence/index.confluence
+++ /dev/null
@@ -1,90 +0,0 @@
-h1. Service Discovery Server
-
-h2. Packaging
-Curator Service Discovery is in its own package in Maven Central: curator\-x\-discovery\-server
-
-h2. Description
-The Service Discovery Server bridges non\-Java or legacy applications with the Curator [[Service Discovery|../curator-x-discovery/index.html]].
-It exposes RESTful web services to register, remove, query, etc. services.
-
-The Service Discovery Server provides JAX\-RS components that can be incorporated into a container of your choice
-(Tomcat, Jetty, etc.). You can also choose any JAX\-RS provider (Jersey, RESTEasy, etc.).
-
-h2. Deploying the Server
-The server must be combined with a JAX\-RS implementation (Jersey, etc.) and a container (Tomcat, Jetty, etc.).
-
-Several singletons need to be injected:
-
-* ServiceDiscovery
-* DiscoveryContext
-* JsonServiceInstanceMarshaller
-* JsonServiceInstancesMarshaller
-* JsonServiceNamesMarshaller
-
-Additionally the JAX\-RS Resource class must be injected. Due to how most JAX\-RS implementations are written, you must
-create a concrete class that extends this using your payload type. The concrete class should have the base path that you'd like to use.
-Because the JAX\-RS implementation can create a new instance of the resource for every request, your concrete class must
-use a context resolver to access the DiscoveryContext. Or, if you are using an IoC framework, you can access it that way.
-
-Here's a version that has no payload (i.e. a Void payload):
-{code}
-   @Path("/")
-   public class MyResource extends DiscoveryResource<Void> {
-       public MyResource(@Context ContextResolver<DiscoveryContext<Void>> resolver) {
-           // note: this may not work with all JAX-RS implementations
-           super(resolver.getContext(DiscoveryContext.class));
-       }
-   }
-{code}
-
-h2. REST
-Clients must make appropriate REST calls to register themselves and send periodic heartbeats. They can also find services via REST calls:
-
-h2. putService
-*Method:* PUT \\
-*Path:* v1/service/{name}/{id} \\
-*Request Entity:* ServiceInstance \\
-*Response Entity:* n/a \\
-*Description:* {name} is the service name, {id} is the instance id. The request entity is a _ServiceInstance_. This
-method registers a service instance. If the ServiceType is STATIC, the instance is registered only for the pre\-defined period
-(defined in the DiscoveryContext). STATIC services must call putService at least once per period. PERMANENT services are registered
-until they are manually deleted.
-
-h2. removeService
-*Method:* DELETE \\
-*Path:* v1/service/{name}/{id} \\
-*Request Entity:* n/a \\
-*Response Entity:* n/a \\
-*Description:* {name} is the service name, {id} is the instance id. The specified service is deleted/unregistered.
-
-h2. get
-*Method:* GET \\
-*Path:* v1/service/{name}/{id} \\
-*Request Entity:* n/a \\
-*Response Entity:* ServiceInstance \\
-*Description:* {name} is the service name, {id} is the instance id. Returns the complete _ServiceInstance_ for the specified
-service. 404 is returned if not found.
-
-h2. getAllNames
-*Method:* GET \\
-*Path:* v1/service \\
-*Request Entity:* n/a \\
-*Response Entity:* ServiceNames \\
-*Description:* Returns all currently registered service names.
-
-h2. getAll
-*Method:* GET \\
-*Path:* v1/service/{name} \\
-*Request Entity:* n/a \\
-*Response Entity:* ServiceInstances \\
-*Description:* {name} is the service name. Returns all service instances for the named service.
-
-h2. getAny
-*Method:* GET \\
-*Path:* v1/anyservice/{name} \\
-*Request Entity:* n/a \\
-*Response Entity:* ServiceInstance \\
-*Description:* {name} is the service name. Return a random instance from the given service or 404.
-
-h2. JSON specs
-The JSON specifications for the REST entities are documented here: [[https://git-wip-us.apache.org/repos/asf?p=curator.git;a=blob_plain;f=curator-x-discovery-server/README.txt;hb=HEAD]]
diff --git a/curator-x-discovery-server/src/site/site.xml b/curator-x-discovery-server/src/site/site.xml
deleted file mode 100644
index bf57e9a0..00000000
--- a/curator-x-discovery-server/src/site/site.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<project xmlns="http://maven.apache.org/DECORATION/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.0.xsd" name="Discovery Service Server">
-    <body>
-        <head><![CDATA[
-            <link rel="stylesheet" href="../css/site.css" />
-            <script type="text/javascript">
-                $(function(){
-                    $('a[title="Service Discovery Server"]').parent().addClass("active");
-                });
-            </script>
-        ]]></head>
-    </body>
-</project>
diff --git a/curator-x-discovery/src/site/confluence/index.confluence b/curator-x-discovery/src/site/confluence/index.confluence
deleted file mode 100644
index 22a8875c..00000000
--- a/curator-x-discovery/src/site/confluence/index.confluence
+++ /dev/null
@@ -1,166 +0,0 @@
-h1. Service Discovery
-
-h2. Packaging
-
-Curator Service Discovery is in its own package in Maven Central: curator\-x\-discovery
-
-h2. What Is a Discovery Service?
-
-In SOA/distributed systems, services need to find each other. i.e. a web service might need to find a caching
-service, etc. DNS can be used for this but it is nowhere near flexible enough for services that are constantly changing.
-A Service Discovery system provides a mechanism for:
-
-* Services to register their availability
-* Locating a single instance of a particular service
-* Notifying when the instances of a service change
-
-h2. Curator Service Discovery
-
-h3. ServiceInstance
-
-A service instance is represented by the class: {{ServiceInstance}}. ServiceInstances have a name, id, address,
-port and/or ssl port, and an optional payload (user defined). ServiceInstances are serialized and stored in ZooKeeper in the following way:
-
-{noformat}
-base path
-       |_______ service A name
-                    |__________ instance 1 id --> (serialized ServiceInstance)
-                    |__________ instance 2 id --> (serialized ServiceInstance)
-                    |__________ ...
-       |_______ service B name
-                    |__________ instance 1 id --> (serialized ServiceInstance)
-                    |__________ instance 2 id --> (serialized ServiceInstance)
-                    |__________ ...
-       |_______ ...
-{noformat}
-
-h3. ServiceProvider
-
-The main abstraction class is {{ServiceProvider}}. It encapsulates the discovery service for a particular
-named service along with a provider strategy. A provider strategy is a scheme for selecting one instance from a set of
-instances for a given service. There are three bundled strategies: Round Robin, Random and Sticky (always selects the same one).
-
-ServiceProviders are allocated by using a {{ServiceProviderBuilder}}. You obtain a ServiceProviderBuilder from the
-ServiceDiscovery (see below). The ServiceProviderBuilder allows you to set the service name and several other optional values.
-
-The ServiceProvider must be started by calling {{start()}}. When finished you should call {{close()}}.
-The only method in ServiceProvider is:
-
-{code}
-public ServiceInstance<T> getInstance()
-                            throws Exception
-Return an instance for a single use. IMPORTANT: users should not hold on to the instance
-returned. A fresh instance should always be retrieved.
-Returns:
-the instance to use
-{code}
-
-*Note:* When using Curator 2.x (Zookeeper 3.4.x) it's essential that service provider objects are cached by your application and reused.
-Since the internal NamespaceWatcher objects added by the service provider cannot be removed in Zookeeper 3.4.x, creating a fresh service
-provider for each call to the same service will eventually exhaust the memory of the JVM.
-
-h3. ServiceDiscovery
-
-In order to allocate a ServiceProvider, you must have a ServiceDiscovery. It is created by a {{ServiceDiscoveryBuilder}}.
-
-You must call {{start()}} on the object and, when done with it, call {{close()}}.
-
-h3. Instance Stability
-
-If a particular instance has an I/O error, etc. you should call {{ServiceProvider.noteError()}} passing in the instance.
-The ServiceProvider will temporarily consider instances that have errors to be "down". The thresholds and timeouts for
-down instances are set via the {{DownInstancePolicy}} which can be passed to {{ServiceProviderBuilder}} (note: a default
-DownInstancePolicy is used if you don't specify one).
-
-----
-
-h3. Low Level APIs
-
-The ServiceProvider API is all you should need for most purposes. However, for finer grained control, you can use these methods:
-
-*Registering/Unregistering Services*
-
-Normally, you pass your application's service descriptor to the ServiceDiscovery constructor and it will get registered/unregistered
-automatically. If, though, you need to manually do this, use these methods:
-
-{code}
-public void registerService(ServiceInstance<T> service)
-                    throws Exception
-Register/re-register/update a service instance
-Parameters:
-service - service to add
-{code}
-
-{code}
-public void unregisterService(ServiceInstance<T> service)
-                      throws Exception
-Unregister/remove a service instance
-Parameters:
-service - the service
-{code}
-
-*Querying for Services*
-
-You can query for all service names, all instances of a particular service, or single service instance.
-
-{code}
-public Collection<String> queryForNames()
-                              throws Exception
-Return the names of all known services
-Returns:
-list of service names
-{code}
-
-{code}
-public Collection<ServiceInstance<T>> queryForInstances(String name)
-                                            throws Exception
-Return all known instances for the given service
-Parameters:
-name - name of the service
-Returns:
-list of instances (or an empty list)
-{code}
-
-{code}
-public ServiceInstance<T> queryForInstance(String name,
-                                         String id)
-                                 throws Exception
-Return a service instance POJO
-Parameters:
-name - name of the service
-id - ID of the instance
-Returns:
-the instance or null if not found
-{code}
-
-*Service Cache*
-
-Each of the above query methods calls ZooKeeper directly. If you need more than occasional querying of services you can use the
-{{ServiceCache}}. It caches in memory the list of instances for a particular service. It uses a Watcher to keep the list up to date.
-
-You allocate a ServiceCache via the builder returned by {{ServiceDiscovery.serviceCacheBuilder()}}. The ServiceCache
-object must be started by calling {{start()}} and, when done, you should call {{close()}}. You can get the
-currently known list of instances for the service by calling:
-
-{code}
-public Collection<ServiceInstance<T>> getInstances()
-Return the current list of instances. NOTE: there is no guarantee of freshness. This is merely
-the last known list of instances. However, the list is updated via a ZooKeeper watcher so it
-should be fresh within a window of a second or two.
-{code}
-
-ServiceCache supports a listener that gets notified when Watcher has updated the list of instances:
-
-{code}
-/**
- * Listener for changes to a service cache
- */
-public interface ServiceCacheListener extends ConnectionStateListener
-{
-    /**
-     * Called when the cache has changed (instances added/deleted, etc.)
-     */
-    public void cacheChanged();
-}
-{code}
-
diff --git a/curator-x-discovery/src/site/site.xml b/curator-x-discovery/src/site/site.xml
deleted file mode 100644
index 8b40d5f1..00000000
--- a/curator-x-discovery/src/site/site.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<project xmlns="http://maven.apache.org/DECORATION/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.0.xsd" name="Discovery Service">
-    <body>
-        <head><![CDATA[
-            <link rel="stylesheet" href="../css/site.css" />
-            <script type="text/javascript">
-                $(function(){
-                    $('a[title="Service Discovery"]').parent().addClass("active");
-                });
-            </script>
-        ]]></head>
-    </body>
-</project>
diff --git a/pom.xml b/pom.xml
index 51364fb6..4771c467 100644
--- a/pom.xml
+++ b/pom.xml
@@ -134,30 +134,6 @@
         <url>https://issues.apache.org/jira/browse/CURATOR</url>
     </issueManagement>
 
-    <ciManagement>
-        <system>Jenkins</system>
-        <url>https://builds.apache.org/job/Curator/</url>
-        <notifiers>
-            <notifier>
-                <type>mail</type>
-                <sendOnError>true</sendOnError>
-                <sendOnFailure>true</sendOnFailure>
-                <sendOnSuccess>false</sendOnSuccess>
-                <sendOnWarning>false</sendOnWarning>
-                <configuration>
-                    <address>dev@curator.apache.org</address>
-                </configuration>
-            </notifier>
-        </notifiers>
-    </ciManagement>
-
-    <distributionManagement>
-        <site>
-            <id>apache.website.svnpub</id>
-            <url>scm:svn:https://svn.apache.org/repos/asf/curator/site/trunk</url>
-        </site>
-    </distributionManagement>
-
     <mailingLists>
         <mailingList>
             <name>Users</name>
@@ -835,50 +811,6 @@
                 </configuration>
             </plugin>
 
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-site-plugin</artifactId>
-                <configuration>
-                    <locales>en</locales>
-                    <skipDeploy>true</skipDeploy>
-                </configuration>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.apache.maven.doxia</groupId>
-                        <artifactId>doxia-module-confluence</artifactId>
-                        <version>${doxia-module-confluence-version}</version>
-                    </dependency>
-                </dependencies>
-                <executions>
-                    <execution>
-                        <phase>site</phase>
-                        <goals>
-                            <goal>site</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-scm-publish-plugin</artifactId>
-                <inherited>false</inherited>
-                <configuration>
-                    <checkinComment>Curator website deployment</checkinComment>
-                    <!-- define curator-website-checkout-path in settings.xml -->
-                    <checkoutDirectory>${curator-website-checkout-path}</checkoutDirectory>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>scm-publish</id>
-                        <phase>site-deploy</phase>
-                        <goals>
-                            <goal>publish-scm</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-release-plugin</artifactId>
diff --git a/src/site/confluence/breaking-changes.confluence b/src/site/confluence/breaking-changes.confluence
deleted file mode 100644
index d0530a3e..00000000
--- a/src/site/confluence/breaking-changes.confluence
+++ /dev/null
@@ -1,15 +0,0 @@
-h1. Curator 5.0 Breaking Changes
-
-Curator 5.0 contains a few non\-backward compatible/breaking changes from previous versions.
-
-* ZooKeeper 3.4.x is no longer supported (the associated {{Compatibility}} classes/methods have been removed). If you still
-need to use Curator with ZooKeeper 3.4.x you will need to use a previous version. [[Click here for details|zk-compatibility-34.html]].
-* The old {{ListenerContainer}} classes have been removed so as not to leak Guava classes into Curator APIs. Instead use the new {{StandardListenerManager}}.
-* Exhibitor support has been removed.
-* {{ConnectionHandlingPolicy}} and related classes have been removed.
-* The {{Reaper}} and {{ChildReaper}} classes/recipes have been removed. You should use ZooKeeper container nodes instead.
-* {{newPersistentEphemeralNode()}} and {{newPathChildrenCache()}} were removed from {{GroupMember}}.
-* {{ServiceCacheBuilder<T> executorService(CloseableExecutorService executorService)}} was removed from {{ServiceCacheBuilder}}.
-* {{ServiceProviderBuilder<T> executorService(CloseableExecutorService executorService)}} was removed from {{ServiceProviderBuilder}}.
-* {{static boolean shouldRetry(int rc)}} was removed from {{RetryLoop}}.
-* {{static boolean isRetryException(Throwable exception)}} was removed from {{RetryLoop}}.
diff --git a/src/site/confluence/compatibility.confluence b/src/site/confluence/compatibility.confluence
deleted file mode 100644
index 467f1fc5..00000000
--- a/src/site/confluence/compatibility.confluence
+++ /dev/null
@@ -1,10 +0,0 @@
-h1. API Compatibility
-
-A [[Clirr|http://clirr.sourceforge.net/]] report is generated for each Curator module:
-
-* [[Curator Client Report|curator-client/clirr-report.html]]
-* [[Curator Framework Report|curator-framework/clirr-report.html]]
-* [[Curator Recipes Report|curator-recipes/clirr-report.html]]
-* [[Curator Async Report|curator-x-async/clirr-report.html]]
-* [[Curator Discovery Report|curator-x-discovery/clirr-report.html]]
-* [[Curator Discovery Server Report|curator-x-discovery-server/clirr-report.html]]
diff --git a/src/site/confluence/errors.confluence b/src/site/confluence/errors.confluence
deleted file mode 100644
index b4f66437..00000000
--- a/src/site/confluence/errors.confluence
+++ /dev/null
@@ -1,42 +0,0 @@
-h1. Error Handling
-
-h2. Background
-ZooKeeper is a very low level system that requires users to do a lot of housekeeping. See:
-
-* [[https://wiki.apache.org/hadoop/ZooKeeper/FAQ]]
-
-The Curator [[Framework|curator-framework/index.html]] is designed to hide as much of the details/tedium of this housekeeping as is possible.
-
-h2. Connection Guarantees
-The Curator [[Framework|curator-framework/index.html]] constantly monitors the connection to the ZooKeeper ensemble. Further every operation is wrapped
-in a retry mechanism. Thus, the following guarantees can be made:
-
-* Every Curator operation properly waits until the ZooKeeper connection is established
-* Every Curator [[Framework|curator-framework/index.html]] operation (create, getData, etc.) is guaranteed to manage connection loss and/or session expiration per the currently set retry policy
-* If the connection is temporarily lost, Curator will attempt to retry the operation until it succeeds per the currently set retry policy
-* All Curator recipes attempt to deal with connection issues in an appropriate way
-
-h2. Notifications
-Curator exposes several listenable interfaces for clients to monitor the state of the ZooKeeper connection.
-
-{{ConnectionStateListener}} is called when there are connection disruptions. Clients can monitor these changes and take
-appropriate action. These are the possible state changes:
-
-|CONNECTED|Sent for the first successful connection to the server. NOTE: You will only get one of these messages for any CuratorFramework instance.|
-|READ_ONLY|The connection has gone into read\-only mode. This can only happen if you pass true for CuratorFrameworkFactory.Builder.canBeReadOnly(). See the ZooKeeper doc regarding read only connections: [[https://wiki.apache.org/hadoop/ZooKeeper/GSoCReadOnlyMode]]. The connection will remain in read only mode until another state change is sent.|
-|SUSPENDED|There has been a loss of connection. Leaders, locks, etc. should suspend until the connection is re\-established.|
-|RECONNECTED|A suspended or lost connection has been re\-established.|
-|LOST|Curator will set the LOST state when it believes that the ZooKeeper session has expired. ZooKeeper connections have a session. When the session expires, clients must take appropriate action. In Curator, this is complicated by the fact that Curator internally manages the ZooKeeper connection. Curator will set the LOST state when any of the following occurs: a) ZooKeeper returns a Watcher.Event.KeeperState.Expired or KeeperException.Code.SESSIONEXPIRED; b) Curator closes the internal [...]
-
-{{UnhandledErrorListener}} is called when a background task, etc. catches an exception. In general, Curator users shouldn't care
-about these as they are logged. However, you can listen for them if you choose.
-
-h2. Error Policy
-
-Curator has a pluggable error policy. The default policy takes the conservative approach of treating connection states SUSPENDED and LOST the same way.
-i.e. when a recipe sees the state change to SUSPENDED it will assume that the ZooKeeper session is lost and will clean up any watchers, nodes, etc. You can choose,
-however, a more aggressive approach by setting the error policy to only treat LOST (i.e. true session loss) as an error state. Do this in the CuratorFrameworkFactory via:
-{{connectionStateErrorPolicy(new SessionConnectionStateErrorPolicy())}}.
-
-h2. Recipes
-In general, the recipes attempt to deal with errors and connection issues. See the doc for each recipe for details on how it deals with errors.
diff --git a/src/site/confluence/getting-started.confluence b/src/site/confluence/getting-started.confluence
deleted file mode 100644
index 5a763bc3..00000000
--- a/src/site/confluence/getting-started.confluence
+++ /dev/null
@@ -1,84 +0,0 @@
-h1. Getting Started
-
-h2. Learn ZooKeeper
-
-Curator users are assumed to know ZooKeeper. A good place to start is here: [[https://zookeeper.apache.org/doc/current/zookeeperStarted.html]]
-
-h2. Using Curator
-
-The Curator JARs are available from Maven Central. The various artifacts are listed on the [[main page|index.html]]. Users
-of Maven, Gradle, Ant, etc. can easily include Curator into their build script.
-
-Most users will want to use one of Curator's pre\-built recipes. So, the curator\-recipes is the correct artifact to use. If you only
-want a wrapper around ZooKeeper that adds connection management and retry policies, use curator\-framework.
-
-h2. Getting a Connection
-
-Curator uses [[Fluent Style|https://en.wikipedia.org/wiki/Fluent%5Finterface]]. If you haven't used this before, it might seem odd
-so it's suggested that you familiarize yourself with the style.
-
-Curator connection instances ({{CuratorFramework}}) are allocated from the {{CuratorFrameworkFactory}}. You only need *one*
-{{CuratorFramework}} object for each ZooKeeper cluster you are connecting to:
-
-{code}
-CuratorFrameworkFactory.newClient(zookeeperConnectionString, retryPolicy)
-{code}
-
-This will create a connection to a ZooKeeper cluster using default values. The only thing that you need to specify is the retry
-policy. For most cases, you should use:
-
-{code}
-RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3)
-CuratorFramework client = CuratorFrameworkFactory.newClient(zookeeperConnectionString, retryPolicy);
-client.start();
-{code}
-
-The client must be started (and closed when no longer needed).
-
-h2. Calling ZooKeeper Directly
-
-Once you have a CuratorFramework instance, you can make direct calls to ZooKeeper in a similar way to using the raw
-{{ZooKeeper}} object provided in the ZooKeeper distribution. E.g.:
-
-{code}
-client.create().forPath("/my/path", myData)
-{code}
-
-The benefit here is that Curator manages the ZooKeeper connection and will retry operations if there are connection problems.
-
-h2. Recipes
-
-h3. Distributed Lock
-
-{code}
-InterProcessMutex lock = new InterProcessMutex(client, lockPath);
-if ( lock.acquire(maxWait, waitUnit) ) 
-{
-    try 
-    {
-        // do some work inside of the critical section here
-    }
-    finally
-    {
-        lock.release();
-    }
-}
-{code}
-
-h3. Leader Election
-
-{code}
-LeaderSelectorListener listener = new LeaderSelectorListenerAdapter()
-{
-    public void takeLeadership(CuratorFramework client) throws Exception
-    {
-        // this callback will get called when you are the leader
-        // do whatever leader work you need to and only exit
-        // this method when you want to relinquish leadership
-    }
-}
-
-LeaderSelector selector = new LeaderSelector(client, path, listener);
-selector.autoRequeue();  // not required, but this is behavior that you will probably expect
-selector.start();
-{code}
diff --git a/src/site/confluence/index.confluence b/src/site/confluence/index.confluence
deleted file mode 100644
index fcaaed6d..00000000
--- a/src/site/confluence/index.confluence
+++ /dev/null
@@ -1,54 +0,0 @@
-h1. Welcome to Apache Curator
-
-h2. What is Curator?
-
-Curator _n &#x02c8;kyoor&#x035d;&#x02cc;&#x0101;t&#x0259;r_: a keeper or custodian of a museum or other collection \- A ZooKeeper Keeper.
-
-Apache Curator is a Java/JVM client library for [[Apache ZooKeeper|https://zookeeper.apache.org/]], a distributed coordination service. It includes a high-level API framework and utilities to make using Apache ZooKeeper much easier and more reliable. It also includes recipes for common use cases and extensions such as service discovery and a Java 8 asynchronous DSL.
-
-!images/ph-quote.png!
-
-h2. Download
-
-[[Download Apache Curator|releases.html]] from the release page.
-
-h2. Important Compatibility Updates
-
-Note: version 5.0 of Curator has a few breaking changes. Please read the details here:
-
-[[Curator 5.0 Breaking Changes|breaking-changes.html]].
-
-h2. Getting Started
-
-See the page for quick start: [[Getting Started|getting-started.html]].
-
-h2. Stack Overflow
-
-There's lots of great help on Stack Overflow:
-
-* [[Main "Apache Curator" tag|https://stackoverflow.com/questions/tagged/apache-curator]]
-
-h2. Nav Bar
-
-!images/arrow.png!
-
-Use the navigation links in the left\-nav menu for detailed information.
-
-h2. Maven / Artifacts
-
-Curator binaries are published to Maven Central. Curator consists of several artifacts. Which artifacts to use depends on your needs. For
-most users, the only artifact you need is curator\-recipes.
-
-For OSGi users, there's another set of artifacts of classifier osgi available in Maven Central. These artifacts are not
-shaded, thus no package relocation is performed inside, so hopefully they could start as bundles when their dependencies
-are fulfilled by dedicated bundles, e.g. guava.
-
-||GroupID/Org||ArtifactID/Name||Description||
-|org.apache.curator|curator\-recipes|All of the recipes. Note: this artifact has dependencies on client and framework and, so, Maven (or whatever tool you're using) should pull those in automatically.|
-|org.apache.curator|curator\-async|Asynchronous DSL with O/R modeling, migrations and many other features.|
-|org.apache.curator|curator\-framework|The Curator Framework high level API. This is built on top of the client and should pull it in automatically.|
-|org.apache.curator|curator\-client|The Curator Client \- replacement for the ZooKeeper class in the ZK distribution.|
-|org.apache.curator|curator\-test|Contains the TestingServer, the TestingCluster and a few other tools useful for testing.|
-|org.apache.curator|curator\-examples|Example usages of various Curator features.|
-|org.apache.curator|curator\-x\-discovery|A Service Discovery implementation built on the Curator Framework.|
-|org.apache.curator|curator\-x\-discovery\-server|A RESTful server that can be used with Curator Discovery.|
diff --git a/src/site/confluence/logging.confluence b/src/site/confluence/logging.confluence
deleted file mode 100644
index 5448846a..00000000
--- a/src/site/confluence/logging.confluence
+++ /dev/null
@@ -1,14 +0,0 @@
-h1. Logging and Tracing
-
-h2. Details
-Curator is logging and tracing neutral. The Curator code is instrumented with logging and tracers
-but uses a driver mechanism that allows easy integration into your preferred logging and tracing frameworks.
-
-h2. Logging
-Curator uses SLF4J ([[https://www.slf4j.org/]]) for logging. SLF4J is a facade over logging that allows you to
-plug in any (or no) logging framework. See the SLF4J website for details.
-
-h2. Tracing
-Connect Curator tracing to your tracing framework via an instance of {{TracerDriver}} or {{AdvancedTracerDriver}}.
-Curator calls the various methods (e.g. addTrace() or addCount() ) and your instance proxies the calls to your tracing
-framework. Inform Curator of your tracing driver instance by calling {{CuratorZookeeperClient.setTracerDriver()}}.
diff --git a/src/site/confluence/releases.confluence b/src/site/confluence/releases.confluence
deleted file mode 100644
index 432c9a75..00000000
--- a/src/site/confluence/releases.confluence
+++ /dev/null
@@ -1,22 +0,0 @@
-h1. Apache Curator Releases
-
-h2. Download
-The current release can be [[downloaded using these links|#Current_Release]].
-
-Older releases are available from the [[archive|https://archive.apache.org/dist/curator/]].
-
-You can verify the integrity of a downloaded release using the PGP signatures and hashes hosted at the main Apache distribution site.
-For additional information, refer to the Apache documentation for [[verifying the integrity of Apache project releases|https://www.apache.org/info/verification.html]].
-The binary artifacts for Curator are available from [[Maven Central|http://search.maven.org/#search%7Cga%7C1%7Corg.apache.curator]] and its mirrors.
-
-h2. Current Release
-
-* Current Release: [[apache\-curator\-${currentStableVersion}\-source\-release.zip|https://www.apache.org/dyn/closer.lua/curator/${currentStableVersion}/apache-curator-${currentStableVersion}-source-release.zip]]
-* PGP: [[apache\-curator\-${currentStableVersion}\-source\-release.zip.asc|https://downloads.apache.org/curator/${currentStableVersion}/apache-curator-${currentStableVersion}-source-release.zip.asc]]
-* SHA\-512: [[apache\-curator\-${currentStableVersion}\-source\-release.zip.sha512|https://downloads.apache.org/curator/${currentStableVersion}/apache-curator-${currentStableVersion}-source-release.zip.sha512]]
-* Keys: [[KEYS|https://downloads.apache.org/curator/KEYS]]
-
-h2. All Releases / History
-
-See [[Curator's Release Wiki|https://cwiki.apache.org/confluence/display/CURATOR/Releases]] for a detailed historical
-list of releases.
diff --git a/src/site/confluence/utilities.confluence b/src/site/confluence/utilities.confluence
deleted file mode 100644
index 2bd7ac12..00000000
--- a/src/site/confluence/utilities.confluence
+++ /dev/null
@@ -1,73 +0,0 @@
-h1. Utilities
-
-h2. Test Server
-In the curator\-test sub\-model the {{TestingServer}} class is provided. This class creates a local, in\-process ZooKeeper server that can be used for testing.
-
-h2. Test Cluster
-In the curator\-test sub\-model the {{TestingCluster}} class is provided. This class creates an internally running ensemble of ZooKeeper servers.
-
-h2. ZKPaths
-Various static methods to help with using ZooKeeper ZNode paths:
-
-* getNodeFromPath: Given a full path, return the node name. i.e. "/one/two/three" will return "three"
-* mkdirs: Make sure all the nodes in the path are created.
-* getSortedChildren: Return the children of the given path sorted by sequence number
-* makePath: Given a parent path and a child node, create a combined full path
-
-h2. Circuit Breaking ConnectionStateListener
-
-During network outages ZooKeeper can become very noisy sending connection/disconnection events in rapid succession. Curator recipes respond to these
-messages by resetting state, etc. E.g. LeaderLatch must delete its lock node and try to recreate it in order to try to re\-obtain leadership, etc.
-
-This noisy herding can be avoided by using the circuit breaking listener. When it receives ConnectionState.SUSPENDED, the circuit becomes "open"
-(based on the provided RetryPolicy) and will ignore future connection state changes until RetryPolicy timeout has elapsed. Note: however, if the connection
-goes from ConnectionState.SUSPENDED to ConnectionState.LOST the first LOST state is sent.
-
-When the circuit is closed, all connection state changes are forwarded to the managed listener. When the first disconnected state is received, the
-circuit becomes open. The state change that caused the circuit to open is sent to the managed listener and the RetryPolicy will be used to get a delay amount.
-While the delay is active, the circuit breaker will store state changes but will not forward them to the managed listener (except, however, the first time the state
-changes from SUSPENDED to LOST). When the delay elapses, if the connection has been restored, the circuit closes and forwards the new state to the managed listener.
-If the connection has not been restored, the RetryPolicy is checked again. If the RetryPolicy indicates another retry is allowed the process repeats. If, however,
-the RetryPolicy indicates that retries are exhausted then the circuit closes \- if the current state is different than the state that caused the circuit to open it is
-forwarded to the managed listener.
-
-You can enable the Circuit Breaking ConnectionStateListener during creation of your CuratorFramework instance. E.g.
-
-{code}
-ConnectionStateListenerManagerFactory factory = ConnectionStateListenerManagerFactory.circuitBreaking(...retry policy for circuit breaking...);
-CuratorFramework client = CuratorFrameworkFactory.builder()
-   .connectionStateListenerManagerFactory(factory)
-   ... etc ...
-   .build();
-// all connection state listeners set for "client" will get circuit breaking behavior
-{code}
-
-h2. Locker
-
-Curator's Locker uses Java 7's try\-with\-resources feature to making using Curator locks safer:
-
-{code}
-InterProcessMutex mutex = new InterProcessMutex(...) // or any InterProcessLock
-try ( Locker locker = new Locker(mutex, maxTimeout, unit) )
-{
-   // do work
-}
-{code}
-
-h2. BlockingQueueConsumer
-
-See: *[[DistributedQueue|curator-recipes/distributed-queue.html]]* and *[[DistributedPriorityQueue|curator-recipes/distributed-priority-queue.html]]*
-
-A queue consumer that provides behavior similar to a the JDK's BlockingQueue.
-
-h2. QueueSharder
-
-Due to limitations in ZooKeeper's transport layer, a single queue will break if it has more than 10K\-ish items in it. This class
-provides a facade over multiple distributed queues. It monitors the queues and if any one of them goes over a threshold, a new
-queue is added. Puts are distributed amongst the queues.
-
-h2. WatcherRemoveCuratorFramework
-
-Curator has a utility that makes it easy to set watchers and remove them at a later date. It is used for all Curator recipes.
-From your CuratorFramework instance, call newWatcherRemoveCuratorFramework(). When using this proxy instance any watchers that are
-set are recorded. You can then call removeWatchers() to remove those watchers. See the Curator source code for usage details.
diff --git a/src/site/confluence/zk-compatibility-34.confluence b/src/site/confluence/zk-compatibility-34.confluence
deleted file mode 100644
index 076d9f9b..00000000
--- a/src/site/confluence/zk-compatibility-34.confluence
+++ /dev/null
@@ -1,67 +0,0 @@
-h1. ZooKeeper Version 3.4.x Compatibility
-
-ZooKeeper 3.4.x is now at end\-of\-life. Consequently, the latest versions of Curator have removed support
-for it. If you wish to use Curator with ZooKeeper 3.4.x you should pin to version 4.2.x of Curator.
-Curator 4.2.x supports ZooKeeper 3.4.x ensembles in a soft\-compatibility mode. To use this mode
-you must exclude ZooKeeper when adding Curator to your dependency management tool.
-
-_Maven_
-
-{code}
-<dependency>
-    <groupId>org.apache.curator</groupId>
-    <artifactId>curator-recipes</artifactId>
-    <version>4.2.0</version>
-    <exclusions>
-        <exclusion>
-            <groupId>org.apache.zookeeper</groupId>
-            <artifactId>zookeeper</artifactId>
-        </exclusion>
-    </exclusions>
-</dependency>
-{code}
-
-_Gradle_
-
-{code}
-compile('org.apache.curator:curator-recipes:$curatorVersion') {
-  exclude group: 'org.apache.zookeeper', module: 'zookeeper'
-}
-{code}
-
-You must add a dependency on ZooKeeper 3.4.x also.
-
-Curator will detect which ZooKeeper library is in use and automatically set ZooKeeper 3.4 compatibility
-mode as needed. In this mode, all features not supported by 3.4 are disabled. It is up to your
-application code to "do the right thing" and not use these features. Use the {{isZk34CompatibilityMode()}}
-method to determine which mode Curator is using at runtime.
-
-h2. Testing With ZooKeeper 3.4.x
-
-Note: If you wish to use Curator's {{TestingServer}} with ZooKeeper 3.4.x you must use the older version of
-it (in addition to the instructions above):
-
-_Maven_
-
-{code}
-<dependency>
-    <groupId>org.apache.curator</groupId>
-    <artifactId>curator-test</artifactId>
-    <version>2.12.0</version>
-    <exclusions>
-        <exclusion>
-            <groupId>org.apache.zookeeper</groupId>
-            <artifactId>zookeeper</artifactId>
-        </exclusion>
-    </exclusions>
-    <scope>test</scope>
-</dependency>
-{code}
-
-_Gradle_
-
-{code}
-testCompile('org.apache.curator:curator-test:2.12.0') {
-  exclude group: 'org.apache.zookeeper', module: 'zookeeper'
-}
-{code}
diff --git a/src/site/resources/css/site.css b/src/site/resources/css/site.css
deleted file mode 100644
index 9d04020a..00000000
--- a/src/site/resources/css/site.css
+++ /dev/null
@@ -1,51 +0,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.
- */
-
-tt {
-  background-color: #EEE;
-}
-
-.well, .breadcrumb {
-  background-color: #EDF1F6;
-}
-
-a:link, a:visited, a:active {
-  color: #316290;
-}
-
-a:hover {
-  color: #001F67;
-}
-
-.nav-list .active a:link, .nav-list .active a:visited, .nav-list .active a:active, .nav-list .active a:hover {
-  background-color: #316290;
-}
-
-.nav-list li a:hover {
-  background-color: #DDDDDD;
-}
-
-.search-query {
-  margin-top: 15px;
-  width: 85%;
-}
-
-#banner {
-  margin-bottom: 3px;
-}
diff --git a/src/site/resources/images/arrow.png b/src/site/resources/images/arrow.png
deleted file mode 100644
index 5de46be4..00000000
Binary files a/src/site/resources/images/arrow.png and /dev/null differ
diff --git a/src/site/resources/images/curator-logo.png b/src/site/resources/images/curator-logo.png
deleted file mode 100644
index 89f0e104..00000000
Binary files a/src/site/resources/images/curator-logo.png and /dev/null differ
diff --git a/src/site/resources/images/ph-quote.png b/src/site/resources/images/ph-quote.png
deleted file mode 100644
index 28da0247..00000000
Binary files a/src/site/resources/images/ph-quote.png and /dev/null differ
diff --git a/src/site/site.xml b/src/site/site.xml
deleted file mode 100644
index 7975c551..00000000
--- a/src/site/site.xml
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<project xmlns="http://maven.apache.org/DECORATION/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.0.xsd" name="Apache Curator">
-
-    <skin>
-        <groupId>org.apache.maven.skins</groupId>
-        <artifactId>maven-fluido-skin</artifactId>
-        <version>1.7</version>
-    </skin>
-
-    <custom>
-        <fluidoSkin>
-            <facebookLike />
-            <googlePlusOne />
-            <twitter>
-                <user>ApacheCurator</user>
-                <showUser>true</showUser>
-                <showFollowers>false</showFollowers>
-            </twitter>
-            <googleSearch>
-                <sitesearch>${project.url}</sitesearch>
-            </googleSearch>
-            <gitHub>
-                <projectId>apache/curator</projectId>
-                <ribbonOrientation>right</ribbonOrientation>
-                <ribbonColor>black</ribbonColor>
-            </gitHub>
-        </fluidoSkin>
-    </custom>
-
-    <bannerLeft>
-        <name>Apache Curator</name>
-        <src>/images/curator-logo.png</src>
-        <href>/index.html</href>
-    </bannerLeft>
-
-    <bannerRight>
-        <name>Apache</name>
-        <src>http://apache.org/images/feather-small.gif</src>
-        <href>http://apache.org</href>
-    </bannerRight>
-
-    <publishDate/>
-
-    <version position="left"/>
-
-    <body>
-        <links>
-            <item name="Apache ZooKeeper" href="http://zookeeper.apache.org"/>
-        </links>
-
-        <menu name="Apache Curator" inherit="top">
-            <item name="About" href="index.html"/>
-            <item name="Download" href="releases.html"/>
-            <item name="Getting Started" href="getting-started.html"/>
-            <item name="Examples" href="curator-examples/index.html"/>
-            <item name="Recipes" href="curator-recipes/index.html"/>
-            <item name="Curator Async" href="curator-x-async/index.html"/>
-            <item name="Strongly Typed Models" href="curator-x-async/modeled.html"/>
-            <item name="Migrations" href="curator-x-async/migrations.html"/>
-            <item name="Schema Support" href="curator-framework/schema.html"/>
-        </menu>
-
-        <menu name="Low Level" inherit="top">
-            <item name="Framework" href="curator-framework/index.html"/>
-            <item name="Utilities" href="utilities.html"/>
-            <item name="Client" href="curator-client/index.html"/>
-        </menu>
-
-        <menu name="Details" inherit="top">
-            <item name="Error Handling" href="errors.html"/>
-            <item name="Logging and Tracing" href="logging.html"/>
-            <item name="Tech Notes" href="https://cwiki.apache.org/confluence/display/CURATOR/Tech+Notes"/>
-            <item name="Source Code" href="scm.html"/>
-            <item name="Project Team" href="team.html"/>
-            <item name="Project Information" href="project-info.html"/>
-            <item name="API Compatibility" href="compatibility.html"/>
-            <item name="Javadoc" href="apidocs/index.html"/>
-            <item name="Wiki" href="https://cwiki.apache.org/confluence/display/CURATOR"/>
-            <item name="ZooKeeper 3.4.x" href="zk-compatibility-34.html"/>
-            <item name="v5.x Breaking Changes" href="breaking-changes.html"/>
-        </menu>
-
-        <menu name="Extensions" inherit="top">
-            <item name="Service Discovery" href="curator-x-discovery/index.html"/>
-            <item name="Service Discovery Server" href="curator-x-discovery-server/index.html"/>
-        </menu>
-
-        <menu name="Community" inherit="top">
-            <item name="Submitting Pull Requests" href="https://cwiki.apache.org/confluence/display/CURATOR/Submitting+Pull+Requests"/>
-            <item name="History" href="https://cwiki.apache.org/confluence/display/CURATOR/Curator's+History"/>
-            <item name="Third Party Articles" href="https://cwiki.apache.org/confluence/display/CURATOR/Third+Party+Articles"/>
-            <item name="Third Party Contributions" href="https://cwiki.apache.org/confluence/display/CURATOR/Contributions+to+Curator"/>
-            <item name="For Committers" href="https://cwiki.apache.org/confluence/display/CURATOR/For+Curator+Committers"/>
-        </menu>
-
-        <menu name="ASF" inherit="bottom">
-            <item name="How the ASF works" href="http://www.apache.org/foundation/how-it-works.html"/>
-            <item name="Get Involved" href="http://www.apache.org/foundation/getinvolved.html"/>
-            <item name="Developer Resources" href="http://www.apache.org/dev/"/>
-            <item name="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html"/>
-            <item name="Thanks" href="http://www.apache.org/foundation/thanks.html"/>
-        </menu>
-
-        <footer><![CDATA[
-            <div class="row span12" style="margin-bottom: 8px;">
-                Apache Curator, the Apache feather logo, and the Apache Curator project logos are
-                trademarks of The Apache Software Foundation. All other marks mentioned may be
-                trademarks or registered trademarks of their respective owners.
-            </div>
-        ]]></footer>
-    </body>
-</project>