You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by is...@apache.org on 2014/03/13 06:25:07 UTC

git commit: exposing Subscription retrieval using a repo url

Repository: incubator-stratos
Updated Branches:
  refs/heads/master d84622f03 -> d239ec945


exposing Subscription retrieval using a repo url


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

Branch: refs/heads/master
Commit: d239ec945b4382b30a0b96cf08022c091238892e
Parents: d84622f
Author: Isuru <is...@wso2.com>
Authored: Thu Mar 13 10:54:19 2014 +0530
Committer: Isuru <is...@wso2.com>
Committed: Thu Mar 13 10:54:19 2014 +0530

----------------------------------------------------------------------
 .../manager/lookup/LookupDataHolder.java        |  13 ++-
 .../lookup/RepoUrlToCartridgeSubscriptions.java | 116 +++++++++++++++++++
 .../DataInsertionAndRetrievalManager.java       |  23 +++-
 3 files changed, 148 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d239ec94/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/LookupDataHolder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/LookupDataHolder.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/LookupDataHolder.java
index e62c134..de66815 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/LookupDataHolder.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/LookupDataHolder.java
@@ -35,6 +35,7 @@ public class LookupDataHolder implements Serializable {
 
     private ClusterIdToSubscription clusterIdToSubscription;
     private TenantIdToSubscriptionContext tenantIdToSubscriptionContext;
+    private RepoUrlToCartridgeSubscriptions repoUrlToCartridgeSubscriptions;
     private static volatile  LookupDataHolder lookupDataHolder;
 
     //locks
@@ -45,6 +46,7 @@ public class LookupDataHolder implements Serializable {
     private LookupDataHolder () {
         clusterIdToSubscription = new ClusterIdToSubscription();
         tenantIdToSubscriptionContext = new TenantIdToSubscriptionContext();
+        repoUrlToCartridgeSubscriptions = new RepoUrlToCartridgeSubscriptions();
     }
 
     public static LookupDataHolder getInstance () {
@@ -64,6 +66,8 @@ public class LookupDataHolder implements Serializable {
         // add or update
         clusterIdToSubscription.addSubscription(cartridgeSubscription);
 
+        repoUrlToCartridgeSubscriptions.addSubscription(cartridgeSubscription);
+
         // check if an existing SubscriptionContext is available
         SubscriptionContext existingSubscriptionCtx = tenantIdToSubscriptionContext.getSubscriptionContext(cartridgeSubscription.getSubscriber().getTenantId());
         if(existingSubscriptionCtx != null) {
@@ -84,10 +88,11 @@ public class LookupDataHolder implements Serializable {
 
     }
 
-    public void removeSubscription (int tenantId, String type, String subscriptionAlias, String clusterId) {
+    public void removeSubscription (int tenantId, String type, String subscriptionAlias, String clusterId, String repoUrl) {
 
         tenantIdToSubscriptionContext.removeSubscriptionContext(tenantId, type, subscriptionAlias);
         clusterIdToSubscription.removeSubscription(clusterId, subscriptionAlias);
+        repoUrlToCartridgeSubscriptions.removeSubscription(repoUrl, subscriptionAlias);
     }
 
     public Collection<CartridgeSubscription> getSubscriptions (String cartridgeType) {
@@ -177,6 +182,12 @@ public class LookupDataHolder implements Serializable {
 
     }
 
+    public Set<CartridgeSubscription> getSubscriptionsForRepoUrl (String repoUrl) {
+
+        return repoUrlToCartridgeSubscriptions.getSubscriptions(repoUrl);
+
+    }
+
     public void acquireWriteLock () {
 
         writeLock.lock();

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d239ec94/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/RepoUrlToCartridgeSubscriptions.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/RepoUrlToCartridgeSubscriptions.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/RepoUrlToCartridgeSubscriptions.java
new file mode 100644
index 0000000..740680c
--- /dev/null
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/lookup/RepoUrlToCartridgeSubscriptions.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.manager.lookup;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.manager.subscription.CartridgeSubscription;
+
+import java.util.*;
+
+public class RepoUrlToCartridgeSubscriptions {
+
+    private static final Log log = LogFactory.getLog(ClusterIdToSubscription.class);
+
+    // Map: Repository URL -> Set<CartridgeSubscription>
+    private Map<String, Set<CartridgeSubscription>> repoUrlToCartridgeSubscriptions;
+
+    public RepoUrlToCartridgeSubscriptions() {
+        repoUrlToCartridgeSubscriptions = new HashMap<String, Set<CartridgeSubscription>>();
+    }
+
+    public void addSubscription (CartridgeSubscription cartridgeSubscription) {
+
+        if (cartridgeSubscription.getRepository() == null) {
+            if (log.isDebugEnabled()) {
+                log.debug("No repository URL found for Cartridge Subscription for alias " + cartridgeSubscription.getAlias() +
+                        ", not adding to [Repo URL -> Set<CartridgeSubscription>] map");
+            }
+            return;
+        }
+
+        String repoUrl = cartridgeSubscription.getRepository().getUrl();
+
+        if (repoUrlToCartridgeSubscriptions.containsKey(repoUrl)) {
+            Set<CartridgeSubscription> existingSubscriptions = repoUrlToCartridgeSubscriptions.get(repoUrl);
+            // if an existing subscription is present, remove it
+            if(existingSubscriptions.remove(cartridgeSubscription)){
+                if(log.isDebugEnabled()) {
+                    log.debug("Removed the existing Cartridge Subscription for repo URL " + repoUrl + " in [Repo URL -> Set<CartridgeSubscription>] map");
+                }
+            }
+            // add or update
+            existingSubscriptions.add(cartridgeSubscription);
+            if(log.isDebugEnabled()) {
+                log.debug("Added Cartridge Subscription for repo URL " + repoUrl + " in [Repo URL -> Set<CartridgeSubscription>] map");
+            }
+
+        } else {
+            // create a new set and add it
+            Set<CartridgeSubscription> subscriptions = new HashSet<CartridgeSubscription>();
+            subscriptions.add(cartridgeSubscription);
+            repoUrlToCartridgeSubscriptions.put(repoUrl, subscriptions);
+            if(log.isDebugEnabled()) {
+                log.debug("Added Cartridge Subscription for repo URL " + repoUrl + " in [Repo URL -> Set<CartridgeSubscription>] map");
+            }
+        }
+    }
+
+    public Set<CartridgeSubscription> getSubscriptions(String repoUrl) {
+
+        return repoUrlToCartridgeSubscriptions.get(repoUrl);
+    }
+
+    public void removeSubscription (String repoUrl, String subscriptionAlias) {
+
+        if (repoUrl == null) {
+            if (log.isDebugEnabled()) {
+                log.debug("Repository URL is null for subscription alias " + subscriptionAlias);
+            }
+            return;
+        }
+
+        // remove Subscription from repoUrlToCartridgeSubscriptions map
+        Set<CartridgeSubscription> existingSubscriptions = repoUrlToCartridgeSubscriptions.get(repoUrl);
+        if (existingSubscriptions != null && !existingSubscriptions.isEmpty()) {
+            // iterate through the set
+            Iterator<CartridgeSubscription> iterator = existingSubscriptions.iterator();
+            while (iterator.hasNext()) {
+                CartridgeSubscription cartridgeSubscription = iterator.next();
+                // if a matching CartridgeSubscription is found, remove
+                if (cartridgeSubscription.getAlias().equals(subscriptionAlias)) {
+                    iterator.remove();
+                    if (log.isDebugEnabled()) {
+                        log.debug("Deleted the subscription for repo URL " + repoUrl + " from [Repo URL -> Set<CartridgeSubscription>] map");
+                    }
+                    break;
+                }
+            }
+        }
+
+        // if the Subscriptions set is empty now, remove it from cartridgeTypeToSubscriptions map
+        if (existingSubscriptions == null || existingSubscriptions.isEmpty()) {
+            repoUrlToCartridgeSubscriptions.remove(repoUrl);
+            if (log.isDebugEnabled()) {
+                log.debug("Deleted the subscriptions set for repo URL " + repoUrl + " from [Repo URL -> Set<CartridgeSubscription>] map");
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d239ec94/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java
index 3574f77..386758f 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java
@@ -56,7 +56,8 @@ public class DataInsertionAndRetrievalManager {
                 log.error(errorMsg, e);
                 // remove from the in memory model since persisting failed
                 LookupDataHolder.getInstance().removeSubscription(cartridgeSubscription.getSubscriber().getTenantId(), cartridgeSubscription.getType(),
-                        cartridgeSubscription.getAlias(), cartridgeSubscription.getClusterDomain());
+                        cartridgeSubscription.getAlias(), cartridgeSubscription.getClusterDomain(),
+                        cartridgeSubscription.getRepository() != null ? cartridgeSubscription.getRepository().getUrl() : null);
 
                 throw e;
             }
@@ -95,7 +96,8 @@ public class DataInsertionAndRetrievalManager {
             }
 
             // remove from cache
-            LookupDataHolder.getInstance().removeSubscription(tenantId, cartridgeType, subscriptionAlias, clusterId);
+            LookupDataHolder.getInstance().removeSubscription(tenantId, cartridgeType, subscriptionAlias, clusterId,
+                    cartridgeSubscription.getRepository() != null ? cartridgeSubscription.getRepository().getUrl() : null);
 
         } finally {
             LookupDataHolder.getInstance().releaseWriteLock();
@@ -195,7 +197,8 @@ public class DataInsertionAndRetrievalManager {
 
         try {
             // remove from cache
-            LookupDataHolder.getInstance().removeSubscription(tenantId, cartridgeType, subscriptionAlias, clusterId);
+            LookupDataHolder.getInstance().removeSubscription(tenantId, cartridgeType, subscriptionAlias, clusterId,
+                    cartridgeSubscription.getRepository() != null ? cartridgeSubscription.getRepository().getUrl() : null);
 
         } finally {
             LookupDataHolder.getInstance().releaseWriteLock();
@@ -275,6 +278,20 @@ public class DataInsertionAndRetrievalManager {
         }
     }
 
+    public Set<CartridgeSubscription> getCartridgeSubscriptionForRepository (String repoUrl) {
+
+        // acquire read lock
+        LookupDataHolder.getInstance().acquireReadLock();
+
+        try {
+            return LookupDataHolder.getInstance().getSubscriptionsForRepoUrl(repoUrl);
+
+        } finally {
+            // release read lock
+            LookupDataHolder.getInstance().releaseReadLock();
+        }
+    }
+
     public Collection<CartridgeSubscription> getCartridgeSubscriptions (int tenantId) {
 
         // acquire read lock