You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@curator.apache.org by ra...@apache.org on 2014/05/28 19:33:51 UTC

[1/8] git commit: more work on CLI

Repository: curator
Updated Branches:
  refs/heads/curator-rpc f261b0cfd -> 598ad996c


more work on CLI


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

Branch: refs/heads/curator-rpc
Commit: e11db6dfcfd719e0912fbe1c2ab211ceffcb23c4
Parents: f261b0c
Author: randgalt <ra...@apache.org>
Authored: Tue May 27 17:45:47 2014 -0500
Committer: randgalt <ra...@apache.org>
Committed: Tue May 27 17:45:47 2014 -0500

----------------------------------------------------------------------
 .../apache/curator/x/rpc/CuratorProjectionServer.java    | 11 +++++++++++
 1 file changed, 11 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/e11db6df/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
index f5e49f4..d91a52d 100644
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
@@ -32,6 +32,8 @@ import io.airlift.units.DataSize;
 import io.airlift.units.Duration;
 import org.apache.curator.x.rpc.idl.event.EventService;
 import org.apache.curator.x.rpc.idl.projection.CuratorProjectionService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import java.io.File;
 import java.io.IOException;
 import java.util.Map;
@@ -40,9 +42,11 @@ import java.util.concurrent.atomic.AtomicReference;
 
 public class CuratorProjectionServer
 {
+    private final Logger log = LoggerFactory.getLogger(getClass());
     private final RpcManager rpcManager;
     private final ThriftServer server;
     private final AtomicReference<State> state = new AtomicReference<State>(State.LATENT);
+    private final Configuration configuration;
 
     private enum State
     {
@@ -91,6 +95,7 @@ public class CuratorProjectionServer
 
     public CuratorProjectionServer(Configuration configuration)
     {
+        this.configuration = configuration;
         rpcManager = new RpcManager(configuration.getProjectionExpiration().toMillis());
         EventService eventService = new EventService(rpcManager, configuration.getPingTime().toMillis());
         CuratorProjectionService projectionService = new CuratorProjectionService(rpcManager);
@@ -103,14 +108,20 @@ public class CuratorProjectionServer
         Preconditions.checkState(state.compareAndSet(State.LATENT, State.STARTED), "Already started");
 
         server.start();
+
+        log.info("Server listening on port: " + configuration.getPort());
     }
 
     public void stop()
     {
         if ( state.compareAndSet(State.STARTED, State.STOPPED) )
         {
+            log.info("Stopping...");
+
             rpcManager.close();
             server.close();
+
+            log.info("Stopped");
         }
     }
 


[5/8] git commit: configuration wip

Posted by ra...@apache.org.
configuration wip


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

Branch: refs/heads/curator-rpc
Commit: 59b78a98b328cc8bb229a9643efadfc07c2beff2
Parents: 1d55040
Author: randgalt <ra...@apache.org>
Authored: Wed May 28 08:51:53 2014 -0500
Committer: randgalt <ra...@apache.org>
Committed: Wed May 28 08:51:53 2014 -0500

----------------------------------------------------------------------
 curator-x-rpc/pom.xml | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/59b78a98/curator-x-rpc/pom.xml
----------------------------------------------------------------------
diff --git a/curator-x-rpc/pom.xml b/curator-x-rpc/pom.xml
index f27a383..b0534c8 100644
--- a/curator-x-rpc/pom.xml
+++ b/curator-x-rpc/pom.xml
@@ -41,6 +41,11 @@
         </dependency>
 
         <dependency>
+            <groupId>org.codehaus.jackson</groupId>
+            <artifactId>jackson-mapper-asl</artifactId>
+        </dependency>
+
+        <dependency>
             <groupId>org.apache.curator</groupId>
             <artifactId>curator-test</artifactId>
             <exclusions>


[7/8] git commit: transitioned to Dropwizard config and logging

Posted by ra...@apache.org.
transitioned to Dropwizard config and logging


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

Branch: refs/heads/curator-rpc
Commit: 49d0294657d242f366db4a0e0654f429100c4b85
Parents: 078d7be
Author: randgalt <ra...@apache.org>
Authored: Wed May 28 12:14:59 2014 -0500
Committer: randgalt <ra...@apache.org>
Committed: Wed May 28 12:14:59 2014 -0500

----------------------------------------------------------------------
 .../curator/x/rpc/CuratorProjectionServer.java  | 94 ++++----------------
 .../AuthorizationConfiguration.java             | 27 ++++++
 ...dedExponentialBackoffRetryConfiguration.java | 51 +++++++++++
 .../x/rpc/configuration/Configuration.java      | 46 ++++++----
 .../rpc/configuration/ConfigurationBuilder.java | 20 +++--
 .../x/rpc/configuration/ConfigurationX.java     | 54 -----------
 .../configuration/ConnectionConfiguration.java  | 53 ++++++++---
 .../ExponentialBackoffRetryConfiguration.java   | 32 +++----
 .../configuration/RetryNTimesConfiguration.java | 40 +++++++++
 .../configuration/RetryPolicyConfiguration.java | 10 +++
 .../curator/x/rpc/configuration/RetryType.java  |  6 --
 .../src/main/resources/curator/help.txt         | 13 +++
 .../configuration/TestConfigurationBuilder.java | 25 +++++-
 .../resources/configuration/connections.json    | 27 ++++++
 14 files changed, 303 insertions(+), 195 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/49d02946/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
index 40e543f..2769e98 100644
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
@@ -24,21 +24,18 @@ import com.facebook.swift.service.ThriftServer;
 import com.facebook.swift.service.ThriftServiceProcessor;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import io.airlift.configuration.ConfigurationFactory;
-import io.airlift.configuration.ConfigurationLoader;
-import io.airlift.configuration.ConfigurationMetadata;
-import io.airlift.units.DataSize;
-import io.airlift.units.Duration;
+import com.google.common.io.Files;
+import com.google.common.io.Resources;
 import org.apache.curator.x.rpc.configuration.Configuration;
+import org.apache.curator.x.rpc.configuration.ConfigurationBuilder;
 import org.apache.curator.x.rpc.idl.event.EventService;
 import org.apache.curator.x.rpc.idl.projection.CuratorProjectionService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import java.io.File;
 import java.io.IOException;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
+import java.net.URL;
+import java.nio.charset.Charset;
 import java.util.concurrent.atomic.AtomicReference;
 
 public class CuratorProjectionServer
@@ -56,29 +53,27 @@ public class CuratorProjectionServer
         STOPPED
     }
 
-    public static void main(String[] args) throws IOException
+    public static void main(String[] args) throws Exception
     {
-        if ( (args.length == 0) || args[0].equalsIgnoreCase("?") || args[0].equalsIgnoreCase("-h") || args[0].equalsIgnoreCase("--help") )
+        if ( (args.length != 1) || args[0].equalsIgnoreCase("?") || args[0].equalsIgnoreCase("-h") || args[0].equalsIgnoreCase("--help") )
         {
             printHelp();
             return;
         }
 
-        Map<String, String> options;
+        String configurationSource;
         File f = new File(args[0]);
         if ( f.exists() )
         {
-            options = new ConfigurationLoader().loadPropertiesFrom(f.getPath());
+            configurationSource = Files.toString(f, Charset.defaultCharset());
         }
         else
         {
-            System.out.println("First argument is not a file. Treating the command line as a list of field/values");
-            options = buildOptions(args);
+            System.out.println("First argument is not a file. Treating the command line as a json object");
+            configurationSource = args[0];
         }
 
-        ConfigurationFactory configurationFactory = new ConfigurationFactory(options);
-
-        Configuration configuration = configurationFactory.build(Configuration.class);
+        Configuration configuration = new ConfigurationBuilder(configurationSource).build();
 
         final CuratorProjectionServer server = new CuratorProjectionServer(configuration);
         server.start();
@@ -102,7 +97,7 @@ public class CuratorProjectionServer
         EventService eventService = new EventService(rpcManager, configuration.getPingTime().toMillis());
         CuratorProjectionService projectionService = new CuratorProjectionService(rpcManager);
         ThriftServiceProcessor processor = new ThriftServiceProcessor(new ThriftCodecManager(), Lists.<ThriftEventHandler>newArrayList(), projectionService, eventService);
-        server = new ThriftServer(processor, configuration);
+        server = new ThriftServer(processor, configuration.getThrift());
     }
 
     public void start()
@@ -111,7 +106,7 @@ public class CuratorProjectionServer
 
         server.start();
 
-        log.info("Server listening on port: " + configuration.getPort());
+        log.info("Server listening on port: " + configuration.getThrift().getPort());
     }
 
     public void stop()
