You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by ko...@apache.org on 2015/11/15 07:27:16 UTC
svn commit: r1714407 - in /roller/trunk/app/src/main/java/org/apache/roller:
util/RollerConstants.java weblogger/business/HitCountQueue.java
weblogger/business/runnable/TaskScheduler.java
weblogger/business/runnable/ThreadManagerImpl.java
Author: kohei
Date: Sun Nov 15 06:27:15 2015
New Revision: 1714407
URL: http://svn.apache.org/viewvc?rev=1714407&view=rev
Log:
Fix shutdown procedure of ThreadManagerImpl and TaskScheduler (it won't stop if interrupt() has been invoked during the thread is running)
Modified:
roller/trunk/app/src/main/java/org/apache/roller/util/RollerConstants.java
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/HitCountQueue.java
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/runnable/TaskScheduler.java
roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.java
Modified: roller/trunk/app/src/main/java/org/apache/roller/util/RollerConstants.java
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/util/RollerConstants.java?rev=1714407&r1=1714406&r2=1714407&view=diff
==============================================================================
--- roller/trunk/app/src/main/java/org/apache/roller/util/RollerConstants.java (original)
+++ roller/trunk/app/src/main/java/org/apache/roller/util/RollerConstants.java Sun Nov 15 06:27:15 2015
@@ -36,6 +36,9 @@ public final class RollerConstants {
public static final int TEXTWIDTH_255 = 255;
+ public static final int GRACEFUL_SHUTDOWN_WAIT_IN_SECONDS = 20;
+ public static final int GRACEFUL_SHUTDOWN_WAIT_IN_MILLISECONDS = GRACEFUL_SHUTDOWN_WAIT_IN_SECONDS * SEC_IN_MS;
+
private RollerConstants() {
// never instantiable
throw new AssertionError();
Modified: roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/HitCountQueue.java
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/HitCountQueue.java?rev=1714407&r1=1714406&r2=1714407&view=diff
==============================================================================
--- roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/HitCountQueue.java (original)
+++ roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/HitCountQueue.java Sun Nov 15 06:27:15 2015
@@ -115,10 +115,9 @@ public final class HitCountQueue {
log.info("stopping worker "+this.worker.getName());
worker.interrupt();
try {
- // wait 10 seconds for graceful shutdown
- worker.join(10 * 1000);
+ worker.join(RollerConstants.GRACEFUL_SHUTDOWN_WAIT_IN_MILLISECONDS);
} catch (InterruptedException e) {
- log.debug("interrupted", e);
+ log.debug(e.getMessage(), e);
}
}
Modified: roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/runnable/TaskScheduler.java
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/runnable/TaskScheduler.java?rev=1714407&r1=1714406&r2=1714407&view=diff
==============================================================================
--- roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/runnable/TaskScheduler.java (original)
+++ roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/runnable/TaskScheduler.java Sun Nov 15 06:27:15 2015
@@ -23,6 +23,8 @@ import java.util.Date;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.util.DateUtil;
@@ -30,6 +32,8 @@ import org.apache.roller.util.RollerCons
import org.apache.roller.weblogger.business.WebloggerFactory;
import org.apache.roller.weblogger.pojos.TaskLock;
+import static org.apache.roller.util.RollerConstants.GRACEFUL_SHUTDOWN_WAIT_IN_SECONDS;
+
/**
* Manages scheduling of periodic tasks.
@@ -65,7 +69,7 @@ public class TaskScheduler implements Ru
boolean firstRun = true;
// run forever, or until we get interrupted
- while(true) {
+ while (!Thread.currentThread().isInterrupted()) {
try {
// get current time
Date now = new Date();
@@ -111,13 +115,19 @@ public class TaskScheduler implements Ru
}
} catch (InterruptedException ex) {
- // thread interrupted
log.debug("Thread interrupted, scheduler is stopping");
- pool.shutdownNow();
break;
}
}
-
+
+ // thread interrupted
+ pool.shutdownNow();
+ try {
+ pool.awaitTermination(GRACEFUL_SHUTDOWN_WAIT_IN_SECONDS, TimeUnit.SECONDS);
+ log.debug("TaskScheduler executor was terminated successfully");
+ } catch (InterruptedException e) {
+ log.debug(e.getMessage(), e);
+ }
}
Modified: roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.java
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.java?rev=1714407&r1=1714406&r2=1714407&view=diff
==============================================================================
--- roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.java (original)
+++ roller/trunk/app/src/main/java/org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.java Sun Nov 15 06:27:15 2015
@@ -24,6 +24,8 @@ import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -33,6 +35,8 @@ import org.apache.roller.weblogger.busin
import org.apache.roller.weblogger.config.WebloggerConfig;
import org.apache.roller.weblogger.pojos.TaskLock;
+import static org.apache.roller.util.RollerConstants.GRACEFUL_SHUTDOWN_WAIT_IN_MILLISECONDS;
+import static org.apache.roller.util.RollerConstants.GRACEFUL_SHUTDOWN_WAIT_IN_SECONDS;
/**
* Manage Roller's thread use.
@@ -142,11 +146,22 @@ public abstract class ThreadManagerImpl
// trigger an immediate shutdown of any backgrounded tasks
serviceScheduler.shutdownNow();
-
+ try {
+ serviceScheduler.awaitTermination(GRACEFUL_SHUTDOWN_WAIT_IN_SECONDS, TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
+ LOG.debug(e.getMessage(), e);
+ }
+
// only stop if we are already running
if(schedulerThread != null) {
LOG.debug("Stopping scheduler");
schedulerThread.interrupt();
+ try {
+ schedulerThread.join(GRACEFUL_SHUTDOWN_WAIT_IN_MILLISECONDS);
+ LOG.debug("Scheduler was stopped successfully");
+ } catch (InterruptedException e) {
+ LOG.debug(e.getMessage(), e);
+ }
}
}