Updated Branches: refs/heads/master 989be9cb7 -> dc13917dc
properly fixing making member expiry time configurable using autoscaler.xml Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/053734d7 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/053734d7 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/053734d7 Branch: refs/heads/master Commit: 053734d7eade30e25c2b7049bde855db67439b01 Parents: 1db00e3 Author: Isuru <[email protected]> Authored: Wed Feb 5 14:36:38 2014 +0530 Committer: Isuru <[email protected]> Committed: Wed Feb 5 14:36:38 2014 +0530 ---------------------------------------------------------------------- .../stratos/autoscaler/PartitionContext.java | 44 +++----------------- .../cloud/controller/CloudControllerClient.java | 2 +- .../controller/InstanceNotificationClient.java | 2 +- .../stratos/autoscaler/util/ConfUtil.java | 20 ++++++--- .../stratos/autoscaler/TestMinimumRule.java | 14 +++++-- .../autoscaler/TestObsoletedMemberRule.java | 20 +++++---- .../distribution/src/main/conf/autoscaler.xml | 35 +++++++++------- .../distribution/src/main/resources/stratos.bat | 2 +- .../distribution/src/main/resources/stratos.sh | 1 - 9 files changed, 65 insertions(+), 75 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/053734d7/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java index 5082c73..ca4cd99 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java @@ -18,8 +18,10 @@ */ package org.apache.stratos.autoscaler; +import org.apache.commons.configuration.XMLConfiguration; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.autoscaler.util.ConfUtil; import org.apache.stratos.cloud.controller.deployment.partition.Partition; import org.apache.stratos.cloud.controller.pojo.MemberContext; @@ -79,16 +81,11 @@ public class PartitionContext implements Serializable{ // private int totalMemberCount; // for the use of tests - public PartitionContext() { + public PartitionContext(long memberExpiryTime) { this.activeMembers = new ArrayList<MemberContext>(); this.terminationPendingMembers = new ArrayList<MemberContext>(); - // check if a different value has been set for expiryTime - long memberExpiryInterval = getMemberExpiryInterval(); - if (memberExpiryInterval != -1) { - setExpiryTime(memberExpiryInterval); - log.info("Member expiry interval set as " + memberExpiryInterval); - } + expiryTime = memberExpiryTime; } public PartitionContext(Partition partition) { @@ -103,11 +100,8 @@ public class PartitionContext implements Serializable{ memberStatsContexts = new ConcurrentHashMap<String, MemberStatsContext>(); // check if a different value has been set for expiryTime - long memberExpiryInterval = getMemberExpiryInterval(); - if (memberExpiryInterval != -1) { - setExpiryTime(memberExpiryInterval); - log.info("Member expiry interval set as " + memberExpiryInterval); - } + XMLConfiguration conf = ConfUtil.getInstance(null).getConfiguration(); + expiryTime = conf.getLong("autoscaler.member.expiryTimeout", 900000); Thread th = new Thread(new PendingMemberWatcher(this)); th.start(); @@ -372,32 +366,6 @@ public class PartitionContext implements Serializable{ return false; } - private long getMemberExpiryInterval () { - - // if expiry time has been set in startup scrip with 'member.expiry.interval', use that - String memberExpiryInterval = System.getProperty(Constants.MEMBER_EXPIRY_INTERVAL); - long memberExpiryIntervalLongVal = -1; - - if (memberExpiryInterval != null) { - - try { - memberExpiryIntervalLongVal = Long.parseLong(memberExpiryInterval); - - } catch (NumberFormatException e) { - log.warn("Invalid value specified for [member.expiry.interval] in the startup script, default value of 15 mins will be used"); - return -1; - } - - if (memberExpiryIntervalLongVal <= 0) { - log.warn("Invalid value specified for [member.expiry.interval] in the startup script, default value of 15 mins will be used"); - return -1; - } - } - - return memberExpiryIntervalLongVal; - } - - private class PendingMemberWatcher implements Runnable { private PartitionContext ctxt; http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/053734d7/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java index 3104c33..e231362 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java @@ -58,7 +58,7 @@ public class CloudControllerClient { private CloudControllerClient(){ try { - XMLConfiguration conf = ConfUtil.getInstance().getConfiguration(); + XMLConfiguration conf = ConfUtil.getInstance(null).getConfiguration(); int port = conf.getInt("autoscaler.cloudController.port", Constants.CLOUD_CONTROLLER_DEFAULT_PORT); String hostname = conf.getString("autoscaler.cloudController.hostname", "localhost"); String epr = "https://" + hostname + ":" + port + "/" + Constants.CLOUD_CONTROLLER_SERVICE_SFX ; http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/053734d7/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/InstanceNotificationClient.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/InstanceNotificationClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/InstanceNotificationClient.java index 4b99002..00d0431 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/InstanceNotificationClient.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/InstanceNotificationClient.java @@ -46,7 +46,7 @@ public class InstanceNotificationClient { private InstanceNotificationClient(){ try { - XMLConfiguration conf = ConfUtil.getInstance().getConfiguration(); + XMLConfiguration conf = ConfUtil.getInstance(null).getConfiguration(); int port = conf.getInt(Constants.STRATOS_MANAGER_DEFAULT_PORT_ELEMENT, Constants.STRATOS_MANAGER_DEFAULT_PORT); String hostname = conf.getString(Constants.STRATOS_MANAGER_HOSTNAME_ELEMENT, "localhost"); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/053734d7/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java index 8a5c597..95ad30a 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java @@ -19,8 +19,6 @@ package org.apache.stratos.autoscaler.util; -import java.io.File; - import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.XMLConfiguration; import org.apache.commons.logging.Log; @@ -28,6 +26,8 @@ import org.apache.commons.logging.LogFactory; import org.apache.stratos.autoscaler.Constants; import org.wso2.carbon.utils.CarbonUtils; +import java.io.File; + /** * This class contains utility methods for read Autoscaler configuration file. */ @@ -39,10 +39,18 @@ public class ConfUtil { private static ConfUtil instance = null; - private ConfUtil() { + private ConfUtil(String configFilePath) { log.info("Loading configuration....."); try { - File confFile = new File(CarbonUtils.getCarbonConfigDirPath(),Constants.AUTOSCALER_CONFIG_FILE_NAME); + + File confFile; + if (configFilePath != null && !configFilePath.isEmpty()) { + confFile = new File(configFilePath); + + } else { + confFile = new File(CarbonUtils.getCarbonConfigDirPath(),Constants.AUTOSCALER_CONFIG_FILE_NAME); + } + config = new XMLConfiguration(confFile); } catch (ConfigurationException e) { log.error("Unable to load autoscaler configuration file",e); @@ -50,9 +58,9 @@ public class ConfUtil { } } - public static ConfUtil getInstance() { + public static ConfUtil getInstance(String configFilePath) { if (instance == null) { - instance = new ConfUtil (); + instance = new ConfUtil (configFilePath); } return instance; } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/053734d7/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestMinimumRule.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestMinimumRule.java b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestMinimumRule.java index ecb6c3d..30d63bc 100644 --- a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestMinimumRule.java +++ b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestMinimumRule.java @@ -19,11 +19,10 @@ package org.apache.stratos.autoscaler; -import static org.junit.Assert.*; - -import java.util.ArrayList; +import org.apache.commons.configuration.XMLConfiguration; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.autoscaler.util.ConfUtil; import org.apache.stratos.cloud.controller.pojo.MemberContext; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; @@ -34,11 +33,16 @@ import org.drools.runtime.StatefulKnowledgeSession; import org.junit.Before; import org.junit.Test; +import java.util.ArrayList; + +import static org.junit.Assert.assertEquals; + public class TestMinimumRule { private static final Log log = LogFactory.getLog(TestMinimumRule.class); private String droolsFilePath = "src/test/resources/test-minimum-autoscaler-rule.drl"; private KnowledgeBase kbase; private StatefulKnowledgeSession ksession; + private XMLConfiguration conf; @Before public void setUp() { @@ -59,6 +63,8 @@ public class TestMinimumRule { kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); + + conf = ConfUtil.getInstance("autoscaler.xml").getConfiguration(); } @Test @@ -72,7 +78,7 @@ public class TestMinimumRule { ksession = kbase.newStatefulKnowledgeSession(); ksession.setGlobal("clusterId", "lb.cluster.1"); ksession.setGlobal("lbRef", null); - PartitionContext p = new PartitionContext(); + PartitionContext p = new PartitionContext(conf.getLong("autoscaler.member.expiryTimeout", 900000)); p.setPendingMembers(new ArrayList<MemberContext>()); p.setMinimumMemberCount(1); ksession.insert(p); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/053734d7/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestObsoletedMemberRule.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestObsoletedMemberRule.java b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestObsoletedMemberRule.java index fbfb180..e602539 100644 --- a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestObsoletedMemberRule.java +++ b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestObsoletedMemberRule.java @@ -19,13 +19,10 @@ package org.apache.stratos.autoscaler; -import static org.junit.Assert.*; - -import java.util.ArrayList; -import java.util.concurrent.CopyOnWriteArrayList; - +import org.apache.commons.configuration.XMLConfiguration; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.autoscaler.util.ConfUtil; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; import org.drools.builder.*; @@ -36,11 +33,18 @@ import org.drools.runtime.rule.FactHandle; import org.junit.Before; import org.junit.Test; +import java.util.ArrayList; +import java.util.concurrent.CopyOnWriteArrayList; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + public class TestObsoletedMemberRule { private static final Log log = LogFactory.getLog(TestObsoletedMemberRule.class); private String droolsFilePath = "src/test/resources/test-terminating-obsoleted-members-rule.drl"; private KnowledgeBase kbase; private StatefulKnowledgeSession ksession; + private XMLConfiguration conf; @Before public void setUp() { @@ -62,6 +66,8 @@ public class TestObsoletedMemberRule { kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); log.info("Knowledge base has been set up."); + + conf = ConfUtil.getInstance("autoscaler.xml").getConfiguration(); } @Test @@ -74,7 +80,7 @@ public class TestObsoletedMemberRule { throw new IllegalArgumentException("Knowledge base is null."); } ksession = kbase.newStatefulKnowledgeSession(); - PartitionContext p = new PartitionContext(); + PartitionContext p = new PartitionContext(conf.getLong("autoscaler.member.expiryTimeout", 900000)); p.setObsoletedMembers(new CopyOnWriteArrayList<String>()); String memberId = "member1"; p.addObsoleteMember(memberId); @@ -104,7 +110,7 @@ public class TestObsoletedMemberRule { } ksession = kbase.newStatefulKnowledgeSession(); - PartitionContext p = new PartitionContext(); + PartitionContext p = new PartitionContext(conf.getLong("autoscaler.member.expiryTimeout", 900000)); p.setObsoletedMembers(new CopyOnWriteArrayList<String>()); String memberId1 = "member1"; String memberId2 = "member2"; http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/053734d7/products/autoscaler/modules/distribution/src/main/conf/autoscaler.xml ---------------------------------------------------------------------- diff --git a/products/autoscaler/modules/distribution/src/main/conf/autoscaler.xml b/products/autoscaler/modules/distribution/src/main/conf/autoscaler.xml index 020ff18..36009e2 100644 --- a/products/autoscaler/modules/distribution/src/main/conf/autoscaler.xml +++ b/products/autoscaler/modules/distribution/src/main/conf/autoscaler.xml @@ -19,21 +19,24 @@ --> <configuration> <autoscaler> - <rulesEvaluator> - <schedule> - <initialDelay>30</initialDelay> - <period>15</period> - </schedule> - </rulesEvaluator> - <cloudController> - <hostname>localhost</hostname> - <port>9444</port> - <clientTimeout>300000</clientTimeout> - </cloudController> - <stratosManager> - <hostname>localhost</hostname> - <port>9445</port> - <clientTimeout>300000</clientTimeout> - </stratosManager> + <rulesEvaluator> + <schedule> + <initialDelay>30</initialDelay> + <period>15</period> + </schedule> + </rulesEvaluator> + <cloudController> + <hostname>localhost</hostname> + <port>9444</port> + <clientTimeout>300000</clientTimeout> + </cloudController> + <stratosManager> + <hostname>localhost</hostname> + <port>9445</port> + <clientTimeout>300000</clientTimeout> + </stratosManager> + <member> + <expiryTimeout>900000</expiryTimeout> + </member> </autoscaler> </configuration> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/053734d7/products/autoscaler/modules/distribution/src/main/resources/stratos.bat ---------------------------------------------------------------------- diff --git a/products/autoscaler/modules/distribution/src/main/resources/stratos.bat b/products/autoscaler/modules/distribution/src/main/resources/stratos.bat index 0c3af11..78307f8 100644 --- a/products/autoscaler/modules/distribution/src/main/resources/stratos.bat +++ b/products/autoscaler/modules/distribution/src/main/resources/stratos.bat @@ -167,7 +167,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 -Xmx512m -XX:MaxPermSize=256m -Dcom.sun.management.jmxremote -classpath %CARBON_CLASSPATH% %JAVA_OPTS% -Djava.endorsed.dirs=%JAVA_ENDORSED% -DandesConfig=qpid-config.xml -Ddisable.cassandra.server.startup=true -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" -Dcarbon.config.dir.path="%CARBON_HOME%\repository\conf" -Djndi.properties.dir="%CARBON_HOME%/repository/conf" -Dcarbon.logs.path="%CARBON_HOME%\r epository\logs" -Dcomponents.repo="%CARBON_HOME%\repository\components" -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 -Dmember.expiry.interval=900000 -Dcarbon.classpath=%CARBON_CLASSPATH% +set CMD_LINE_ARGS=-Xbootclasspath/a:%CARBON_XBOOTCLASSPATH% -Xms256m -Xmx512m -XX:MaxPermSize=256m -Dcom.sun.management.jmxremote -classpath %CARBON_CLASSPATH% %JAVA_OPTS% -Djava.endorsed.dirs=%JAVA_ENDORSED% -DandesConfig=qpid-config.xml -Ddisable.cassandra.server.startup=true -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" -Dcarbon.config.dir.path="%CARBON_HOME%\repository\conf" -Djndi.properties.dir="%CARBON_HOME%/repository/conf" -Dcarbon.logs.path="%CARBON_HOME%\r epository\logs" -Dcomponents.repo="%CARBON_HOME%\repository\components" -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% :runJava echo JAVA_HOME environment variable is set to %JAVA_HOME% http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/053734d7/products/autoscaler/modules/distribution/src/main/resources/stratos.sh ---------------------------------------------------------------------- diff --git a/products/autoscaler/modules/distribution/src/main/resources/stratos.sh b/products/autoscaler/modules/distribution/src/main/resources/stratos.sh index 3da2613..77f7a91 100644 --- a/products/autoscaler/modules/distribution/src/main/resources/stratos.sh +++ b/products/autoscaler/modules/distribution/src/main/resources/stratos.sh @@ -299,7 +299,6 @@ do -Djava.security.egd=file:/dev/./urandom \ -Dfile.encoding=UTF8 \ -Djndi.properties.dir="$CARBON_HOME/repository/conf" \ - -Dmember.expiry.interval=900000 \ org.wso2.carbon.bootstrap.Bootstrap $* status=$? done
