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);