Merge branch 'CURATOR-3.0' into CURATOR-215 Conflicts: curator-framework/src/main/java/org/apache/curator/framework/api/CuratorEventType.java curator-framework/src/main/java/org/apache/curator/framework/imps/DeleteBuilderImpl.java curator-framework/src/site/confluence/index.confluence
Project: http://git-wip-us.apache.org/repos/asf/curator/repo Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/f7697176 Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/f7697176 Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/f7697176 Branch: refs/heads/CURATOR-3.0 Commit: f76971769ce5d999ccae7a3a6c42632298e0d75b Parents: 5414266 fc45a4e Author: randgalt <randg...@apache.org> Authored: Tue May 12 10:53:32 2015 -0500 Committer: randgalt <randg...@apache.org> Committed: Tue May 12 10:53:32 2015 -0500 ---------------------------------------------------------------------- .../main/java/org/apache/curator/RetryLoop.java | 3 +- .../curator/ensemble/EnsembleListener.java | 24 + .../dynamic/DynamicEnsembleProvider.java | 61 +++ .../curator/framework/CuratorFramework.java | 14 + .../api/AddStatConfigEnsembleable.java | 32 ++ .../apache/curator/framework/api/Addable.java | 43 ++ .../framework/api/AsyncReconfigurable.java | 29 ++ .../framework/api/BackgroundStatable.java | 24 + .../curator/framework/api/Configurable.java | 31 ++ .../curator/framework/api/CuratorEventType.java | 10 + .../curator/framework/api/DataCallbackable.java | 32 ++ .../curator/framework/api/Ensembleable.java | 24 + .../curator/framework/api/GetConfigBuilder.java | 29 ++ .../api/IncrementalReconfigBuilder.java | 33 ++ .../api/JoinAddStatConfigEnsembleable.java | 33 ++ .../api/JoinLeaveStatConfigEnsembleable.java | 33 ++ .../api/JoinStatConfigEnsembleable.java | 32 ++ .../framework/api/JoinStatConfigurable.java | 30 ++ .../apache/curator/framework/api/Joinable.java | 43 ++ .../api/LeaveAddStatConfigEnsembleable.java | 32 ++ .../api/LeaveStatConfigEnsembleable.java | 32 ++ .../apache/curator/framework/api/Leaveable.java | 41 ++ .../curator/framework/api/ReconfigBuilder.java | 28 ++ .../framework/api/ReconfigBuilderMain.java | 27 + .../framework/api/StatConfigEnsembleable.java | 26 + .../curator/framework/api/StatEnsembleable.java | 26 + .../framework/api/SyncReconfigurable.java | 30 ++ .../framework/ensemble/EnsembleTracker.java | 191 +++++++ .../framework/imps/CreateBuilderImpl.java | 11 +- .../framework/imps/CuratorFrameworkImpl.java | 12 + .../framework/imps/DeleteBuilderImpl.java | 102 ++-- .../framework/imps/GetConfigBuilderImpl.java | 187 +++++++ .../framework/imps/ReconfigBuilderImpl.java | 504 +++++++++++++++++++ .../src/site/confluence/index.confluence | 20 +- .../framework/imps/TestReconfiguration.java | 417 +++++++++++++++ .../org/apache/curator/test/InstanceSpec.java | 4 + .../curator/test/QuorumConfigBuilder.java | 2 +- .../org/apache/curator/test/TestingCluster.java | 1 + src/site/confluence/utilities.confluence | 5 + 39 files changed, 2189 insertions(+), 69 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/curator/blob/f7697176/curator-framework/src/main/java/org/apache/curator/framework/CuratorFramework.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/curator/blob/f7697176/curator-framework/src/main/java/org/apache/curator/framework/api/CuratorEventType.java ---------------------------------------------------------------------- diff --cc curator-framework/src/main/java/org/apache/curator/framework/api/CuratorEventType.java index dce1f7f,50e9195..5a2dc56 --- a/curator-framework/src/main/java/org/apache/curator/framework/api/CuratorEventType.java +++ b/curator-framework/src/main/java/org/apache/curator/framework/api/CuratorEventType.java @@@ -69,11 -69,16 +69,21 @@@ public enum CuratorEventTyp SET_ACL, /** + * Corresponds to {@link CuratorFramework#transaction()} + */ + TRANSACTION, + + /** + * Corresponds to {@link CuratorFramework#getConfig()} + */ + GET_CONFIG, + + /** + * Corresponds to {@link CuratorFramework#reconfig()} + */ + RECONFIG, + + /** * Corresponds to {@link Watchable#usingWatcher(Watcher)} or {@link Watchable#watched()} */ WATCHED, http://git-wip-us.apache.org/repos/asf/curator/blob/f7697176/curator-framework/src/main/java/org/apache/curator/framework/imps/CreateBuilderImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/curator/blob/f7697176/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/curator/blob/f7697176/curator-framework/src/main/java/org/apache/curator/framework/imps/DeleteBuilderImpl.java ---------------------------------------------------------------------- diff --cc curator-framework/src/main/java/org/apache/curator/framework/imps/DeleteBuilderImpl.java index 51641b8,5d8b846..f5083fb --- a/curator-framework/src/main/java/org/apache/curator/framework/imps/DeleteBuilderImpl.java +++ b/curator-framework/src/main/java/org/apache/curator/framework/imps/DeleteBuilderImpl.java @@@ -54,16 -55,16 +54,16 @@@ class DeleteBuilderImpl implements Dele guaranteed = false; } - TransactionDeleteBuilder asTransactionDeleteBuilder(final CuratorTransactionImpl curatorTransaction, final CuratorMultiTransactionRecord transaction) + <T> TransactionDeleteBuilder<T> asTransactionDeleteBuilder(final T context, final CuratorMultiTransactionRecord transaction) { - return new TransactionDeleteBuilder() + return new TransactionDeleteBuilder<T>() { @Override - public CuratorTransactionBridge forPath(String path) throws Exception + public T forPath(String path) throws Exception { - String fixedPath = client.fixForNamespace(path); + String fixedPath = client.fixForNamespace(path); transaction.add(Op.delete(fixedPath, version), OperationType.DELETE, path); - return curatorTransaction; + return context; } @Override @@@ -141,30 -142,27 +141,30 @@@ @Override public void performBackgroundOperation(final OperationAndData<String> operationAndData) throws Exception { - final TimeTrace trace = client.getZookeeperClient().startTracer("DeleteBuilderImpl-Background"); + final TimeTrace trace = client.getZookeeperClient().startTracer("DeleteBuilderImpl-Background"); client.getZooKeeper().delete - ( - operationAndData.getData(), - version, - new AsyncCallback.VoidCallback() + ( + operationAndData.getData(), + version, + new AsyncCallback.VoidCallback() + { + @Override + public void processResult(int rc, String path, Object ctx) { - @Override - public void processResult(int rc, String path, Object ctx) + trace.commit(); - if ((rc == KeeperException.Code.NOTEMPTY.intValue()) && deletingChildrenIfNeeded) { ++ if ( (rc == KeeperException.Code.NOTEMPTY.intValue()) && deletingChildrenIfNeeded ) + { - trace.commit(); - if ( (rc == KeeperException.Code.NOTEMPTY.intValue()) && deletingChildrenIfNeeded ) - { - backgroundDeleteChildrenThenNode(operationAndData); - } - else - { - CuratorEvent event = new CuratorEventImpl(client, CuratorEventType.DELETE, rc, path, null, ctx, null, null, null, null, null, null); - client.processBackgroundOperation(operationAndData, event); - } + backgroundDeleteChildrenThenNode(operationAndData); - } else { - CuratorEvent event = new CuratorEventImpl(client, CuratorEventType.DELETE, rc, path, null, ctx, null, null, null, null, null); + } - }, - backgrounding.getContext() - ); ++ else ++ { ++ CuratorEvent event = new CuratorEventImpl(client, CuratorEventType.DELETE, rc, path, null, ctx, null, null, null, null, null, null); + client.processBackgroundOperation(operationAndData, event); + } + } + }, + backgrounding.getContext() + ); } private void backgroundDeleteChildrenThenNode(final OperationAndData<String> mainOperationAndData) http://git-wip-us.apache.org/repos/asf/curator/blob/f7697176/curator-framework/src/site/confluence/index.confluence ---------------------------------------------------------------------- diff --cc curator-framework/src/site/confluence/index.confluence index 3c686db,c41b244..b065f00 --- a/curator-framework/src/site/confluence/index.confluence +++ b/curator-framework/src/site/confluence/index.confluence @@@ -42,8 -42,11 +42,16 @@@ h3. Method |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()| ++<<<<<<< HEAD +|transactionOp()|Used to allocate operations to be used with transaction().| +|transaction()|Atomically submit a set of operations as a transaction.| ++======= + |inTransaction()|Begins an atomic ZooKeeper transaction. Combine create, setData, check, and/or delete operations and then commit() as a unit.| + |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()| ++>>>>>>> CURATOR-3.0 h3. Notifications Notifications for background operations and watches are published via the ClientListener interface. You register listeners with the @@@ -66,8 -69,9 +74,10 @@@ CuratorEvent depend on the type of even |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