[infinispan-commits] Infinispan SVN: r1312 - in trunk/core/src/main/java/org/infinispan: factories and 1 other directory.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Fri Dec 18 07:21:33 EST 2009


Author: manik.surtani at jboss.com
Date: 2009-12-18 07:21:32 -0500 (Fri, 18 Dec 2009)
New Revision: 1312

Modified:
   trunk/core/src/main/java/org/infinispan/executors/DefaultExecutorFactory.java
   trunk/core/src/main/java/org/infinispan/executors/DefaultScheduledExecutorFactory.java
   trunk/core/src/main/java/org/infinispan/factories/KnownComponentNames.java
   trunk/core/src/main/java/org/infinispan/factories/NamedExecutorsFactory.java
Log:
Better defaults for executors

Modified: trunk/core/src/main/java/org/infinispan/executors/DefaultExecutorFactory.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/executors/DefaultExecutorFactory.java	2009-12-18 11:37:14 UTC (rev 1311)
+++ trunk/core/src/main/java/org/infinispan/executors/DefaultExecutorFactory.java	2009-12-18 12:21:32 UTC (rev 1312)
@@ -23,11 +23,13 @@
       TypedProperties tp = TypedProperties.toTypedProperties(p);
       int maxThreads = tp.getIntProperty("maxThreads", 1);
       int queueSize = tp.getIntProperty("queueSize", 100000);
+      final int threadPrio = tp.getIntProperty("threadPriority", Thread.MIN_PRIORITY);
       final String threadNamePrefix = tp.getProperty("threadNamePrefix", tp.getProperty("componentName", "Thread"));
       ThreadFactory tf = new ThreadFactory() {
          public Thread newThread(Runnable r) {
             Thread th = new Thread(r, threadNamePrefix + "-" + counter.getAndIncrement());
             th.setDaemon(true);
+            th.setPriority(threadPrio);
             return th;
          }
       };

Modified: trunk/core/src/main/java/org/infinispan/executors/DefaultScheduledExecutorFactory.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/executors/DefaultScheduledExecutorFactory.java	2009-12-18 11:37:14 UTC (rev 1311)
+++ trunk/core/src/main/java/org/infinispan/executors/DefaultScheduledExecutorFactory.java	2009-12-18 12:21:32 UTC (rev 1312)
@@ -1,5 +1,7 @@
 package org.infinispan.executors;
 
+import org.infinispan.util.TypedProperties;
+
 import java.util.Properties;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
@@ -16,11 +18,15 @@
    final static AtomicInteger counter = new AtomicInteger(0);
 
    public ScheduledExecutorService getScheduledExecutor(Properties p) {
+      TypedProperties tp = new TypedProperties(p);
       final String threadNamePrefix = p.getProperty("threadNamePrefix", p.getProperty("componentName", "Thread"));
+      final int threadPrio = tp.getIntProperty("threadPriority", Thread.MIN_PRIORITY);
+
       return Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
          public Thread newThread(Runnable r) {
             Thread th = new Thread(r, "Scheduled-" + threadNamePrefix + "-" + counter.getAndIncrement());
             th.setDaemon(true);
+            th.setPriority(threadPrio);
             return th;
          }
       });

Modified: trunk/core/src/main/java/org/infinispan/factories/KnownComponentNames.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/factories/KnownComponentNames.java	2009-12-18 11:37:14 UTC (rev 1311)
+++ trunk/core/src/main/java/org/infinispan/factories/KnownComponentNames.java	2009-12-18 12:21:32 UTC (rev 1312)
@@ -1,5 +1,8 @@
 package org.infinispan.factories;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * Holder for known named component names.  To be used with {@link org.infinispan.factories.annotations.ComponentName}
  * annotation.
@@ -12,4 +15,25 @@
    public static final String ASYNC_NOTIFICATION_EXECUTOR = "org.infinispan.executors.notification";
    public static final String EVICTION_SCHEDULED_EXECUTOR = "org.infinispan.executors.eviction";
    public static final String ASYNC_REPLICATION_QUEUE_EXECUTOR = "org.infinispan.executors.replicationQueue";
+
+   private static final Map<String, Integer> DEFAULT_THREADCOUNTS = new HashMap<String, Integer>(2);
+   private static final Map<String, Integer> DEFAULT_THREADPRIO = new HashMap<String, Integer>(4);
+
+   static {
+      DEFAULT_THREADCOUNTS.put(ASYNC_NOTIFICATION_EXECUTOR, 1);
+      DEFAULT_THREADCOUNTS.put(ASYNC_TRANSPORT_EXECUTOR, 25);
+
+      DEFAULT_THREADPRIO.put(ASYNC_NOTIFICATION_EXECUTOR, Thread.MIN_PRIORITY);
+      DEFAULT_THREADPRIO.put(ASYNC_TRANSPORT_EXECUTOR, Thread.NORM_PRIORITY);
+      DEFAULT_THREADPRIO.put(EVICTION_SCHEDULED_EXECUTOR, Thread.MIN_PRIORITY);
+      DEFAULT_THREADPRIO.put(ASYNC_REPLICATION_QUEUE_EXECUTOR, Thread.NORM_PRIORITY);
+   }
+
+   public static int getDefaultThreads(String componentName) {
+      return DEFAULT_THREADCOUNTS.get(componentName);
+   }
+
+   public static int getDefaultThreadPrio(String componentName) {
+      return DEFAULT_THREADPRIO.get(componentName);
+   }
 }

