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:13 UTC

[3/5] git commit: registry based persistence and caching initial implementation

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 <is...@wso2.com>
Authored: Mon Dec 9 09:43:07 2013 +0530
Committer: Isuru <is...@wso2.com>
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);