Liran Zelkha has uploaded a new change for review. Change subject: core : Add queuing capabilities to ThreadPoolUtil ......................................................................
core : Add queuing capabilities to ThreadPoolUtil Since some customers get out of threads execptions, this patch will add a queuing capability to our default thread pool. Change-Id: Iab7054c77c9ec8795de85df0fd45dde06c18ab1e Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1007393 Signed-off-by: [email protected] <[email protected]> --- M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java M backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/threadpool/ThreadPoolUtil.java M packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql 3 files changed, 25 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/44/19744/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java index 8fdcc4b..e500e3c 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java @@ -844,6 +844,10 @@ @DefaultValueAttribute("500") DefaultMaxThreadPoolSize(324), + @TypeConverterAttribute(Integer.class) + @DefaultValueAttribute("100") + DefaultMaxThreadWaitQueueSize(325), + @Reloadable @TypeConverterAttribute(Integer.class) @DefaultValueAttribute("1") diff --git a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/threadpool/ThreadPoolUtil.java b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/threadpool/ThreadPoolUtil.java index 42bf7d9..e3602f6 100644 --- a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/threadpool/ThreadPoolUtil.java +++ b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/threadpool/ThreadPoolUtil.java @@ -3,12 +3,14 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.SynchronousQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -26,6 +28,8 @@ private static class InternalThreadExecutor extends ThreadPoolExecutor { + RejectedExecutionHandler rejectedExecutionHandler = new ThreadPoolExecutor.CallerRunsPolicy(); + /** * The pool which will be created with corePoolSize equal to ConfigValues.DefaultMinThreadPoolSize * maximumPoolSize equal to DefaultMaxThreadPoolSize @@ -35,7 +39,16 @@ Config.<Integer> GetValue(ConfigValues.DefaultMaxThreadPoolSize), 60L, TimeUnit.SECONDS, - new SynchronousQueue<Runnable>()); + new ArrayBlockingQueue<Runnable>(Config.<Integer> GetValue(ConfigValues.DefaultMaxThreadWaitQueueSize))); + } + + @Override + protected void beforeExecute(Thread t, Runnable r) { + super.beforeExecute(t, r); + t.setName("org.ovirt.thread." + t.getName()); + if (log.isDebugEnabled()) { + log.debug("About to run task " + r.getClass().getName() + " from ", new Exception()); + } } @Override @@ -43,6 +56,11 @@ super.afterExecute(r, t); ThreadLocalParamsContainer.clean(); } + + @Override + public RejectedExecutionHandler getRejectedExecutionHandler() { + return rejectedExecutionHandler; + } } private static class InternalWrapperRunnable implements Runnable { diff --git a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql index a02d727..b69311d 100644 --- a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql +++ b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql @@ -80,6 +80,8 @@ select fn_db_add_config_value('DebugTimerLogging','true','general'); select fn_db_add_config_value('DefaultMaxThreadPoolSize','500','general'); select fn_db_add_config_value('DefaultMinThreadPoolSize','50','general'); +select fn_db_add_config_value('DefaultMaxThreadWaitQueueSize','100','general'); + select fn_db_add_config_value('DefaultWindowsTimeZone','GMT Standard Time','general'); select fn_db_add_config_value('DefaultGeneralTimeZone','Etc/GMT','general'); --Handling Default Workgroup -- To view, visit http://gerrit.ovirt.org/19744 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iab7054c77c9ec8795de85df0fd45dde06c18ab1e Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liran Zelkha <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
