registry based persistence and caching initial implementation
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/ba14b09f Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/ba14b09f Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/ba14b09f Branch: refs/heads/master Commit: ba14b09ffc9a2a6d0a4ec05de9973ed59bfa10ea Parents: 57cccfb Author: Isuru <[email protected]> Authored: Mon Dec 9 09:43:07 2013 +0530 Committer: Isuru <[email protected]> Committed: Mon Dec 9 09:43:07 2013 +0530 ---------------------------------------------------------------------- .../org/apache/stratos/adc/mgt/dao/Cluster.java | 4 +- .../adc/mgt/listener/TenantStatusListner.java | 42 + .../adc/mgt/lookup/LookupDataHolder.java | 238 ++ .../apache/stratos/adc/mgt/payload/Payload.java | 7 +- .../DatabaseBasedPersistenceManager.java | 2816 +++++++++--------- .../adc/mgt/persistence/PersistenceManager.java | 10 +- .../RegistryBasedPersistenceManager.java | 53 + .../stratos/adc/mgt/repository/Repository.java | 4 +- .../adc/mgt/retriever/DataRetrievalManager.java | 157 + .../stratos/adc/mgt/subscriber/Subscriber.java | 4 +- .../mgt/subscription/CartridgeSubscription.java | 12 +- .../tenancy/SubscriptionTenancyBehaviour.java | 3 +- 12 files changed, 1927 insertions(+), 1423 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba14b09f/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Cluster.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Cluster.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Cluster.java index df926fd..6120a80 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Cluster.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Cluster.java @@ -1,6 +1,8 @@ package org.apache.stratos.adc.mgt.dao; -public class Cluster { +import java.io.Serializable; + +public class Cluster implements Serializable { private int id; private String clusterDomain; http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba14b09f/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/listener/TenantStatusListner.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/listener/TenantStatusListner.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/listener/TenantStatusListner.java new file mode 100644 index 0000000..959cf85 --- /dev/null +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/listener/TenantStatusListner.java @@ -0,0 +1,42 @@ +/* + * 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.listener; + +import org.apache.axis2.context.ConfigurationContext; +import org.wso2.carbon.utils.Axis2ConfigurationContextObserver; + +public class TenantStatusListner implements Axis2ConfigurationContextObserver { + + public void creatingConfigurationContext(int i) { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void createdConfigurationContext(ConfigurationContext configurationContext) { + + } + + public void terminatingConfigurationContext(ConfigurationContext configurationContext) { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void terminatedConfigurationContext(ConfigurationContext configurationContext) { + //To change body of implemented methods use File | Settings | File Templates. + } +} http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba14b09f/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 new file mode 100644 index 0000000..f283753 --- /dev/null +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/LookupDataHolder.java @@ -0,0 +1,238 @@ +/* + * 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.util.*; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +public class LookupDataHolder { + + private static final Log log = LogFactory.getLog(LookupDataHolder.class); + + private Map<Integer, SubscriptionAliasToCartridgeSubscriptionMap> tenantIdToCartridgeSubscriptionCache; + private Map<String, CartridgeSubscription> clusterItToCartridgeSubscrptionMatch; + //private static LookupDataHolder lookupDataHolder; + + //locks + private static volatile ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); + private static volatile ReentrantReadWriteLock.ReadLock readLock = lock.readLock(); + private static volatile ReentrantReadWriteLock.WriteLock writeLock = lock.writeLock(); + + public LookupDataHolder () { + tenantIdToCartridgeSubscriptionCache = new HashMap<Integer, SubscriptionAliasToCartridgeSubscriptionMap>(); + clusterItToCartridgeSubscrptionMatch = new HashMap<String, CartridgeSubscription>(); + } + + /*public static LookupDataHolder getInstance () { + + if (lookupDataHolder == null) { + synchronized(LookupDataHolder.class) { + if (lookupDataHolder == null) { + lookupDataHolder = new LookupDataHolder(); + } + } + } + return lookupDataHolder; + }*/ + + public void addCartridgeSubscription (int tenantId, String subscriptionAlias, CartridgeSubscription + cartridgeSubscription) { + addSubscription(tenantId, subscriptionAlias, cartridgeSubscription); + } + + private void addSubscription (int tenantId, String subscriptionAlias, CartridgeSubscription cartridgeSubscription) { + + writeLock.lock(); + + try { + SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap = tenantIdToCartridgeSubscriptionCache. + get(tenantId); + + if(aliasToSubscriptionMap != null) { + aliasToSubscriptionMap.addSubscription(subscriptionAlias, cartridgeSubscription); + + } else { + aliasToSubscriptionMap = new SubscriptionAliasToCartridgeSubscriptionMap(); + aliasToSubscriptionMap.addSubscription(subscriptionAlias, cartridgeSubscription); + } + + if(clusterItToCartridgeSubscrptionMatch.put(cartridgeSubscription.getClusterDomain(), cartridgeSubscription) + != null) { + log.info("Overwrote the CartridgeSubscription value for cluster Id " + + cartridgeSubscription.getClusterDomain()); + } + + } finally { + writeLock.unlock(); + } + } + + public void removeCartridgeSubscription (int tenantId, String subscriptionAlias, String clusterId) { + removeSubscription(tenantId, subscriptionAlias, clusterId); + } + + private void removeSubscription (int tenantId, String subscriptionAlias, String clusterId) { + + writeLock.lock(); + + try { + SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap = tenantIdToCartridgeSubscriptionCache. + get(tenantId); + + if(aliasToSubscriptionMap != null) { + aliasToSubscriptionMap.removeSubscription(subscriptionAlias); + if(aliasToSubscriptionMap.isEmpty()){ + tenantIdToCartridgeSubscriptionCache.remove(tenantId); + } + + } else { + 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); + } + + } finally { + writeLock.unlock(); + } + } + + public CartridgeSubscription getCartridgeSubscription (int tenantId, String subscriptionAlias) { + return getSubscription(tenantId, subscriptionAlias); + } + + public Collection<CartridgeSubscription> getCartridgeSubscriptions (int tenantId) { + return getSubscriptions(tenantId); + } + + private Collection<CartridgeSubscription> getSubscriptions (int tenantId) { + + readLock.lock(); + + try { + SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap = tenantIdToCartridgeSubscriptionCache. + get(tenantId); + + if(aliasToSubscriptionMap != null) { + aliasToSubscriptionMap.getCartridgeSubscriptions(); + } + + } finally { + readLock.unlock(); + } + + return null; + } + + public CartridgeSubscription getCartridgeSubscription (String clusterId) { + return getCartridgeSubscription(clusterId); + } + + private CartridgeSubscription getSubscription (String clusterId) { + + readLock.lock(); + try { + return clusterItToCartridgeSubscrptionMatch.get(clusterId); + + } finally { + readLock.unlock(); + } + } + + private CartridgeSubscription getSubscription(int tenantId, String subscriptionAlias) { + + readLock.lock(); + + try { + SubscriptionAliasToCartridgeSubscriptionMap aliasToSubscriptionMap = tenantIdToCartridgeSubscriptionCache. + get(tenantId); + + if(aliasToSubscriptionMap != null) { + CartridgeSubscription cartridgeSubscription = aliasToSubscriptionMap. + getCartridgeSubscription(subscriptionAlias); + + if(cartridgeSubscription != null){ + return cartridgeSubscription; + + } else { + log.info("No CartridgeSubscription entry found for subscription alias " + + subscriptionAlias); + //if(log.isDebugEnabled()) { + // log.debug("No entry found for subscription alias " + subscriptionAlias); + //} + } + } else { + log.info("No SubscriptionAliasToCartridgeSubscriptionMap entry found for tenant id " + tenantId); + //if(log.isDebugEnabled()) { + // log.debug("No entry found for tenant id " + tenantId); + //} + } + + return null; + + } finally { + 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/ba14b09f/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/Payload.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/Payload.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/Payload.java index 724c32d..8c332db 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/Payload.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/payload/Payload.java @@ -24,14 +24,11 @@ import org.apache.commons.logging.LogFactory; import org.apache.stratos.adc.mgt.exception.ADCException; import org.apache.stratos.adc.mgt.utils.CartridgeConstants; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; +import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -public abstract class Payload { +public abstract class Payload implements Serializable { private static Log log = LogFactory.getLog(Payload.class);
