curator-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alvaro Gareppe <agare...@gmail.com>
Subject Re: PathChildrenCache creates the node if not present
Date Thu, 21 Jul 2016 19:40:07 GMT
*Just in case.. this is the new code*



*package* com.sac.panorama.zookeeper.examples;



*import* java.util.Set;



*import* org.apache.curator.framework.CuratorFramework;

*import* org.apache.curator.framework.CuratorFrameworkFactory;

*import* org.apache.curator.framework.recipes.cache.TreeCache;

*import* org.apache.curator.retry.RetryForever;

*import* org.apache.curator.test.TestingServer;



*public* *class* DataWatcherCuratorExample {



    *public* *static* *void* main(String[] args) *throws* Exception {

        TestingServer zk;

        zk = *new* TestingServer();

        zk.start();

        CuratorFramework connection = CuratorFrameworkFactory.*newClient*(zk
.getConnectString(),

                        *new* RetryForever(10000));



        connection.start();





        connection.create().forPath("/test");

        TreeCache tc = TreeCache.*newBuilder*(connection, "/test"
).setCacheData(*false*).setMaxDepth(1)

                        .setCreateParentNodes(*false*).build();



        *if* (*isThreadRunning*()) {

            zk.close();

            *throw* *new* RuntimeException("");

        }



        tc.start();

//        connection.create().forPath("/test/child");



        *while*(!*isThreadRunning*()) {

            Thread.*sleep*(1000);

            System.*out*.println("Thread Should be sunning");

        }



        tc.close();



        System.*out*.println();



        *while*(*isThreadRunning*()) {

            Thread.*sleep*(1000);

            System.*out*.println("Thread still sunning");

        }



        connection.close();

        zk.close();

    }



    *private* *static* *boolean* isThreadRunning() {

        Set<Thread> runningThreads = Thread.*getAllStackTraces*().keySet();

        *boolean* threadFound = *false*;

        *for* (Thread thread : runningThreads) {

            *if* (thread.getName().startsWith("Curator-TreeCache") &&
thread.isAlive())
{

                threadFound = *true*;

            }

        }

        *return* threadFound;

    }

}

On Thu, Jul 21, 2016 at 4:36 PM, Alvaro Gareppe <agareppe@gmail.com> wrote:

