From 3665149fb328a3f9e2bc8139ee3807a0b17eceaf Mon Sep 17 00:00:00 2001 From: "R. Tyler Croy" Date: Sun, 23 Nov 2014 15:49:48 -0800 Subject: [PATCH] Start fetching information from zookeeper on load of the main page --- build.gradle | 8 ++++- .../offtopic/curator/CuratorClient.groovy | 7 +++-- .../curator/CuratorClientObjectFactory.groovy | 29 +++++++++++++++++++ .../offtopic/curator/CuratorPool.groovy | 8 ++--- src/ratpack/ratpack.groovy | 12 +++++++- .../CuratorClientObjectFactorySpec.groovy | 14 +++++++++ .../offtopic/curator/CuratorClientSpec.groovy | 2 +- .../offtopic/curator/CuratorPoolSpec.groovy | 2 +- 8 files changed, 72 insertions(+), 10 deletions(-) create mode 100644 src/main/groovy/offtopic/curator/CuratorClientObjectFactory.groovy create mode 100644 src/test/groovy/offtopic/curator/CuratorClientObjectFactorySpec.groovy diff --git a/build.gradle b/build.gradle index a210cf6..60a6870 100644 --- a/build.gradle +++ b/build.gradle @@ -38,5 +38,11 @@ dependencies { testCompile 'org.spockframework:spock-core:0.7-groovy-2.0' } - //////////////////////////////////////////////////////////////////////////////// + + +test { + testLogging { + events "passed", "skipped", "failed", "standardOut", "standardError" + } +} diff --git a/src/main/groovy/offtopic/curator/CuratorClient.groovy b/src/main/groovy/offtopic/curator/CuratorClient.groovy index 89c927a..d5aae64 100644 --- a/src/main/groovy/offtopic/curator/CuratorClient.groovy +++ b/src/main/groovy/offtopic/curator/CuratorClient.groovy @@ -1,14 +1,17 @@ -package offtopic +package offtopic.curator import org.apache.curator.retry.ExponentialBackoffRetry import org.apache.curator.framework.CuratorFrameworkFactory class CuratorClient { - private def client = null + def client = null public CuratorClient(String zookeepers) { if (zookeepers?.length() <= 0) { throw new offtopic.errors.ConfigurationError("Cannot pass an empty string to CuratorClient()") } + def retry = new ExponentialBackoffRetry(1000, 3) + this.client = CuratorFrameworkFactory.newClient(zookeepers, retry) + this.client.start() } } diff --git a/src/main/groovy/offtopic/curator/CuratorClientObjectFactory.groovy b/src/main/groovy/offtopic/curator/CuratorClientObjectFactory.groovy new file mode 100644 index 0000000..655b412 --- /dev/null +++ b/src/main/groovy/offtopic/curator/CuratorClientObjectFactory.groovy @@ -0,0 +1,29 @@ +package offtopic.curator + +import org.apache.commons.pool2.* +import org.apache.commons.pool2.impl.DefaultPooledObject; + + +/** + * Object factory class for keeping an object pool of CuratorClient objects + * + * @author R. Tyler Croy + */ +class CuratorClientObjectFactory extends BasePooledObjectFactory { + + private String zookeepers = null + + public CuratorClientObjectFactory(String zks) { + this.zookeepers = zks + } + + @Override + CuratorClient create() { + return new CuratorClient(this.zookeepers) + } + + @Override + PooledObject wrap(CuratorClient client) { + return new DefaultPooledObject(client) + } +} diff --git a/src/main/groovy/offtopic/curator/CuratorPool.groovy b/src/main/groovy/offtopic/curator/CuratorPool.groovy index a85cfc9..48a0a08 100644 --- a/src/main/groovy/offtopic/curator/CuratorPool.groovy +++ b/src/main/groovy/offtopic/curator/CuratorPool.groovy @@ -1,11 +1,11 @@ -package offtopic +package offtopic.curator import org.apache.commons.pool2.impl.GenericObjectPool @Singleton(strict=false) -class CuratorPool { - GenericObjectPool pool - +class CuratorPool extends GenericObjectPool{ private CuratorPool() { + /** XXX: Figure out how to get ZK from settings */ + super(new CuratorClientObjectFactory('localhost:2181')) } } diff --git a/src/ratpack/ratpack.groovy b/src/ratpack/ratpack.groovy index 8e40cb4..a1bc172 100644 --- a/src/ratpack/ratpack.groovy +++ b/src/ratpack/ratpack.groovy @@ -6,7 +6,7 @@ import static ratpack.jackson.Jackson.json import static ratpack.groovy.Groovy.* import static ratpack.websocket.WebSockets.websocket -import offtopic +import offtopic.curator.CuratorPool ratpack { bindings { @@ -15,6 +15,16 @@ ratpack { } handlers { get { + curator = null + try { + curator = CuratorPool.instance.borrowObject() + println curator.client.getChildren().forPath('/') + } + finally { + if (curator != null) { + CuratorPool.instance.returnObject(curator) + } + } render 'offtopic!' } diff --git a/src/test/groovy/offtopic/curator/CuratorClientObjectFactorySpec.groovy b/src/test/groovy/offtopic/curator/CuratorClientObjectFactorySpec.groovy new file mode 100644 index 0000000..657615b --- /dev/null +++ b/src/test/groovy/offtopic/curator/CuratorClientObjectFactorySpec.groovy @@ -0,0 +1,14 @@ +package offtopic.curator + +import spock.lang.Specification + +class CuratorClientObjectFactorySpec extends Specification { + + def "instantiation with zookeepers"() { + when: + def ccof = new CuratorClientObjectFactory('hello') + + then: + ccof.zookeepers == 'hello' + } +} diff --git a/src/test/groovy/offtopic/curator/CuratorClientSpec.groovy b/src/test/groovy/offtopic/curator/CuratorClientSpec.groovy index cff9ae9..013f39f 100644 --- a/src/test/groovy/offtopic/curator/CuratorClientSpec.groovy +++ b/src/test/groovy/offtopic/curator/CuratorClientSpec.groovy @@ -1,4 +1,4 @@ -package offtopic +package offtopic.curator import spock.lang.Specification diff --git a/src/test/groovy/offtopic/curator/CuratorPoolSpec.groovy b/src/test/groovy/offtopic/curator/CuratorPoolSpec.groovy index b7966a0..b41b7e8 100644 --- a/src/test/groovy/offtopic/curator/CuratorPoolSpec.groovy +++ b/src/test/groovy/offtopic/curator/CuratorPoolSpec.groovy @@ -1,4 +1,4 @@ -package offtopic +package offtopic.curator import spock.lang.Specification