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 2013/12/10 05:16:15 UTC
[5/5] git commit: registry based persistence
registry based persistence
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/aebdb087
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/aebdb087
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/aebdb087
Branch: refs/heads/master
Commit: aebdb0879b017ab4b722a626521a46a22eaa4bff
Parents: 1c2f93c
Author: Isuru <is...@wso2.com>
Authored: Tue Dec 10 09:44:57 2013 +0530
Committer: Isuru <is...@wso2.com>
Committed: Tue Dec 10 09:44:57 2013 +0530
----------------------------------------------------------------------
.../ClusterIdToCartridgeSubscriptionMap.java | 70 ++++++++++
.../adc/mgt/lookup/LookupDataHolder.java | 116 +++++++++-------
...criptionAliasToCartridgeSubscriptionMap.java | 71 ++++++++++
.../adc/mgt/persistence/PersistenceManager.java | 22 ++-
.../RegistryBasedPersistenceManager.java | 102 ++++++++++++--
.../adc/mgt/registry/RegistryManager.java | 138 +++++++++++++++++++
.../adc/mgt/retriever/DataRetrievalManager.java | 89 +++++++-----
.../stratos/adc/mgt/utils/Deserializer.java | 52 +++++++
.../stratos/adc/mgt/utils/Serializer.java | 83 +++++++++++
9 files changed, 642 insertions(+), 101 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/ClusterIdToCartridgeSubscriptionMap.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/ClusterIdToCartridgeSubscriptionMap.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/ClusterIdToCartridgeSubscriptionMap.java
new file mode 100644
index 0000000..864ffb2
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/ClusterIdToCartridgeSubscriptionMap.java
@@ -0,0 +1,70 @@
+/*
+ * 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.adc.mgt.lookup;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ClusterIdToCartridgeSubscriptionMap implements Serializable {
+
+ private static final Log log = LogFactory.getLog(ClusterIdToCartridgeSubscriptionMap.class);
+
+ private Map<String, CartridgeSubscription> clusterItToCartridgeSubscrptionMap;
+
+ public ClusterIdToCartridgeSubscriptionMap () {
+ clusterItToCartridgeSubscrptionMap = new HashMap<String, CartridgeSubscription>();
+ }
+
+ public Map<String, CartridgeSubscription> getSubscriptionAliasToCartridgeSubscriptionMap() {
+ return clusterItToCartridgeSubscrptionMap;
+ }
+
+ public void addSubscription(String clusterId, CartridgeSubscription cartridgeSubscription) {
+
+ if(clusterItToCartridgeSubscrptionMap.put(clusterId, cartridgeSubscription) != null) {
+ log.info("Overwrote the previous CartridgeSubscription value for cluster " + clusterId);
+ }
+ }
+
+ public boolean isEmpty () {
+ return clusterItToCartridgeSubscrptionMap.isEmpty();
+ }
+
+ public void removeSubscription (String clusterId) {
+
+ if(clusterItToCartridgeSubscrptionMap.remove(clusterId) == null) {
+ log.info("No CartridgeSubscription entry found for cluster " + clusterId);
+ }
+ }
+
+ public CartridgeSubscription getCartridgeSubscription (String clusterId) {
+ return clusterItToCartridgeSubscrptionMap.get(clusterId);
+ }
+
+ public Collection<CartridgeSubscription> getCartridgeSubscriptions () {
+ return clusterItToCartridgeSubscrptionMap.values();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java
index f283753..5e704db 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java
@@ -23,16 +23,20 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
-import java.util.*;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
import java.util.concurrent.locks.ReentrantReadWriteLock;
-public class LookupDataHolder {
+public class LookupDataHolder implements Serializable {
private static final Log log = LogFactory.getLog(LookupDataHolder.class);
private Map<Integer, SubscriptionAliasToCartridgeSubscriptionMap> tenantIdToCartridgeSubscriptionCache;
- private Map<String, CartridgeSubscription> clusterItToCartridgeSubscrptionMatch;
+ //private Map<String, CartridgeSubscription> clusterItToCartridgeSubscrptionMap;
//private static LookupDataHolder lookupDataHolder;
+ private ClusterIdToCartridgeSubscriptionMap clusterIdToCartridgeSubscriptionMap;
//locks
private static volatile ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
@@ -41,7 +45,8 @@ public class LookupDataHolder {
public LookupDataHolder () {
tenantIdToCartridgeSubscriptionCache = new HashMap<Integer, SubscriptionAliasToCartridgeSubscriptionMap>();
- clusterItToCartridgeSubscrptionMatch = new HashMap<String, CartridgeSubscription>();
+ //clusterItToCartridgeSubscrptionMap = new HashMap<String, CartridgeSubscription>();
+ clusterIdToCartridgeSubscriptionMap = new ClusterIdToCartridgeSubscriptionMap();
}
/*public static LookupDataHolder getInstance () {
@@ -77,10 +82,31 @@ public class LookupDataHolder {
aliasToSubscriptionMap.addSubscription(subscriptionAlias, cartridgeSubscription);
}
- if(clusterItToCartridgeSubscrptionMatch.put(cartridgeSubscription.getClusterDomain(), cartridgeSubscription)
- != null) {
- log.info("Overwrote the CartridgeSubscription value for cluster Id " +
- cartridgeSubscription.getClusterDomain());
+ clusterIdToCartridgeSubscriptionMap.addSubscription(cartridgeSubscription.getClusterDomain(), cartridgeSubscription);
+
+ } finally {
+ writeLock.unlock();
+ }
+ }
+
+ public void addCartridgeSubscriptions (int tenantId, SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap) {
+
+ }
+
+ private void addSubscriptions (int tenantId, SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap) {
+
+ writeLock.lock();
+
+ try {
+ if(tenantIdToCartridgeSubscriptionCache.put(tenantId, aliasToSubscriptionMap) != null) {
+ log.info("Existing SubscriptionAliasToCartridgeSubscriptionMap instance overwritten for tenant " +
+ tenantId);
+ }
+
+ Collection<CartridgeSubscription> cartridgeSubscriptions = aliasToSubscriptionMap.getCartridgeSubscriptions();
+ for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) {
+ clusterIdToCartridgeSubscriptionMap.addSubscription(cartridgeSubscription.getCluster().getClusterDomain(),
+ cartridgeSubscription);
}
} finally {
@@ -110,8 +136,37 @@ public class LookupDataHolder {
log.info("No SubscriptionAliasToCartridgeSubscriptionMap entry found for tenant Id " + tenantId);
}
- if(clusterItToCartridgeSubscrptionMatch.remove(clusterId) != null) {
- log.info("No CartridgeSubscription entry found for cluster Id " + clusterId);
+ clusterIdToCartridgeSubscriptionMap.removeSubscription(clusterId);
+
+ } finally {
+ writeLock.unlock();
+ }
+ }
+
+ public void removeCartridgeSubscriptions (int tenantId) {
+ removeSubscriptions(tenantId);
+ }
+
+ private void removeSubscriptions (int tenantId) {
+
+ writeLock.lock();
+
+ try {
+ SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap = tenantIdToCartridgeSubscriptionCache.
+ get(tenantId);
+
+ if(aliasToSubscriptionMap != null) {
+ //remove the subscriptions referenced by cluster domain for this tenant
+ Collection<CartridgeSubscription> cartridgeSubscriptions = aliasToSubscriptionMap.getCartridgeSubscriptions();
+
+ for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) {
+ clusterIdToCartridgeSubscriptionMap.removeSubscription(cartridgeSubscription.getClusterDomain());
+ }
+ //remove the map for this tenant ID
+ tenantIdToCartridgeSubscriptionCache.remove(tenantId);
+
+ } else {
+ log.info("No SubscriptionAliasToCartridgeSubscriptionMap entry found for tenant Id " + tenantId);
}
} finally {
@@ -154,7 +209,7 @@ public class LookupDataHolder {
readLock.lock();
try {
- return clusterItToCartridgeSubscrptionMatch.get(clusterId);
+ return clusterIdToCartridgeSubscriptionMap.getCartridgeSubscription(clusterId);
} finally {
readLock.unlock();
@@ -196,43 +251,4 @@ public class LookupDataHolder {
readLock.unlock();
}
}
-
- private class SubscriptionAliasToCartridgeSubscriptionMap {
-
- private Map<String, CartridgeSubscription> subscriptionAliasToCartridgeSubscriptionMap;
-
- public SubscriptionAliasToCartridgeSubscriptionMap () {
- subscriptionAliasToCartridgeSubscriptionMap = new HashMap<String, CartridgeSubscription>();
- }
-
- public Map<String, CartridgeSubscription> getSubscriptionAliasToCartridgeSubscriptionMap() {
- return subscriptionAliasToCartridgeSubscriptionMap;
- }
-
- public void addSubscription(String subscriptionAlias, CartridgeSubscription cartridgeSubscription) {
-
- if(subscriptionAliasToCartridgeSubscriptionMap.put(subscriptionAlias, cartridgeSubscription) != null) {
- log.info("Overwrote the previous CartridgeSubscription value for subscription alias" + subscriptionAlias);
- }
- }
-
- public boolean isEmpty () {
- return subscriptionAliasToCartridgeSubscriptionMap.isEmpty();
- }
-
- public void removeSubscription (String subscriptionAlias) {
-
- if(subscriptionAliasToCartridgeSubscriptionMap.remove(subscriptionAlias) == null) {
- log.info("No CartridgeSubscription entry found for subscription alias " + subscriptionAlias);
- }
- }
-
- public CartridgeSubscription getCartridgeSubscription (String cartridgeSubscriptionAlias) {
- return subscriptionAliasToCartridgeSubscriptionMap.get(cartridgeSubscriptionAlias);
- }
-
- public Collection<CartridgeSubscription> getCartridgeSubscriptions () {
- return subscriptionAliasToCartridgeSubscriptionMap.values();
- }
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionAliasToCartridgeSubscriptionMap.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionAliasToCartridgeSubscriptionMap.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionAliasToCartridgeSubscriptionMap.java
new file mode 100644
index 0000000..56e9d7d
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionAliasToCartridgeSubscriptionMap.java
@@ -0,0 +1,71 @@
+/*
+ * 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.adc.mgt.lookup;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+public class SubscriptionAliasToCartridgeSubscriptionMap implements Serializable {
+
+ private static final Log log = LogFactory.getLog(SubscriptionAliasToCartridgeSubscriptionMap.class);
+
+
+ private Map<String, CartridgeSubscription> subscriptionAliasToCartridgeSubscriptionMap;
+
+ public SubscriptionAliasToCartridgeSubscriptionMap () {
+ subscriptionAliasToCartridgeSubscriptionMap = new HashMap<String, CartridgeSubscription>();
+ }
+
+ public Map<String, CartridgeSubscription> getSubscriptionAliasToCartridgeSubscriptionMap() {
+ return subscriptionAliasToCartridgeSubscriptionMap;
+ }
+
+ public void addSubscription(String subscriptionAlias, CartridgeSubscription cartridgeSubscription) {
+
+ if(subscriptionAliasToCartridgeSubscriptionMap.put(subscriptionAlias, cartridgeSubscription) != null) {
+ log.info("Overwrote the previous CartridgeSubscription value for subscription alias" + subscriptionAlias);
+ }
+ }
+
+ public boolean isEmpty () {
+ return subscriptionAliasToCartridgeSubscriptionMap.isEmpty();
+ }
+
+ public void removeSubscription (String subscriptionAlias) {
+
+ if(subscriptionAliasToCartridgeSubscriptionMap.remove(subscriptionAlias) == null) {
+ log.info("No CartridgeSubscription entry found for subscription alias " + subscriptionAlias);
+ }
+ }
+
+ public CartridgeSubscription getCartridgeSubscription (String cartridgeSubscriptionAlias) {
+ return subscriptionAliasToCartridgeSubscriptionMap.get(cartridgeSubscriptionAlias);
+ }
+
+ public Collection<CartridgeSubscription> getCartridgeSubscriptions () {
+ return subscriptionAliasToCartridgeSubscriptionMap.values();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
index 1e8936a..b948e84 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
@@ -20,13 +20,25 @@
package org.apache.stratos.adc.mgt.persistence;
import org.apache.stratos.adc.mgt.exception.PersistenceManagerException;
-import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
-
-import java.util.List;
+import org.apache.stratos.adc.mgt.lookup.ClusterIdToCartridgeSubscriptionMap;
+import org.apache.stratos.adc.mgt.lookup.SubscriptionAliasToCartridgeSubscriptionMap;
public abstract class PersistenceManager {
- public abstract void persistCartridgeSubscription (CartridgeSubscription cartridgeSubscription)
+ public abstract void persistCartridgeSubscriptions (int tenantId, SubscriptionAliasToCartridgeSubscriptionMap
+ aliasToSubscriptionMap)
+ throws PersistenceManagerException;
+
+ public abstract SubscriptionAliasToCartridgeSubscriptionMap retrieveCartridgeSubscriptions (int tenantId)
+ throws PersistenceManagerException;
+
+ public abstract void persistCartridgeSubscriptions (String clusterId, ClusterIdToCartridgeSubscriptionMap clusterIdToSubscriptionMap)
+ throws PersistenceManagerException;
+
+ public abstract ClusterIdToCartridgeSubscriptionMap retrieveCartridgeSubscriptions (String clusterId)
+ throws PersistenceManagerException;
+
+ /*public abstract void persistCartridgeSubscription (CartridgeSubscription cartridgeSubscription)
throws PersistenceManagerException;
public abstract void removeCartridgeSubscription (int tenantId, String alias)
@@ -41,7 +53,7 @@ public abstract class PersistenceManager {
public abstract CartridgeSubscription getCartridgeSubscription (String clusterDomain)
throws PersistenceManagerException;
- /*public abstract List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId, String cartridgeType)
+ public abstract List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId, String cartridgeType)
throws PersistenceManagerException;
public abstract Repository getRepository (int tenantId, String alias)
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java
index e69585c..c796767 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/RegistryBasedPersistenceManager.java
@@ -19,35 +19,107 @@
package org.apache.stratos.adc.mgt.persistence;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.exception.ADCException;
import org.apache.stratos.adc.mgt.exception.PersistenceManagerException;
-import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
-
-import java.util.List;
+import org.apache.stratos.adc.mgt.lookup.ClusterIdToCartridgeSubscriptionMap;
+import org.apache.stratos.adc.mgt.lookup.SubscriptionAliasToCartridgeSubscriptionMap;
+import org.apache.stratos.adc.mgt.registry.RegistryManager;
+import org.apache.stratos.adc.mgt.utils.Deserializer;
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
public class RegistryBasedPersistenceManager extends PersistenceManager {
- @Override
- public void persistCartridgeSubscription(CartridgeSubscription cartridgeSubscription) throws PersistenceManagerException {
- //To change body of implemented methods use File | Settings | File Templates.
- }
+ private static final Log log = LogFactory.getLog(RegistryBasedPersistenceManager.class);
@Override
- public void removeCartridgeSubscription(int tenantId, String alias) throws PersistenceManagerException {
- //To change body of implemented methods use File | Settings | File Templates.
+ public void persistCartridgeSubscriptions(int tenantId, SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap) throws PersistenceManagerException {
+
+ try {
+ RegistryManager.getInstance().persistAliastoSubscriptionMap(tenantId, aliasToSubscriptionMap);
+
+ } catch (RegistryException e) {
+ throw new PersistenceManagerException(e);
+
+ } catch (ADCException e) {
+ throw new PersistenceManagerException(e);
+ }
}
@Override
- public CartridgeSubscription getCartridgeSubscription(int tenantId, String alias) throws PersistenceManagerException {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public SubscriptionAliasToCartridgeSubscriptionMap retrieveCartridgeSubscriptions(int tenantId) throws PersistenceManagerException {
+
+ Object aliasToSubscriptionMapObj;
+
+ try {
+ aliasToSubscriptionMapObj = RegistryManager.getInstance().getAliastoSubscriptionMap(tenantId);
+
+ } catch (ADCException e) {
+ throw new PersistenceManagerException(e);
+ }
+
+ if (aliasToSubscriptionMapObj != null) {
+ try {
+ Object dataObj = Deserializer
+ .deserializeFromByteArray((byte[]) aliasToSubscriptionMapObj);
+ if(dataObj instanceof SubscriptionAliasToCartridgeSubscriptionMap) {
+ return (SubscriptionAliasToCartridgeSubscriptionMap) dataObj;
+ } else {
+ return null;
+ }
+
+ } catch (Exception e) {
+ String errorMsg = "Unable to retrieve data from Registry. Hence, any historical data will not get reflected.";
+ log.warn(errorMsg, e);
+ }
+ }
+
+ return null;
}
@Override
- public List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId) throws PersistenceManagerException {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public void persistCartridgeSubscriptions(String clusterId, ClusterIdToCartridgeSubscriptionMap clusterIdToSubscriptionMap) throws PersistenceManagerException {
+
+ try {
+ RegistryManager.getInstance().persistClusterIdToSubscriptionMap(clusterIdToSubscriptionMap);
+
+ } catch (RegistryException e) {
+ throw new PersistenceManagerException(e);
+
+ } catch (ADCException e) {
+ throw new PersistenceManagerException(e);
+ }
}
@Override
- public CartridgeSubscription getCartridgeSubscription(String clusterDomain) throws PersistenceManagerException {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ public ClusterIdToCartridgeSubscriptionMap retrieveCartridgeSubscriptions(String clusterId) throws PersistenceManagerException {
+
+ Object clusterIdToSubscriptionMapObj;
+
+ try {
+ clusterIdToSubscriptionMapObj = RegistryManager.getInstance().getClusterIdtoSubscriptionMap();
+
+ } catch (ADCException e) {
+ throw new PersistenceManagerException(e);
+ }
+
+ if (clusterIdToSubscriptionMapObj != null) {
+ try {
+ Object dataObj = Deserializer
+ .deserializeFromByteArray((byte[]) clusterIdToSubscriptionMapObj);
+ if(dataObj instanceof ClusterIdToCartridgeSubscriptionMap) {
+ return (ClusterIdToCartridgeSubscriptionMap) dataObj;
+ } else {
+ return null;
+ }
+
+ } catch (Exception e) {
+ String errorMsg = "Unable to retrieve data from Registry. Hence, any historical data will not get reflected.";
+ log.warn(errorMsg, e);
+ }
+ }
+
+ return null;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/registry/RegistryManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/registry/RegistryManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/registry/RegistryManager.java
new file mode 100644
index 0000000..da7fdec
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/registry/RegistryManager.java
@@ -0,0 +1,138 @@
+/*
+ * 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.adc.mgt.registry;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.exception.ADCException;
+import org.apache.stratos.adc.mgt.internal.DataHolder;
+import org.apache.stratos.adc.mgt.lookup.ClusterIdToCartridgeSubscriptionMap;
+import org.apache.stratos.adc.mgt.lookup.SubscriptionAliasToCartridgeSubscriptionMap;
+import org.apache.stratos.adc.mgt.utils.Serializer;
+import org.wso2.carbon.registry.core.Registry;
+import org.wso2.carbon.registry.core.Resource;
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
+import org.wso2.carbon.registry.core.exceptions.ResourceNotFoundException;
+
+public class RegistryManager {
+
+ private final static Log log = LogFactory.getLog(RegistryManager.class);
+ private final static String STRATOS_MANAGER_REOSURCE = "/stratos.manager";
+ private static Registry registryService;
+ private static RegistryManager registryManager;
+
+ public static RegistryManager getInstance() {
+
+ registryService = DataHolder.getRegistry();
+
+ if (registryManager == null) {
+ synchronized (RegistryManager.class) {
+ if (registryService == null) {
+ return registryManager;
+ }
+ registryManager = new RegistryManager();
+ }
+ }
+ return registryManager;
+ }
+
+ private RegistryManager() {
+ try {
+ if (!registryService.resourceExists(STRATOS_MANAGER_REOSURCE)) {
+ registryService.put(STRATOS_MANAGER_REOSURCE, registryService.newCollection());
+ }
+ } catch (RegistryException e) {
+ String errorMsg = "Failed to create the registry resource " + STRATOS_MANAGER_REOSURCE;
+ log.error(errorMsg, e);;
+ }
+ }
+
+ public void persistAliastoSubscriptionMap (int tenantId,
+ SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap)
+ throws RegistryException, ADCException {
+
+ try {
+ registryService.beginTransaction();
+ Resource nodeResource = registryService.newResource();
+ nodeResource.setContent(Serializer.serializeAliasToSubscriptionMapToByteArray(aliasToSubscriptionMap));
+ registryService.put(STRATOS_MANAGER_REOSURCE + "/subscription/tenant" + Integer.toString(tenantId),
+ nodeResource);
+ registryService.commitTransaction();
+
+ } catch (Exception e) {
+ String errorMsg = "Failed to persist SubscriptionAliasToCartridgeSubscriptionMap in registry.";
+ registryService.rollbackTransaction();
+ log.error(errorMsg, e);
+ throw new ADCException(errorMsg, e);
+ }
+ }
+
+ public Object getAliastoSubscriptionMap (int tenantId) throws ADCException {
+
+ try {
+ Resource resource = registryService.get(STRATOS_MANAGER_REOSURCE + "/subscription/tenant" +
+ Integer.toString(tenantId));
+ return resource.getContent();
+
+ } catch (ResourceNotFoundException ignore) {
+ return null;
+
+ } catch (RegistryException e) {
+ String errorMsg = "Failed to retrieve SubscriptionAliasToCartridgeSubscriptionMap from registry.";
+ log.error(errorMsg, e);
+ throw new ADCException(errorMsg, e);
+ }
+ }
+
+ public void persistClusterIdToSubscriptionMap (ClusterIdToCartridgeSubscriptionMap clusterIdToSubscriptionMap)
+ throws RegistryException, ADCException {
+
+ try {
+ registryService.beginTransaction();
+ Resource nodeResource = registryService.newResource();
+ nodeResource.setContent(Serializer.serializeClusterIdToSubscriptionMapToByteArray(clusterIdToSubscriptionMap));
+ registryService.put(STRATOS_MANAGER_REOSURCE + "/subscription/cluster",
+ nodeResource);
+ registryService.commitTransaction();
+
+ } catch (Exception e) {
+ String errorMsg = "Failed to persist ClusterIdToCartridgeSubscriptionMap in registry.";
+ registryService.rollbackTransaction();
+ log.error(errorMsg, e);
+ throw new ADCException(errorMsg, e);
+ }
+ }
+
+ public Object getClusterIdtoSubscriptionMap () throws ADCException {
+
+ try {
+ Resource resource = registryService.get(STRATOS_MANAGER_REOSURCE + "/subscription/cluster");
+ return resource.getContent();
+
+ } catch (ResourceNotFoundException ignore) {
+ return null;
+
+ } catch (RegistryException e) {
+ String errorMsg = "Failed to retrieve ClusterIdToCartridgeSubscriptionMap from registry.";
+ log.error(errorMsg, e);
+ throw new ADCException(errorMsg, e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataRetrievalManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataRetrievalManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataRetrievalManager.java
index 11093d3..27022c5 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataRetrievalManager.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataRetrievalManager.java
@@ -19,8 +19,11 @@
package org.apache.stratos.adc.mgt.retriever;
+import org.apache.stratos.adc.mgt.exception.ADCException;
import org.apache.stratos.adc.mgt.exception.PersistenceManagerException;
+import org.apache.stratos.adc.mgt.lookup.ClusterIdToCartridgeSubscriptionMap;
import org.apache.stratos.adc.mgt.lookup.LookupDataHolder;
+import org.apache.stratos.adc.mgt.lookup.SubscriptionAliasToCartridgeSubscriptionMap;
import org.apache.stratos.adc.mgt.persistence.PersistenceManager;
import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
import org.jgroups.logging.Log;
@@ -46,46 +49,45 @@ public class DataRetrievalManager {
cartridgeSubscriptionUpdateThreadPool = Executors.newCachedThreadPool();
}
- public CartridgeSubscription getCartridgeSubscription (int tenantId, String subscriptionAlias)
- throws PersistenceManagerException {
+ public CartridgeSubscription getCartridgeSubscriptionByAlias (int tenantId, String subscriptionAlias)
+ throws PersistenceManagerException, ADCException {
CartridgeSubscription cartridgeSubscription = null;
if(lookupDataHolder != null) {
- //look in the local cache
- cartridgeSubscription = lookupDataHolder.getCartridgeSubscription(tenantId, subscriptionAlias);
+ cartridgeSubscription = lookupDataHolder.getCartridgeSubscription(subscriptionAlias);
}
- //if not found in the local cache, look in the Persistence Manager
- if (cartridgeSubscription == null) {
- persistenceManager.getCartridgeSubscription(tenantId, subscriptionAlias);
- } else {
- if(log.isDebugEnabled()) {
- log.debug("Cartridge subscription entry for tenant Id " + tenantId + ", subscription alias " +
- subscriptionAlias + " found in the local cache");
+ else {
+ //look in the persistence manager
+ SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap =
+ persistenceManager.retrieveCartridgeSubscriptions(tenantId);
+
+ if(aliasToSubscriptionMap != null) {
+ cartridgeSubscription = aliasToSubscriptionMap.getCartridgeSubscription(subscriptionAlias);
+ populateLookupDataHolder(aliasToSubscriptionMap);
}
}
return cartridgeSubscription;
}
- public CartridgeSubscription getCartridgeSubscription (String clusterId)
- throws PersistenceManagerException {
+ public CartridgeSubscription getCartridgeSubscriptionByClusterId (String clusterId)
+ throws PersistenceManagerException, ADCException {
CartridgeSubscription cartridgeSubscription = null;
if(lookupDataHolder != null) {
- //look in the local cache
cartridgeSubscription = lookupDataHolder.getCartridgeSubscription(clusterId);
}
- //if not found in the local cache, look in the Persistence Manager
- if (cartridgeSubscription == null) {
- persistenceManager.getCartridgeSubscription(clusterId);
-
- } else {
- if(log.isDebugEnabled()) {
- log.debug("Cartridge subscription entry for cluster domain " + clusterId +
- " found in the local cache");
+ else {
+ //look in the persistence manager
+ ClusterIdToCartridgeSubscriptionMap clusterIdToSubscriptionMap =
+ persistenceManager.retrieveCartridgeSubscriptions(clusterId);
+ if(clusterIdToSubscriptionMap != null) {
+ cartridgeSubscription = clusterIdToSubscriptionMap.getCartridgeSubscription(clusterId);
+ populateLookupDataHolder(clusterIdToSubscriptionMap);
}
+
}
return cartridgeSubscription;
@@ -101,7 +103,10 @@ public class DataRetrievalManager {
}
//if not found in the local cache, look in the Persistence Manager
if (cartridgeSubscriptionCollection == null) {
- persistenceManager.getCartridgeSubscriptions(tenantId);
+ SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap = persistenceManager.
+ retrieveCartridgeSubscriptions(tenantId);
+ //populate the LookupDataHolder
+ populateLookupDataHolder(aliasToSubscriptionMap);
} else {
if(log.isDebugEnabled()) {
@@ -118,29 +123,51 @@ public class DataRetrievalManager {
return cartridgeSubscriptionList;
}
- public void putCartridgeSubscription (CartridgeSubscription cartridgeSubscription) {
+ private void populateLookupDataHolder (SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap) {
+
+ //populate the cache
+ Collection<CartridgeSubscription> cartridgeSubscriptions = aliasToSubscriptionMap.getCartridgeSubscriptions();
+ for (CartridgeSubscription subscription : cartridgeSubscriptions) {
+ lookupDataHolder.addCartridgeSubscription(subscription.getSubscriber().getTenantId(),
+ subscription.getAlias(),
+ subscription);
+ }
+ }
+
+ private void populateLookupDataHolder (ClusterIdToCartridgeSubscriptionMap clusterIdToSubscriptionMap) {
- cartridgeSubscriptionUpdateThreadPool.submit(new CartridgeSubscriptionUpdater(cartridgeSubscription,
+ //populate the cache
+ Collection<CartridgeSubscription> cartridgeSubscriptions = clusterIdToSubscriptionMap.getCartridgeSubscriptions();
+ for (CartridgeSubscription subscription : cartridgeSubscriptions) {
+ lookupDataHolder.addCartridgeSubscription(subscription.getSubscriber().getTenantId(),
+ subscription.getAlias(),
+ subscription);
+ }
+ }
+
+ public void putCartridgeSubscriptions (SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap) {
+
+ cartridgeSubscriptionUpdateThreadPool.submit(new CartridgeSubscriptionUpdater(aliasToSubscriptionMap,
lookupDataHolder, persistenceManager));
}
private class CartridgeSubscriptionUpdater implements Runnable {
- CartridgeSubscription cartridgeSubscription;
+ SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap;
LookupDataHolder lookupDataHolder;
PersistenceManager persistenceManager;
- public CartridgeSubscriptionUpdater (CartridgeSubscription cartridgeSubscription, LookupDataHolder
- lookupDataHolder, PersistenceManager persistenceManager) {
+ public CartridgeSubscriptionUpdater (SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap,
+ LookupDataHolder lookupDataHolder, PersistenceManager persistenceManager) {
- this.cartridgeSubscription = cartridgeSubscription;
+ this.aliasToSubscriptionMap = aliasToSubscriptionMap;
this.lookupDataHolder = lookupDataHolder;
this.persistenceManager = persistenceManager;
}
public void run() {
- if(lookupDataHolder != null) {
+ /*if(lookupDataHolder != null) {
lookupDataHolder.addCartridgeSubscription(cartridgeSubscription.getSubscriber().getTenantId(),
cartridgeSubscription.getAlias(), cartridgeSubscription);
}
@@ -150,7 +177,7 @@ public class DataRetrievalManager {
} catch (PersistenceManagerException e) {
String errorMsg = "Error in persisting Cartridge Subscription instance";
log.error(errorMsg, e);
- }
+ }*/
}
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Deserializer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Deserializer.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Deserializer.java
new file mode 100644
index 0000000..95edaf1
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Deserializer.java
@@ -0,0 +1,52 @@
+/*
+ * 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.adc.mgt.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.ObjectInput;
+import java.io.ObjectInputStream;
+
+public class Deserializer {
+
+
+ /**
+ * Deserialize a byte array and retrieve the object.
+ * @param bytes bytes to be deserialized
+ * @return the deserialized {@link Object}
+ * @throws Exception if the deserialization is failed.
+ */
+ public static Object deserializeFromByteArray(byte[] bytes) throws Exception {
+
+ ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
+ ObjectInput in = null;
+ try {
+ in = new ObjectInputStream(bis);
+ Object o = in.readObject();
+
+ return o;
+
+ } finally {
+ bis.close();
+ if (in != null) {
+ in.close();
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/aebdb087/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Serializer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Serializer.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Serializer.java
new file mode 100644
index 0000000..b0b0b77
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/utils/Serializer.java
@@ -0,0 +1,83 @@
+/*
+ * 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.adc.mgt.utils;
+
+import org.apache.stratos.adc.mgt.lookup.ClusterIdToCartridgeSubscriptionMap;
+import org.apache.stratos.adc.mgt.lookup.SubscriptionAliasToCartridgeSubscriptionMap;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+
+public class Serializer {
+
+ /**
+ * Serialize a SubscriptionAliasToCartridgeSubscriptionMap to a byte array.
+ * @param aliasToSubscriptionMap
+ * @return byte[]
+ * @throws java.io.IOException
+ */
+ public static byte[] serializeAliasToSubscriptionMapToByteArray (SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap)
+ throws IOException {
+
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ ObjectOutput out = null;
+ try {
+ out = new ObjectOutputStream(bos);
+ out.writeObject(aliasToSubscriptionMap);
+
+ return bos.toByteArray();
+
+ } finally {
+ if (out != null) {
+ out.close();
+ }
+ bos.close();
+ }
+
+ }
+
+ /**
+ * Serialize a ClusterIdToCartridgeSubscriptionMap to a byte array.
+ * @param clusterIdToSubscriptionMap
+ * @return byte[]
+ * @throws java.io.IOException
+ */
+ public static byte[] serializeClusterIdToSubscriptionMapToByteArray (ClusterIdToCartridgeSubscriptionMap clusterIdToSubscriptionMap)
+ throws IOException {
+
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ ObjectOutput out = null;
+ try {
+ out = new ObjectOutputStream(bos);
+ out.writeObject(clusterIdToSubscriptionMap);
+
+ return bos.toByteArray();
+
+ } finally {
+ if (out != null) {
+ out.close();
+ }
+ bos.close();
+ }
+
+ }
+}