> Sorry: 2.9.1
>
> On Thu, Jul 21, 2016 at 4:35 PM, Alvaro Gareppe <agareppe@gmail.com>
> wrote:
>
>> The ZookeeperTestingServer was just a wrapper of the TestingServer
>>
>> I changed the code to use the TestingServer.. and the code is stuck in
>> the while (printing lines in the system out)
>>
>> The only difference is that I'm using curator 2.9...
>>
>> On Thu, Jul 21, 2016 at 4:27 PM, Scott Blum <dragonsinth@gmail.com>
>> wrote:
>>
>>> On 2.11 I see the same thing, the hang depends only on closing the ZK
>>> server.  I don't see the TreeCache threads running.
>>>
>>> On Thu, Jul 21, 2016 at 3:26 PM, Scott Blum <dragonsinth@gmail.com>
>>> wrote:
>>>
>>>> Hi Alvaro, I ran your example but I wasn't able to reproduce the
>>>> problem you're seeing on master.  What exact version of Curator are you
>>>> running?
>>>>
>>>> I did have to make one change, though.  I don't have a
>>>>  com.sac.panorama.zookeeper.server.junitserver.ZookeeperTestingServer,
>>>> so I replaced it with a org.apache.curator.test.TestingServer.  When I
>>>> ran through your example, I found it DID hang, but not where you said.  In
>>>> my run, TreeCache shutdown cleanly and the thread disappeared, but then
>>>> main() refused to exit because the ZK test server was still running.  Add
a
>>>> zk.close() to the end of main() allowed it to shutdown cleanly.  I'll try
>>>> this on 2.11.
>>>>
>>>> On Thu, Jul 21, 2016 at 2:45 PM, Alvaro Gareppe <agareppe@gmail.com>
>>>> wrote:
>>>>
>>>>> This is the case:
>>>>> There is not evan a listener defined ( not needed to reproduce the
>>>>> problem)
>>>>> If you see there.. the "Curator-TreeCache-0" is running even the
>>>>> tc.close() is already called.
>>>>> This code runs forever,
>>>>>
>>>>> *package* com.sac.panorama.zookeeper.examples;
>>>>>
>>>>>
>>>>>
>>>>> *import* java.util.Set;
>>>>>
>>>>>
>>>>>
>>>>> *import* org.apache.curator.framework.CuratorFramework;
>>>>>
>>>>> *import* org.apache.curator.framework.CuratorFrameworkFactory;
>>>>>
>>>>> *import* org.apache.curator.framework.recipes.cache.TreeCache;
>>>>>
>>>>> *import* org.apache.curator.retry.RetryForever;
>>>>>
>>>>>
>>>>>
>>>>> *import*
>>>>>  com.sac.panorama.zookeeper.server.junitserver.ZookeeperTestingServer;
>>>>>
>>>>>
>>>>>
>>>>> *public* *class* DataWatcherCuratorExample {
>>>>>
>>>>>
>>>>>
>>>>>     *public* *static* *void* main(String[] args) *throws* Exception {
>>>>>
>>>>>         ZookeeperTestingServer zk;
>>>>>
>>>>>         zk = *new* ZookeeperTestingServer();
>>>>>
>>>>>         zk.doStart();
>>>>>
>>>>>         CuratorFramework connection = CuratorFrameworkFactory.
>>>>> *newClient*(zk.getConnectString(),
>>>>>
>>>>>                         *new* RetryForever(10000));
>>>>>
>>>>>
>>>>>
>>>>>         connection.start();
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>         connection.create().forPath("/test");
>>>>>
>>>>>         TreeCache tc = TreeCache.*newBuilder*(connection, "/test"
>>>>> ).setCacheData(*false*).setMaxDepth(1)
>>>>>
>>>>>                         .setCreateParentNodes(*false*).build();
>>>>>
>>>>>
>>>>>
>>>>>         *if* (*isThreadRunning*()) {
>>>>>
>>>>>             *throw* *new* RuntimeException("");  // this is not
>>>>> thrown [OK]
>>>>>
>>>>>         }
>>>>>
>>>>>
>>>>>
>>>>>         tc.start();
>>>>>
>>>>>
>>>>>
>>>>>         tc.close();
>>>>>
>>>>>
>>>>>
>>>>>         System.*out*.println();
>>>>>
>>>>>
>>>>>
>>>>>         *while*(*isThreadRunning*()) {  // this runns forever cause
>>>>> the thread "Curator-TreeCache" is not stopped after close
>>>>>
>>>>>             Thread.*sleep*(1000);
>>>>>
>>>>>             System.*out*.println("");
>>>>>
>>>>>         }
>>>>>
>>>>>
>>>>>
>>>>>         connection.close();
>>>>>
>>>>>     }
>>>>>
>>>>>
>>>>>
>>>>>     *private* *static* *boolean* isThreadRunning() {
>>>>>
>>>>>         Set<Thread> runningThreads = Thread.*getAllStackTraces*
>>>>> ().keySet();
>>>>>
>>>>>         *boolean* threadFound = *false*;
>>>>>
>>>>>         *for* (Thread thread : runningThreads) {
>>>>>
>>>>>             *if* (thread.getName().startsWith("Curator-TreeCache") &&
>>>>> thread.isAlive()) {
>>>>>
>>>>>                 threadFound = *true*;
>>>>>
>>>>>             }
>>>>>
>>>>>         }
>>>>>
>>>>>         *return* threadFound;
>>>>>
>>>>>     }
>>>>>
>>>>> }
>>>>>
>>>>> On Thu, Jul 21, 2016 at 2:48 PM, Scott Blum <dragonsinth@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> What's the thread doing?  Can you grab a stack trace to see where
>>>>>> it's hung?
>>>>>> That thread is only used to publish events out to clients, maybe
the
>>>>>> thread is hung in client code?
>>>>>>
>>>>>> On Thu, Jul 21, 2016 at 9:26 AM, Alvaro Gareppe <agareppe@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> I just did the upgrate to the version 2.11 and the issue is still
>>>>>>> there. I still see the Curator-TreeCache-X after the TreeCache
is
>>>>>>> closed.
>>>>>>> Any ideas ?
>>>>>>>
>>>>>>> On Thu, Jul 21, 2016 at 9:22 AM, Alvaro Gareppe <agareppe@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Do you know if there is a thread issue with the TreeCache?
Cause
>>>>>>>> after I call cache.close() the Curator-TreeCache-X thread
is still alive.
>>>>>>>>
>>>>>>>> On Tue, Jul 19, 2016 at 1:33 PM, Alvaro Gareppe <agareppe@gmail.com
>>>>>>>> > wrote:
>>>>>>>>
>>>>>>>>> I changed the PathChildrenCache to TreeCache depth=1
and worked OK.
>>>>>>>>>
>>>>>>>>> Thanks guys!
>>>>>>>>>
>>>>>>>>> On Fri, Jul 15, 2016 at 6:03 PM, Scott Blum <dragonsinth@gmail.com
>>>>>>>>> > wrote:
>>>>>>>>>
>>>>>>>>>> TreeCache is read-only unless you specifically ask
it to create
>>>>>>>>>> the root node.  Use depth=1 to watch only a single
node.
>>>>>>>>>>
>>>>>>>>>> On Thu, Jul 14, 2016 at 5:46 PM, Cameron McKenzie
<
>>>>>>>>>> cammckenzie@apache.org> wrote:
>>>>>>>>>>
>>>>>>>>>>> I don't have the code handy, but have you tried
TreeCache?
>>>>>>>>>>>
>>>>>>>>>>> On 14 Jul 2016 11:31 PM, "Alvaro Gareppe" <agareppe@gmail.com>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Is there a way to avoid the node creation
on PathChildrenCache
>>>>>>>>>>>> start() ?
>>>>>>>>>>>>
>>>>>>>>>>>> I have this case
>>>>>>>>>>>>
>>>>>>>>>>>> 1.- There is no node in ZK
>>>>>>>>>>>> 2.- I do this:
>>>>>>>>>>>>          cp = new PathChildrenCache(conn,
"/a",
>>>>>>>>>>>> PathChildrenCache.CACHE_PATH_ONLY);
>>>>>>>>>>>>          cp.start()
>>>>>>>>>>>> 3.- now I have a node /a in ZK
>>>>>>>>>>>>
>>>>>>>>>>>> Im using the pathCache in a different thread
(and possibly
>>>>>>>>>>>> different server) of the node creation, so
I would like to have an option
>>>>>>>>>>>> where the node is not created, so it does
nothing or throws and exception
>>>>>>>>>>>> in that case (both works for me).
>>>>>>>>>>>>
>>>>>>>>>>>> Is there some way to configure the PathChildrenCache
to do so ?
>>>>>>>>>>>>
>>>>>>>>>>>> I'm using curator version: 2.9.1
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> Ing. Alvaro Gareppe
>>>>>>>>>>>> agareppe@gmail.com
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Ing. Alvaro Gareppe
>>>>>>>>> agareppe@gmail.com
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Ing. Alvaro Gareppe
>>>>>>>> agareppe@gmail.com
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Ing. Alvaro Gareppe
>>>>>>> agareppe@gmail.com
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Ing. Alvaro Gareppe
>>>>> agareppe@gmail.com
>>>>>
>>>>
>>>>
>>>
>>
>>
>> --
>> Ing. Alvaro Gareppe
>> agareppe@gmail.com
>>
>
>
>
> --
> Ing. Alvaro Gareppe
> agareppe@gmail.com
>



-- 
Ing. Alvaro Gareppe
agareppe@gmail.com

Mime
View raw message