Modified: trunk/core/src/main/java/org/infinispan/factories/NamedExecutorsFactory.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/factories/NamedExecutorsFactory.java	2009-12-18 11:37:14 UTC (rev 1311)
+++ trunk/core/src/main/java/org/infinispan/factories/NamedExecutorsFactory.java	2009-12-18 12:21:32 UTC (rev 1312)
@@ -11,6 +11,8 @@
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ScheduledExecutorService;
 
+import static org.infinispan.factories.KnownComponentNames.*;
+
 /**
  * A factory that specifically knows how to create named executors.
  *
@@ -23,16 +25,16 @@
    @SuppressWarnings("unchecked")
    public <T> T construct(Class<T> componentType, String componentName) {
       try {
-         if (componentName.equals(KnownComponentNames.ASYNC_NOTIFICATION_EXECUTOR)) {
+         if (componentName.equals(ASYNC_NOTIFICATION_EXECUTOR)) {
             return (T) buildAndConfigureExecutorService(globalConfiguration.getAsyncListenerExecutorFactoryClass(),
                                                         globalConfiguration.getAsyncListenerExecutorProperties(), componentName);
-         } else if (componentName.equals(KnownComponentNames.ASYNC_TRANSPORT_EXECUTOR)) {
+         } else if (componentName.equals(ASYNC_TRANSPORT_EXECUTOR)) {
             return (T) buildAndConfigureExecutorService(globalConfiguration.getAsyncTransportExecutorFactoryClass(),
                                                         globalConfiguration.getAsyncTransportExecutorProperties(), componentName);
-         } else if (componentName.equals(KnownComponentNames.EVICTION_SCHEDULED_EXECUTOR)) {
+         } else if (componentName.equals(EVICTION_SCHEDULED_EXECUTOR)) {
             return (T) buildAndConfigureScheduledExecutorService(globalConfiguration.getEvictionScheduledExecutorFactoryClass(),
                                                                  globalConfiguration.getEvictionScheduledExecutorProperties(), componentName);
-         } else if (componentName.equals(KnownComponentNames.ASYNC_REPLICATION_QUEUE_EXECUTOR)) {
+         } else if (componentName.equals(ASYNC_REPLICATION_QUEUE_EXECUTOR)) {
             return (T) buildAndConfigureScheduledExecutorService(globalConfiguration.getReplicationQueueScheduledExecutorFactoryClass(),
                                                                  globalConfiguration.getReplicationQueueScheduledExecutorProperties(), componentName);
          } else {
@@ -45,18 +47,31 @@
       }
    }
 
-   private ExecutorService buildAndConfigureExecutorService(String factoryName, Properties props, String componentName) throws Exception {
+   private ExecutorService buildAndConfigureExecutorService(String factoryName, Properties p, String componentName) throws Exception {
+      Properties props = new Properties(p); // defensive copy
       ExecutorFactory f = (ExecutorFactory) Util.getInstance(factoryName);
       setComponentName(componentName, props);
+      setDefaultThreads(KnownComponentNames.getDefaultThreads(componentName), props);
+      setDefaultThreadPrio(KnownComponentNames.getDefaultThreadPrio(componentName), props);
       return f.getExecutor(props);
    }
 
-   private ScheduledExecutorService buildAndConfigureScheduledExecutorService(String factoryName, Properties props, String componentName) throws Exception {
+   private ScheduledExecutorService buildAndConfigureScheduledExecutorService(String factoryName, Properties p, String componentName) throws Exception {
+      Properties props = new Properties(p); // defensive copy
       ScheduledExecutorFactory f = (ScheduledExecutorFactory) Util.getInstance(factoryName);
       setComponentName(componentName, props);
+      setDefaultThreadPrio(KnownComponentNames.getDefaultThreadPrio(componentName), props);
       return f.getScheduledExecutor(props);
    }
 
+   private void setDefaultThreadPrio(int prio, Properties props) {
+      if (!props.containsKey("threadPriority")) props.setProperty("threadPriority", "" + prio);
+   }
+
+   private void setDefaultThreads(int numThreads, Properties props) {
+      if (!props.containsKey("maxThreads")) props.setProperty("maxThreads", "" + numThreads);
+   }
+
    private void setComponentName(String cn, Properties p) {
       if (cn != null) p.setProperty("componentName", format(cn));
    }



More information about the infinispan-commits mailing list