making min threads for a Thread pool configurable via a ratio and making stratos.manager.thread.pool & cloud.controller.thread.pool configurable
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/80882404 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/80882404 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/80882404 Branch: refs/heads/stratos-4.1.x Commit: 8088240408b3b66fcbccf9740340a8790e050e7b Parents: 991da8e Author: Isuru Haththotuwa <[email protected]> Authored: Tue Jan 5 16:15:13 2016 +0530 Committer: Isuru Haththotuwa <[email protected]> Committed: Tue Jan 5 16:15:13 2016 +0530 ---------------------------------------------------------------------- .../internal/AutoscalerServiceComponent.java | 5 ++++- .../autoscaler/monitor/cluster/ClusterMonitor.java | 5 ++++- .../monitor/component/ApplicationMonitor.java | 5 ++++- .../autoscaler/monitor/component/GroupMonitor.java | 6 +++++- .../monitor/component/ParentComponentMonitor.java | 5 ++++- .../publisher/DASScalingDecisionPublisher.java | 6 +++++- .../internal/CloudControllerServiceComponent.java | 10 +++++++++- .../services/impl/CloudControllerServiceImpl.java | 5 ++++- .../publisher/DASMemberInformationPublisher.java | 6 +++++- .../publisher/DASMemberStatusPublisher.java | 6 +++++- .../controller/util/CloudControllerConstants.java | 2 ++ .../stratos/common/constants/StratosConstants.java | 2 ++ .../threading/GracefulThreadPoolTerminator.java | 14 ++++++++++---- .../stratos/common/threading/StratosThreadPool.java | 4 ++-- .../statistics/LoadBalancerStatisticsExecutor.java | 6 +++++- .../internal/StratosManagerServiceComponent.java | 13 +++++++++++-- .../manager/utils/StratosManagerConstants.java | 6 +----- .../message/receiver/StratosEventReceiver.java | 5 ++++- 18 files changed, 86 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/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 bcd4fc1..d9b6729 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 @@ -45,6 +45,7 @@ import org.apache.stratos.autoscaler.util.AutoscalerUtil; import org.apache.stratos.autoscaler.util.ConfUtil; import org.apache.stratos.autoscaler.util.ServiceReferenceHolder; import org.apache.stratos.common.Component; +import org.apache.stratos.common.constants.StratosConstants; import org.apache.stratos.common.services.ComponentStartUpSynchronizer; import org.apache.stratos.common.services.DistributedObjectProvider; import org.apache.stratos.common.threading.StratosThreadPool; @@ -94,8 +95,10 @@ public class AutoscalerServiceComponent { XMLConfiguration conf = ConfUtil.getInstance(AutoscalerConstants.COMPONENTS_CONFIG).getConfiguration(); int threadPoolSize = conf .getInt(AutoscalerConstants.THREAD_POOL_SIZE_KEY, AutoscalerConstants.AUTOSCALER_THREAD_POOL_SIZE); + Integer ratio = Integer.getInteger(StratosConstants.THREAD_POOL_INITIAL_MIN_MAX_RATIO); + int divisor = ratio != null && ratio >= 1 ? ratio : StratosConstants.DEFAULT_THREAD_POOL_MIN_MAX_RATIO; executor = StratosThreadPool.getExecutorService(AutoscalerConstants.AUTOSCALER_THREAD_POOL_ID, ((int) Math - .ceil(threadPoolSize / 3)), threadPoolSize); + .ceil(threadPoolSize / divisor)), threadPoolSize); int schedulerThreadPoolSize = conf.getInt(AutoscalerConstants.SCHEDULER_THREAD_POOL_SIZE_KEY, AutoscalerConstants.AUTOSCALER_SCHEDULER_THREAD_POOL_SIZE); http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java index ee936db..898a26d 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java @@ -108,8 +108,11 @@ public class ClusterMonitor extends Monitor { String deploymentPolicyId) { int threadPoolSize = Integer.getInteger(AutoscalerConstants.MONITOR_THREAD_POOL_SIZE, 100); + Integer ratio = Integer.getInteger(StratosConstants.THREAD_POOL_INITIAL_MIN_MAX_RATIO); + int divisor = ratio != null && ratio >= 1 ? ratio : StratosConstants.DEFAULT_THREAD_POOL_MIN_MAX_RATIO; executor = StratosThreadPool.getExecutorService( - AutoscalerConstants.MONITOR_THREAD_POOL_ID, ((int)Math.ceil(threadPoolSize/3)), threadPoolSize); + AutoscalerConstants.MONITOR_THREAD_POOL_ID, ((int)Math.ceil(threadPoolSize/divisor)), + threadPoolSize); this.clusterId = cluster.getClusterId(); scheduler = StratosThreadPool.getScheduledExecutorService(clusterId, 2); readConfigurations(); http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java index c94ef7e..5836ee8 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java @@ -18,6 +18,7 @@ */ package org.apache.stratos.autoscaler.monitor.component; +import org.apache.commons.configuration.SystemConfiguration; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.autoscaler.algorithms.NetworkPartitionAlgorithm; @@ -79,8 +80,10 @@ public class ApplicationMonitor extends ParentComponentMonitor { super(application); int threadPoolSize = Integer.getInteger(AutoscalerConstants.MONITOR_THREAD_POOL_SIZE, 100); + Integer ratio = Integer.getInteger(StratosConstants.THREAD_POOL_INITIAL_MIN_MAX_RATIO); + int divisor = ratio != null && ratio >= 1 ? ratio : StratosConstants.DEFAULT_THREAD_POOL_MIN_MAX_RATIO; this.executor = StratosThreadPool.getExecutorService(AutoscalerConstants.MONITOR_THREAD_POOL_ID, - ((int)Math.ceil(threadPoolSize/3)), threadPoolSize); + ((int)Math.ceil(threadPoolSize/divisor)), threadPoolSize); //setting the appId for the application this.appId = application.getUniqueIdentifier(); http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java index d5cfc3f..a9c320f 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java @@ -40,6 +40,7 @@ import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy; import org.apache.stratos.autoscaler.util.AutoscalerConstants; import org.apache.stratos.autoscaler.util.AutoscalerUtil; import org.apache.stratos.autoscaler.util.ServiceReferenceHolder; +import org.apache.stratos.common.constants.StratosConstants; import org.apache.stratos.common.partition.NetworkPartitionRef; import org.apache.stratos.common.partition.PartitionRef; import org.apache.stratos.common.threading.StratosThreadPool; @@ -85,8 +86,11 @@ public class GroupMonitor extends ParentComponentMonitor { super(group); int threadPoolSize = Integer.getInteger(AutoscalerConstants.MONITOR_THREAD_POOL_SIZE, 100); + Integer ratio = Integer.getInteger(StratosConstants.THREAD_POOL_INITIAL_MIN_MAX_RATIO); + int divisor = ratio != null && ratio >= 1 ? ratio : StratosConstants.DEFAULT_THREAD_POOL_MIN_MAX_RATIO; this.executor = StratosThreadPool.getExecutorService( - AutoscalerConstants.MONITOR_THREAD_POOL_ID, ((int)Math.ceil(threadPoolSize/3)),threadPoolSize); + AutoscalerConstants.MONITOR_THREAD_POOL_ID, ((int)Math.ceil(threadPoolSize/divisor)), + threadPoolSize); this.groupScalingEnabled = group.isGroupScalingEnabled(); this.appId = appId; http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java index 24983a9..a7e44cc 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java @@ -109,8 +109,11 @@ public abstract class ParentComponentMonitor extends Monitor { } // Create the executor service with identifier and thread pool size + Integer ratio = Integer.getInteger(StratosConstants.THREAD_POOL_INITIAL_MIN_MAX_RATIO); + int divisor = ratio != null && ratio >= 1 ? ratio : StratosConstants.DEFAULT_THREAD_POOL_MIN_MAX_RATIO; executor = StratosThreadPool.getExecutorService(AutoscalerConstants.AUTOSCALER_THREAD_POOL_ID, - ((int)Math.ceil(AutoscalerConstants.AUTOSCALER_THREAD_POOL_SIZE/3)),AutoscalerConstants + ((int)Math.ceil(AutoscalerConstants.AUTOSCALER_THREAD_POOL_SIZE/divisor)), + AutoscalerConstants .AUTOSCALER_THREAD_POOL_SIZE); networkPartitionContextsMap = new ConcurrentHashMap<String, NetworkPartitionContext>(); } http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/statistics/publisher/DASScalingDecisionPublisher.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/statistics/publisher/DASScalingDecisionPublisher.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/statistics/publisher/DASScalingDecisionPublisher.java index ad0e77b..3b5ca4e 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/statistics/publisher/DASScalingDecisionPublisher.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/statistics/publisher/DASScalingDecisionPublisher.java @@ -22,6 +22,7 @@ package org.apache.stratos.autoscaler.statistics.publisher; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.autoscaler.util.AutoscalerConstants; +import org.apache.stratos.common.constants.StratosConstants; import org.apache.stratos.common.threading.StratosThreadPool; import org.wso2.carbon.databridge.commons.Attribute; import org.wso2.carbon.databridge.commons.AttributeType; @@ -46,8 +47,11 @@ public class DASScalingDecisionPublisher extends ScalingDecisionPublisher { public DASScalingDecisionPublisher() { super(createStreamDefinition(), DAS_THRIFT_CLIENT_NAME); + Integer ratio = Integer.getInteger(StratosConstants.THREAD_POOL_INITIAL_MIN_MAX_RATIO); + int divisor = ratio != null && ratio >= 1 ? ratio : StratosConstants.DEFAULT_THREAD_POOL_MIN_MAX_RATIO; executor = StratosThreadPool.getExecutorService(AutoscalerConstants.STATS_PUBLISHER_THREAD_POOL_ID, - ((int)Math.ceil(STATS_PUBLISHER_THREAD_POOL_SIZE/3)), STATS_PUBLISHER_THREAD_POOL_SIZE); + ((int)Math.ceil(STATS_PUBLISHER_THREAD_POOL_SIZE/divisor)), + STATS_PUBLISHER_THREAD_POOL_SIZE); } public static DASScalingDecisionPublisher getInstance() { http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/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 720bf17..569d566 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 @@ -33,7 +33,9 @@ import org.apache.stratos.cloud.controller.messaging.receiver.initializer.Initia import org.apache.stratos.cloud.controller.messaging.receiver.instance.status.InstanceStatusTopicReceiver; import org.apache.stratos.cloud.controller.services.CloudControllerService; import org.apache.stratos.cloud.controller.services.impl.CloudControllerServiceImpl; +import org.apache.stratos.cloud.controller.util.CloudControllerConstants; import org.apache.stratos.common.Component; +import org.apache.stratos.common.constants.StratosConstants; import org.apache.stratos.common.services.ComponentStartUpSynchronizer; import org.apache.stratos.common.services.DistributedObjectProvider; import org.apache.stratos.common.threading.StratosThreadPool; @@ -88,8 +90,14 @@ public class CloudControllerServiceComponent { log.debug("Activating CloudControllerServiceComponent..."); } try { + Integer ccThreadPoolSize = Integer.getInteger(CloudControllerConstants.CC_THREAD_POOL_SIZE); + if (ccThreadPoolSize == null || ccThreadPoolSize <= 0) { + ccThreadPoolSize = THREAD_POOL_SIZE; + } + Integer ratio = Integer.getInteger(StratosConstants.THREAD_POOL_INITIAL_MIN_MAX_RATIO); + int divisor = ratio != null && ratio >= 1 ? ratio : StratosConstants.DEFAULT_THREAD_POOL_MIN_MAX_RATIO; executor = StratosThreadPool.getExecutorService(THREAD_POOL_ID, ((int)Math.ceil - (THREAD_POOL_SIZE/3)),THREAD_POOL_SIZE); + (ccThreadPoolSize/divisor)),ccThreadPoolSize); scheduler = StratosThreadPool .getScheduledExecutorService(SCHEDULER_THREAD_POOL_ID, SCHEDULER_THREAD_POOL_SIZE); http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java index f3e363f..f5901e1 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java @@ -35,6 +35,7 @@ import org.apache.stratos.cloud.controller.services.CloudControllerService; import org.apache.stratos.cloud.controller.util.CloudControllerConstants; import org.apache.stratos.cloud.controller.util.CloudControllerUtil; import org.apache.stratos.common.Property; +import org.apache.stratos.common.constants.StratosConstants; import org.apache.stratos.common.domain.LoadBalancingIPType; import org.apache.stratos.common.threading.StratosThreadPool; import org.apache.stratos.messaging.domain.topology.*; @@ -63,8 +64,10 @@ public class CloudControllerServiceImpl implements CloudControllerService { private ThreadPoolExecutor executor; public CloudControllerServiceImpl() { + Integer ratio = Integer.getInteger(StratosConstants.THREAD_POOL_INITIAL_MIN_MAX_RATIO); + int divisor = ratio != null && ratio >= 1 ? ratio : StratosConstants.DEFAULT_THREAD_POOL_MIN_MAX_RATIO; executor = StratosThreadPool.getExecutorService("cloud.controller.instance.manager.thread" + - ".pool", 20, 50); + ".pool", 50/divisor, 50); } http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/DASMemberInformationPublisher.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/DASMemberInformationPublisher.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/DASMemberInformationPublisher.java index 0d38967..fbba1c6 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/DASMemberInformationPublisher.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/DASMemberInformationPublisher.java @@ -27,6 +27,7 @@ import org.apache.stratos.cloud.controller.domain.IaasProvider; import org.apache.stratos.cloud.controller.domain.InstanceMetadata; import org.apache.stratos.cloud.controller.domain.MemberContext; import org.apache.stratos.cloud.controller.util.CloudControllerConstants; +import org.apache.stratos.common.constants.StratosConstants; import org.apache.stratos.common.threading.StratosThreadPool; import org.wso2.carbon.databridge.commons.Attribute; import org.wso2.carbon.databridge.commons.AttributeType; @@ -52,8 +53,11 @@ public class DASMemberInformationPublisher extends MemberInformationPublisher { private DASMemberInformationPublisher() { super(createStreamDefinition(), DAS_THRIFT_CLIENT_NAME); + Integer ratio = Integer.getInteger(StratosConstants.THREAD_POOL_INITIAL_MIN_MAX_RATIO); + int divisor = ratio != null && ratio >= 1 ? ratio : StratosConstants.DEFAULT_THREAD_POOL_MIN_MAX_RATIO; executor = StratosThreadPool.getExecutorService(CloudControllerConstants.STATS_PUBLISHER_THREAD_POOL_ID, - ((int)Math.ceil(CloudControllerConstants.STATS_PUBLISHER_THREAD_POOL_SIZE/3)), CloudControllerConstants + ((int)Math.ceil(CloudControllerConstants.STATS_PUBLISHER_THREAD_POOL_SIZE/divisor)), + CloudControllerConstants .STATS_PUBLISHER_THREAD_POOL_SIZE); } http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/DASMemberStatusPublisher.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/DASMemberStatusPublisher.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/DASMemberStatusPublisher.java index f28d2c8..a9f1cb7 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/DASMemberStatusPublisher.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/DASMemberStatusPublisher.java @@ -22,6 +22,7 @@ package org.apache.stratos.cloud.controller.statistics.publisher; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.cloud.controller.util.CloudControllerConstants; +import org.apache.stratos.common.constants.StratosConstants; import org.apache.stratos.common.threading.StratosThreadPool; import org.wso2.carbon.databridge.commons.Attribute; import org.wso2.carbon.databridge.commons.AttributeType; @@ -45,8 +46,11 @@ public class DASMemberStatusPublisher extends MemberStatusPublisher { private DASMemberStatusPublisher() { super(createStreamDefinition(), DAS_THRIFT_CLIENT_NAME); + Integer ratio = Integer.getInteger(StratosConstants.THREAD_POOL_INITIAL_MIN_MAX_RATIO); + int divisor = ratio != null && ratio >= 1 ? ratio : StratosConstants.DEFAULT_THREAD_POOL_MIN_MAX_RATIO; executor = StratosThreadPool.getExecutorService(CloudControllerConstants.STATS_PUBLISHER_THREAD_POOL_ID, - ((int)Math.ceil(CloudControllerConstants.STATS_PUBLISHER_THREAD_POOL_SIZE/3)), CloudControllerConstants + ((int)Math.ceil(CloudControllerConstants.STATS_PUBLISHER_THREAD_POOL_SIZE/divisor)), + CloudControllerConstants .STATS_PUBLISHER_THREAD_POOL_SIZE); } http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java index 29facf0..bc957c0 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java @@ -349,4 +349,6 @@ public final class CloudControllerConstants { public static final String IAAS_TYPE_EC2 = "ec2"; public static final String INSTANCE_CTXT_EC2_REGION = "EC2_REGION"; public static final String INSTANCE_CTXT_EC2_AVAILABILITY_ZONE = "EC2_AVAILABILITY_ZONE"; + + public static final String CC_THREAD_POOL_SIZE = "cc.thread.pool.size"; } http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java index 143de54..83495f9 100644 --- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java +++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java @@ -212,5 +212,7 @@ public class StratosConstants { public static final String NOT_DEFINED = "not-defined"; public static final String CLUSTER_INSTANCE_ID = "cluster.instance.id"; + public static final String THREAD_POOL_INITIAL_MIN_MAX_RATIO = "thread.pool.initial.min.max.ratio"; + public static final int DEFAULT_THREAD_POOL_MIN_MAX_RATIO = 3; } http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/threading/GracefulThreadPoolTerminator.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/threading/GracefulThreadPoolTerminator.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/threading/GracefulThreadPoolTerminator.java index 2ccfc45..ce6c12c 100644 --- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/threading/GracefulThreadPoolTerminator.java +++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/threading/GracefulThreadPoolTerminator.java @@ -41,20 +41,26 @@ public class GracefulThreadPoolTerminator implements Callable<String> { @Override public String call() { // try to shut down gracefully - log.info("Attempting to gracefully shut down thread pool " + threadPoolId); + if(log.isDebugEnabled()) { + log.debug("Attempting to gracefully shut down thread pool " + threadPoolId); + } executor.shutdown(); // wait 10 secs till terminated try { if (!executor.awaitTermination(10, TimeUnit.SECONDS)) { - log.info("Thread Pool [id] " + threadPoolId + " did not finish all tasks before " + - "timeout, forcefully shutting down"); + if(log.isDebugEnabled()) { + log.debug("Thread Pool [id] " + threadPoolId + " did not finish all tasks before " + + "timeout, forcefully shutting down"); + } executor.shutdownNow(); } } catch (InterruptedException e) { // interrupted, shutdown now executor.shutdownNow(); } - log.info("Successfully shut down thread pool " + threadPoolId); + if (log.isDebugEnabled()) { + log.debug("Successfully shut down thread pool " + threadPoolId); + } return threadPoolId; } } http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/threading/StratosThreadPool.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/threading/StratosThreadPool.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/threading/StratosThreadPool.java index 1f4e5c8..0e1ffa9 100644 --- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/threading/StratosThreadPool.java +++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/threading/StratosThreadPool.java @@ -52,12 +52,12 @@ public class StratosThreadPool { if (executor == null) { synchronized (executorServiceMapLock) { if (executor == null) { - int taskQueueSize = initialSize > 3 ? (int)Math.ceil(initialSize/3) : 1; + int taskQueueSize = initialSize > 4 ? (int)Math.ceil(initialSize/4) : 1; executor = new ThreadPoolExecutor(initialSize, maxSize, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(taskQueueSize), new StratosThreadFactory(identifier)); executorMap.put(identifier, executor); log.info(String.format("Thread pool created: [type] Executor [id] %s " + - "[initial size] %d [max size] %d", identifier, initialSize, maxSize)); + "[initial size] %d [max size] %d [queue length] %d", identifier, initialSize, maxSize, taskQueueSize)); } } } http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/statistics/LoadBalancerStatisticsExecutor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/statistics/LoadBalancerStatisticsExecutor.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/statistics/LoadBalancerStatisticsExecutor.java index 486b98b..d31b702 100644 --- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/statistics/LoadBalancerStatisticsExecutor.java +++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/statistics/LoadBalancerStatisticsExecutor.java @@ -20,6 +20,7 @@ package org.apache.stratos.load.balancer.statistics; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.common.constants.StratosConstants; import org.apache.stratos.common.threading.StratosThreadPool; import org.apache.stratos.load.balancer.util.LoadBalancerConstants; @@ -38,8 +39,11 @@ public class LoadBalancerStatisticsExecutor { private ThreadPoolExecutor executor; private LoadBalancerStatisticsExecutor() { + Integer ratio = Integer.getInteger(StratosConstants.THREAD_POOL_INITIAL_MIN_MAX_RATIO); + int divisor = ratio != null && ratio >= 1 ? ratio : StratosConstants.DEFAULT_THREAD_POOL_MIN_MAX_RATIO; executor = StratosThreadPool.getExecutorService(LoadBalancerConstants.LOAD_BALANCER_THREAD_POOL_ID, - ((int)Math.ceil(LoadBalancerConstants.LOAD_BALANCER_DEFAULT_THREAD_POOL_SIZE/3)), LoadBalancerConstants + ((int)Math.ceil(LoadBalancerConstants.LOAD_BALANCER_DEFAULT_THREAD_POOL_SIZE/divisor)), + LoadBalancerConstants .LOAD_BALANCER_DEFAULT_THREAD_POOL_SIZE); } http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/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 1b48603..dab0540 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 @@ -19,9 +19,11 @@ package org.apache.stratos.manager.internal; import com.hazelcast.core.HazelcastInstance; +import org.apache.commons.lang.IncompleteArgumentException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.common.Component; +import org.apache.stratos.common.constants.StratosConstants; import org.apache.stratos.common.services.ComponentStartUpSynchronizer; import org.apache.stratos.common.services.DistributedObjectProvider; import org.apache.stratos.common.threading.StratosThreadPool; @@ -36,6 +38,7 @@ import org.apache.stratos.manager.messaging.receiver.StratosManagerTopologyEvent import org.apache.stratos.manager.user.management.TenantUserRoleManager; import org.apache.stratos.manager.user.management.exception.UserManagerException; import org.apache.stratos.common.util.CartridgeConfigFileReader; +import org.apache.stratos.manager.utils.StratosManagerConstants; import org.apache.stratos.manager.utils.UserRoleCreator; import org.apache.stratos.messaging.broker.publish.EventPublisherPool; import org.apache.stratos.messaging.util.MessagingUtil; @@ -98,8 +101,14 @@ public class StratosManagerServiceComponent { log.debug("Activating StratosManagerServiceComponent..."); } try { - executor = StratosThreadPool.getExecutorService(THREAD_POOL_ID, ((int)Math.ceil(THREAD_POOL_SIZE/3)) - , THREAD_POOL_SIZE); + Integer smThreadPoolSize = Integer.getInteger(StratosManagerConstants.SM_THREAD_POOL_SIZE); + if (smThreadPoolSize == null || smThreadPoolSize <= 0) { + smThreadPoolSize = THREAD_POOL_SIZE; + } + Integer ratio = Integer.getInteger(StratosConstants.THREAD_POOL_INITIAL_MIN_MAX_RATIO); + int divisor = ratio != null && ratio >= 1 ? ratio : StratosConstants.DEFAULT_THREAD_POOL_MIN_MAX_RATIO; + executor = StratosThreadPool.getExecutorService(THREAD_POOL_ID, ((int)Math.ceil(smThreadPoolSize/divisor)) + , smThreadPoolSize); scheduler = StratosThreadPool .getScheduledExecutorService(SCHEDULER_THREAD_POOL_ID, SCHEDULER_THREAD_POOL_SIZE); http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/StratosManagerConstants.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/StratosManagerConstants.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/StratosManagerConstants.java index 171f689..0929506 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/StratosManagerConstants.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/utils/StratosManagerConstants.java @@ -24,9 +24,5 @@ package org.apache.stratos.manager.utils; */ public class StratosManagerConstants { - public static final String DEFAULT_CRON = "1 * * * * ? *"; - public static final String TENANT_SYNC_TASK_TYPE = "TENANT_SYNC_TASK_TYPE"; - public static final String TENANT_SYNC_TASK_NAME = "TENANT_SYNC_TASK"; - public static final String APPLICATION_SIGNUP_SYNC_TASK_TYPE = "APPLICATION_SIGNUP_SYNC_TASK_TYPE"; - public static final String APPLICATION_SIGNUP_SYNC_TASK_NAME = "APPLICATION_SIGNUP_SYNC_TASK"; + public static final String SM_THREAD_POOL_SIZE = "sm.thread.pool.size"; } http://git-wip-us.apache.org/repos/asf/stratos/blob/80882404/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/StratosEventReceiver.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/StratosEventReceiver.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/StratosEventReceiver.java index 0c17efb..34c0b28 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/StratosEventReceiver.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/StratosEventReceiver.java @@ -22,6 +22,7 @@ package org.apache.stratos.messaging.message.receiver; import java.util.concurrent.ThreadPoolExecutor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.common.constants.StratosConstants; import org.apache.stratos.common.threading.StratosThreadPool; import org.apache.stratos.messaging.listener.EventListener; @@ -63,7 +64,9 @@ public abstract class StratosEventReceiver { public StratosEventReceiver () { this.threadPoolId = STRATOS_EVENT_RECEIEVER_THREAD_POOL_ID; - this.executor = StratosThreadPool.getExecutorService(threadPoolId, (int)Math.ceil(threadPoolSize/3), + Integer ratio = Integer.getInteger(StratosConstants.THREAD_POOL_INITIAL_MIN_MAX_RATIO); + int divisor = ratio != null && ratio >= 1 ? ratio : StratosConstants.DEFAULT_THREAD_POOL_MIN_MAX_RATIO; + this.executor = StratosThreadPool.getExecutorService(threadPoolId, (int)Math.ceil(threadPoolSize/divisor), threadPoolSize); }
