http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c36bd253/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataInsertionAndRetrievalManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataInsertionAndRetrievalManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataInsertionAndRetrievalManager.java index bec2641..b083a04 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataInsertionAndRetrievalManager.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/retriever/DataInsertionAndRetrievalManager.java @@ -28,42 +28,110 @@ import org.jgroups.logging.Log; import org.jgroups.logging.LogFactory; import java.util.Collection; -import java.util.Iterator; -import java.util.concurrent.locks.ReentrantReadWriteLock; public class DataInsertionAndRetrievalManager { private static final Log log = LogFactory.getLog(DataInsertionAndRetrievalManager.class); - //locks - private static volatile ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); - private static volatile ReentrantReadWriteLock.WriteLock writeLock = lock.writeLock(); - // TODO: use a global object PersistenceManager persistenceManager = new RegistryBasedPersistenceManager(); - public void putCartridgeSubscription (CartridgeSubscription cartridgeSubscription) { + public void cacheAndPersistSubcription (CartridgeSubscription cartridgeSubscription) throws PersistenceManagerException { - writeLock.lock(); + // get the write lock + LookupDataHolder.getInstance().acquireWriteLock(); try { // store in LookupDataHolder - LookupDataHolder.getInstance().put(cartridgeSubscription); + LookupDataHolder.getInstance().putSubscription(cartridgeSubscription); try { // store in Persistence Manager persistenceManager.persistCartridgeSubscription(cartridgeSubscription); } catch (PersistenceManagerException e) { - log.error("Error in persisting CartridgeSubscription in Persistence Manager", e); + String errorMsg = "Error in persisting CartridgeSubscription in Persistence Manager"; + log.error(errorMsg, e); + throw e; } } finally { - writeLock.unlock(); + // release the write lock + LookupDataHolder.getInstance().releaseWriteLock(); + } + } + + public void cachePersistedSubscriptions () throws PersistenceManagerException { + + Collection<CartridgeSubscription> cartridgeSubscriptions; + + // get the write lock + LookupDataHolder.getInstance().acquireWriteLock(); + + try { + try { + cartridgeSubscriptions = persistenceManager.getCartridgeSubscriptions(); + + } catch (PersistenceManagerException e) { + String errorMsg = "Error in retrieving CartridgeSubscriptions from Persistence Manager"; + log.error(errorMsg, e); + throw e; + } + + if(cartridgeSubscriptions != null || cartridgeSubscriptions.isEmpty()) { + if(log.isDebugEnabled()) { + log.debug("No CartridgeSubscriptions found to add to the cache"); + return; + } + } + cacheSubscriptions(cartridgeSubscriptions); + + } finally { + // release the write lock + LookupDataHolder.getInstance().releaseWriteLock(); } } - public void persistAll (int tenantId) { + public void cachePersistedSubscriptions (int tenantId) throws PersistenceManagerException { + + Collection<CartridgeSubscription> cartridgeSubscriptions; + + // get the write lock + LookupDataHolder.getInstance().acquireWriteLock(); + + try { + try { + cartridgeSubscriptions = persistenceManager.getCartridgeSubscriptions(tenantId); + + } catch (PersistenceManagerException e) { + String errorMsg = "Error in retrieving CartridgeSubscriptions from Persistence Manager"; + log.error(errorMsg, e); + throw e; + } + + if(cartridgeSubscriptions != null || cartridgeSubscriptions.isEmpty()) { + if(log.isDebugEnabled()) { + log.debug("No CartridgeSubscriptions found to add to the cache"); + return; + } + } + cacheSubscriptions(cartridgeSubscriptions); + + } finally { + // release the write lock + LookupDataHolder.getInstance().releaseWriteLock(); + } + } + + private void cacheSubscriptions (Collection<CartridgeSubscription> cartridgeSubscriptions) { + + // cache all + for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) { + LookupDataHolder.getInstance().putSubscription(cartridgeSubscription); + } + } + + /*public void persistAll (int tenantId) { Collection<CartridgeSubscription> cartridgeSubscriptions = LookupDataHolder.getInstance().getSubscriptions(tenantId); @@ -82,111 +150,149 @@ public class DataInsertionAndRetrievalManager { } finally { writeLock.unlock(); } - } + }*/ public CartridgeSubscription getCartridgeSubscription (int tenantId, String subscriptionAlias) { - CartridgeSubscription cartridgeSubscription = LookupDataHolder.getInstance().getSubscriptionForAlias(tenantId, subscriptionAlias); - if (cartridgeSubscription == null) { - // not available in the cache, look in the registry - if (log.isDebugEnabled()) { - log.debug("CartridgeSubscription for tenant " + tenantId + ", alias " + subscriptionAlias + " not available in memory"); - } + // acquire read lock + LookupDataHolder.getInstance().acquireReadLock(); - try { - cartridgeSubscription = persistenceManager.getCartridgeSubscription(tenantId, subscriptionAlias); + try { + CartridgeSubscription cartridgeSubscription = LookupDataHolder.getInstance().getSubscriptionForAlias(tenantId, subscriptionAlias); - } catch (PersistenceManagerException e) { - String errorMsg = "Error in accessing Persistence Manager"; - log.error(errorMsg, e); - return null; - } + /*if (cartridgeSubscription == null) { + // not available in the cache, look in the registry + if (log.isDebugEnabled()) { + log.debug("CartridgeSubscription for tenant " + tenantId + ", alias " + subscriptionAlias + " not available in memory"); + } - // add to the LookupDataHolder - LookupDataHolder.getInstance().put(cartridgeSubscription); - } + try { + cartridgeSubscription = persistenceManager.getCartridgeSubscription(tenantId, subscriptionAlias); + + } catch (PersistenceManagerException e) { + String errorMsg = "Error in accessing Persistence Manager"; + log.error(errorMsg, e); + return null; + } + + // add to the LookupDataHolder + // LookupDataHolder.getInstance().putSubscription(cartridgeSubscription); + }*/ - return cartridgeSubscription; + return cartridgeSubscription; + + } finally { + // release read lock + LookupDataHolder.getInstance().releaseReadLock(); + } } public CartridgeSubscription getCartridgeSubscription (String clusterId) { - CartridgeSubscription cartridgeSubscription = LookupDataHolder.getInstance().getSubscription(clusterId); - if (cartridgeSubscription == null) { - // not available in the cache, look in the registry - if (log.isDebugEnabled()) { - log.debug("CartridgeSubscription for cluster " + clusterId + " not available in memory"); - } + // acquire read lock + LookupDataHolder.getInstance().acquireReadLock(); - try { - cartridgeSubscription = persistenceManager.getCartridgeSubscription(clusterId); + try { + CartridgeSubscription cartridgeSubscription = LookupDataHolder.getInstance().getSubscription(clusterId); + /*if (cartridgeSubscription == null) { + // not available in the cache, look in the registry + if (log.isDebugEnabled()) { + log.debug("CartridgeSubscription for cluster " + clusterId + " not available in memory"); + } - } catch (PersistenceManagerException e) { - String errorMsg = "Error in accessing Persistence Manager"; - log.error(errorMsg, e); - return null; - } + try { + cartridgeSubscription = persistenceManager.getCartridgeSubscription(clusterId); - // add to the LookupDataHolder - LookupDataHolder.getInstance().put(cartridgeSubscription); - } + } catch (PersistenceManagerException e) { + String errorMsg = "Error in accessing Persistence Manager"; + log.error(errorMsg, e); + return null; + } + + // add to the LookupDataHolder + // LookupDataHolder.getInstance().putSubscription(cartridgeSubscription); + }*/ + + return cartridgeSubscription; - return cartridgeSubscription; + } finally { + // release read lock + LookupDataHolder.getInstance().releaseReadLock(); + } } public Collection<CartridgeSubscription> getCartridgeSubscriptions (int tenantId) { - Collection<CartridgeSubscription> cartridgeSubscriptions = LookupDataHolder.getInstance().getSubscriptions(tenantId); - if (cartridgeSubscriptions == null) { - // not available in the cache, look in the registry - if (log.isDebugEnabled()) { - log.debug("CartridgeSubscriptions for tenant " + tenantId + " not available in memory"); - } + // acquire read lock + LookupDataHolder.getInstance().acquireReadLock(); - try { - cartridgeSubscriptions = persistenceManager.getCartridgeSubscriptions(tenantId); + try { + Collection<CartridgeSubscription> cartridgeSubscriptions = LookupDataHolder.getInstance().getSubscriptions(tenantId); + /*if (cartridgeSubscriptions == null) { + // not available in the cache, look in the registry + if (log.isDebugEnabled()) { + log.debug("CartridgeSubscriptions for tenant " + tenantId + " not available in memory"); + } - } catch (PersistenceManagerException e) { - String errorMsg = "Error in accessing Persistence Manager"; - log.error(errorMsg, e); - return null; - } + try { + cartridgeSubscriptions = persistenceManager.getCartridgeSubscriptions(tenantId); - // add to the LookupDataHolder - Iterator<CartridgeSubscription> iterator = cartridgeSubscriptions.iterator(); - while (iterator.hasNext()) { - LookupDataHolder.getInstance().put(iterator.next()); - } - } + } catch (PersistenceManagerException e) { + String errorMsg = "Error in accessing Persistence Manager"; + log.error(errorMsg, e); + return null; + } + + // add to the LookupDataHolder + //Iterator<CartridgeSubscription> iterator = cartridgeSubscriptions.iterator(); + //while (iterator.hasNext()) { + // LookupDataHolder.getInstance().putSubscription(iterator.next()); + //} + }*/ - return cartridgeSubscriptions; + return cartridgeSubscriptions; + + } finally { + // release read lock + LookupDataHolder.getInstance().releaseReadLock(); + } } public Collection<CartridgeSubscription> getCartridgeSubscriptions (int tenantId, String cartridgeType) { - Collection<CartridgeSubscription> cartridgeSubscriptions = LookupDataHolder.getInstance().getSubscriptionForType(tenantId, cartridgeType); - if (cartridgeSubscriptions == null) { - // not available in the cache, look in the registry - if (log.isDebugEnabled()) { - log.debug("CartridgeSubscriptions for tenant " + tenantId + ", type " + cartridgeType + " not available in memory"); - } + // acquire read lock + LookupDataHolder.getInstance().acquireReadLock(); - try { - cartridgeSubscriptions = persistenceManager.getCartridgeSubscriptions(tenantId, cartridgeType); + try { - } catch (PersistenceManagerException e) { - String errorMsg = "Error in accessing Persistence Manager"; - log.error(errorMsg, e); - return null; - } + Collection<CartridgeSubscription> cartridgeSubscriptions = LookupDataHolder.getInstance().getSubscriptionForType(tenantId, cartridgeType); + /*if (cartridgeSubscriptions == null) { + // not available in the cache, look in the registry + if (log.isDebugEnabled()) { + log.debug("CartridgeSubscriptions for tenant " + tenantId + ", type " + cartridgeType + " not available in memory"); + } - // add to the LookupDataHolder - Iterator<CartridgeSubscription> iterator = cartridgeSubscriptions.iterator(); - while (iterator.hasNext()) { - LookupDataHolder.getInstance().put(iterator.next()); - } - } + try { + cartridgeSubscriptions = persistenceManager.getCartridgeSubscriptions(tenantId, cartridgeType); - return cartridgeSubscriptions; + } catch (PersistenceManagerException e) { + String errorMsg = "Error in accessing Persistence Manager"; + log.error(errorMsg, e); + return null; + } + + // add to the LookupDataHolder + // Iterator<CartridgeSubscription> iterator = cartridgeSubscriptions.iterator(); + // while (iterator.hasNext()) { + // LookupDataHolder.getInstance().putSubscription(iterator.next()); + //} + }*/ + + return cartridgeSubscriptions; + + } finally { + // release read lock + LookupDataHolder.getInstance().releaseReadLock(); + } } }
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c36bd253/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java index 9f67b4a..741d306 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/service/ApplicationManagementService.java @@ -23,7 +23,6 @@ import org.apache.axis2.AxisFault; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.adc.mgt.client.CloudControllerServiceClient; -import org.apache.stratos.adc.mgt.custom.domain.RegistryManager; import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo; import org.apache.stratos.adc.mgt.dto.*; import org.apache.stratos.adc.mgt.exception.*; @@ -37,10 +36,6 @@ import org.apache.stratos.adc.mgt.utils.PersistenceManager; import org.apache.stratos.adc.mgt.utils.PolicyHolder; import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService; import org.apache.stratos.cloud.controller.pojo.CartridgeInfo; -import org.apache.stratos.messaging.broker.publish.EventPublisher; -import org.apache.stratos.messaging.event.tenant.TenantSubscribedEvent; -import org.apache.stratos.messaging.event.tenant.TenantUnSubscribedEvent; -import org.apache.stratos.messaging.util.Constants; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.core.AbstractAdmin; import org.wso2.carbon.registry.core.exceptions.RegistryException; @@ -60,7 +55,7 @@ import java.util.regex.Pattern; public class ApplicationManagementService extends AbstractAdmin { private static final Log log = LogFactory.getLog(ApplicationManagementService.class); - private RegistryManager registryManager = new RegistryManager(); + //private RegistryManager registryManager = new RegistryManager(); private CartridgeSubscriptionManager cartridgeSubsciptionManager = new CartridgeSubscriptionManager(); /* @@ -399,7 +394,7 @@ public class ApplicationManagementService extends AbstractAdmin { if(dataCartridgeAlias != null && !dataCartridgeAlias.trim().isEmpty()) { - dataCartridgeAlias = dataCartridgeAlias.trim(); + /*dataCartridgeAlias = dataCartridgeAlias.trim(); CartridgeSubscription connectingCartridgeSubscription = null; try { @@ -425,7 +420,7 @@ public class ApplicationManagementService extends AbstractAdmin { } else { log.error("Failed to connect. No cartridge subscription found for tenant " + ApplicationManagementUtil.getTenantId(configurationContext) + " with alias " + alias); - } + } */ } return cartridgeSubsciptionManager.registerCartridgeSubscription(cartridgeSubscription); @@ -551,7 +546,9 @@ public class ApplicationManagementService extends AbstractAdmin { try { actualHost = getActualHost(cartridgeAlias); - registryManager.addDomainMappingToRegistry(mappedDomain, actualHost); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //registryManager.addDomainMappingToRegistry(mappedDomain, actualHost); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// log.info("Domain mapping is added for " + mappedDomain + " tenant: " + getTenantDomain()); PersistenceManager.updateDomainMapping( ApplicationManagementUtil.getTenantId(getConfigContext()), cartridgeAlias, mappedDomain); @@ -596,7 +593,9 @@ public class ApplicationManagementService extends AbstractAdmin { try { actualHost = getActualHost(cartridgeAlias); - registryManager.removeDomainMappingFromRegistry(actualHost); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //registryManager.removeDomainMappingFromRegistry(actualHost); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// log.info("Domain mapping is removed for " + actualHost + " tenant: " + getTenantDomain()); PersistenceManager.updateDomainMapping(ApplicationManagementUtil.getTenantId(getConfigContext()), cartridgeAlias, null); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c36bd253/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java index 90858fc..7a0c250 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java @@ -21,21 +21,16 @@ package org.apache.stratos.adc.mgt.subscription; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.stratos.adc.mgt.custom.domain.RegistryManager; import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo; import org.apache.stratos.adc.mgt.dao.Cluster; -import org.apache.stratos.adc.mgt.dns.DNSManager; import org.apache.stratos.adc.mgt.exception.*; -import org.apache.stratos.adc.mgt.internal.DataHolder; import org.apache.stratos.adc.mgt.payload.PayloadData; import org.apache.stratos.adc.mgt.repository.Repository; import org.apache.stratos.adc.mgt.subscriber.Subscriber; import org.apache.stratos.adc.mgt.subscription.tenancy.SubscriptionTenancyBehaviour; import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil; import org.apache.stratos.adc.mgt.utils.CartridgeConstants; -import org.apache.stratos.adc.mgt.utils.PersistenceManager; import org.apache.stratos.adc.mgt.utils.RepositoryFactory; -import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService; import org.apache.stratos.cloud.controller.pojo.CartridgeInfo; import org.apache.stratos.cloud.controller.pojo.Properties; @@ -57,7 +52,7 @@ public abstract class CartridgeSubscription implements Serializable { private CartridgeInfo cartridgeInfo; private PayloadData payloadData; private Cluster cluster; - //private String subscriptionStatus; + private String subscriptionStatus; //private String serviceStatus; private String mappedDomain; //private List<String> connectedSubscriptionAliases; @@ -243,17 +238,20 @@ public abstract class CartridgeSubscription implements Serializable { log.error(errorMsg); } - try { + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /*try { PersistenceManager.updateSubscriptionState(subscriptionId, "UNSUBSCRIBED"); } catch (Exception e) { String errorMsg = "Error in unscubscribing from cartridge, alias " + alias + ", tenant " + subscriber.getTenantDomain(); throw new ADCException(errorMsg, e); - } + }*/ + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TODO: FIXME: do we need this? - new DNSManager().removeSubDomain(getCluster().getHostName()); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /*new DNSManager().removeSubDomain(getCluster().getHostName()); try { new RegistryManager().removeDomainMappingFromRegistry(getCluster().getHostName()); @@ -262,9 +260,10 @@ public abstract class CartridgeSubscription implements Serializable { String errorMsg = "Error in removing domain mapping, alias " + alias + ", tenant " + subscriber.getTenantDomain(); log.error(errorMsg, e); - } + }*/ + //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - TopologyManagementService topologyMgtService = DataHolder.getTopologyMgtService(); + /*TopologyManagementService topologyMgtService = DataHolder.getTopologyMgtService(); String[] ips = topologyMgtService.getActiveIPs(type, getCluster().getClusterDomain(), getCluster().getClusterSubDomain()); try { PersistenceManager.updateInstanceState("INACTIVE", ips, getCluster().getClusterDomain(), getCluster().getClusterSubDomain(), type); @@ -272,7 +271,7 @@ public abstract class CartridgeSubscription implements Serializable { } catch (Exception e) { String errorMsg = "Error in updating state to INACTIVE"; log.error(errorMsg, e); - } + }*/ //this.setSubscriptionStatus(CartridgeConstants.UNSUBSCRIBED); } @@ -399,13 +398,13 @@ public abstract class CartridgeSubscription implements Serializable { this.mappedDomain = mappedDomain; } - /*public String getSubscriptionStatus() { + public String getSubscriptionStatus() { return subscriptionStatus; } public void setSubscriptionStatus(String subscriptionStatus) { this.subscriptionStatus = subscriptionStatus; - }*/ + } public String getSubscriptionKey() { return subscriptionKey; http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c36bd253/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/cache/CartridgeInstanceCache.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/cache/CartridgeInstanceCache.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/cache/CartridgeInstanceCache.java index 6b0cd82..d4db16f 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/cache/CartridgeInstanceCache.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/cache/CartridgeInstanceCache.java @@ -57,7 +57,7 @@ public class CartridgeInstanceCache { public void addCartridgeInstances (int tenantId, List<CartridgeSubscription> cartridgeSubscriptions) { - //tenantIdToCartridgeInstance.put(tenantId, cartridgeSubscriptions); + //tenantIdToCartridgeInstance.putSubscription(tenantId, cartridgeSubscriptions); for(CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) { addCartridgeInstance(new CartridgeInstanceCacheKey(tenantId, cartridgeSubscription.getAlias()), cartridgeSubscription); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c36bd253/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java index 46cfd93..6849189 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/tenancy/SubscriptionMultiTenantBehaviour.java @@ -25,9 +25,9 @@ import org.apache.stratos.adc.mgt.exception.ADCException; import org.apache.stratos.adc.mgt.exception.AlreadySubscribedException; import org.apache.stratos.adc.mgt.exception.NotSubscribedException; import org.apache.stratos.adc.mgt.exception.UnregisteredCartridgeException; +import org.apache.stratos.adc.mgt.retriever.DataInsertionAndRetrievalManager; import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription; import org.apache.stratos.adc.mgt.utils.CartridgeConstants; -import org.apache.stratos.adc.mgt.utils.PersistenceManager; import org.apache.stratos.cloud.controller.pojo.Properties; @@ -45,8 +45,12 @@ public class SubscriptionMultiTenantBehaviour extends SubscriptionTenancyBehavio // If the cartridge is multi-tenant. We should not let users createSubscription twice. boolean subscribed; try { - subscribed = PersistenceManager.isAlreadySubscribed(cartridgeSubscription.getType(), - cartridgeSubscription.getSubscriber().getTenantId()); + ///////////////////////////////////////////////////////////////////////////////////////////////////////// + //subscribed = PersistenceManager.isAlreadySubscribed(cartridgeSubscription.getType(), + // cartridgeSubscription.getSubscriber().getTenantId()); + ///////////////////////////////////////////////////////////////////////////////////////////////////////// + subscribed = hasAlreadySubscribed(cartridgeSubscription.getSubscriber().getTenantId(), cartridgeSubscription.getType()); + } catch (Exception e) { String msg = "Error checking whether the cartridge type " + cartridgeSubscription.getType() + " is already subscribed"; @@ -97,4 +101,10 @@ public class SubscriptionMultiTenantBehaviour extends SubscriptionTenancyBehavio "unregister services"); } + private static boolean hasAlreadySubscribed(int tenantId, String cartridgeType) { + + DataInsertionAndRetrievalManager dataInsertionAndRetrievalManager = new DataInsertionAndRetrievalManager(); + return ( dataInsertionAndRetrievalManager.getCartridgeSubscriptions(tenantId, cartridgeType) == null || + dataInsertionAndRetrievalManager.getCartridgeSubscriptions(tenantId, cartridgeType).isEmpty() ) ? false : true; + } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c36bd253/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/utils/CartridgeSubscriptionUtils.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/utils/CartridgeSubscriptionUtils.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/utils/CartridgeSubscriptionUtils.java index b3486fb..d9f3477 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/utils/CartridgeSubscriptionUtils.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/utils/CartridgeSubscriptionUtils.java @@ -23,7 +23,11 @@ import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.adc.mgt.deploy.service.Service; +import org.apache.stratos.adc.mgt.exception.ADCException; +import org.apache.stratos.adc.mgt.exception.DuplicateCartridgeAliasException; +import org.apache.stratos.adc.mgt.exception.InvalidCartridgeAliasException; import org.apache.stratos.adc.mgt.payload.BasicPayloadData; +import org.apache.stratos.adc.mgt.retriever.DataInsertionAndRetrievalManager; import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription; import org.apache.stratos.cloud.controller.pojo.CartridgeInfo; import org.apache.stratos.messaging.broker.publish.EventPublisher; @@ -31,6 +35,8 @@ import org.apache.stratos.messaging.event.tenant.TenantSubscribedEvent; import org.apache.stratos.messaging.event.tenant.TenantUnSubscribedEvent; import org.apache.stratos.messaging.util.Constants; +import java.util.regex.Pattern; + public class CartridgeSubscriptionUtils { private static Log log = LogFactory.getLog(CartridgeSubscriptionUtils.class); @@ -130,4 +136,37 @@ public class CartridgeSubscriptionUtils { } } } + + public static void validateCartridgeAlias (int tenantId, String cartridgeType, String alias) throws InvalidCartridgeAliasException, DuplicateCartridgeAliasException, ADCException { + + String patternString = "([a-z0-9]+([-][a-z0-9])*)+"; + Pattern pattern = Pattern.compile(patternString); + + if (!pattern.matcher(alias).matches()) { + String msg = "The alias " + alias + " can contain only alpha-numeric lowercase characters. Please enter a valid alias."; + log.error(msg); + throw new InvalidCartridgeAliasException(msg, tenantId, cartridgeType, alias); + } + + boolean isAliasTaken = false; + try { + isAliasTaken = isAliasTaken(tenantId, alias); + } catch (Exception e) { + String msg = "Exception : " + e.getMessage(); + log.error(msg, e); + throw new ADCException("Error when checking alias is already taken", e); + } + + if (isAliasTaken) { + String msg = "The alias " + alias + " is already taken. Please try again with a different alias."; + log.error(msg); + throw new DuplicateCartridgeAliasException(msg, cartridgeType, alias); + } + } + + public static boolean isAliasTaken (int tenantId, String alias) { + + DataInsertionAndRetrievalManager dataInsertionAndRetrievalManager = new DataInsertionAndRetrievalManager(); + return (dataInsertionAndRetrievalManager.getCartridgeSubscription(tenantId, alias) == null) ? false : true; + } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c36bd253/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/topology/model/TopologyClusterInformationModel.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/topology/model/TopologyClusterInformationModel.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/topology/model/TopologyClusterInformationModel.java index 6004755..7e4664a 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/topology/model/TopologyClusterInformationModel.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/topology/model/TopologyClusterInformationModel.java @@ -67,14 +67,14 @@ public class TopologyClusterInformationModel { try { //[Tenant Id + Subscription Alias] -> Cluster map - tenantIdAndAliasTopologyKeyToClusterMap.put(new TenantIdAndAliasTopologyKey(tenantId, subscriptionAlias), cluster); + tenantIdAndAliasTopologyKeyToClusterMap.putSubscription(new TenantIdAndAliasTopologyKey(tenantId, subscriptionAlias), cluster); //Tenant Id -> Cluster map clusters = tenantIdToClusterMap.get(tenantId); if(clusters == null) { clusters = new ArrayList<Cluster>(); clusters.add(cluster); - tenantIdToClusterMap.put(tenantId, clusters); + tenantIdToClusterMap.putSubscription(tenantId, clusters); } else { clusters.add(cluster); } @@ -84,7 +84,7 @@ public class TopologyClusterInformationModel { if(clusters == null) { clusters = new ArrayList<Cluster>(); clusters.add(cluster); - tenantIdAndTypeTopologyKeyToClusterMap.put(new TenantIdAndTypeTopologyKey(tenantId, cartridgeType), clusters); + tenantIdAndTypeTopologyKeyToClusterMap.putSubscription(new TenantIdAndTypeTopologyKey(tenantId, cartridgeType), clusters); } else { clusters.add(cluster); } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c36bd253/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/topology/receiver/StratosManagerTopologyReceiver.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/topology/receiver/StratosManagerTopologyReceiver.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/topology/receiver/StratosManagerTopologyReceiver.java index 11024d6..5a2929c 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/topology/receiver/StratosManagerTopologyReceiver.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/topology/receiver/StratosManagerTopologyReceiver.java @@ -21,9 +21,9 @@ package org.apache.stratos.adc.mgt.topology.receiver; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo; +import org.apache.stratos.adc.mgt.retriever.DataInsertionAndRetrievalManager; +import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription; import org.apache.stratos.adc.mgt.topology.model.TopologyClusterInformationModel; -import org.apache.stratos.adc.mgt.utils.PersistenceManager; import org.apache.stratos.messaging.domain.topology.Cluster; import org.apache.stratos.messaging.domain.topology.Service; import org.apache.stratos.messaging.event.Event; @@ -68,14 +68,12 @@ public class StratosManagerTopologyReceiver implements Runnable { //iterate through all clusters for (Cluster cluster : service.getClusters()) { //get subscription details - CartridgeSubscriptionInfo cartridgeSubscriptionInfo = - getCartridgeSubscriptionInfo(cluster.getClusterId()); + CartridgeSubscription cartridgeSubscription = getCartridgeSubscription(cluster.getClusterId()); - if(cartridgeSubscriptionInfo != null) { + if(cartridgeSubscription != null) { //add the information to Topology Cluster Info. model - TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscriptionInfo.getTenantId(), - cartridgeSubscriptionInfo.getCartridge(), - cartridgeSubscriptionInfo.getAlias(), cluster); + TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(), + cartridgeSubscription.getType(), cartridgeSubscription.getAlias(), cluster); } } } @@ -94,26 +92,25 @@ public class StratosManagerTopologyReceiver implements Runnable { ClusterCreatedEvent clustercreatedEvent = (ClusterCreatedEvent) event; //get subscription details - CartridgeSubscriptionInfo cartridgeSubscriptionInfo = - getCartridgeSubscriptionInfo(clustercreatedEvent.getClusterId()); + CartridgeSubscription cartridgeSubscription = + getCartridgeSubscription(clustercreatedEvent.getClusterId()); - if(cartridgeSubscriptionInfo != null) { + if(cartridgeSubscription != null) { Cluster cluster; //acquire read lock TopologyManager.acquireReadLock(); try { cluster = TopologyManager.getTopology(). - getService(cartridgeSubscriptionInfo.getCartridge()).getCluster(cartridgeSubscriptionInfo.getClusterDomain()); + getService(cartridgeSubscription.getType()).getCluster(cartridgeSubscription.getClusterDomain()); } finally { //release read lock TopologyManager.releaseReadLock(); } //add the information to Topology Cluster Info. model - TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscriptionInfo.getTenantId(), - cartridgeSubscriptionInfo.getCartridge(), - cartridgeSubscriptionInfo.getAlias(), cluster); + TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(), + cartridgeSubscription.getType(), cartridgeSubscription.getAlias(), cluster); } } @@ -128,14 +125,13 @@ public class StratosManagerTopologyReceiver implements Runnable { ClusterRemovedEvent clusterRemovedEvent = (ClusterRemovedEvent) event; - CartridgeSubscriptionInfo cartridgeSubscriptionInfo = - getCartridgeSubscriptionInfo(clusterRemovedEvent.getClusterId()); + CartridgeSubscription cartridgeSubscription = + getCartridgeSubscription(clusterRemovedEvent.getClusterId()); - if (cartridgeSubscriptionInfo != null) { - //remove the information from Topology Cluster Info. model - TopologyClusterInformationModel.getInstance().removeCluster(cartridgeSubscriptionInfo.getTenantId(), - cartridgeSubscriptionInfo.getCartridge(), - cartridgeSubscriptionInfo.getAlias()); + if(cartridgeSubscription != null) { + //add the information to Topology Cluster Info. model + TopologyClusterInformationModel.getInstance().removeCluster(cartridgeSubscription.getSubscriber().getTenantId(), + cartridgeSubscription.getType(), cartridgeSubscription.getAlias()); } } }); @@ -150,24 +146,23 @@ public class StratosManagerTopologyReceiver implements Runnable { MemberStartedEvent memberStartedEvent = (MemberStartedEvent) event; String clusterDomain = memberStartedEvent.getClusterId(); - CartridgeSubscriptionInfo cartridgeSubscriptionInfo = getCartridgeSubscriptionInfo(clusterDomain); + CartridgeSubscription cartridgeSubscription = getCartridgeSubscription(clusterDomain); - if(cartridgeSubscriptionInfo != null) { + if(cartridgeSubscription != null) { Cluster cluster; //acquire read lock TopologyManager.acquireReadLock(); try { cluster = TopologyManager.getTopology(). - getService(cartridgeSubscriptionInfo.getCartridge()).getCluster(cartridgeSubscriptionInfo.getClusterDomain()); + getService(cartridgeSubscription.getType()).getCluster(cartridgeSubscription.getClusterDomain()); } finally { //release read lock TopologyManager.releaseReadLock(); } - TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscriptionInfo.getTenantId(), - cartridgeSubscriptionInfo.getCartridge(), - cartridgeSubscriptionInfo.getAlias(), cluster); + TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(), + cartridgeSubscription.getType(), cartridgeSubscription.getAlias(), cluster); } } @@ -183,24 +178,24 @@ public class StratosManagerTopologyReceiver implements Runnable { MemberActivatedEvent memberActivatedEvent = (MemberActivatedEvent) event; String clusterDomain = memberActivatedEvent.getClusterId(); - CartridgeSubscriptionInfo cartridgeSubscriptionInfo = getCartridgeSubscriptionInfo(clusterDomain); + CartridgeSubscription cartridgeSubscription = getCartridgeSubscription(clusterDomain); - if(cartridgeSubscriptionInfo != null) { + if(cartridgeSubscription != null) { Cluster cluster; //acquire read lock TopologyManager.acquireReadLock(); try { cluster = TopologyManager.getTopology(). - getService(cartridgeSubscriptionInfo.getCartridge()).getCluster(cartridgeSubscriptionInfo.getClusterDomain()); + getService(cartridgeSubscription.getType()).getCluster(cartridgeSubscription.getClusterDomain()); } finally { //release read lock TopologyManager.releaseReadLock(); } - TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscriptionInfo.getTenantId(), - cartridgeSubscriptionInfo.getCartridge(), - cartridgeSubscriptionInfo.getAlias(), cluster); + TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(), + cartridgeSubscription.getType(), + cartridgeSubscription.getAlias(), cluster); } } @@ -216,24 +211,23 @@ public class StratosManagerTopologyReceiver implements Runnable { MemberSuspendedEvent memberSuspendedEvent = (MemberSuspendedEvent) event; String clusterDomain = memberSuspendedEvent.getClusterId(); - CartridgeSubscriptionInfo cartridgeSubscriptionInfo = getCartridgeSubscriptionInfo(clusterDomain); + CartridgeSubscription cartridgeSubscription = getCartridgeSubscription(clusterDomain); - if(cartridgeSubscriptionInfo != null) { + if(cartridgeSubscription != null) { Cluster cluster; //acquire read lock TopologyManager.acquireReadLock(); try { cluster = TopologyManager.getTopology(). - getService(cartridgeSubscriptionInfo.getCartridge()).getCluster(cartridgeSubscriptionInfo.getClusterDomain()); + getService(cartridgeSubscription.getType()).getCluster(cartridgeSubscription.getClusterDomain()); } finally { //release read lock TopologyManager.releaseReadLock(); } - TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscriptionInfo.getTenantId(), - cartridgeSubscriptionInfo.getCartridge(), - cartridgeSubscriptionInfo.getAlias(), cluster); + TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(), + cartridgeSubscription.getType(), cartridgeSubscription.getAlias(), cluster); } } @@ -249,24 +243,23 @@ public class StratosManagerTopologyReceiver implements Runnable { MemberTerminatedEvent memberTerminatedEvent = (MemberTerminatedEvent) event; String clusterDomain = memberTerminatedEvent.getClusterId(); - CartridgeSubscriptionInfo cartridgeSubscriptionInfo = getCartridgeSubscriptionInfo(clusterDomain); + CartridgeSubscription cartridgeSubscription = getCartridgeSubscription(clusterDomain); - if(cartridgeSubscriptionInfo != null) { + if(cartridgeSubscription != null) { Cluster cluster; //acquire read lock TopologyManager.acquireReadLock(); try { cluster = TopologyManager.getTopology(). - getService(cartridgeSubscriptionInfo.getCartridge()).getCluster(cartridgeSubscriptionInfo.getClusterDomain()); + getService(cartridgeSubscription.getType()).getCluster(cartridgeSubscription.getClusterDomain()); } finally { //release read lock TopologyManager.releaseReadLock(); } - TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscriptionInfo.getTenantId(), - cartridgeSubscriptionInfo.getCartridge(), - cartridgeSubscriptionInfo.getAlias(), cluster); + TopologyClusterInformationModel.getInstance().addCluster(cartridgeSubscription.getSubscriber().getTenantId(), + cartridgeSubscription.getType(), cartridgeSubscription.getAlias(), cluster); } } @@ -275,10 +268,10 @@ public class StratosManagerTopologyReceiver implements Runnable { return processorChain; } - private CartridgeSubscriptionInfo getCartridgeSubscriptionInfo (String clusterDomain) { + private CartridgeSubscription getCartridgeSubscription(String clusterDomain) { try { - return PersistenceManager.getSubscriptionFromClusterId(clusterDomain); + return new DataInsertionAndRetrievalManager().getCartridgeSubscription(clusterDomain); } catch (Exception e) { log.error("Error getting subscription information for cluster " + clusterDomain, e); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c36bd253/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 index 6eecd1f..f84990b 100644 --- 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 @@ -20,7 +20,7 @@ package org.apache.stratos.adc.mgt.utils; import org.apache.stratos.adc.mgt.lookup.ClusterIdToSubscription; -import org.apache.stratos.adc.mgt.lookup.SubscriptionContext; +import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -31,18 +31,18 @@ public class Serializer { /** * Serialize a SubscriptionContext instance to a byte array. - * @param subscriptionContext + * @param cartridgeSubscription * @return byte[] * @throws java.io.IOException */ - public static byte[] serializeSubscriptionSontextToByteArray(SubscriptionContext subscriptionContext) + public static byte[] serializeSubscriptionSontextToByteArray(CartridgeSubscription cartridgeSubscription) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput out = null; try { out = new ObjectOutputStream(bos); - out.writeObject(subscriptionContext); + out.writeObject(cartridgeSubscription); return bos.toByteArray(); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c36bd253/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java index acde631..3b77551 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java @@ -806,7 +806,7 @@ public class ServiceUtils { if (dataCartridgeAlias != null && !dataCartridgeAlias.trim().isEmpty()) { - dataCartridgeAlias = dataCartridgeAlias.trim(); + /*dataCartridgeAlias = dataCartridgeAlias.trim(); CartridgeSubscription connectingCartridgeSubscription = null; try { @@ -833,7 +833,7 @@ public class ServiceUtils { log.error("Failed to connect. No cartridge subscription found for tenant " + ApplicationManagementUtil.getTenantId(configurationContext) + " with alias " + alias); - } + }*/ } SubscriptionInfo registerCartridgeSubscription = cartridgeSubsciptionManager.registerCartridgeSubscription(cartridgeSubscription);
