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

Reply via email to