You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@curator.apache.org by "Enrico Olivelli (Jira)" <ji...@apache.org> on 2021/01/20 09:58:00 UTC

[jira] [Created] (CURATOR-587) Use ZooKeeper 3.7+ ZooKeeperServerEmbedded in order to start TestingServer

Enrico Olivelli created CURATOR-587:
---------------------------------------

             Summary: Use ZooKeeper 3.7+ ZooKeeperServerEmbedded in order to start TestingServer
                 Key: CURATOR-587
                 URL: https://issues.apache.org/jira/browse/CURATOR-587
             Project: Apache Curator
          Issue Type: Improvement
          Components: Tests
            Reporter: Enrico Olivelli
            Assignee: Enrico Olivelli
             Fix For: 5.2.0


with 3.7.0 ZooKeeper provides an official API to run a ZooKeeper node.
We should use that API in order to launch ZooKeeper, this way we won't have any compatibility issues.
In fact now (5.1) we are starting the ZooKeeper node using internal ZK classes, that are subject to change in the future.
The ZooKeeperServerEmbedded API is designed to be forward compatible.
It is a very skinny API, and it basically reproduces the usage for the users, that is to provide a configuration file and a base directory.
It also provides a way to prevent ZooKeeper to exit the JVM and to shutdown gracefully the server.
{code:java}
 
    @TempDir
    Path tmpDir;
   
    @Test
     public void hello() throws Exception {
         Properties configuration = new Properties();
         configuration.setProperty("clientPort", "2181");
         try (ZooKeeperServerEmbedded embedded = ZooKeeperServerEmbedded
                 .builder()
                 .exitHandler(ExitHandler.LOG_ONLY)
                 .baseDir(tmpDir)
                 .configuration(configuration)
                 .build();) {
             embedded.start();
             CountDownLatch l = new CountDownLatch(1);
             try (ZooKeeper zk = new ZooKeeper("localhost:2181", 40000, new Watcher() {
                 @Override
                 public void process(WatchedEvent event) {
                     System.out.println("event "+event)                            ;
                     l.countDown();
                 }                 
             }
             )) {
                 l.await();
                 System.out.println("WHOAMI"+ zk.whoAmI());
                 zk.create("/foo", "foo".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
             }
         }
     
     } {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)