initial complete implementation for storing subscriptions in registry
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/8f562d20 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/8f562d20 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/8f562d20 Branch: refs/heads/master Commit: 8f562d201b778f34e28a65c2eb5293529c1b204d Parents: 66291df Author: Isuru <[email protected]> Authored: Fri Jan 3 20:05:44 2014 +0530 Committer: Isuru <[email protected]> Committed: Fri Jan 3 20:05:44 2014 +0530 ---------------------------------------------------------------------- .../adc/mgt/lookup/SubscriptionContext.java | 2 +- .../RegistryBasedPersistenceManager.java | 61 ++++++++++++++------ .../DataInsertionAndRetrievalManager.java | 4 ++ 3 files changed, 49 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8f562d20/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionContext.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionContext.java index 4badf26..8338558 100644 --- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionContext.java +++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/lookup/SubscriptionContext.java @@ -57,7 +57,7 @@ public class SubscriptionContext implements Serializable { // add or update existingSubscriptions.add(cartridgeSubscription); if(log.isDebugEnabled()) { - log.debug("Overwrote the existing Cartridge Subscription for type " + cartridgeType + ", alias " + cartridgeSubscription.getAlias() + + log.debug("Added Cartridge Subscription for type " + cartridgeType + ", alias " + cartridgeSubscription.getAlias() + " in [Cartridge Type -> Set<CartridgeSubscription>] map"); } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8f562d20/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 aed2655..af47e79 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 @@ -26,7 +26,10 @@ import org.apache.stratos.adc.mgt.registry.RegistryManager; import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription; import org.apache.stratos.adc.mgt.utils.Deserializer; import org.apache.stratos.adc.mgt.utils.Serializer; +import org.wso2.carbon.context.CarbonContext; +import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.registry.core.exceptions.RegistryException; +import org.wso2.carbon.utils.multitenancy.MultitenantConstants; import java.io.IOException; import java.util.ArrayList; @@ -38,20 +41,35 @@ public class RegistryBasedPersistenceManager extends PersistenceManager { private static final Log log = LogFactory.getLog(RegistryBasedPersistenceManager.class); // Registry paths private static final String STRATOS_MANAGER_REOSURCE = "/stratos_manager"; - //private static final String CLUSTER_ID_TO_SUBSCRIPTION = "/clusterIdToSubscription"; - //private static final String SUBSCRIPTION_CONTEXT = "/subscription_context"; private static final String SUBSCRIPTIONS = "/subscriptions"; @Override public void persistCartridgeSubscription (CartridgeSubscription cartridgeSubscription) throws PersistenceManagerException { - //SubscriptionContext subscriptionContext = new SubscriptionContext(); - //subscriptionContext.addSubscription(cartridgeSubscription); + int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); + if (tenantId != MultitenantConstants.SUPER_TENANT_ID) { + // TODO: This is only a workaround. Proper fix is to write to tenant registry + try { + PrivilegedCarbonContext.startTenantFlow(); + PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + carbonContext.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); + carbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID); + + persistSubscription(cartridgeSubscription); + + } finally { + PrivilegedCarbonContext.endTenantFlow(); + } + + } else { + persistSubscription(cartridgeSubscription); + } + } + + private void persistSubscription (CartridgeSubscription cartridgeSubscription) throws PersistenceManagerException { // persist in the path SUBSCRIPTION_CONTEXT try { - //RegistryManager.getInstance().persist(STRATOS_MANAGER_REOSURCE + SUBSCRIPTION_CONTEXT + "/" + - // Integer.toString(cartridgeSubscription.getSubscriber().getTenantId()), Serializer.serializeSubscriptionSontextToByteArray(subscriptionContext)); RegistryManager.getInstance().persist(STRATOS_MANAGER_REOSURCE + SUBSCRIPTIONS + "/" + Integer.toString(cartridgeSubscription.getSubscriber().getTenantId()) + "/" + cartridgeSubscription.getType() + "/" + @@ -68,22 +86,31 @@ public class RegistryBasedPersistenceManager extends PersistenceManager { } catch (IOException e) { throw new PersistenceManagerException(e); } + } + + @Override + public void removeCartridgeSubscription (int tenantId, String type, String alias) throws PersistenceManagerException { - // persist in the path CLUSTER_ID_TO_SUBSCRIPTION - /*try { - RegistryManager.getInstance().persist(STRATOS_MANAGER_REOSURCE + CLUSTER_ID_TO_SUBSCRIPTION + "/" + - cartridgeSubscription.getClusterDomain(), Serializer.serializeSubscriptionSontextToByteArray(subscriptionContext)); + if (tenantId != MultitenantConstants.SUPER_TENANT_ID) { + // TODO: This is only a workaround. Proper fix is to write to tenant registry + try { + PrivilegedCarbonContext.startTenantFlow(); + PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + carbonContext.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); + carbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID); - } catch (RegistryException e) { - throw new PersistenceManagerException(e); + removeSubscription(tenantId, type, alias); - } catch (IOException e) { - throw new PersistenceManagerException(e); - }*/ + } finally { + PrivilegedCarbonContext.endTenantFlow(); + } + + } else { + removeSubscription(tenantId, type, alias); + } } - @Override - public void removeCartridgeSubscription (int tenantId, String type, String alias) throws PersistenceManagerException { + private void removeSubscription (int tenantId, String type, String alias) throws PersistenceManagerException { String resourcePath = STRATOS_MANAGER_REOSURCE + SUBSCRIPTIONS + "/" + Integer.toString(tenantId) + "/" + type + "/" + alias; http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8f562d20/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 916835a..f18311c 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 @@ -52,6 +52,10 @@ public class DataInsertionAndRetrievalManager { } catch (PersistenceManagerException e) { String errorMsg = "Error in persisting CartridgeSubscription in Persistence Manager"; log.error(errorMsg, e); + // remove from the in memory model since persisting failed + LookupDataHolder.getInstance().removeSubscription(cartridgeSubscription.getSubscriber().getTenantId(), cartridgeSubscription.getType(), + cartridgeSubscription.getAlias(), cartridgeSubscription.getClusterDomain()); + throw e; }
