Repository: curator
Updated Branches:
  refs/heads/CURATOR-397 3d593105d -> 2cbbf9992


temp Curator/Snapshot dep - added test for TTL nodes


Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/521652dc
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/521652dc
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/521652dc

Branch: refs/heads/CURATOR-397
Commit: 521652dcaadfe04bca98bb3249507ca187f32e16
Parents: 027dee3
Author: randgalt <[email protected]>
Authored: Fri Sep 30 14:43:05 2016 +0200
Committer: randgalt <[email protected]>
Committed: Fri Sep 30 14:43:05 2016 +0200

----------------------------------------------------------------------
 .../curator/framework/api/CreateBuilder.java    |   5 +-
 .../framework/imps/CreateBuilderImpl.java       | 128 ++++++++-----------
 .../curator/framework/imps/TestTtlNodes.java    |  88 +++++++++++++
 pom.xml                                         |   2 +-
 4 files changed, 146 insertions(+), 77 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/521652dc/curator-framework/src/main/java/org/apache/curator/framework/api/CreateBuilder.java
----------------------------------------------------------------------
diff --git 
a/curator-framework/src/main/java/org/apache/curator/framework/api/CreateBuilder.java
 
b/curator-framework/src/main/java/org/apache/curator/framework/api/CreateBuilder.java
index 564d11b..8c98e0d 100644
--- 
a/curator-framework/src/main/java/org/apache/curator/framework/api/CreateBuilder.java
+++ 
b/curator-framework/src/main/java/org/apache/curator/framework/api/CreateBuilder.java
@@ -18,8 +18,9 @@
  */
 package org.apache.curator.framework.api;
 
-public interface CreateBuilder extends
-    CreateBuilderMain
+public interface CreateBuilder extends CreateBuilderMain
 {
+    CreateBuilderMain withTtl(long ttl);
+
     CreateBuilderMain orSetData();
 }

http://git-wip-us.apache.org/repos/asf/curator/blob/521652dc/curator-framework/src/main/java/org/apache/curator/framework/imps/CreateBuilderImpl.java
----------------------------------------------------------------------
diff --git 
a/curator-framework/src/main/java/org/apache/curator/framework/imps/CreateBuilderImpl.java
 
b/curator-framework/src/main/java/org/apache/curator/framework/imps/CreateBuilderImpl.java
index d7126dc..6ec2943 100644
--- 
a/curator-framework/src/main/java/org/apache/curator/framework/imps/CreateBuilderImpl.java
+++ 
b/curator-framework/src/main/java/org/apache/curator/framework/imps/CreateBuilderImpl.java
@@ -54,6 +54,7 @@ class CreateBuilderImpl implements CreateBuilder, 
BackgroundOperation<PathAndByt
     private String protectedId;
     private ACLing acling;
     private Stat storingStat;
+    private long ttl;
 
     @VisibleForTesting
     boolean failNextCreateForTesting = false;
@@ -74,6 +75,7 @@ class CreateBuilderImpl implements CreateBuilder, 
BackgroundOperation<PathAndByt
         setDataIfExists = false;
         protectedId = null;
         storingStat = null;
+        ttl = -1;
     }
 
     @Override
@@ -83,6 +85,13 @@ class CreateBuilderImpl implements CreateBuilder, 
BackgroundOperation<PathAndByt
         return this;
     }
 
+    @Override
+    public CreateBuilderMain withTtl(long ttl)
+    {
+        this.ttl = ttl;
+        return this;
+    }
+
     <T> TransactionCreateBuilder<T> asTransactionCreateBuilder(final T 
context, final CuratorMultiTransactionRecord transaction)
     {
         return new TransactionCreateBuilder<T>()
@@ -123,7 +132,7 @@ class CreateBuilderImpl implements CreateBuilder, 
BackgroundOperation<PathAndByt
                 }
 
                 String fixedPath = client.fixForNamespace(path);
-                transaction.add(Op.create(fixedPath, data, 
acling.getAclList(path), createMode), OperationType.CREATE, path);
+                transaction.add(Op.create(fixedPath, data, 
acling.getAclList(path), createMode, ttl), OperationType.CREATE, path);
                 return context;
             }
         };
