LOG4J2-1748 revert some changes

Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/e21a07e3
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/e21a07e3
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/e21a07e3

Branch: refs/heads/LOG4J2-1748and1780-remove-ExecutorService-from-LoggerContext
Commit: e21a07e353a748e3a7dbefce20bf414aa425e1c7
Parents: 80879c7
Author: Mikael StÃ¥ldal <[email protected]>
Authored: Sun Jan 15 16:13:41 2017 +0100
Committer: Mikael StÃ¥ldal <[email protected]>
Committed: Sun Jan 15 16:13:41 2017 +0100

----------------------------------------------------------------------
 .../appender/rolling/RollingFileManager.java    |  9 ++++---
 .../core/config/ConfigurationScheduler.java     | 25 +-------------------
 .../log4j/core/util/Log4jThreadFactory.java     | 15 ++++++++++++
 .../nosql/appender/cassandra/CassandraRule.java |  2 +-
 4 files changed, 23 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e21a07e3/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
index e9c7790..22ce948 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
@@ -39,6 +39,7 @@ import 
org.apache.logging.log4j.core.appender.rolling.action.AbstractAction;
 import org.apache.logging.log4j.core.appender.rolling.action.Action;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.util.Constants;
+import org.apache.logging.log4j.core.util.Log4jThreadFactory;
 
 /**
  * The Rolling File Manager.
@@ -52,6 +53,7 @@ public class RollingFileManager extends FileManager {
     private long initialTime;
     private final PatternProcessor patternProcessor;
     private final Semaphore semaphore = new Semaphore(1);
+    private final Log4jThreadFactory threadFactory = 
Log4jThreadFactory.createThreadFactory("RollingFileManager");
     private volatile TriggeringPolicy triggeringPolicy;
     private volatile RolloverStrategy rolloverStrategy;
     private volatile boolean renameEmptyFiles = false;
@@ -278,7 +280,7 @@ public class RollingFileManager extends FileManager {
         }
 
         boolean success = false;
-        Future<?> future = null;
+        Thread thread = null;
 
         try {
             final RolloverDescription descriptor = strategy.rollover(this);
@@ -296,13 +298,14 @@ public class RollingFileManager extends FileManager {
 
                 if (success && descriptor.getAsynchronous() != null) {
                     LOGGER.debug("RollingFileManager executing async {}", 
descriptor.getAsynchronous());
-                    future = 
LoggerContext.getContext(false).getConfiguration().getScheduler().submit(new 
AsyncAction(descriptor.getAsynchronous(), this));
+                    thread = threadFactory.newThread(new 
AsyncAction(descriptor.getAsynchronous(), this));
+                    thread.start();
                 }
                 return true;
             }
             return false;
         } finally {
-            if (future == null || future.isDone() || future.isCancelled()) {
+            if (thread == null || thread.isAlive()) {
                 semaphore.release();
             }
         }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e21a07e3/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationScheduler.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationScheduler.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationScheduler.java
index a5cfddf..03723c8 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationScheduler.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationScheduler.java
@@ -19,7 +19,6 @@ package org.apache.logging.log4j.core.config;
 import java.util.Date;
 import java.util.Queue;
 import java.util.concurrent.Callable;
-import java.util.concurrent.Future;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
@@ -63,7 +62,7 @@ public class ConfigurationScheduler extends AbstractLifeCycle 
{
             } catch (final InterruptedException ie) {
                 executorService.shutdownNow();
                 try {
-                    executorService.awaitTermination(timeout, timeUnit);
+                    executorService.awaitTermination(timeoutToUse, 
timeUnitToUse);
                 } catch (final InterruptedException inner) {
                     LOGGER.warn("ConfigurationScheduler stopped but some 
scheduled services may not have completed.");
                 }
@@ -100,28 +99,6 @@ public class ConfigurationScheduler extends 
AbstractLifeCycle {
     }
 
     /**
-     * Creates and executes a Future that becomes enabled immediately.
-     * @param <V> The result type returned by this Future
-     * @param callable the function to execute.
-     * @return a Future that can be used to extract result or cancel.
-     *
-     */
-    public <V> Future<V> submit(final Callable<V> callable) {
-        return getExecutorService().submit(callable);
-    }
-
-    /**
-     * Creates and executes a Future that becomes enabled immediately.
-     * @param runnable the function to execute.
-     * @return a Future representing pending completion of the task and whose 
get() method will return null
-     * upon completion.
-     */
-    public Future<?> submit(final Runnable runnable) {
-        return getExecutorService().submit(runnable);
-    }
-
-
-    /**
      * Creates and executes a ScheduledFuture that becomes enabled after the 
given delay.
      * @param <V> The result type returned by this Future
      * @param callable the function to execute.

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e21a07e3/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Log4jThreadFactory.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Log4jThreadFactory.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Log4jThreadFactory.java
index 2318feb..8b636f6 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Log4jThreadFactory.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Log4jThreadFactory.java
@@ -40,6 +40,21 @@ public class Log4jThreadFactory implements ThreadFactory {
         return new Log4jThreadFactory(threadFactoryName, true, 
Thread.NORM_PRIORITY);
     }
 
+    /**
+     * Creates a new thread factory.
+     *
+     * This is mainly used for tests. Production code should be very careful 
with creating
+     * non-daemon threads since those will block application shutdown
+     * (see https://issues.apache.org/jira/browse/LOG4J2-1748).
+     *
+     * @param threadFactoryName
+     *            The thread factory name.
+     * @return a new daemon thread factory.
+     */
+    public static Log4jThreadFactory createThreadFactory(final String 
threadFactoryName) {
+        return new Log4jThreadFactory(threadFactoryName, false, 
Thread.NORM_PRIORITY);
+    }
+
     private static final AtomicInteger FACTORY_NUMBER = new AtomicInteger(1);
     private static final AtomicInteger THREAD_NUMBER = new AtomicInteger(1);
     private final boolean daemon;

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e21a07e3/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/cassandra/CassandraRule.java
----------------------------------------------------------------------
diff --git 
a/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/cassandra/CassandraRule.java
 
b/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/cassandra/CassandraRule.java
index 900f794..bec97ea 100644
--- 
a/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/cassandra/CassandraRule.java
+++ 
b/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/cassandra/CassandraRule.java
@@ -37,7 +37,7 @@ import org.junit.rules.ExternalResource;
  */
 public class CassandraRule extends ExternalResource {
 
-    private static final ThreadFactory THREAD_FACTORY = new 
Log4jThreadFactory("Cassandra", false, Thread.NORM_PRIORITY);
+    private static final ThreadFactory THREAD_FACTORY = 
Log4jThreadFactory.createThreadFactory("Cassandra");
 
     private final CountDownLatch latch = new CountDownLatch(1);
     private final Cancellable embeddedCassandra = new EmbeddedCassandra(latch);

Reply via email to