Author: jbellis
Date: Fri Jan 14 20:46:35 2011
New Revision: 1059160
URL: http://svn.apache.org/viewvc?rev=1059160&view=rev
Log:
call Thread.getDefaultUncaughtExceptionHandler instead of logger.error in on
scheduled task failure
patch by jbellis
Modified:
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/concurrent/RetryingScheduledThreadPoolExecutor.java
Modified:
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/concurrent/RetryingScheduledThreadPoolExecutor.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/concurrent/RetryingScheduledThreadPoolExecutor.java?rev=1059160&r1=1059159&r2=1059160&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/concurrent/RetryingScheduledThreadPoolExecutor.java
(original)
+++
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/concurrent/RetryingScheduledThreadPoolExecutor.java
Fri Jan 14 20:46:35 2011
@@ -27,8 +27,6 @@ import org.apache.log4j.Logger;
public class RetryingScheduledThreadPoolExecutor extends
ScheduledThreadPoolExecutor
{
- protected static Logger logger =
Logger.getLogger(RetryingScheduledThreadPoolExecutor.class);
-
public RetryingScheduledThreadPoolExecutor(String threadPoolName, int
priority)
{
this(1, threadPoolName, priority);
@@ -50,6 +48,11 @@ public class RetryingScheduledThreadPool
return new LoggingScheduledFuture<V>(task);
}
+ /**
+ * Wraps RunnableScheduledFuture.run to log an error on exception rather
than kill the executor thread.
+ * All the other methods just wrap the RSF counterpart.
+ * @param <V>
+ */
private static class LoggingScheduledFuture<V> implements
RunnableScheduledFuture<V>
{
private final RunnableScheduledFuture<V> task;
@@ -82,7 +85,8 @@ public class RetryingScheduledThreadPool
}
catch (Exception e)
{
- logger.error("error running scheduled task", e);
+ if (Thread.getDefaultUncaughtExceptionHandler() != null)
+
Thread.getDefaultUncaughtExceptionHandler().uncaughtException(Thread.currentThread(),
e.getCause());
}
}