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/27 15:57:33 UTC
[11/14] git commit: wip
wip
Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/7c99ddbf
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/7c99ddbf
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/7c99ddbf
Branch: refs/heads/curator-rpc
Commit: 7c99ddbf25b456afc990a43098851ce8174c8fdd
Parents: 16836aa
Author: randgalt <ra...@apache.org>
Authored: Mon May 26 15:59:37 2014 -0500
Committer: randgalt <ra...@apache.org>
Committed: Mon May 26 15:59:37 2014 -0500
----------------------------------------------------------------------
.../org/apache/curator/x/rpc/RpcManager.java | 59 ++++++++++++++
.../curator/x/rpc/idl/event/EventService.java | 1 -
.../projection/CuratorProjectionService.java | 81 ++------------------
3 files changed, 64 insertions(+), 77 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/curator/blob/7c99ddbf/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/RpcManager.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/RpcManager.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/RpcManager.java
new file mode 100644
index 0000000..783297d
--- /dev/null
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/RpcManager.java
@@ -0,0 +1,59 @@
+package org.apache.curator.x.rpc;
+
+import com.google.common.collect.Maps;
+import org.apache.curator.framework.CuratorFramework;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicLong;
+
+public class RpcManager
+{
+ private final Map<String, CuratorEntry> projections = Maps.newConcurrentMap();
+
+ private static class CuratorEntry
+ {
+ private final CuratorFramework client;
+ private final AtomicLong lastAccessEpoch = new AtomicLong(0);
+
+ private CuratorEntry(CuratorFramework client)
+ {
+ this.client = client;
+ updateLastAccess();
+ }
+
+ void updateLastAccess()
+ {
+ lastAccessEpoch.set(System.currentTimeMillis());
+ }
+ }
+
+ public void add(String id, CuratorFramework client)
+ {
+ projections.put(id, new CuratorEntry(client));
+ }
+
+ public void updateLastAccess(String id)
+ {
+ CuratorEntry entry = projections.get(id);
+ if ( entry != null )
+ {
+ entry.updateLastAccess();
+ }
+ }
+
+ public CuratorFramework getClient(String id)
+ {
+ CuratorEntry entry = projections.get(id);
+ if ( entry != null )
+ {
+ entry.updateLastAccess();
+ return entry.client;
+ }
+ return null;
+ }
+
+ public CuratorFramework removeClient(String id)
+ {
+ CuratorEntry entry = projections.remove(id);
+ return (entry != null) ? entry.client : null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/curator/blob/7c99ddbf/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/event/EventService.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/event/EventService.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/event/EventService.java
index c79fa20..206a347 100644
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/event/EventService.java
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/event/EventService.java
@@ -18,7 +18,6 @@ public class EventService
@ThriftMethod
public RpcCuratorEvent getNextEvent() throws InterruptedException
{
- System.out.println(Thread.currentThread() + "getNextEvent");
return events.take();
}
}
http://git-wip-us.apache.org/repos/asf/curator/blob/7c99ddbf/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/projection/CuratorProjectionService.java
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/projection/CuratorProjectionService.java b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/projection/CuratorProjectionService.java
index f6e4757..34eff59 100644
--- a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/projection/CuratorProjectionService.java
+++ b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/projection/CuratorProjectionService.java
@@ -20,7 +20,6 @@ package org.apache.curator.x.rpc.idl.projection;
import com.facebook.swift.service.ThriftMethod;
import com.facebook.swift.service.ThriftService;
-import com.google.common.collect.Maps;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.api.BackgroundCallback;
@@ -29,22 +28,17 @@ import org.apache.curator.framework.api.Compressible;
import org.apache.curator.framework.api.CreateBuilder;
import org.apache.curator.framework.api.CreateModable;
import org.apache.curator.framework.api.CuratorEvent;
-import org.apache.curator.framework.api.CuratorEventType;
import org.apache.curator.framework.api.PathAndBytesable;
import org.apache.curator.retry.RetryOneTime;
+import org.apache.curator.x.rpc.RpcManager;
import org.apache.curator.x.rpc.idl.event.EventService;
import org.apache.curator.x.rpc.idl.event.RpcCuratorEvent;
-import org.apache.zookeeper.WatchedEvent;
-import org.apache.zookeeper.data.ACL;
-import org.apache.zookeeper.data.Stat;
-import java.util.List;
-import java.util.Map;
import java.util.UUID;
@ThriftService("CuratorService")
public class CuratorProjectionService
{
- private final Map<String, CuratorFramework> projections = Maps.newConcurrentMap();
+ private final RpcManager rpcManager = new RpcManager();
private final EventService eventService;
public CuratorProjectionService(EventService eventService)
@@ -55,82 +49,17 @@ public class CuratorProjectionService
@ThriftMethod
public CuratorProjection newCuratorProjection(CuratorProjectionSpec spec) // TODO
{
- System.out.println(Thread.currentThread() + "newCuratorProjection");
-
- eventService.addEvent(new RpcCuratorEvent(null, new CuratorEvent()
- {
- @Override
- public CuratorEventType getType()
- {
- return CuratorEventType.CHILDREN;
- }
-
- @Override
- public int getResultCode()
- {
- return 1;
- }
-
- @Override
- public String getPath()
- {
- return null;
- }
-
- @Override
- public Object getContext()
- {
- return null;
- }
-
- @Override
- public Stat getStat()
- {
- return null;
- }
-
- @Override
- public byte[] getData()
- {
- return new byte[0];
- }
-
- @Override
- public String getName()
- {
- return null;
- }
-
- @Override
- public List<String> getChildren()
- {
- return null;
- }
-
- @Override
- public List<ACL> getACLList()
- {
- return null;
- }
-
- @Override
- public WatchedEvent getWatchedEvent()
- {
- return null;
- }
- }));
-
CuratorFramework client = CuratorFrameworkFactory.newClient("localhost:2181", new RetryOneTime(1));
String id = UUID.randomUUID().toString();
client.start();
- projections.put(id, client);
+ rpcManager.add(id, client);
return new CuratorProjection(id);
}
@ThriftMethod
public void closeCuratorProjection(CuratorProjection projection)
{
- CuratorFramework client = projections.remove(projection.id);
+ CuratorFramework client = rpcManager.removeClient(projection.id);
if ( client != null )
{
client.close();
@@ -202,7 +131,7 @@ public class CuratorProjectionService
private CuratorFramework getClient(CuratorProjection projection) throws Exception
{
- CuratorFramework client = projections.get(projection.id);
+ CuratorFramework client = rpcManager.getClient(projection.id);
if ( client == null )
{
throw new Exception("No client found with id: " + projection.id);