@@ -127,64 +122,9 @@ public class CuratorProjectionServer
         }
     }
 
-    private static void printHelp()
+    private static void printHelp() throws IOException
     {
-        System.out.println("Curator RPC - an RPC server for using Apache Curator APIs and recipes from non JVM languages.");
-        System.out.println();
-        System.out.println("Arguments:");
-        System.out.println("\t<none>              show this help");
-        System.out.println("\t<path>              path to a properties configuration file");
-        System.out.println("\t<field value> ...   list of properties of the form: \"field1 value1 ... fieldN valueN\"");
-        System.out.println();
-
-        Map<String, String> valuesMap = Maps.newTreeMap();
-
-        buildMetaData(valuesMap, ConfigurationMetadata.getConfigurationMetadata(Configuration.class));
-
-        System.out.println("Values:");
-        for ( String s : valuesMap.values() )
-        {
-            System.out.println(s);
-        }
-
-        System.out.println("Special Types Examples:");
-        System.out.println("\t" + Duration.class.getSimpleName());
-        System.out.println("\t\t" + new Duration(10, TimeUnit.MINUTES));
-        System.out.println("\t\t" + new Duration(5, TimeUnit.MILLISECONDS));
-        System.out.println("\t\t" + new Duration(1.5, TimeUnit.HOURS));
-        System.out.println("\t" + DataSize.class.getSimpleName());
-        System.out.println("\t\t" + new DataSize(1.5, DataSize.Unit.GIGABYTE));
-        System.out.println("\t\t" + new DataSize(10, DataSize.Unit.BYTE));
-        System.out.println("\t\t" + new DataSize(.4, DataSize.Unit.MEGABYTE));
-        System.out.println();
-    }
-
-    private static void buildMetaData(Map<String, String> valuesMap, ConfigurationMetadata<?> metadata)
-    {
-        for ( ConfigurationMetadata.AttributeMetadata attributeMetadata : metadata.getAttributes().values() )
-        {
-            int index = 0;
-            ConfigurationMetadata.InjectionPointMetaData injectionPoint = attributeMetadata.getInjectionPoint();
-            valuesMap.put(injectionPoint.getProperty() + index++, "\t" + injectionPoint.getProperty() + ": " + attributeMetadata.getGetter().getReturnType().getSimpleName());
-            if ( attributeMetadata.getDescription() != null )
-            {
-                valuesMap.put(injectionPoint.getProperty() + index++, "\t\t" + attributeMetadata.getDescription());
-            }
-            valuesMap.put(injectionPoint.getProperty() + index, "");
-        }
-    }
-
-    private static Map<String, String> buildOptions(String[] args) throws IOException
-    {
-        Map<String, String> options = Maps.newHashMap();
-        for ( int i = 0; i < args.length; i += 2 )
-        {
-            if ( (i + 1) >= args.length )
-            {
-                throw new IOException("Bad command line. Must be list of fields and values of the form: \"field1 value1 ... fieldN valueN\"");
-            }
-            options.put(args[i], args[i + 1]);
-        }
-        return options;
+        URL helpUrl = Resources.getResource("curator/help.txt");
+        System.out.println(Resources.toString(helpUrl, Charset.defaultCharset()));
     }
 }

http://git-wip-us.apache.org/repos/asf/curator/blob/49d02946/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/AuthorizationConfiguration.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/AuthorizationConfiguration.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/AuthorizationConfiguration.java
new file mode 100644
index 0000000..3bbc347
--- /dev/null
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/AuthorizationConfiguration.java
@@ -0,0 +1,27 @@
+package org.apache.curator.x.rpc.configuration;
+
+public class AuthorizationConfiguration
+{
+    private String scheme;
+    private String auth;
+
+    public String getScheme()
+    {
+        return scheme;
+    }
+
+    public void setScheme(String scheme)
+    {
+        this.scheme = scheme;
+    }
+
+    public String getAuth()
+    {
+        return auth;
+    }
+
+    public void setAuth(String auth)
+    {
+        this.auth = auth;
+    }
+}

http://git-wip-us.apache.org/repos/asf/curator/blob/49d02946/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/BoundedExponentialBackoffRetryConfiguration.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/BoundedExponentialBackoffRetryConfiguration.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/BoundedExponentialBackoffRetryConfiguration.java
new file mode 100644
index 0000000..5c582ef
--- /dev/null
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/BoundedExponentialBackoffRetryConfiguration.java
@@ -0,0 +1,51 @@
+package org.apache.curator.x.rpc.configuration;
+
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import io.airlift.units.Duration;
+import org.apache.curator.RetryPolicy;
+import org.apache.curator.retry.BoundedExponentialBackoffRetry;
+import java.util.concurrent.TimeUnit;
+
+@JsonTypeName("bounded-exponential-backoff")
+public class BoundedExponentialBackoffRetryConfiguration extends RetryPolicyConfiguration
+{
+    private Duration baseSleepTime = new Duration(100, TimeUnit.MILLISECONDS);
+    private Duration maxSleepTime = new Duration(30, TimeUnit.SECONDS);
+    private int maxRetries = 3;
+
+    @Override
+    public RetryPolicy build()
+    {
+        return new BoundedExponentialBackoffRetry((int)baseSleepTime.toMillis(), (int)maxSleepTime.toMillis(), maxRetries);
+    }
+
+    public Duration getBaseSleepTime()
+    {
+        return baseSleepTime;
+    }
+
+    public void setBaseSleepTime(Duration baseSleepTime)
+    {
+        this.baseSleepTime = baseSleepTime;
+    }
+
+    public int getMaxRetries()
+    {
+        return maxRetries;
+    }
+
+    public void setMaxRetries(int maxRetries)
+    {
+        this.maxRetries = maxRetries;
+    }
+
+    public Duration getMaxSleepTime()
+    {
+        return maxSleepTime;
+    }
+
+    public void setMaxSleepTime(Duration maxSleepTime)
+    {
+        this.maxSleepTime = maxSleepTime;
+    }
+}

http://git-wip-us.apache.org/repos/asf/curator/blob/49d02946/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/Configuration.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/Configuration.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/Configuration.java
index 799ab9b..e567cac 100644
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/Configuration.java
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/Configuration.java
@@ -1,28 +1,45 @@
 package org.apache.curator.x.rpc.configuration;
 
 import com.facebook.swift.service.ThriftServerConfig;
-import com.google.common.base.Splitter;
-import com.google.common.collect.ImmutableList;
-import io.airlift.configuration.Config;
-import io.airlift.configuration.ConfigDescription;
+import com.google.common.collect.Lists;
 import io.airlift.units.Duration;
+import io.dropwizard.logging.LoggingFactory;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
-public class Configuration extends ThriftServerConfig
+public class Configuration
 {
+    private ThriftServerConfig thrift = new ThriftServerConfig();
+    private LoggingFactory logging = new LoggingFactory();
     private Duration projectionExpiration = new Duration(3, TimeUnit.MINUTES);
     private Duration pingTime = new Duration(5, TimeUnit.SECONDS);
-    private List<String> connectionNames = ImmutableList.of();
+    private List<ConnectionConfiguration> connections = Lists.newArrayList();
+
+    public LoggingFactory getLogging()
+    {
+        return logging;
+    }
+
+    public void setLogging(LoggingFactory logging)
+    {
+        this.logging = logging;
+    }
+
+    public ThriftServerConfig getThrift()
+    {
+        return thrift;
+    }
+
+    public void setThrift(ThriftServerConfig thrift)
+    {
+        this.thrift = thrift;
+    }
 
     public Duration getProjectionExpiration()
     {
         return projectionExpiration;
     }
 
-    @Config("curator.projection-expiration")
-    @ConfigDescription("Curator projection instances will be expired after this amount of inactivity - default is 3 minutes")
     public void setProjectionExpiration(Duration projectionExpiration)
     {
         this.projectionExpiration = projectionExpiration;
@@ -33,21 +50,18 @@ public class Configuration extends ThriftServerConfig
         return pingTime;
     }
 
-    @Config("curator.ping-time")
-    @ConfigDescription("Calls to getNextEvent() will return PING after this duration - default is 5 seconds")
     public void setPingTime(Duration pingTime)
     {
         this.pingTime = pingTime;
     }
 
-    public List<String> getConnectionNames()
+    public List<ConnectionConfiguration> getConnections()
     {
-        return connectionNames;
+        return connections;
     }
 
-    @Config("curator.connection.names")
-    public void setConnectionNames(String connectionNames)
+    public void setConnections(List<ConnectionConfiguration> connections)
     {
-        this.connectionNames = Splitter.on(",").trimResults().splitToList(connectionNames);
+        this.connections = connections;
     }
 }

