Repository: stratos Updated Branches: refs/heads/master a09a41f69 -> ba6f30ea9
Fixing issue of generating lock more than one due to syncronization issue Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/ba6f30ea Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/ba6f30ea Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/ba6f30ea Branch: refs/heads/master Commit: ba6f30ea944b2a38cf025523dafc4d9a11e65977 Parents: a09a41f Author: reka <[email protected]> Authored: Wed Jun 24 12:39:46 2015 +0530 Committer: reka <[email protected]> Committed: Wed Jun 24 13:06:19 2015 +0530 ---------------------------------------------------------------------- .../locking/ApplicationLockHierarchy.java | 18 ++++++++++------- .../topology/locking/TopologyLockHierarchy.java | 21 +++++++------------- 2 files changed, 18 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/ba6f30ea/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/locking/ApplicationLockHierarchy.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/locking/ApplicationLockHierarchy.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/locking/ApplicationLockHierarchy.java index f341de2..e45d87f 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/locking/ApplicationLockHierarchy.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/locking/ApplicationLockHierarchy.java @@ -24,6 +24,7 @@ import org.apache.commons.logging.LogFactory; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; public class ApplicationLockHierarchy { @@ -39,7 +40,7 @@ public class ApplicationLockHierarchy { private ApplicationLockHierarchy() { this.applicationLock = new ApplicationLock(); - this.appIdToApplicationLockMap = new HashMap<String, ApplicationLock>(); + this.appIdToApplicationLockMap = new ConcurrentHashMap<String, ApplicationLock>(); } public static ApplicationLockHierarchy getInstance() { @@ -55,16 +56,19 @@ public class ApplicationLockHierarchy { return applicationLockHierarchy; } - public ApplicationLock getLockForApplication(String appId) { + public synchronized ApplicationLock getLockForApplication(String appId) { ApplicationLock applicationLock = appIdToApplicationLockMap.get(appId); + if (applicationLock == null) { - synchronized (ApplicationLockHierarchy.class) { - if (applicationLock == null) { - applicationLock = new ApplicationLock(); - appIdToApplicationLockMap.put(appId, applicationLock); - } + applicationLock = new ApplicationLock(); + if (log.isInfoEnabled()) { + log.info("Lock created for application: [application-id] " + appId + + " " + applicationLock.toString() + " size of application lock in map : " + appIdToApplicationLockMap.size()); } + appIdToApplicationLockMap.put(appId, applicationLock); } + + return applicationLock; } http://git-wip-us.apache.org/repos/asf/stratos/blob/ba6f30ea/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/locking/TopologyLockHierarchy.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/locking/TopologyLockHierarchy.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/locking/TopologyLockHierarchy.java index b139ea1..8911ebc 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/locking/TopologyLockHierarchy.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/locking/TopologyLockHierarchy.java @@ -61,28 +61,21 @@ public class TopologyLockHierarchy { return topologyLockHierarchy; } - public TopologyLock getTopologyLockForService(String serviceName, boolean forceCreationIfNotFound) { + public synchronized TopologyLock getTopologyLockForService(String serviceName, boolean forceCreationIfNotFound) { TopologyLock topologyLock = serviceNameToTopologyLockMap.get(serviceName); if (topologyLock == null && forceCreationIfNotFound) { - synchronized (TopologyLockHierarchy.class) { - if (topologyLock == null) { - topologyLock = new TopologyLock(); - serviceNameToTopologyLockMap.put(serviceName, topologyLock); - } - } + topologyLock = new TopologyLock(); + serviceNameToTopologyLockMap.put(serviceName, topologyLock); + } return topologyLock; } - public TopologyLock getTopologyLockForCluster(String clusterId, boolean forceCreationIfNotFound) { + public synchronized TopologyLock getTopologyLockForCluster(String clusterId, boolean forceCreationIfNotFound) { TopologyLock topologyLock = clusterIdToTopologyLockMap.get(clusterId); if (topologyLock == null && forceCreationIfNotFound) { - synchronized (TopologyLockHierarchy.class) { - if (topologyLock == null) { - topologyLock = new TopologyLock(); - clusterIdToTopologyLockMap.put(clusterId, topologyLock); - } - } + topologyLock = new TopologyLock(); + clusterIdToTopologyLockMap.put(clusterId, topologyLock); } return topologyLock; }
