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