[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