http://git-wip-us.apache.org/repos/asf/curator/blob/49d02946/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationBuilder.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationBuilder.java
index f8f5760..4d9fd60 100644
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationBuilder.java
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationBuilder.java
@@ -3,7 +3,6 @@ package org.apache.curator.x.rpc.configuration;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.jsontype.SubtypeResolver;
 import com.fasterxml.jackson.databind.jsontype.impl.StdSubtypeResolver;
-import io.dropwizard.configuration.ConfigurationException;
 import io.dropwizard.configuration.ConfigurationFactory;
 import io.dropwizard.configuration.ConfigurationFactoryFactory;
 import io.dropwizard.configuration.ConfigurationSourceProvider;
@@ -21,7 +20,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.Charset;
 
-class ConfigurationBuilder
+public class ConfigurationBuilder
 {
     private final String configurationSource;
 
@@ -30,23 +29,30 @@ class ConfigurationBuilder
         LoggingFactory.bootstrap();
     }
 
-    ConfigurationBuilder(String configurationSource)
+    public ConfigurationBuilder(String configurationSource)
     {
         this.configurationSource = configurationSource;
     }
 
-    ConfigurationX build() throws IOException, ConfigurationException
+    public Configuration build() throws Exception
     {
         ObjectMapper mapper = new ObjectMapper();
         mapper.registerModule(new LogbackModule());
         mapper.setPropertyNamingStrategy(new AnnotationSensitivePropertyNamingStrategy());
         SubtypeResolver subtypeResolver = new StdSubtypeResolver();
-        subtypeResolver.registerSubtypes(ConsoleAppenderFactory.class, FileAppenderFactory.class, SyslogAppenderFactory.class);
+        subtypeResolver.registerSubtypes
+        (
+            ConsoleAppenderFactory.class,
+            FileAppenderFactory.class,
+            SyslogAppenderFactory.class,
+            ExponentialBackoffRetryConfiguration.class,
+            RetryNTimesConfiguration.class
+        );
         mapper.setSubtypeResolver(subtypeResolver);
 
         ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
-        ConfigurationFactoryFactory<ConfigurationX> factoryFactory = new DefaultConfigurationFactoryFactory<ConfigurationX>();
-        ConfigurationFactory<ConfigurationX> configurationFactory = factoryFactory.create(ConfigurationX.class, validatorFactory.getValidator(), mapper, "curator");
+        ConfigurationFactoryFactory<Configuration> factoryFactory = new DefaultConfigurationFactoryFactory<Configuration>();
+        ConfigurationFactory<Configuration> configurationFactory = factoryFactory.create(Configuration.class, validatorFactory.getValidator(), mapper, "curator");
         ConfigurationSourceProvider provider = new ConfigurationSourceProvider()
         {
             @Override

http://git-wip-us.apache.org/repos/asf/curator/blob/49d02946/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationX.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationX.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationX.java
deleted file mode 100644
index e9be8e1..0000000
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationX.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.apache.curator.x.rpc.configuration;
-
-import com.facebook.swift.service.ThriftServerConfig;
-import io.airlift.units.Duration;
-import io.dropwizard.logging.LoggingFactory;
-import java.util.concurrent.TimeUnit;
-
-public class ConfigurationX
-{
-    private ThriftServerConfig thrift = new ThriftServerConfig();
-    private LoggingFactory logging = new LoggingFactory();
-    private Duration projectionExpiration = new Duration(3, TimeUnit.MINUTES);
-    private Duration pingTime = new Duration(5, TimeUnit.SECONDS);
-
-    public LoggingFactory getLogging()
-    {
-        return logging;
-    }
-
-    public void setLogging(LoggingFactory logging)
-    {
-        this.logging = logging;
-    }
-
-    public ThriftServerConfig getThrift()
-    {
-        return thrift;
-    }
-
-    public void setThrift(ThriftServerConfig thrift)
-    {
-        this.thrift = thrift;
-    }
-
-    public Duration getProjectionExpiration()
-    {
-        return projectionExpiration;
-    }
-
-    public void setProjectionExpiration(Duration projectionExpiration)
-    {
-        this.projectionExpiration = projectionExpiration;
-    }
-
-    public Duration getPingTime()
-    {
-        return pingTime;
-    }
-
-    public void setPingTime(Duration pingTime)
-    {
-        this.pingTime = pingTime;
-    }
-}

http://git-wip-us.apache.org/repos/asf/curator/blob/49d02946/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConnectionConfiguration.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConnectionConfiguration.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConnectionConfiguration.java
index 8209c6a..3e2f9a2 100644
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConnectionConfiguration.java
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConnectionConfiguration.java
@@ -1,24 +1,34 @@
 package org.apache.curator.x.rpc.configuration;
 
-import io.airlift.configuration.Config;
-import io.airlift.configuration.ConfigDescription;
 import io.airlift.units.Duration;
+import javax.validation.constraints.NotNull;
 import java.util.concurrent.TimeUnit;
 
 public class ConnectionConfiguration
 {
+    @NotNull private String name;
     private String connectionString = "localhost:2181";
     private Duration sessionLength = new Duration(1, TimeUnit.MINUTES);
     private Duration connectionTimeout = new Duration(15, TimeUnit.SECONDS);
-    private RetryType retryType;
+    private AuthorizationConfiguration authorization = null;
+    private String namespace = null;
+    private RetryPolicyConfiguration retry = new ExponentialBackoffRetryConfiguration();
+
+    public String getName()
+    {
+        return name;
+    }
+
+    public void setName(String name)
+    {
+        this.name = name;
+    }
 
     public String getConnectionString()
     {
         return connectionString;
     }
 
-    @Config("curator.connection.$CONNECTION-NAME$.connection-string")
-    @ConfigDescription("Default ZooKeeper connection string. E.g. \"foo.com:2181,bar.com:2181\"")
     public void setConnectionString(String connectionString)
     {
         this.connectionString = connectionString;
@@ -29,8 +39,6 @@ public class ConnectionConfiguration
         return sessionLength;
     }
 
-    @Config("curator.connection.$CONNECTION-NAME$.session-length")
-    @ConfigDescription("Session length. Default is 1 minute")
     public void setSessionLength(Duration sessionLength)
     {
         this.sessionLength = sessionLength;
@@ -41,21 +49,38 @@ public class ConnectionConfiguration
         return connectionTimeout;
     }
 
-    @Config("curator.connection.$CONNECTION-NAME$.connection-timeout")
-    @ConfigDescription("Connection timeout. Default is 15 seconds")
     public void setConnectionTimeout(Duration connectionTimeout)
     {
         this.connectionTimeout = connectionTimeout;
     }
 
-    public RetryType getRetryType()
+    public AuthorizationConfiguration getAuthorization()
+    {
+        return authorization;
+    }
+
+    public void setAuthorization(AuthorizationConfiguration authorization)
+    {
+        this.authorization = authorization;
+    }
+
+    public String getNamespace()
+    {
+        return namespace;
+    }
+
+    public void setNamespace(String namespace)
+    {
+        this.namespace = namespace;
+    }
+
+    public RetryPolicyConfiguration getRetry()
     {
-        return retryType;
+        return retry;
     }
 
-    @Config("curator.connection.$CONNECTION-NAME$.retry.type")
-    public void setRetryType(RetryType retryType)
+    public void setRetry(RetryPolicyConfiguration retry)
     {
-        this.retryType = retryType;
+        this.retry = retry;
     }
 }

http://git-wip-us.apache.org/repos/asf/curator/blob/49d02946/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ExponentialBackoffRetryConfiguration.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ExponentialBackoffRetryConfiguration.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ExponentialBackoffRetryConfiguration.java
index 41b8db8..7e02592 100644
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ExponentialBackoffRetryConfiguration.java
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ExponentialBackoffRetryConfiguration.java
@@ -1,20 +1,28 @@
 package org.apache.curator.x.rpc.configuration;
 
-import io.airlift.configuration.Config;
+import com.fasterxml.jackson.annotation.JsonTypeName;
 import io.airlift.units.Duration;
+import org.apache.curator.RetryPolicy;
+import org.apache.curator.retry.ExponentialBackoffRetry;
+import java.util.concurrent.TimeUnit;
 
-public class ExponentialBackoffRetryConfiguration
+@JsonTypeName("exponential-backoff")
+public class ExponentialBackoffRetryConfiguration extends RetryPolicyConfiguration
 {
-    private Duration baseSleepTime;
-    private int maxRetries;
-    private Duration maxSleep;
+    private Duration baseSleepTime = new Duration(100, TimeUnit.MILLISECONDS);
+    private int maxRetries = 3;
+
+    @Override
+    public RetryPolicy build()
+    {
+        return new ExponentialBackoffRetry((int)baseSleepTime.toMillis(), maxRetries);
+    }
 
     public Duration getBaseSleepTime()
     {
         return baseSleepTime;
     }
 
-    @Config("curator.retry.exponential.base-sleep-time")
     public void setBaseSleepTime(Duration baseSleepTime)
     {
         this.baseSleepTime = baseSleepTime;
@@ -25,20 +33,8 @@ public class ExponentialBackoffRetryConfiguration
         return maxRetries;
     }
 
-    @Config("curator.retry.exponential.max-retries")
     public void setMaxRetries(int maxRetries)
     {
         this.maxRetries = maxRetries;
     }
-
-    public Duration getMaxSleep()
-    {
-        return maxSleep;
-    }
-
-    @Config("curator.retry.exponential.max-sleep")
-    public void setMaxSleep(Duration maxSleep)
-    {
-        this.maxSleep = maxSleep;
-    }
 }

http://git-wip-us.apache.org/repos/asf/curator/blob/49d02946/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/RetryNTimesConfiguration.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/RetryNTimesConfiguration.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/RetryNTimesConfiguration.java
new file mode 100644
index 0000000..97b25f2
--- /dev/null
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/RetryNTimesConfiguration.java
@@ -0,0 +1,40 @@
+package org.apache.curator.x.rpc.configuration;
+
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import io.airlift.units.Duration;
+import org.apache.curator.RetryPolicy;
+import org.apache.curator.retry.RetryNTimes;
+import java.util.concurrent.TimeUnit;
+
+@JsonTypeName("ntimes")
+public class RetryNTimesConfiguration extends RetryPolicyConfiguration
+{
+    private Duration sleepBetweenRetries = new Duration(100, TimeUnit.MILLISECONDS);
+    private int n = 3;
+
+    @Override
+    public RetryPolicy build()
+    {
+        return new RetryNTimes(n, (int)sleepBetweenRetries.toMillis());
+    }
+
+    public Duration getSleepBetweenRetries()
+    {
+        return sleepBetweenRetries;
+    }
+
+    public void setSleepBetweenRetries(Duration sleepBetweenRetries)
+    {
+        this.sleepBetweenRetries = sleepBetweenRetries;
+    }
+
+    public int getN()
+    {
+        return n;
+    }
+
+    public void setN(int n)
+    {
+        this.n = n;
+    }
+}

http://git-wip-us.apache.org/repos/asf/curator/blob/49d02946/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/RetryPolicyConfiguration.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/RetryPolicyConfiguration.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/RetryPolicyConfiguration.java
new file mode 100644
index 0000000..463e148
--- /dev/null
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/RetryPolicyConfiguration.java
@@ -0,0 +1,10 @@
+package org.apache.curator.x.rpc.configuration;
+
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import org.apache.curator.RetryPolicy;
+
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
+public abstract class RetryPolicyConfiguration
+{
+    public abstract RetryPolicy build();
+}

http://git-wip-us.apache.org/repos/asf/curator/blob/49d02946/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/RetryType.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/RetryType.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/RetryType.java
deleted file mode 100644
index 7e4761a..0000000
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/RetryType.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.apache.curator.x.rpc.configuration;
-
-public enum RetryType
-{
-    ExponentialBackoffRetry,
-}

http://git-wip-us.apache.org/repos/asf/curator/blob/49d02946/curator-x-rpc/src/main/resources/curator/help.txt
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/resources/curator/help.txt b/curator-x-rpc/src/main/resources/curator/help.txt
new file mode 100644
index 0000000..086654e
--- /dev/null
+++ b/curator-x-rpc/src/main/resources/curator/help.txt
@@ -0,0 +1,13 @@
+Curator RPC - an RPC server for using Apache Curator APIs and recipes from non JVM languages.
+
+Arguments:
+    <none>    show this help
+    <path>    path to a JSON or YAML configuration file
+    <string>  JSON or YAML object for configuration
+
+Curator RPC uses Dropwizard for configuration. The format is JSON or YAML (your choice).
+
+Curator also uses Dropwizard's logging module. The configuration for it is described here:
+http://dropwizard.readthedocs.org/en/latest/manual/configuration.html#logging
+
+TODO - more details to follow

http://git-wip-us.apache.org/repos/asf/curator/blob/49d02946/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/configuration/TestConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/configuration/TestConfigurationBuilder.java b/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/configuration/TestConfigurationBuilder.java
index caf5af3..467af3c 100644
--- a/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/configuration/TestConfigurationBuilder.java
+++ b/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/configuration/TestConfigurationBuilder.java
@@ -5,6 +5,8 @@ import com.google.common.collect.Sets;
 import com.google.common.io.Resources;
 import io.airlift.units.Duration;
 import io.dropwizard.logging.AppenderFactory;
+import org.apache.curator.retry.ExponentialBackoffRetry;
+import org.apache.curator.retry.RetryNTimes;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 import java.net.URL;
@@ -17,7 +19,7 @@ public class TestConfigurationBuilder
     @Test
     public void testSimple() throws Exception
     {
-        ConfigurationX configuration = loadTestConfiguration("configuration/simple.json");
+        Configuration configuration = loadTestConfiguration("configuration/simple.json");
         Assert.assertEquals(configuration.getThrift().getPort(), 1234);
         Assert.assertEquals(configuration.getPingTime(), new Duration(10, TimeUnit.SECONDS));
     }
@@ -25,7 +27,7 @@ public class TestConfigurationBuilder
     @Test
     public void testLogging() throws Exception
     {
-        ConfigurationX configuration = loadTestConfiguration("configuration/logging.json");
+        Configuration configuration = loadTestConfiguration("configuration/logging.json");
         Assert.assertEquals(configuration.getLogging().getLevel(), Level.INFO);
         Assert.assertEquals(configuration.getLogging().getAppenders().size(), 2);
 
@@ -37,7 +39,24 @@ public class TestConfigurationBuilder
         Assert.assertEquals(types, Sets.newHashSet("FileAppenderFactory", "ConsoleAppenderFactory"));
     }
 
-    private ConfigurationX loadTestConfiguration(String name) throws Exception
+    @Test
+    public void testConnections() throws Exception
+    {
+        Configuration configuration = loadTestConfiguration("configuration/connections.json");
+        Assert.assertEquals(configuration.getConnections().size(), 2);
+
+        Assert.assertEquals(configuration.getConnections().get(0).getName(), "test");
+        Assert.assertEquals(configuration.getConnections().get(0).getConnectionString(), "one:1,two:2");
+        Assert.assertEquals(configuration.getConnections().get(0).getConnectionTimeout(), new Duration(20, TimeUnit.SECONDS));
+        Assert.assertEquals(configuration.getConnections().get(0).getRetry().build().getClass(), ExponentialBackoffRetry.class);
+
+        Assert.assertEquals(configuration.getConnections().get(1).getName(), "alt");
+        Assert.assertEquals(configuration.getConnections().get(1).getConnectionString(), "three:3,four:4");
+        Assert.assertEquals(configuration.getConnections().get(1).getConnectionTimeout(), new Duration(30, TimeUnit.SECONDS));
+        Assert.assertEquals(configuration.getConnections().get(1).getRetry().build().getClass(), RetryNTimes.class);
+    }
+
+    private Configuration loadTestConfiguration(String name) throws Exception
     {
         URL resource = Resources.getResource(name);
         String source = Resources.toString(resource, Charset.defaultCharset());

http://git-wip-us.apache.org/repos/asf/curator/blob/49d02946/curator-x-rpc/src/test/resources/configuration/connections.json
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/test/resources/configuration/connections.json b/curator-x-rpc/src/test/resources/configuration/connections.json
new file mode 100644
index 0000000..fb5f84a
--- /dev/null
+++ b/curator-x-rpc/src/test/resources/configuration/connections.json
@@ -0,0 +1,27 @@
+{
+    "connections": [
+        {
+            "name": "test",
+            "connectionString": "one:1,two:2",
+            "sessionLength": "3m",
+            "connectionTimeout": "20s",
+            "retry": {
+                "type": "exponential-backoff",
+                "baseSleepTime": "1s",
+                "maxRetries": 10
+            }
+        },
+
+        {
+            "name": "alt",
+            "connectionString": "three:3,four:4",
+            "sessionLength": "4m",
+            "connectionTimeout": "30s",
+            "retry": {
+                "type": "ntimes",
+                "sleepBetweenRetries": "1m",
+                "n": 10
+            }
+        }
+    ]
+}
\ No newline at end of file


[4/8] git commit: configuration continues

Posted by ra...@apache.org.
configuration continues


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

Branch: refs/heads/curator-rpc
Commit: 1d550403b759901d782ec98b4e25daf850d2f672
Parents: 8fd1bc8
Author: randgalt <ra...@apache.org>
Authored: Wed May 28 08:34:22 2014 -0500
Committer: randgalt <ra...@apache.org>
Committed: Wed May 28 08:34:22 2014 -0500

----------------------------------------------------------------------
 .../org/apache/curator/x/rpc/Configuration.java | 37 ------------
 .../curator/x/rpc/CuratorProjectionServer.java  |  1 +
 .../x/rpc/configuration/Configuration.java      | 53 +++++++++++++++++
 .../configuration/ConnectionConfiguration.java  | 61 ++++++++++++++++++++
 .../ExponentialBackoffRetryConfiguration.java   | 44 ++++++++++++++
 .../curator/x/rpc/configuration/RetryType.java  |  6 ++
 6 files changed, 165 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/1d550403/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/Configuration.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/Configuration.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/Configuration.java
deleted file mode 100644
index ea361b3..0000000
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/Configuration.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.apache.curator.x.rpc;
-
-import com.facebook.swift.service.ThriftServerConfig;
-import io.airlift.configuration.Config;
-import io.airlift.configuration.ConfigDescription;
-import io.airlift.units.Duration;
-import java.util.concurrent.TimeUnit;
-
-public class Configuration extends ThriftServerConfig
-{
-    private Duration projectionExpiration = new Duration(3, TimeUnit.MINUTES);
-    private Duration pingTime = new Duration(5, TimeUnit.SECONDS);
-
-    public Duration getProjectionExpiration()
-    {
-        return projectionExpiration;
-    }
-
-    @Config("curator.projection-expiration")
-    @ConfigDescription("Curator projection instances will be expired after this amount of inactivity - default is 3 minutes")
-    public void setProjectionExpiration(Duration projectionExpiration)
-    {
-        this.projectionExpiration = projectionExpiration;
-    }
-
-    public Duration getPingTime()
-    {
-        return pingTime;
-    }
-
-    @Config("curator.ping-time")
-    @ConfigDescription("Calls to getNextEvent() will return PING after this duration - default is 5 seconds")
-    public void setPingTime(Duration pingTime)
-    {
-        this.pingTime = pingTime;
-    }
-}

http://git-wip-us.apache.org/repos/asf/curator/blob/1d550403/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
index 6083339..bf92cde 100644
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
@@ -32,6 +32,7 @@ import io.airlift.log.Logging;
 import io.airlift.log.LoggingConfiguration;
 import io.airlift.units.DataSize;
 import io.airlift.units.Duration;
+import org.apache.curator.x.rpc.configuration.Configuration;
 import org.apache.curator.x.rpc.idl.event.EventService;
 import org.apache.curator.x.rpc.idl.projection.CuratorProjectionService;
 import org.slf4j.Logger;

http://git-wip-us.apache.org/repos/asf/curator/blob/1d550403/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/Configuration.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/Configuration.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/Configuration.java
new file mode 100644
index 0000000..799ab9b
--- /dev/null
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/Configuration.java
@@ -0,0 +1,53 @@
+package org.apache.curator.x.rpc.configuration;
+
+import com.facebook.swift.service.ThriftServerConfig;
+import com.google.common.base.Splitter;
+import com.google.common.collect.ImmutableList;
+import io.airlift.configuration.Config;
+import io.airlift.configuration.ConfigDescription;
+import io.airlift.units.Duration;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+public class Configuration extends ThriftServerConfig
+{
+    private Duration projectionExpiration = new Duration(3, TimeUnit.MINUTES);
+    private Duration pingTime = new Duration(5, TimeUnit.SECONDS);
+    private List<String> connectionNames = ImmutableList.of();
+
+    public Duration getProjectionExpiration()
+    {
+        return projectionExpiration;
+    }
+
+    @Config("curator.projection-expiration")
+    @ConfigDescription("Curator projection instances will be expired after this amount of inactivity - default is 3 minutes")
+    public void setProjectionExpiration(Duration projectionExpiration)
+    {
+        this.projectionExpiration = projectionExpiration;
+    }
+
+    public Duration getPingTime()
+    {
+        return pingTime;
+    }
+
+    @Config("curator.ping-time")
+    @ConfigDescription("Calls to getNextEvent() will return PING after this duration - default is 5 seconds")
+    public void setPingTime(Duration pingTime)
+    {
+        this.pingTime = pingTime;
+    }
+
+    public List<String> getConnectionNames()
+    {
+        return connectionNames;
+    }
+
+    @Config("curator.connection.names")
+    public void setConnectionNames(String connectionNames)
+    {
+        this.connectionNames = Splitter.on(",").trimResults().splitToList(connectionNames);
+    }
+}

http://git-wip-us.apache.org/repos/asf/curator/blob/1d550403/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConnectionConfiguration.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConnectionConfiguration.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConnectionConfiguration.java
new file mode 100644
index 0000000..8209c6a
--- /dev/null
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConnectionConfiguration.java
@@ -0,0 +1,61 @@
+package org.apache.curator.x.rpc.configuration;
+
+import io.airlift.configuration.Config;
+import io.airlift.configuration.ConfigDescription;
+import io.airlift.units.Duration;
+import java.util.concurrent.TimeUnit;
+
+public class ConnectionConfiguration
+{
+    private String connectionString = "localhost:2181";
+    private Duration sessionLength = new Duration(1, TimeUnit.MINUTES);
+    private Duration connectionTimeout = new Duration(15, TimeUnit.SECONDS);
+    private RetryType retryType;
+
+    public String getConnectionString()
+    {
+        return connectionString;
+    }
+
+    @Config("curator.connection.$CONNECTION-NAME$.connection-string")
+    @ConfigDescription("Default ZooKeeper connection string. E.g. \"foo.com:2181,bar.com:2181\"")
+    public void setConnectionString(String connectionString)
+    {
+        this.connectionString = connectionString;
+    }
+
+    public Duration getSessionLength()
+    {
+        return sessionLength;
+    }
+
+    @Config("curator.connection.$CONNECTION-NAME$.session-length")
+    @ConfigDescription("Session length. Default is 1 minute")
+    public void setSessionLength(Duration sessionLength)
+    {
+        this.sessionLength = sessionLength;
+    }
+
+    public Duration getConnectionTimeout()
+    {
+        return connectionTimeout;
+    }
+
+    @Config("curator.connection.$CONNECTION-NAME$.connection-timeout")
+    @ConfigDescription("Connection timeout. Default is 15 seconds")
+    public void setConnectionTimeout(Duration connectionTimeout)
+    {
+        this.connectionTimeout = connectionTimeout;
+    }
+
+    public RetryType getRetryType()
+    {
+        return retryType;
+    }
+
+    @Config("curator.connection.$CONNECTION-NAME$.retry.type")
+    public void setRetryType(RetryType retryType)
+    {
+        this.retryType = retryType;
+    }
+}

http://git-wip-us.apache.org/repos/asf/curator/blob/1d550403/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ExponentialBackoffRetryConfiguration.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ExponentialBackoffRetryConfiguration.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ExponentialBackoffRetryConfiguration.java
new file mode 100644
index 0000000..41b8db8
--- /dev/null
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ExponentialBackoffRetryConfiguration.java
@@ -0,0 +1,44 @@
+package org.apache.curator.x.rpc.configuration;
+
+import io.airlift.configuration.Config;
+import io.airlift.units.Duration;
+
+public class ExponentialBackoffRetryConfiguration
+{
+    private Duration baseSleepTime;
+    private int maxRetries;
+    private Duration maxSleep;
+
+    public Duration getBaseSleepTime()
+    {
+        return baseSleepTime;
+    }
+
+    @Config("curator.retry.exponential.base-sleep-time")
+    public void setBaseSleepTime(Duration baseSleepTime)
+    {
+        this.baseSleepTime = baseSleepTime;
+    }
+
+    public int getMaxRetries()
+    {
+        return maxRetries;
+    }
+
+    @Config("curator.retry.exponential.max-retries")
+    public void setMaxRetries(int maxRetries)
+    {
+        this.maxRetries = maxRetries;
+    }
+
+    public Duration getMaxSleep()
+    {
+        return maxSleep;
+    }
+
+    @Config("curator.retry.exponential.max-sleep")
+    public void setMaxSleep(Duration maxSleep)
+    {
+        this.maxSleep = maxSleep;
+    }
+}

http://git-wip-us.apache.org/repos/asf/curator/blob/1d550403/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/RetryType.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/RetryType.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/RetryType.java
new file mode 100644
index 0000000..7e4761a
--- /dev/null
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/RetryType.java
@@ -0,0 +1,6 @@
+package org.apache.curator.x.rpc.configuration;
+
+public enum RetryType
+{
+    ExponentialBackoffRetry,
+}


[6/8] git commit: working on moving to Dropwizard's config and logging

Posted by ra...@apache.org.
working on moving to Dropwizard's config and logging


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

Branch: refs/heads/curator-rpc
Commit: 078d7becd84015f579cf4ac898c3de567e292efa
Parents: 59b78a9
Author: randgalt <ra...@apache.org>
Authored: Wed May 28 10:53:49 2014 -0500
Committer: randgalt <ra...@apache.org>
Committed: Wed May 28 10:53:54 2014 -0500

----------------------------------------------------------------------
 curator-x-rpc/pom.xml                           | 14 +++--
 .../curator/x/rpc/CuratorProjectionServer.java  | 10 ----
 .../rpc/configuration/ConfigurationBuilder.java | 60 ++++++++++++++++++++
 .../x/rpc/configuration/ConfigurationX.java     | 54 ++++++++++++++++++
 .../configuration/TestConfigurationBuilder.java | 46 +++++++++++++++
 .../test/resources/configuration/logging.json   | 19 +++++++
 .../test/resources/configuration/simple.json    |  7 +++
 pom.xml                                         | 14 +++--
 8 files changed, 206 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/078d7bec/curator-x-rpc/pom.xml
----------------------------------------------------------------------
diff --git a/curator-x-rpc/pom.xml b/curator-x-rpc/pom.xml
index b0534c8..6aeaa94 100644
--- a/curator-x-rpc/pom.xml
+++ b/curator-x-rpc/pom.xml
@@ -33,16 +33,22 @@
         <dependency>
             <groupId>com.facebook.swift</groupId>
             <artifactId>swift-service</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                    <artifactId>jackson-annotations</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <dependency>
-            <groupId>io.airlift</groupId>
-            <artifactId>log-manager</artifactId>
+            <groupId>io.dropwizard</groupId>
+            <artifactId>dropwizard-configuration</artifactId>
         </dependency>
 
         <dependency>
-            <groupId>org.codehaus.jackson</groupId>
-            <artifactId>jackson-mapper-asl</artifactId>
+            <groupId>io.dropwizard</groupId>
+            <artifactId>dropwizard-logging</artifactId>
         </dependency>
 
         <dependency>

http://git-wip-us.apache.org/repos/asf/curator/blob/078d7bec/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
index bf92cde..40e543f 100644
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
@@ -28,8 +28,6 @@ import com.google.common.collect.Maps;
 import io.airlift.configuration.ConfigurationFactory;
 import io.airlift.configuration.ConfigurationLoader;
 import io.airlift.configuration.ConfigurationMetadata;
-import io.airlift.log.Logging;
-import io.airlift.log.LoggingConfiguration;
 import io.airlift.units.DataSize;
 import io.airlift.units.Duration;
 import org.apache.curator.x.rpc.configuration.Configuration;
@@ -79,7 +77,6 @@ public class CuratorProjectionServer
         }
 
         ConfigurationFactory configurationFactory = new ConfigurationFactory(options);
-        initLogging(configurationFactory);
 
         Configuration configuration = configurationFactory.build(Configuration.class);
 
@@ -98,12 +95,6 @@ public class CuratorProjectionServer
         Runtime.getRuntime().addShutdownHook(hook);
     }
 
-    private static void initLogging(ConfigurationFactory configurationFactory) throws IOException
-    {
-        LoggingConfiguration loggingConfiguration = configurationFactory.build(LoggingConfiguration.class);
-        Logging.initialize().configure(loggingConfiguration);
-    }
-
     public CuratorProjectionServer(Configuration configuration)
     {
         this.configuration = configuration;
@@ -149,7 +140,6 @@ public class CuratorProjectionServer
         Map<String, String> valuesMap = Maps.newTreeMap();
 
         buildMetaData(valuesMap, ConfigurationMetadata.getConfigurationMetadata(Configuration.class));
-        buildMetaData(valuesMap, ConfigurationMetadata.getConfigurationMetadata(LoggingConfiguration.class));
 
         System.out.println("Values:");
         for ( String s : valuesMap.values() )

http://git-wip-us.apache.org/repos/asf/curator/blob/078d7bec/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationBuilder.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationBuilder.java
new file mode 100644
index 0000000..f8f5760
--- /dev/null
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationBuilder.java
@@ -0,0 +1,60 @@
+package org.apache.curator.x.rpc.configuration;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.jsontype.SubtypeResolver;
+import com.fasterxml.jackson.databind.jsontype.impl.StdSubtypeResolver;
+import io.dropwizard.configuration.ConfigurationException;
+import io.dropwizard.configuration.ConfigurationFactory;
+import io.dropwizard.configuration.ConfigurationFactoryFactory;
+import io.dropwizard.configuration.ConfigurationSourceProvider;
+import io.dropwizard.configuration.DefaultConfigurationFactoryFactory;
+import io.dropwizard.jackson.AnnotationSensitivePropertyNamingStrategy;
+import io.dropwizard.jackson.LogbackModule;
+import io.dropwizard.logging.ConsoleAppenderFactory;
+import io.dropwizard.logging.FileAppenderFactory;
+import io.dropwizard.logging.LoggingFactory;
+import io.dropwizard.logging.SyslogAppenderFactory;
+import javax.validation.Validation;
+import javax.validation.ValidatorFactory;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+
+class ConfigurationBuilder
+{
+    private final String configurationSource;
+
+    static
+    {
+        LoggingFactory.bootstrap();
+    }
+
+    ConfigurationBuilder(String configurationSource)
+    {
+        this.configurationSource = configurationSource;
+    }
+
+    ConfigurationX build() throws IOException, ConfigurationException
+    {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.registerModule(new LogbackModule());
+        mapper.setPropertyNamingStrategy(new AnnotationSensitivePropertyNamingStrategy());
+        SubtypeResolver subtypeResolver = new StdSubtypeResolver();
+        subtypeResolver.registerSubtypes(ConsoleAppenderFactory.class, FileAppenderFactory.class, SyslogAppenderFactory.class);
+        mapper.setSubtypeResolver(subtypeResolver);
+
+        ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
+        ConfigurationFactoryFactory<ConfigurationX> factoryFactory = new DefaultConfigurationFactoryFactory<ConfigurationX>();
+        ConfigurationFactory<ConfigurationX> configurationFactory = factoryFactory.create(ConfigurationX.class, validatorFactory.getValidator(), mapper, "curator");
+        ConfigurationSourceProvider provider = new ConfigurationSourceProvider()
+        {
+            @Override
+            public InputStream open(String path) throws IOException
+            {
+                return new ByteArrayInputStream(configurationSource.getBytes(Charset.defaultCharset()));
+            }
+        };
+        return configurationFactory.build(provider, "");
+    }
+}

http://git-wip-us.apache.org/repos/asf/curator/blob/078d7bec/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationX.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationX.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationX.java
new file mode 100644
index 0000000..e9be8e1
--- /dev/null
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationX.java
@@ -0,0 +1,54 @@
+package org.apache.curator.x.rpc.configuration;
+
+import com.facebook.swift.service.ThriftServerConfig;
+import io.airlift.units.Duration;
+import io.dropwizard.logging.LoggingFactory;
+import java.util.concurrent.TimeUnit;
+
+public class ConfigurationX
+{
+    private ThriftServerConfig thrift = new ThriftServerConfig();
+    private LoggingFactory logging = new LoggingFactory();
+    private Duration projectionExpiration = new Duration(3, TimeUnit.MINUTES);
+    private Duration pingTime = new Duration(5, TimeUnit.SECONDS);
+
+    public LoggingFactory getLogging()
+    {
+        return logging;
+    }
+
+    public void setLogging(LoggingFactory logging)
+    {
+        this.logging = logging;
+    }
+
+    public ThriftServerConfig getThrift()
+    {
+        return thrift;
+    }
+
+    public void setThrift(ThriftServerConfig thrift)
+    {
+        this.thrift = thrift;
+    }
+
+    public Duration getProjectionExpiration()
+    {
+        return projectionExpiration;
+    }
+
+    public void setProjectionExpiration(Duration projectionExpiration)
+    {
+        this.projectionExpiration = projectionExpiration;
+    }
+
+    public Duration getPingTime()
+    {
+        return pingTime;
+    }
+
+    public void setPingTime(Duration pingTime)
+    {
+        this.pingTime = pingTime;
+    }
+}

http://git-wip-us.apache.org/repos/asf/curator/blob/078d7bec/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/configuration/TestConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/configuration/TestConfigurationBuilder.java b/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/configuration/TestConfigurationBuilder.java
new file mode 100644
index 0000000..caf5af3
--- /dev/null
+++ b/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/configuration/TestConfigurationBuilder.java
@@ -0,0 +1,46 @@
+package org.apache.curator.x.rpc.configuration;
+
+import ch.qos.logback.classic.Level;
+import com.google.common.collect.Sets;
+import com.google.common.io.Resources;
+import io.airlift.units.Duration;
+import io.dropwizard.logging.AppenderFactory;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import java.net.URL;
+import java.nio.charset.Charset;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+public class TestConfigurationBuilder
+{
+    @Test
+    public void testSimple() throws Exception
+    {
+        ConfigurationX configuration = loadTestConfiguration("configuration/simple.json");
+        Assert.assertEquals(configuration.getThrift().getPort(), 1234);
+        Assert.assertEquals(configuration.getPingTime(), new Duration(10, TimeUnit.SECONDS));
+    }
+
+    @Test
+    public void testLogging() throws Exception
+    {
+        ConfigurationX configuration = loadTestConfiguration("configuration/logging.json");
+        Assert.assertEquals(configuration.getLogging().getLevel(), Level.INFO);
+        Assert.assertEquals(configuration.getLogging().getAppenders().size(), 2);
+
+        Set<String> types = Sets.newHashSet();
+        for ( AppenderFactory appenderFactory : configuration.getLogging().getAppenders() )
+        {
+            types.add(appenderFactory.getClass().getSimpleName());
+        }
+        Assert.assertEquals(types, Sets.newHashSet("FileAppenderFactory", "ConsoleAppenderFactory"));
+    }
+
+    private ConfigurationX loadTestConfiguration(String name) throws Exception
+    {
+        URL resource = Resources.getResource(name);
+        String source = Resources.toString(resource, Charset.defaultCharset());
+        return new ConfigurationBuilder(source).build();
+    }
+}

http://git-wip-us.apache.org/repos/asf/curator/blob/078d7bec/curator-x-rpc/src/test/resources/configuration/logging.json
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/test/resources/configuration/logging.json b/curator-x-rpc/src/test/resources/configuration/logging.json
new file mode 100644
index 0000000..970ef20
--- /dev/null
+++ b/curator-x-rpc/src/test/resources/configuration/logging.json
@@ -0,0 +1,19 @@
+{
+    "logging": {
+        "level": "INFO",
+
+        "appenders": [
+            {
+                "type": "file",
+                "currentLogFilename": "logs/foo.log",
+                "archivedLogFilenamePattern": "logs/foo-%d.log.gz",
+                "archivedFileCount": 10,
+                "timeZone": "UTC"
+            },
+
+            {
+                "type": "console"
+            }
+        ]
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/curator/blob/078d7bec/curator-x-rpc/src/test/resources/configuration/simple.json
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/test/resources/configuration/simple.json b/curator-x-rpc/src/test/resources/configuration/simple.json
new file mode 100644
index 0000000..ccb2925
--- /dev/null
+++ b/curator-x-rpc/src/test/resources/configuration/simple.json
@@ -0,0 +1,7 @@
+{
+    "thrift": {
+        "port": 1234
+    },
+
+    "pingTime": "10s"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/curator/blob/078d7bec/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index c028839..137155b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -85,7 +85,7 @@
         <guava-version>16.0.1</guava-version>
         <testng-version>6.8.8</testng-version>
         <swift-version>0.12.0</swift-version>
-        <airlift-version>0.88</airlift-version>
+        <dropwizard-version>0.7.0</dropwizard-version>
 
         <!-- OSGi Properties -->
         <osgi.export.package />
@@ -433,9 +433,15 @@
             </dependency>
 
             <dependency>
-                <groupId>io.airlift</groupId>
-                <artifactId>log-manager</artifactId>
-                <version>${airlift-version}</version>
+                <groupId>io.dropwizard</groupId>
+                <artifactId>dropwizard-configuration</artifactId>
+                <version>${dropwizard-version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>io.dropwizard</groupId>
+                <artifactId>dropwizard-logging</artifactId>
+                <version>${dropwizard-version}</version>
             </dependency>
         </dependencies>
     </dependencyManagement>


[3/8] git commit: more work on CLI - added airlift logging and logging config

Posted by ra...@apache.org.
more work on CLI - added airlift logging and logging config


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

Branch: refs/heads/curator-rpc
Commit: 8fd1bc86fbe3e4bf9f09a496677fd3d57ea53cee
Parents: 1927c33
Author: randgalt <ra...@apache.org>
Authored: Tue May 27 18:13:43 2014 -0500
Committer: randgalt <ra...@apache.org>
Committed: Tue May 27 18:13:43 2014 -0500

----------------------------------------------------------------------
 .../java/org/apache/curator/x/rpc/CuratorProjectionServer.java     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/8fd1bc86/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
index e2de3f4..6083339 100644
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
@@ -142,7 +142,7 @@ public class CuratorProjectionServer
         System.out.println("Arguments:");
         System.out.println("\t<none>              show this help");
         System.out.println("\t<path>              path to a properties configuration file");
-        System.out.println("\t<field value> ...   list of values that would be in the JSON configuration file");
+        System.out.println("\t<field value> ...   list of properties of the form: \"field1 value1 ... fieldN valueN\"");
         System.out.println();
 
         Map<String, String> valuesMap = Maps.newTreeMap();


[8/8] git commit: wip

Posted by ra...@apache.org.
wip


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

Branch: refs/heads/curator-rpc
Commit: 598ad996c4ab4aa77862088e3376039762e7e155
Parents: 49d0294
Author: randgalt <ra...@apache.org>
Authored: Wed May 28 12:33:41 2014 -0500
Committer: randgalt <ra...@apache.org>
Committed: Wed May 28 12:33:41 2014 -0500

----------------------------------------------------------------------
 .../java/org/apache/curator/x/rpc/CuratorProjectionServer.java    | 3 +++
 .../apache/curator/x/rpc/configuration/ConfigurationBuilder.java  | 3 +++
 2 files changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/598ad996/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
index 2769e98..2dcb99e 100644
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
@@ -18,6 +18,7 @@
  */
 package org.apache.curator.x.rpc;
 
+import com.codahale.metrics.MetricRegistry;
 import com.facebook.swift.codec.ThriftCodecManager;
 import com.facebook.swift.service.ThriftEventHandler;
 import com.facebook.swift.service.ThriftServer;
@@ -104,6 +105,7 @@ public class CuratorProjectionServer
     {
         Preconditions.checkState(state.compareAndSet(State.LATENT, State.STARTED), "Already started");
 
+        configuration.getLogging().configure(new MetricRegistry(), "curator-rpc");
         server.start();
 
         log.info("Server listening on port: " + configuration.getThrift().getPort());
@@ -117,6 +119,7 @@ public class CuratorProjectionServer
 
             rpcManager.close();
             server.close();
+            configuration.getLogging().stop();
 
             log.info("Stopped");
         }

http://git-wip-us.apache.org/repos/asf/curator/blob/598ad996/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationBuilder.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationBuilder.java
index 4d9fd60..56b4485 100644
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationBuilder.java
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/configuration/ConfigurationBuilder.java
@@ -13,6 +13,8 @@ import io.dropwizard.logging.ConsoleAppenderFactory;
 import io.dropwizard.logging.FileAppenderFactory;
 import io.dropwizard.logging.LoggingFactory;
 import io.dropwizard.logging.SyslogAppenderFactory;
+import org.jboss.netty.logging.InternalLoggerFactory;
+import org.jboss.netty.logging.Slf4JLoggerFactory;
 import javax.validation.Validation;
 import javax.validation.ValidatorFactory;
 import java.io.ByteArrayInputStream;
@@ -27,6 +29,7 @@ public class ConfigurationBuilder
     static
     {
         LoggingFactory.bootstrap();
+        InternalLoggerFactory.setDefaultFactory(new Slf4JLoggerFactory());
     }
 
     public ConfigurationBuilder(String configurationSource)


[2/8] git commit: more work on CLI - added airlift logging and logging config

Posted by ra...@apache.org.
more work on CLI - added airlift logging and logging config


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

Branch: refs/heads/curator-rpc
Commit: 1927c332bb3a137b285edc25e48798ac4fa68c7e
Parents: e11db6d
Author: randgalt <ra...@apache.org>
Authored: Tue May 27 18:11:03 2014 -0500
Committer: randgalt <ra...@apache.org>
Committed: Tue May 27 18:11:03 2014 -0500

----------------------------------------------------------------------
 curator-x-rpc/pom.xml                           | 33 ++++++++++++++++
 .../curator/x/rpc/CuratorProjectionServer.java  | 41 +++++++++++++++-----
 pom.xml                                         | 11 ++++++
 3 files changed, 76 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/1927c332/curator-x-rpc/pom.xml
----------------------------------------------------------------------
diff --git a/curator-x-rpc/pom.xml b/curator-x-rpc/pom.xml
index cf2442c..f27a383 100644
--- a/curator-x-rpc/pom.xml
+++ b/curator-x-rpc/pom.xml
@@ -14,6 +14,20 @@
         <dependency>
             <groupId>org.apache.curator</groupId>
             <artifactId>curator-recipes</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-log4j12</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>log4j</groupId>
+                    <artifactId>log4j</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <dependency>
@@ -22,8 +36,27 @@
         </dependency>
 
         <dependency>
+            <groupId>io.airlift</groupId>
+            <artifactId>log-manager</artifactId>
+        </dependency>
+
+        <dependency>
             <groupId>org.apache.curator</groupId>
             <artifactId>curator-test</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-log4j12</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>log4j</groupId>
+                    <artifactId>log4j</artifactId>
+                </exclusion>
+            </exclusions>
             <scope>test</scope>
         </dependency>
     </dependencies>

http://git-wip-us.apache.org/repos/asf/curator/blob/1927c332/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
index d91a52d..e2de3f4 100644
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
@@ -28,6 +28,8 @@ import com.google.common.collect.Maps;
 import io.airlift.configuration.ConfigurationFactory;
 import io.airlift.configuration.ConfigurationLoader;
 import io.airlift.configuration.ConfigurationMetadata;
+import io.airlift.log.Logging;
+import io.airlift.log.LoggingConfiguration;
 import io.airlift.units.DataSize;
 import io.airlift.units.Duration;
 import org.apache.curator.x.rpc.idl.event.EventService;
@@ -76,6 +78,8 @@ public class CuratorProjectionServer
         }
 
         ConfigurationFactory configurationFactory = new ConfigurationFactory(options);
+        initLogging(configurationFactory);
+
         Configuration configuration = configurationFactory.build(Configuration.class);
 
         final CuratorProjectionServer server = new CuratorProjectionServer(configuration);
@@ -93,6 +97,12 @@ public class CuratorProjectionServer
         Runtime.getRuntime().addShutdownHook(hook);
     }
 
+    private static void initLogging(ConfigurationFactory configurationFactory) throws IOException
+    {
+        LoggingConfiguration loggingConfiguration = configurationFactory.build(LoggingConfiguration.class);
+        Logging.initialize().configure(loggingConfiguration);
+    }
+
     public CuratorProjectionServer(Configuration configuration)
     {
         this.configuration = configuration;
@@ -135,17 +145,15 @@ public class CuratorProjectionServer
         System.out.println("\t<field value> ...   list of values that would be in the JSON configuration file");
         System.out.println();
 
+        Map<String, String> valuesMap = Maps.newTreeMap();
+
+        buildMetaData(valuesMap, ConfigurationMetadata.getConfigurationMetadata(Configuration.class));
+        buildMetaData(valuesMap, ConfigurationMetadata.getConfigurationMetadata(LoggingConfiguration.class));
+
         System.out.println("Values:");
-        ConfigurationMetadata<Configuration> metadata = ConfigurationMetadata.getConfigurationMetadata(Configuration.class);
-        for ( ConfigurationMetadata.AttributeMetadata attributeMetadata : metadata.getAttributes().values() )
+        for ( String s : valuesMap.values() )
         {
-            ConfigurationMetadata.InjectionPointMetaData injectionPoint = attributeMetadata.getInjectionPoint();
-            System.out.println("\t" + injectionPoint.getProperty() + ": " + attributeMetadata.getGetter().getReturnType().getSimpleName());
-            if ( attributeMetadata.getDescription() != null )
-            {
-                System.out.println("\t\t" + attributeMetadata.getDescription());
-            }
-            System.out.println();
+            System.out.println(s);
         }
 
         System.out.println("Special Types Examples:");
@@ -160,6 +168,21 @@ public class CuratorProjectionServer
         System.out.println();
     }
 
+    private static void buildMetaData(Map<String, String> valuesMap, ConfigurationMetadata<?> metadata)
+    {
+        for ( ConfigurationMetadata.AttributeMetadata attributeMetadata : metadata.getAttributes().values() )
+        {
+            int index = 0;
+            ConfigurationMetadata.InjectionPointMetaData injectionPoint = attributeMetadata.getInjectionPoint();
+            valuesMap.put(injectionPoint.getProperty() + index++, "\t" + injectionPoint.getProperty() + ": " + attributeMetadata.getGetter().getReturnType().getSimpleName());
+            if ( attributeMetadata.getDescription() != null )
+            {
+                valuesMap.put(injectionPoint.getProperty() + index++, "\t\t" + attributeMetadata.getDescription());
+            }
+            valuesMap.put(injectionPoint.getProperty() + index, "");
+        }
+    }
+
     private static Map<String, String> buildOptions(String[] args) throws IOException
     {
         Map<String, String> options = Maps.newHashMap();

http://git-wip-us.apache.org/repos/asf/curator/blob/1927c332/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 51f050a..c028839 100644
--- a/pom.xml
+++ b/pom.xml
@@ -85,6 +85,7 @@
         <guava-version>16.0.1</guava-version>
         <testng-version>6.8.8</testng-version>
         <swift-version>0.12.0</swift-version>
+        <airlift-version>0.88</airlift-version>
 
         <!-- OSGi Properties -->
         <osgi.export.package />
@@ -400,6 +401,10 @@
                         <groupId>junit</groupId>
                         <artifactId>junit</artifactId>
                     </exclusion>
+                    <exclusion>
+                        <groupId>org.slf4j</groupId>
+                        <artifactId>slf4j-log4j12</artifactId>
+                    </exclusion>
                 </exclusions>
             </dependency>
 
@@ -426,6 +431,12 @@
                 <artifactId>swift-service</artifactId>
                 <version>${swift-version}</version>
             </dependency>
+
+            <dependency>
+                <groupId>io.airlift</groupId>
+                <artifactId>log-manager</artifactId>
+                <version>${airlift-version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>