This is an automated email from the ASF dual-hosted git repository.

stevel pushed a commit to branch branch-3.2
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/branch-3.2 by this push:
     new 397b63a  HADOOP-16181. HadoopExecutors shutdown Cleanup.
397b63a is described below

commit 397b63ad0b160b3ea29aa7392202ff42cce46b35
Author: David Mollitor <david.molli...@cloudera.com>
AuthorDate: Fri Mar 22 10:30:21 2019 +0000

    HADOOP-16181. HadoopExecutors shutdown Cleanup.
    
    Author:    David Mollitor <david.molli...@cloudera.com>
    (cherry picked from commit d18d0859ebfc46a18fd9140b42fb95f1da96380e)
---
 .../hadoop/util/concurrent/HadoopExecutors.java    | 58 ++++++++++++++--------
 1 file changed, 38 insertions(+), 20 deletions(-)

diff --git 
a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/concurrent/HadoopExecutors.java
 
b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/concurrent/HadoopExecutors.java
index 7a04c30..7c09d93 100644
--- 
a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/concurrent/HadoopExecutors.java
+++ 
b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/concurrent/HadoopExecutors.java
@@ -92,33 +92,51 @@ public final class HadoopExecutors {
   }
 
   /**
-   * Helper routine to shutdown a executorService.
+   * Helper routine to shutdown a {@link ExecutorService}. Will wait up to a
+   * certain timeout for the ExecutorService to gracefully shutdown. If the
+   * ExecutorService did not shutdown and there are still tasks unfinished 
after
+   * the timeout period, the ExecutorService will be notified to forcibly shut
+   * down. Another timeout period will be waited before giving up. So, at most,
+   * a shutdown will be allowed to wait up to twice the timeout value before
+   * giving up.
    *
-   * @param executorService - executorService
-   * @param logger          - Logger
-   * @param timeout         - Timeout
-   * @param unit            - TimeUnits, generally seconds.
+   * @param executorService ExecutorService to shutdown
+   * @param logger Logger
+   * @param timeout the maximum time to wait
+   * @param unit the time unit of the timeout argument
    */
   public static void shutdown(ExecutorService executorService, Logger logger,
       long timeout, TimeUnit unit) {
+
+    if (executorService == null) {
+      return;
+    }
+
     try {
-      if (executorService != null) {
-        executorService.shutdown();
-        try {
-          if (!executorService.awaitTermination(timeout, unit)) {
-            executorService.shutdownNow();
-          }
-
-          if (!executorService.awaitTermination(timeout, unit)) {
-            logger.error("Unable to shutdown properly.");
-          }
-        } catch (InterruptedException e) {
-          logger.error("Error attempting to shutdown.", e);
-          executorService.shutdownNow();
-        }
+      executorService.shutdown();
+
+      logger.info(
+          "Gracefully shutting down executor service. Waiting max {} {}",
+          timeout, unit);
+      if (!executorService.awaitTermination(timeout, unit)) {
+        logger.info(
+            "Executor service has not shutdown yet. Forcing. "
+                + "Will wait up to an additional {} {} for shutdown",
+            timeout, unit);
+        executorService.shutdownNow();
+      }
+      if (executorService.awaitTermination(timeout, unit)) {
+        logger.info("Succesfully shutdown executor service");
+      } else {
+        logger.error("Unable to shutdown executor service after timeout {} {}",
+            (2 * timeout), unit);
       }
+    } catch (InterruptedException e) {
+      logger.error("Interrupted while attempting to shutdown", e);
+      executorService.shutdownNow();
     } catch (Exception e) {
-      logger.error("Error during shutdown: ", e);
+      logger.warn("Exception closing executor service {}", e.getMessage());
+      logger.debug("Exception closing executor service", e);
       throw e;
     }
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-commits-h...@hadoop.apache.org

Reply via email to