[ 
https://issues.apache.org/jira/browse/SLING-5416?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15089252#comment-15089252
 ] 

Robert Munteanu commented on SLING-5416:
----------------------------------------

I guess the danger here is that the shutdown blocks indefinitely. Maybe 
shipping a default configuration with

- shutdown graceful: true
- shutdown wait time: 5000

would be a better compromise?

> Thread Pool should stop "gracefully"
> ------------------------------------
>
>                 Key: SLING-5416
>                 URL: https://issues.apache.org/jira/browse/SLING-5416
>             Project: Sling
>          Issue Type: Improvement
>          Components: Commons
>            Reporter: Thomas Mueller
>
> By default, the Sling thread pool manager calls "Thread.interrupt" to close 
> the thread pool. This is because it is configured to be "not graceful" by 
> default:
> {noformat}
> ./bundles/commons/threads/src/main/java/org/apache/sling/commons/threads/ModifiableThreadPoolConfig.java
> ...
>  * The default values for this configuration are:
> ...
>  * - shutdown graceful: false
>  * - shutdown wait time: -1
> ...
>  
> ./bundles/commons/threads/src/main/java/org/apache/sling/commons/threads/impl/DefaultThreadPool.java
>     public void shutdown() {
>         this.logger.info("Shutting down thread pool [{}] ...", name);
>         if ( this.executor != null ) {
>             if (this.configuration.isShutdownGraceful()) {
>                 this.executor.shutdown();
>             } else {
>                 this.executor.shutdownNow();
>             }
>             try {
>                 if (this.configuration.getShutdownWaitTimeMs() > 0) {
>                     if 
> (!this.executor.awaitTermination(this.configuration.getShutdownWaitTimeMs(), 
> TimeUnit.MILLISECONDS)) {
>                         logger.warn("Running commands have not terminated 
> within "
>                             + this.configuration.getShutdownWaitTimeMs()
>                             + "ms. Will shut them down by interruption");
>                         this.executor.shutdownNow(); // TODO: shouldn't this 
> be outside the if statement?!
>                     }
>                 }
>             } catch (final InterruptedException ie) {
>                 this.logger.error("Cannot shutdown thread pool [" + this.name 
> + "]", ie);
>             }
> {noformat}
> I think Sling should change the default to be graceful (not call 
> Thread.interrupt()). Thread.interrupt can can result in many problems, 
> because it closes channels, possibly TCP/IP connections, and so on. When 
> using external libraries (JDBC, MongoDB, Apache Lucene,...) it is hard to 
> ensure that Thread.interrupt does not cause problems.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to