@@ -136,7 +145,8 @@ class CreateBuilderImpl implements CreateBuilder, 
BackgroundOperation<PathAndByt
         return new CreateBackgroundModeStatACLable()
         {
             @Override
-            public CreateBackgroundModeACLable storingStatIn(Stat stat) {
+            public CreateBackgroundModeACLable storingStatIn(Stat stat)
+            {
                 storingStat = stat;
                 return asCreateBackgroundModeACLable();
             }
@@ -537,80 +547,50 @@ class CreateBuilderImpl implements CreateBuilder, 
BackgroundOperation<PathAndByt
         {
             final TimeTrace trace = 
client.getZookeeperClient().startTracer("CreateBuilderImpl-Background");
 
-            if(storingStat == null)
-            {
-                client.getZooKeeper().create
-                (
-                    operationAndData.getData().getPath(),
-                    operationAndData.getData().getData(),
-                    acling.getAclList(operationAndData.getData().getPath()),
-                    createMode,
-                    new AsyncCallback.StringCallback()
-                    {
-                        @Override
-                        public void processResult(int rc, String path, Object 
ctx, String name)
-                        {
-                            trace.commit();
+            client.getZooKeeper().create
+            (
+                operationAndData.getData().getPath(),
+                operationAndData.getData().getData(),
+                acling.getAclList(operationAndData.getData().getPath()),
+                createMode,
+                new AsyncCallback.Create2Callback() {
 
-                            if ( (rc == 
KeeperException.Code.NONODE.intValue()) && createParentsIfNeeded )
-                            {
-                                backgroundCreateParentsThenNode(client, 
operationAndData, operationAndData.getData().getPath(), backgrounding, 
createParentsAsContainers);
-                            }
-                            else if ( (rc == 
KeeperException.Code.NODEEXISTS.intValue()) && setDataIfExists )
-                            {
-                                backgroundSetData(client, operationAndData, 
operationAndData.getData().getPath(), backgrounding);
-                            }
-                            else
-                            {
-                                sendBackgroundResponse(rc, path, ctx, name, 
null, operationAndData);
-                            }
+                    @Override
+                    public void processResult(int rc, String path, Object ctx, 
String name, Stat stat) {
+                        trace.commit();
+
+                        if ( (stat != null) && (storingStat != null) )
+                        {
+                            storingStat.setAversion(stat.getAversion());
+                            storingStat.setCtime(stat.getCtime());
+                            storingStat.setCversion(stat.getCversion());
+                            storingStat.setCzxid(stat.getCzxid());
+                            storingStat.setDataLength(stat.getDataLength());
+                            
storingStat.setEphemeralOwner(stat.getEphemeralOwner());
+                            storingStat.setMtime(stat.getMtime());
+                            storingStat.setMzxid(stat.getMzxid());
+                            storingStat.setNumChildren(stat.getNumChildren());
+                            storingStat.setPzxid(stat.getPzxid());
+                            storingStat.setVersion(stat.getVersion());
                         }
-                    },
-                    backgrounding.getContext()
-                );
-            }
-            else
-            {
-                client.getZooKeeper().create
-                (
-                    operationAndData.getData().getPath(),
-                    operationAndData.getData().getData(),
-                    acling.getAclList(operationAndData.getData().getPath()),
-                    createMode,
-                    new AsyncCallback.Create2Callback() {
-
-                        @Override
-                        public void processResult(int rc, String path, Object 
ctx, String name, Stat stat) {
-                            trace.commit();
-
-                            if ( stat != null )
-                            {
-                                storingStat.setAversion(stat.getAversion());
-                                storingStat.setCtime(stat.getCtime());
-                                storingStat.setCversion(stat.getCversion());
-                                storingStat.setCzxid(stat.getCzxid());
-                                
storingStat.setDataLength(stat.getDataLength());
-                                
storingStat.setEphemeralOwner(stat.getEphemeralOwner());
-                                storingStat.setMtime(stat.getMtime());
-                                storingStat.setMzxid(stat.getMzxid());
-                                
storingStat.setNumChildren(stat.getNumChildren());
-                                storingStat.setPzxid(stat.getPzxid());
-                                storingStat.setVersion(stat.getVersion());
-                            }
 
-                            if ( (rc == 
KeeperException.Code.NONODE.intValue()) && createParentsIfNeeded )
-                            {
-                                backgroundCreateParentsThenNode(client, 
operationAndData, operationAndData.getData().getPath(), backgrounding, 
createParentsAsContainers);
-                            }
-                            else
-                            {
-                                sendBackgroundResponse(rc, path, ctx, name, 
stat, operationAndData);
-                            }
+                        if ( (rc == KeeperException.Code.NONODE.intValue()) && 
createParentsIfNeeded )
+                        {
+                            backgroundCreateParentsThenNode(client, 
operationAndData, operationAndData.getData().getPath(), backgrounding, 
createParentsAsContainers);
                         }
-                    },
-                    backgrounding.getContext()
-                );
-            }
+                        else if ( (rc == 
KeeperException.Code.NODEEXISTS.intValue()) && setDataIfExists )
+                        {
+                            backgroundSetData(client, operationAndData, 
operationAndData.getData().getPath(), backgrounding);
+                        }
+                        else
+                        {
+                            sendBackgroundResponse(rc, path, ctx, name, stat, 
operationAndData);
+                        }
+                    }
+                },
+                backgrounding.getContext(),
+                ttl
+            );
         }
         catch ( Throwable e )
         {
@@ -1052,14 +1032,14 @@ class CreateBuilderImpl implements CreateBuilder, 
BackgroundOperation<PathAndByt
                         {
                             try
                             {
-                                createdPath = 
client.getZooKeeper().create(path, data, aclList, createMode, storingStat);
+                                createdPath = 
client.getZooKeeper().create(path, data, aclList, createMode, storingStat, ttl);
                             }
                             catch ( KeeperException.NoNodeException e )
                             {
                                 if ( createParentsIfNeeded )
                                 {
                                     ZKPaths.mkdirs(client.getZooKeeper(), 
path, false, client.getAclProvider(), createParentsAsContainers);
-                                    createdPath = 
client.getZooKeeper().create(path, data, acling.getAclList(path), createMode, 
storingStat);
+                                    createdPath = 
client.getZooKeeper().create(path, data, acling.getAclList(path), createMode, 
storingStat, ttl);
                                 }
                                 else
                                 {

http://git-wip-us.apache.org/repos/asf/curator/blob/521652dc/curator-framework/src/test/java/org/apache/curator/framework/imps/TestTtlNodes.java
----------------------------------------------------------------------
diff --git 
a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestTtlNodes.java
 
b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestTtlNodes.java
new file mode 100644
index 0000000..c544474
--- /dev/null
+++ 
b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestTtlNodes.java
@@ -0,0 +1,88 @@
+/**
+ * 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.
+ */
+package org.apache.curator.framework.imps;
+
+import org.apache.curator.framework.CuratorFramework;
+import org.apache.curator.framework.CuratorFrameworkFactory;
+import org.apache.curator.framework.api.BackgroundCallback;
+import org.apache.curator.framework.api.CuratorEvent;
+import org.apache.curator.retry.RetryOneTime;
+import org.apache.curator.test.BaseClassForTests;
+import org.apache.curator.test.Timing;
+import org.apache.zookeeper.CreateMode;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+import java.util.concurrent.CountDownLatch;
+
+public class TestTtlNodes extends BaseClassForTests
+{
+    @BeforeMethod
+    @Override
+    public void setup() throws Exception
+    {
+        System.setProperty("znode.container.checkIntervalMs", "1");
+        super.setup();
+    }
+
+    @AfterMethod
+    @Override
+    public void teardown() throws Exception
+    {
+        super.teardown();
+        System.clearProperty("znode.container.checkIntervalMs");
+    }
+
+    @Test
+    public void testBasic() throws Exception
+    {
+        try ( CuratorFramework client = 
CuratorFrameworkFactory.newClient(server.getConnectString(), new 
RetryOneTime(1)) )
+        {
+            client.start();
+
+            
client.create().withTtl(10).creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT_WITH_TTL).forPath("/a/b/c");
+            Thread.sleep(20);
+            Assert.assertNull(client.checkExists().forPath("/a/b/c"));
+        }
+    }
+
+    @Test
+    public void testBasicInBackground() throws Exception
+    {
+        try ( CuratorFramework client = 
CuratorFrameworkFactory.newClient(server.getConnectString(), new 
RetryOneTime(1)) )
+        {
+            client.start();
+
+            final CountDownLatch latch = new CountDownLatch(1);
+            BackgroundCallback callback = new BackgroundCallback()
+            {
+                @Override
+                public void processResult(CuratorFramework client, 
CuratorEvent event) throws Exception
+                {
+                    latch.countDown();
+                }
+            };
+            
client.create().withTtl(10).creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT_WITH_TTL).inBackground(callback).forPath("/a/b/c");
+            Assert.assertTrue(new Timing().awaitLatch(latch));
+            Thread.sleep(20);
+            Assert.assertNull(client.checkExists().forPath("/a/b/c"));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/curator/blob/521652dc/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 905342c..b086df0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -59,7 +59,7 @@
         <jdk-version>1.7</jdk-version>
 
         <!-- versions -->
-        <zookeeper-version>3.5.1-alpha</zookeeper-version>
+        <zookeeper-version>3.6.0-SNAPSHOT</zookeeper-version>
         
<maven-project-info-reports-plugin-version>2.7</maven-project-info-reports-plugin-version>
         <maven-bundle-plugin-version>2.3.7</maven-bundle-plugin-version>
         <maven-javadoc-plugin-version>2.10.3</maven-javadoc-plugin-version>

Reply via email to