From f84493bda8064244aa3a44464b79b1f5b3585005 Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Wed, 3 Feb 2016 14:56:35 -0500 Subject: [PATCH] gracefully shutting down the AmazonsS3 ExecutorService with a 30 second timeout before issuing shutdownNow --- src/main/scala/s3/s3.scala | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/scala/s3/s3.scala b/src/main/scala/s3/s3.scala index 7844316..cb3a78f 100644 --- a/src/main/scala/s3/s3.scala +++ b/src/main/scala/s3/s3.scala @@ -25,7 +25,7 @@ import scala.collection.JavaConverters._ import scala.concurrent.{ExecutionContext, Future, Promise} import scala.util.Try -import java.util.concurrent.{Executors, ExecutorService, ThreadFactory} +import java.util.concurrent.{TimeUnit, Executors, ExecutorService, ThreadFactory} import java.util.concurrent.atomic.AtomicLong import com.amazonaws.{AmazonWebServiceRequest, ClientConfiguration} @@ -183,13 +183,16 @@ class AmazonS3ScalaClient( def getExecutorsService(): ExecutorService = executorService /** - * Shutdown the executor service. + * Attempt to shutdown the executor service gracefully, and if it takes longer than 30 seconds issues a ShutdownNow command which interrupts the sleeping com.amazonaws.http.IdleConnectionReaper. * * @see [[http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/AmazonWebServiceClient.html#shutdown() AmazonWebServiceClient.shutdown()]] */ def shutdown(): Unit = { client.shutdown() - executorService.shutdownNow() + executorService.shutdown() + if (!executorService.awaitTermination(30, TimeUnit.SECONDS)) { + executorService.shutdownNow() + } () }