You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2015/02/06 10:57:32 UTC

stratos git commit: Introducing logic to create application lock objects on demand

Repository: stratos
Updated Branches:
  refs/heads/master 8dc3c4622 -> a3bd4506e


Introducing logic to create application lock objects on demand


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/a3bd4506
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/a3bd4506
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/a3bd4506

Branch: refs/heads/master
Commit: a3bd4506e09219213acb01ef8cd86152544b9bff
Parents: 8dc3c46
Author: Imesh Gunaratne <im...@apache.org>
Authored: Fri Feb 6 15:10:00 2015 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Fri Feb 6 15:27:15 2015 +0530

----------------------------------------------------------------------
 .../domain/application/Applications.java        |  4 --
 .../locking/ApplicationLockHierarchy.java       | 27 +++++---------
 .../updater/ApplicationsUpdater.java            | 39 +++-----------------
 .../application/ApplicationManager.java         | 35 +++---------------
 4 files changed, 22 insertions(+), 83 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/a3bd4506/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/Applications.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/Applications.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/Applications.java
index 07c83ec..a078392 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/Applications.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/application/Applications.java
@@ -21,7 +21,6 @@ package org.apache.stratos.messaging.domain.application;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.messaging.domain.application.locking.ApplicationLock;
 import org.apache.stratos.messaging.domain.application.locking.ApplicationLockHierarchy;
 
 import java.io.Serializable;
@@ -42,9 +41,6 @@ public class Applications implements Serializable {
 
     public synchronized void addApplication (Application application) {
         this.applicationMap.put(application.getUniqueIdentifier(), application);
-        // TODO: It would be better to create the application lock on demand rather than initializing here
-        ApplicationLockHierarchy.getInstance().addApplicationLock(application.getUniqueIdentifier(),
-                new ApplicationLock());
     }
 
     public Application getApplication (String appId) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/a3bd4506/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 8bdf29e..dd782cc 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
@@ -55,32 +55,25 @@ public class ApplicationLockHierarchy {
         return applicationLockHierarchy;
     }
 
-    public void addApplicationLock (String appId, final ApplicationLock appLock) {
-
-        if (!appIdToApplicationLockMap.containsKey(appId)) {
-            synchronized (appIdToApplicationLockMap) {
-                if (!appIdToApplicationLockMap.containsKey(appId)) {
-                    appIdToApplicationLockMap.put(appId, appLock);
-                    log.info("Added lock for Application " + appId);
+    public 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);
                 }
             }
-        } else {
-            if (log.isDebugEnabled()) {
-                log.debug("Topology Lock for Application " + appId + " already exists");
-            }
         }
-    }
-
-    public ApplicationLock getLockForApplication(String appId) {
-        return appIdToApplicationLockMap.get(appId);
+        return applicationLock;
     }
 
     public void removeLockForApplication (String appId) {
         if (appIdToApplicationLockMap.remove(appId) != null) {
-            log.info("Removed lock for Application " + appId);
+            log.info("Removed lock for application: [application-id] " + appId);
         } else {
             if (log.isDebugEnabled()) {
-                log.debug("Lock already removed for Application " + appId);
+                log.debug("Lock already removed for application: [application-id] " + appId);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/a3bd4506/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/updater/ApplicationsUpdater.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/updater/ApplicationsUpdater.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/updater/ApplicationsUpdater.java
index c64910a..eec2a66 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/updater/ApplicationsUpdater.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/updater/ApplicationsUpdater.java
@@ -23,7 +23,6 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.messaging.domain.application.locking.ApplicationLock;
 import org.apache.stratos.messaging.domain.application.locking.ApplicationLockHierarchy;
-import org.apache.stratos.messaging.message.receiver.application.ApplicationManager;
 
 /**
  * Used to lock the Topology for writes by messaging component
@@ -90,20 +89,10 @@ public class ApplicationsUpdater {
      * @param appId Application id
      */
     public static void acquireWriteLockForApplication(String appId) {
-
-        // acquire read lock for all Applications
-        ApplicationManager.acquireReadLockForApplications();
-
         ApplicationLock applicationLock = applicationLockHierarchy.getLockForApplication(appId);
-        if (applicationLock == null) {
-            handleLockNotFound("Topology lock not found for Application " + appId);
-
-        } else {
-            // now, lock Application
-            applicationLock.acquireWriteLock();
-            if (log.isDebugEnabled()) {
-                log.debug("Write lock acquired for Application " + appId);
-            }
+        applicationLock.acquireWriteLock();
+        if (log.isDebugEnabled()) {
+            log.debug("Write lock acquired for Application " + appId);
         }
     }
 
@@ -113,26 +102,10 @@ public class ApplicationsUpdater {
      * @param appId Application id
      */
     public static void releaseWriteLockForApplication(String appId) {
-
         ApplicationLock applicationLock = applicationLockHierarchy.getLockForApplication(appId);
-        if (applicationLock == null) {
-            handleLockNotFound("Topology lock not found for Application " + appId);
-
-        } else {
-            // release App lock
-            applicationLock.releaseWriteLock();
-            if (log.isDebugEnabled()) {
-                log.debug("Write lock released for Application " + appId);
-            }
+        applicationLock.releaseWriteLock();
+        if (log.isDebugEnabled()) {
+            log.debug("Write lock released for application: [application-id] " + appId);
         }
-
-        // release read lock for all Applications
-        ApplicationManager.releaseReadLockForApplications();
     }
-
-    private static void handleLockNotFound(String errorMsg) {
-        log.warn(errorMsg);
-        //throw new RuntimeException(errorMsg);
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/a3bd4506/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/application/ApplicationManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/application/ApplicationManager.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/application/ApplicationManager.java
index 52f80ca..42021ba 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/application/ApplicationManager.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/application/ApplicationManager.java
@@ -74,19 +74,10 @@ public class ApplicationManager {
      * @param applicationId Application Id to acquire read lock
      */
     public static synchronized void acquireReadLockForApplication(String applicationId) {
-
-        // acquire read lock for all Applications
-        //acquireReadLockForApplications();
-
         ApplicationLock applicationLock = applicationLockHierarchy.getLockForApplication(applicationId);
-        if (applicationLock == null) {
-            handleLockNotFound("Application lock not found: [application-id] " + applicationId);
-
-        } else {
-            applicationLock.acquireReadLock();
-            if(log.isDebugEnabled()) {
-                log.debug("Read lock acquired: [application-id] " + applicationId);
-            }
+        applicationLock.acquireReadLock();
+        if (log.isDebugEnabled()) {
+            log.debug("Read lock acquired: [application-id] " + applicationId);
         }
     }
 
@@ -96,24 +87,10 @@ public class ApplicationManager {
      * @param applicationId Application Id to release read lock
      */
     public static synchronized void releaseReadLockForApplication(String applicationId) {
-
         ApplicationLock applicationLock = applicationLockHierarchy.getLockForApplication(applicationId);
-        if (applicationLock == null) {
-            handleLockNotFound("Application lock not found: [application-id] " + applicationId);
-
-        } else {
-            applicationLock.releaseReadLock();
-            if(log.isDebugEnabled()) {
-                log.debug("Read lock released: [application-id] " + applicationId);
-            }
+        applicationLock.releaseReadLock();
+        if (log.isDebugEnabled()) {
+            log.debug("Read lock released: [application-id] " + applicationId);
         }
-
-        // release read lock for all Applications
-        //releaseReadLockForApplications();
-    }
-
-    private static void handleLockNotFound (String errorMsg) {
-        log.warn(errorMsg);
-        //throw new RuntimeException(errorMsg);
     }
 }