Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-9851

Zookeeper RoutePolicy failing to create znode

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.17.0
    • Fix Version/s: 2.16.4, 2.17.1, 2.18.0
    • Component/s: camel-zookeeper
    • Labels:
      None
    • Environment:

      mac

    • Estimated Complexity:
      Unknown

      Description

      I am trying to setup a ZooKeeper route policy like this

      ZooKeeperRoutePolicy policy = new ZooKeeperRoutePolicy("zookeeper:localhost/regexTest1?create=true", 1);
      from("direct:start").routePolicy(policy).to(“mock:end”);

      And when I run my unit test to trigger the route, I get the following exception in my logs

      Node '/regexTest1/192.168.202.25-3306c9d2-1354-4dbe-aaff-846eee5bb60d' did not exist, creating it.
      Error setting up election node /regexTest1/192.168.202.25-25829641-de1f-4389-9bb6-2967ea60de1a
      org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /regexTest1/192.168.202.25-25829641-de1f-4389-9bb6-2967ea60de1a
      	at org.apache.zookeeper.KeeperException.create(KeeperException.java:111) ~[zookeeper-3.4.8.jar:3.4.8--1]
      	at org.apache.zookeeper.KeeperException.create(KeeperException.java:51) ~[zookeeper-3.4.8.jar:3.4.8--1]
      	at org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:783) ~[zookeeper-3.4.8.jar:3.4.8--1]
      	at org.apache.camel.component.zookeeper.operations.CreateOperation.getResult(CreateOperation.java:52) ~[camel-zookeeper-2.17.0.jar:2.17.0]
      	at org.apache.camel.component.zookeeper.operations.ZooKeeperOperation.get(ZooKeeperOperation.java:70) ~[camel-zookeeper-2.17.0.jar:2.17.0]
      	at org.apache.camel.component.zookeeper.ZookeeperProducer.createNode(ZookeeperProducer.java:222) ~[camel-zookeeper-2.17.0.jar:2.17.0]
      	at org.apache.camel.component.zookeeper.ZookeeperProducer.synchronouslySetData(ZookeeperProducer.java:238) ~[camel-zookeeper-2.17.0.jar:2.17.0]
      	at org.apache.camel.component.zookeeper.ZookeeperProducer.process(ZookeeperProducer.java:88) ~[camel-zookeeper-2.17.0.jar:2.17.0]
      	at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) ~[camel-core-2.17.0.jar:2.17.0]
      	at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) [camel-core-2.17.0.jar:2.17.0]
      	at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109) [camel-core-2.17.0.jar:2.17.0]
      	at org.apache.camel.processor.UnitOfWorkProducer.process(UnitOfWorkProducer.java:68) [camel-core-2.17.0.jar:2.17.0]
      	at org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:412) [camel-core-2.17.0.jar:2.17.0]
      	at org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:380) [camel-core-2.17.0.jar:2.17.0]
      	at org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:270) [camel-core-2.17.0.jar:2.17.0]
      	at org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:380) [camel-core-2.17.0.jar:2.17.0]
      	at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:205) [camel-core-2.17.0.jar:2.17.0]
      	at org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:119) [camel-core-2.17.0.jar:2.17.0]
      	at org.apache.camel.component.zookeeper.policy.ZooKeeperElection.createCandidateNode(ZooKeeperElection.java:146) [camel-zookeeper-2.17.0.jar:2.17.0]
      	at org.apache.camel.component.zookeeper.policy.ZooKeeperElection.testAndCreateCandidateNode(ZooKeeperElection.java:116) [camel-zookeeper-2.17.0.jar:2.17.0]
      	at org.apache.camel.component.zookeeper.policy.ZooKeeperElection.isMaster(ZooKeeperElection.java:92) [camel-zookeeper-2.17.0.jar:2.17.0]
      	at org.apache.camel.component.zookeeper.policy.ZooKeeperRoutePolicy.onExchangeBegin(ZooKeeperRoutePolicy.java:79) [camel-zookeeper-2.17.0.jar:2.17.0]
      	at org.apache.camel.processor.CamelInternalProcessor$RoutePolicyAdvice.before(CamelInternalProcessor.java:483) [camel-core-2.17.0.jar:2.17.0]
      

      It looks like it knows the znode doesn’t exist but seems to be unable to create it? From the zookeeper server side logs, I can see incoming connections and it returning the error that the znode doesn’t exist but doesn’t look like there’s any attempts to create it after that.

      I’ve tried using the zookeeper component directly in my route and I am able to create/write/read from a znode fine so it seems like it’s just failing in the route policy for some reason.

      I am using Camel 2.17.0 and zookeeper 3.4.8

      I’ve investigated this further and the exception is thrown from the ZooKeeper.create method. Camel is actually trying to create a znode with a path /regexTest1/192.168.202.25-25829641-de1f-4389-9bb6-2967ea60de1a without creating the parent node /regexTest1 first.

      According to the Zookeeper.create method documentation

      "If the parent node does not exist in the ZooKeeper, a KeeperException

      • with error code KeeperException.NoNode will be thrown."

      And I don’t see anywhere in Camel’s code where it is creating the parent nodes first before attempting to create the final node for master election.

      So I removed the path off the uri for the route policy like this

      ZooKeeperRoutePolicy policy = new ZooKeeperRoutePolicy("zookeeper:localhost", 1);

      And it has gotten past that error but now has encountered a different error where it has trouble creating a threadpool.

      2016-04-08 11:47:15,071 [main] ERROR org.apache.camel.component.zookeeper.policy.ZooKeeperElection - Error configuring ZookeeperElection
      java.lang.IllegalArgumentException: id for thread pool org.apache.camel.util.concurrent.RejectableThreadPoolExecutor@1ec912d7[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0][Camel-Zookeeper Ops executor] must be specified and not empty
      	at org.apache.camel.util.ObjectHelper.notEmpty(ObjectHelper.java:351) ~[camel-core-2.16.0.jar:2.16.0]
      	at org.apache.camel.impl.DefaultExecutorServiceManager.onThreadPoolCreated(DefaultExecutorServiceManager.java:522) ~[camel-core-2.16.0.jar:2.16.0]
      	at org.apache.camel.impl.DefaultExecutorServiceManager.newThreadPool(DefaultExecutorServiceManager.java:191) ~[camel-core-2.16.0.jar:2.16.0]
      	at org.apache.camel.impl.DefaultExecutorServiceManager.newFixedThreadPool(DefaultExecutorServiceManager.java:230) ~[camel-core-2.16.0.jar:2.16.0]
      	at org.apache.camel.component.zookeeper.ZooKeeperConsumer.doStart(ZooKeeperConsumer.java:72) ~[camel-zookeeper-2.16.0.jar:2.16.0]
      	at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61) ~[camel-core-2.16.0.jar:2.16.0]
      	at org.apache.camel.impl.DefaultCamelContext.startService(DefaultCamelContext.java:3219) ~[camel-core-2.16.0.jar:2.16.0]
      

        Attachments

          Activity

            People

            • Assignee:
              davsclaus Claus Ibsen
              Reporter:
              mtran Minh Tran
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: