You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sf...@apache.org on 2014/10/22 18:22:03 UTC

git commit: cache queue names

Repository: incubator-usergrid
Updated Branches:
  refs/heads/two-dot-o 170699b4b -> 8bc3ddfdc


cache queue names


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

Branch: refs/heads/two-dot-o
Commit: 8bc3ddfdca9f85ff68a25d89e3ae4b9f4b011bca
Parents: 170699b
Author: Shawn Feldman <sf...@apache.org>
Authored: Wed Oct 22 10:21:50 2014 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Wed Oct 22 10:21:50 2014 -0600

----------------------------------------------------------------------
 .../usergrid/persistence/queue/Queue.java       |  4 +
 .../queue/impl/SQSQueueManagerImpl.java         | 80 ++++++++++++++++----
 2 files changed, 68 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/8bc3ddfd/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/Queue.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/Queue.java b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/Queue.java
index 2cc49aa..24070d0 100644
--- a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/Queue.java
+++ b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/Queue.java
@@ -28,4 +28,8 @@ public class Queue {
     public String getUrl(){
         return url;
     }
+
+    public boolean isEmpty(){
+        return url == null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/8bc3ddfd/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/SQSQueueManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/SQSQueueManagerImpl.java b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/SQSQueueManagerImpl.java
index 72276bc..f73bb32 100644
--- a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/SQSQueueManagerImpl.java
+++ b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/queue/impl/SQSQueueManagerImpl.java
@@ -27,6 +27,9 @@ import com.amazonaws.services.sqs.AmazonSQSClient;
 import com.amazonaws.services.sqs.model.*;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
 import com.google.inject.Inject;
 import com.fasterxml.jackson.dataformat.smile.SmileFactory;
 import com.google.inject.assistedinject.Assisted;
@@ -39,6 +42,8 @@ import java.io.*;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
 
 public class SQSQueueManagerImpl implements QueueManager {
     private static final Logger LOG = LoggerFactory.getLogger(SQSQueueManagerImpl.class);
@@ -47,9 +52,18 @@ public class SQSQueueManagerImpl implements QueueManager {
     private  QueueScope scope;
     private  QueueFig fig;
     private  ObjectMapper mapper;
-    private Queue queue;
     private static SmileFactory smileFactory = new SmileFactory();
 
+    private static LoadingCache<String, Queue> urlMap = CacheBuilder.newBuilder()
+            .maximumSize(1000)
+            .build(new CacheLoader<String, Queue>() {
+                       @Override
+                       public Queue load(String queueLoader) throws Exception {
+                           //equals comparison wasn't working so
+                           return new Queue(null);
+                       }
+                   }
+            );
 
     @Inject
     public SQSQueueManagerImpl(@Assisted QueueScope scope, QueueFig fig){
@@ -85,22 +99,29 @@ public class SQSQueueManagerImpl implements QueueManager {
         String name = scope.getApplication().getType() + "_"+ scope.getName() + "_"+ scope.getApplication().getUuid().toString();
         return name;
     }
-    public Queue getQueue(){
-        if(queue == null) {
-            try {
-                GetQueueUrlResult result = sqs.getQueueUrl(getName());
-                queue = new Queue(result.getQueueUrl());
-            }catch (QueueDoesNotExistException queueDoesNotExistException){
-                queue=null;
-            }catch (Exception e){
-                LOG.error("failed to get queue from service",e);
-                throw e;
+
+    public Queue getQueue() {
+        try {
+            Queue queue = urlMap.get(getName());
+            if (queue.isEmpty()) {
+                try {
+                    GetQueueUrlResult result = sqs.getQueueUrl(getName());
+                    queue = new Queue(result.getQueueUrl());
+                } catch (QueueDoesNotExistException queueDoesNotExistException) {
+                    queue = null;
+                } catch (Exception e) {
+                    LOG.error("failed to get queue from service", e);
+                    throw e;
+                }
+                if (queue == null) {
+                    queue = createQueue();
+                }
+                urlMap.put(getName(), queue);
             }
+            return queue;
+        } catch (ExecutionException ee) {
+            throw new RuntimeException(ee);
         }
-        if(queue == null) {
-            queue = createQueue();
-        }
-        return queue;
     }
 
     @Override
@@ -141,7 +162,7 @@ public class SQSQueueManagerImpl implements QueueManager {
             return;
         }
         String url = getQueue().getUrl();
-        LOG.info("Sending Messages...{} to {}",bodies.size(),url);
+        LOG.info("Sending Messages...{} to {}", bodies.size(), url);
 
         SendMessageBatchRequest request = new SendMessageBatchRequest(url);
         List<SendMessageBatchRequestEntry> entries = new ArrayList<>(bodies.size());
@@ -256,4 +277,31 @@ public class SQSQueueManagerImpl implements QueueManager {
             init();
         }
     }
+
+    public class SqsLoader {
+        private final String key;
+        private final AmazonSQSClient client;
+
+        public SqsLoader(String key, AmazonSQSClient client) {
+            this.key = key;
+            this.client = client;
+        }
+
+        public AmazonSQSClient getClient() {
+            return client;
+        }
+
+        public String getKey() {
+            return key;
+        }
+        @Override
+        public boolean equals(Object other) {
+            if (other instanceof SqsLoader) {
+                SqsLoader loader = (SqsLoader) other;
+                return loader.getKey().equals(this.getKey());
+            }
+            return false;
+        }
+
+    }
 }