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/05/13 19:16:41 UTC

stratos git commit: Adding functionality to enable/disable component startup synchronizer

Repository: stratos
Updated Branches:
  refs/heads/master 83a4f083c -> ec850fe2e


Adding functionality to enable/disable component startup synchronizer


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

Branch: refs/heads/master
Commit: ec850fe2ee8d0205e4863910a054256b84dd978d
Parents: 83a4f08
Author: Imesh Gunaratne <im...@apache.org>
Authored: Wed May 13 22:46:07 2015 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Wed May 13 22:46:32 2015 +0530

----------------------------------------------------------------------
 .../internal/AutoscalerServiceComponent.java    | 24 ++++---
 .../CloudControllerServiceComponent.java        | 24 ++++---
 .../ComponentStartUpSynchronizerImpl.java       | 67 ++++++++++++++++++--
 .../services/ComponentStartUpSynchronizer.java  |  2 +
 .../StratosManagerServiceComponent.java         | 30 +++++----
 .../modules/distribution/src/bin/stratos.bat    |  2 +-
 .../modules/distribution/src/bin/stratos.sh     |  1 +
 7 files changed, 116 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/ec850fe2/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
index c9d9f4e..d6185d7 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
@@ -222,15 +222,23 @@ public class AutoscalerServiceComponent {
 
         ComponentStartUpSynchronizer componentStartUpSynchronizer =
                 ServiceReferenceHolder.getInstance().getComponentStartUpSynchronizer();
-        componentStartUpSynchronizer.addEventListener(new ComponentActivationEventListener() {
-            @Override
-            public void activated(Component component) {
-                if (component == Component.StratosManager) {
-                    Runnable applicationSynchronizer = new ApplicationEventSynchronizer();
-                    scheduler.scheduleAtFixedRate(applicationSynchronizer, 0, 1, TimeUnit.MINUTES);
+        if(componentStartUpSynchronizer.isEnabled()) {
+            componentStartUpSynchronizer.addEventListener(new ComponentActivationEventListener() {
+                @Override
+                public void activated(Component component) {
+                    if (component == Component.StratosManager) {
+                        scheduleEventSynchronizers();
+                    }
                 }
-            }
-        });
+            });
+        } else {
+            scheduleEventSynchronizers();
+        }
+    }
+
+    private void scheduleEventSynchronizers() {
+        Runnable applicationSynchronizer = new ApplicationEventSynchronizer();
+        scheduler.scheduleAtFixedRate(applicationSynchronizer, 0, 1, TimeUnit.MINUTES);
     }
 
     protected void deactivate(ComponentContext context) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/ec850fe2/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java
index 2c5ceff..e174104 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerServiceComponent.java
@@ -170,15 +170,23 @@ public class CloudControllerServiceComponent {
 
         ComponentStartUpSynchronizer componentStartUpSynchronizer =
                 ServiceReferenceHolder.getInstance().getComponentStartUpSynchronizer();
-        componentStartUpSynchronizer.addEventListener(new ComponentActivationEventListener() {
-            @Override
-            public void activated(Component component) {
-                if (component == Component.StratosManager) {
-                    Runnable topologySynchronizer = new TopologyEventSynchronizer();
-                    scheduler.scheduleAtFixedRate(topologySynchronizer, 0, 1, TimeUnit.MINUTES);
+        if(componentStartUpSynchronizer.isEnabled()) {
+            componentStartUpSynchronizer.addEventListener(new ComponentActivationEventListener() {
+                @Override
+                public void activated(Component component) {
+                    if (component == Component.StratosManager) {
+                        scheduleEventSynchronizers();
+                    }
                 }
-            }
-        });
+            });
+        } else {
+            scheduleEventSynchronizers();
+        }
+    }
+
+    private void scheduleEventSynchronizers() {
+        Runnable topologySynchronizer = new TopologyEventSynchronizer();
+        scheduler.scheduleAtFixedRate(topologySynchronizer, 0, 1, TimeUnit.MINUTES);
     }
 
     protected void setTaskService(TaskService taskService) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/ec850fe2/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/ComponentStartUpSynchronizerImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/ComponentStartUpSynchronizerImpl.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/ComponentStartUpSynchronizerImpl.java
index 079c428..887941e 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/ComponentStartUpSynchronizerImpl.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/internal/ComponentStartUpSynchronizerImpl.java
@@ -43,6 +43,7 @@ public class ComponentStartUpSynchronizerImpl implements ComponentStartUpSynchro
     private static final Log log = LogFactory.getLog(ComponentStartUpSynchronizerImpl.class);
 
     private static final String COMPONENT_STATUS_MAP = "stratos.component.status.map";
+    private static final String COMPONENT_STARTUP_SYNCHRONIZER_ENABLED = "stratos.component.startup.synchronizer.enabled";
     private static final String COMPONENT_ACTIVATION_CHECK_INTERVAL = "stratos.component.activation.check.interval";
     private static final String COMPONENT_ACTIVATION_TIMEOUT = "stratos.component.activation.timeout";
     private static final long DEFAULT_COMPONENT_ACTIVATION_CHECK_INTERVAL = 1000;
@@ -50,6 +51,7 @@ public class ComponentStartUpSynchronizerImpl implements ComponentStartUpSynchro
 
     private Map<Component, Boolean> componentStatusMap;
     private List<ComponentStartUpEventListener> eventListeners;
+    private boolean componentStartUpSynchronizerEnabled;
     private long componentActivationCheckInterval;
     private long componentActivationTimeout;
 
@@ -57,6 +59,8 @@ public class ComponentStartUpSynchronizerImpl implements ComponentStartUpSynchro
         componentStatusMap = distributedObjectProvider.getMap(COMPONENT_STATUS_MAP);
         eventListeners = new ArrayList<ComponentStartUpEventListener>();
 
+        componentStartUpSynchronizerEnabled = Boolean.getBoolean(COMPONENT_STARTUP_SYNCHRONIZER_ENABLED);
+
         componentActivationCheckInterval = Long.getLong(COMPONENT_ACTIVATION_CHECK_INTERVAL,
                 DEFAULT_COMPONENT_ACTIVATION_CHECK_INTERVAL);
         log.info(String.format("Component activation check interval: %s seconds",
@@ -67,6 +71,20 @@ public class ComponentStartUpSynchronizerImpl implements ComponentStartUpSynchro
         log.info(String.format("Component activation timeout: %s seconds", (componentActivationTimeout / 1000)));
     }
 
+    /**
+     * Returns true if component startup synchronizer is enabled.
+     * @return
+     */
+    @Override
+    public boolean isEnabled() {
+        return componentStartUpSynchronizerEnabled;
+    }
+
+    /**
+     * Set the status of a component.
+     * @param component
+     * @param active
+     */
     @Override
     public void setComponentStatus(Component component, boolean active) {
         componentStatusMap.put(component, active);
@@ -79,6 +97,10 @@ public class ComponentStartUpSynchronizerImpl implements ComponentStartUpSynchro
         }
     }
 
+    /**
+     * Notify component activation event listeners.
+     * @param component
+     */
     private void notifyComponentActivationEventListeners(Component component) {
         for (ComponentStartUpEventListener eventListener : eventListeners) {
             if (eventListener instanceof ComponentActivationEventListener) {
@@ -93,6 +115,11 @@ public class ComponentStartUpSynchronizerImpl implements ComponentStartUpSynchro
         }
     }
 
+    /**
+     * Returns true if a given component is active.
+     * @param component
+     * @return
+     */
     @Override
     public boolean isComponentActive(Component component) {
         if (componentStatusMap.containsKey(component)) {
@@ -101,13 +128,25 @@ public class ComponentStartUpSynchronizerImpl implements ComponentStartUpSynchro
         return false;
     }
 
+    /**
+     * Wait for a component to be activated
+     * @param owner owner component
+     * @param component component to be activated
+     */
     @Override
     public void waitForComponentActivation(Component owner, Component component) {
+
+        if(!componentStartUpSynchronizerEnabled) {
+            log.debug(String.format("Component activation check is disabled, %s did not wait for %s to be activated",
+                    owner, component));
+            return;
+        }
+
         long startTime = System.currentTimeMillis();
         boolean logged = false;
         while (!isComponentActive(component)) {
             if (!logged) {
-                log.info(String.format("%s component is waiting for %s component to become active...",
+                log.info(String.format("%s is waiting for %s to be activated...",
                         owner, component));
                 logged = true;
             }
@@ -115,36 +154,52 @@ public class ComponentStartUpSynchronizerImpl implements ComponentStartUpSynchro
             try {
                 Thread.sleep(componentActivationCheckInterval);
             } catch (InterruptedException ignore) {
-                throw new RuntimeException(String.format("Thread interrupted, %s component could not wait for " +
-                        "component %s to become active", owner, component));
+                throw new RuntimeException(String.format("Thread interrupted, %s could not wait for " +
+                        "%s to be activated", owner, component));
             }
 
             long currentTime = System.currentTimeMillis();
             if ((currentTime - startTime) > componentActivationTimeout) {
-                throw new RuntimeException(String.format("%s component did not become active within %d seconds ",
+                throw new RuntimeException(String.format("%s component did not activated within %d seconds ",
                         component, (componentActivationTimeout / 1000)));
             }
         }
     }
 
+    /**
+     * Wait for a web service to be activated.
+     * @param serviceName
+     * @throws AxisFault
+     */
     @Override
     public void waitForWebServiceActivation(String serviceName) throws AxisFault {
+
+        if(!componentStartUpSynchronizerEnabled) {
+            log.debug(String.format("Component activation check is disabled, did not wait for %s to be activated",
+                    serviceName));
+            return;
+        }
+
         AxisConfiguration axisConfiguration = CarbonConfigurationContextFactory.getConfigurationContext()
                 .getAxisConfiguration();
         AxisService cloudControllerService = axisConfiguration.getService(serviceName);
         if (!cloudControllerService.isActive()) {
             while (!cloudControllerService.isActive()) {
-                log.info(String.format("Waiting for %s web service to become active...", serviceName));
+                log.info(String.format("Waiting for %s web service to be activated...", serviceName));
                 try {
                     Thread.sleep(componentActivationCheckInterval);
                 } catch (InterruptedException ignore) {
                     return;
                 }
             }
-            log.info(String.format("%s web service became active", serviceName));
+            log.info(String.format("%s web service activated", serviceName));
         }
     }
 
+    /**
+     * Add component startup event listener.
+     * @param eventListener
+     */
     @Override
     public void addEventListener(ComponentStartUpEventListener eventListener) {
         eventListeners.add(eventListener);

http://git-wip-us.apache.org/repos/asf/stratos/blob/ec850fe2/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/services/ComponentStartUpSynchronizer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/services/ComponentStartUpSynchronizer.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/services/ComponentStartUpSynchronizer.java
index 376e837..1eebdeb 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/services/ComponentStartUpSynchronizer.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/services/ComponentStartUpSynchronizer.java
@@ -27,6 +27,8 @@ import org.apache.stratos.common.Component;
  */
 public interface ComponentStartUpSynchronizer {
 
+    boolean isEnabled();
+
     void setComponentStatus(Component component, boolean active);
 
     boolean isComponentActive(Component component);

http://git-wip-us.apache.org/repos/asf/stratos/blob/ec850fe2/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/internal/StratosManagerServiceComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/internal/StratosManagerServiceComponent.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/internal/StratosManagerServiceComponent.java
index bb8f0ff..70179d5 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/internal/StratosManagerServiceComponent.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/internal/StratosManagerServiceComponent.java
@@ -251,18 +251,26 @@ public class StratosManagerServiceComponent {
     private void registerComponentStartUpEventListeners() {
         ComponentStartUpSynchronizer componentStartUpSynchronizer =
                 ServiceReferenceHolder.getInstance().getComponentStartUpSynchronizer();
-        componentStartUpSynchronizer.addEventListener(new ComponentActivationEventListener() {
-            @Override
-            public void activated(Component component) {
-                if (component == Component.StratosManager) {
-                    Runnable tenantSynchronizer = new TenantEventSynchronizer();
-                    scheduler.scheduleAtFixedRate(tenantSynchronizer, 0, 1, TimeUnit.MINUTES);
-
-                    Runnable applicationSignUpSynchronizer = new ApplicationSignUpEventSynchronizer();
-                    scheduler.scheduleAtFixedRate(applicationSignUpSynchronizer, 0, 1, TimeUnit.MINUTES);
+        if(componentStartUpSynchronizer.isEnabled()) {
+            componentStartUpSynchronizer.addEventListener(new ComponentActivationEventListener() {
+                @Override
+                public void activated(Component component) {
+                    if (component == Component.StratosManager) {
+                        scheduleEventSynchronizers();
+                    }
                 }
-            }
-        });
+            });
+        } else {
+            scheduleEventSynchronizers();
+        }
+    }
+
+    private void scheduleEventSynchronizers() {
+        Runnable tenantSynchronizer = new TenantEventSynchronizer();
+        scheduler.scheduleAtFixedRate(tenantSynchronizer, 0, 1, TimeUnit.MINUTES);
+
+        Runnable applicationSignUpSynchronizer = new ApplicationSignUpEventSynchronizer();
+        scheduler.scheduleAtFixedRate(applicationSignUpSynchronizer, 0, 1, TimeUnit.MINUTES);
     }
 
     protected void setConfigurationContextService(ConfigurationContextService contextService) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/ec850fe2/products/stratos/modules/distribution/src/bin/stratos.bat
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/bin/stratos.bat b/products/stratos/modules/distribution/src/bin/stratos.bat
index 05a8e87..c7349bc 100644
--- a/products/stratos/modules/distribution/src/bin/stratos.bat
+++ b/products/stratos/modules/distribution/src/bin/stratos.bat
@@ -155,7 +155,7 @@ set CARBON_CLASSPATH=.\lib;%CARBON_CLASSPATH%
 
 set JAVA_ENDORSED=".\lib\endorsed";"%JAVA_HOME%\jre\lib\endorsed";"%JAVA_HOME%\lib\endorsed"
 
-set CMD_LINE_ARGS=-Xbootclasspath/a:%CARBON_XBOOTCLASSPATH% -Xms256m -Xmx1024m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="%CARBON_HOME%\repository\logs\heap-dump.hprof"  -Dcom.sun.management.jmxremote -classpath %CARBON_CLASSPATH% %JAVA_OPTS% -Djava.endorsed.dirs=%JAVA_ENDORSED% -Dcarbon.registry.root=/ -Dcarbon.home="%CARBON_HOME%" -Dwso2.server.standalone=true -Djava.command="%JAVA_HOME%\bin\java" -Djava.opts="%JAVA_OPTS%" -Djava.io.tmpdir="%CARBON_HOME%\tmp" -Dcatalina.base="%CARBON_HOME%\lib\tomcat" -Dwso2.carbon.xml=%CARBON_HOME%\repository\conf\carbon.xml -Dwso2.registry.xml="%CARBON_HOME%\repository\conf\registry.xml" -Dwso2.user.mgt.xml="%CARBON_HOME%\repository\conf\user-mgt.xml" -Dwso2.transports.xml="%CARBON_HOME%\repository\conf\mgt-transports.xml" -Djava.util.logging.config.file="%CARBON_HOME%\repository\conf\log4j.properties" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dcarbon.config.dir.path="%CARBON_HOME%\repository\
 conf" -Djndi.properties.dir="%CARBON_HOME%/repository/conf" -Dcarbon.logs.path="%CARBON_HOME%\repository\logs" -Dcomponents.repo="%CARBON_HOME%\repository\components" -Dconf.location="%CARBON_HOME%\repository\conf" -Dcom.atomikos.icatch.file="%CARBON_HOME%\lib\transactions.properties" -Dcom.atomikos.icatch.hide_init_file_path="true" -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -Dcom.sun.jndi.ldap.connect.pool.authentication=simple -Dcom.sun.jndi.ldap.connect.pool.timeout=3000 -Dorg.terracotta.quartz.skipUpdateCheck=true -Dcarbon.classpath=%CARBON_CLASSPATH% -Dfile.encoding=UTF8 -Dloadbalancer.conf="%CARBON_HOME%\repository\conf\loadbalancer.conf"
+set CMD_LINE_ARGS=-Xbootclasspath/a:%CARBON_XBOOTCLASSPATH% -Xms256m -Xmx1024m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="%CARBON_HOME%\repository\logs\heap-dump.hprof"  -Dcom.sun.management.jmxremote -classpath %CARBON_CLASSPATH% %JAVA_OPTS% -Djava.endorsed.dirs=%JAVA_ENDORSED% -Dcarbon.registry.root=/ -Dcarbon.home="%CARBON_HOME%" -Dwso2.server.standalone=true -Djava.command="%JAVA_HOME%\bin\java" -Djava.opts="%JAVA_OPTS%" -Djava.io.tmpdir="%CARBON_HOME%\tmp" -Dcatalina.base="%CARBON_HOME%\lib\tomcat" -Dwso2.carbon.xml=%CARBON_HOME%\repository\conf\carbon.xml -Dwso2.registry.xml="%CARBON_HOME%\repository\conf\registry.xml" -Dwso2.user.mgt.xml="%CARBON_HOME%\repository\conf\user-mgt.xml" -Dwso2.transports.xml="%CARBON_HOME%\repository\conf\mgt-transports.xml" -Djava.util.logging.config.file="%CARBON_HOME%\repository\conf\log4j.properties" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dcarbon.config.dir.path="%CARBON_HOME%\repository\
 conf" -Djndi.properties.dir="%CARBON_HOME%/repository/conf" -Dcarbon.logs.path="%CARBON_HOME%\repository\logs" -Dcomponents.repo="%CARBON_HOME%\repository\components" -Dconf.location="%CARBON_HOME%\repository\conf" -Dcom.atomikos.icatch.file="%CARBON_HOME%\lib\transactions.properties" -Dcom.atomikos.icatch.hide_init_file_path="true" -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -Dcom.sun.jndi.ldap.connect.pool.authentication=simple -Dcom.sun.jndi.ldap.connect.pool.timeout=3000 -Dorg.terracotta.quartz.skipUpdateCheck=true -Dcarbon.classpath=%CARBON_CLASSPATH% -Dfile.encoding=UTF8 -Dloadbalancer.conf="%CARBON_HOME%\repository\conf\loadbalancer.conf -Dstratos.component.startup.synchronizer.enabled=true"
 
 :runJava
 echo JAVA_HOME environment variable is set to %JAVA_HOME%

http://git-wip-us.apache.org/repos/asf/stratos/blob/ec850fe2/products/stratos/modules/distribution/src/bin/stratos.sh
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/bin/stratos.sh b/products/stratos/modules/distribution/src/bin/stratos.sh
index 8420fc5..1935794 100755
--- a/products/stratos/modules/distribution/src/bin/stratos.sh
+++ b/products/stratos/modules/distribution/src/bin/stratos.sh
@@ -302,6 +302,7 @@ do
     -Djndi.properties.dir="$CARBON_HOME/repository/conf" \
     -Dthrift.client.config.file.path="$CARBON_HOME/repository/conf/thrift-client-config.xml" \
     -DMETADATA_CLIENT_CONFIG_FILE="$CARBON_HOME/repository/conf/metadataservice.xml" \
+    -Dstratos.component.startup.synchronizer.enabled=true \
     org.wso2.carbon.bootstrap.Bootstrap $*
     status=$?
 done