You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by is...@apache.org on 2014/01/04 09:27:35 UTC

[09/12] git commit: initial complete implementation for storing subscriptions in registry

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 <is...@wso2.com>
Authored: Fri Jan 3 20:05:44 2014 +0530
Committer: Isuru <is...@wso2.com>
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;
             }