From 3d4481e5c54a6c291dd578f8520c83dd845c32b8 Mon Sep 17 00:00:00 2001 From: Olav Loite Date: Fri, 17 May 2019 10:38:24 +0200 Subject: [PATCH] default executor used non-daemon threads The default executor for GrpcTransportOptions created non-daemon threads possibly keeping applications alive after the main method has finished. This is the cause of #2315. --- .../java/com/google/cloud/grpc/GrpcTransportOptions.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/google-cloud-clients/google-cloud-core-grpc/src/main/java/com/google/cloud/grpc/GrpcTransportOptions.java b/google-cloud-clients/google-cloud-core-grpc/src/main/java/com/google/cloud/grpc/GrpcTransportOptions.java index b003607d9775..841cc8218bc9 100644 --- a/google-cloud-clients/google-cloud-core-grpc/src/main/java/com/google/cloud/grpc/GrpcTransportOptions.java +++ b/google-cloud-clients/google-cloud-core-grpc/src/main/java/com/google/cloud/grpc/GrpcTransportOptions.java @@ -31,6 +31,7 @@ import com.google.cloud.NoCredentials; import com.google.cloud.ServiceOptions; import com.google.cloud.TransportOptions; +import com.google.common.util.concurrent.ThreadFactoryBuilder; import io.grpc.internal.SharedResourceHolder; import io.grpc.internal.SharedResourceHolder.Resource; import java.io.IOException; @@ -54,7 +55,13 @@ public class GrpcTransportOptions implements TransportOptions { new Resource() { @Override public ScheduledExecutorService create() { - ScheduledThreadPoolExecutor service = new ScheduledThreadPoolExecutor(8); + ScheduledThreadPoolExecutor service = + new ScheduledThreadPoolExecutor( + 8, + new ThreadFactoryBuilder() + .setDaemon(true) + .setNameFormat("grpc-transport-%d") + .build()); service.setKeepAliveTime(5, TimeUnit.SECONDS); service.allowCoreThreadTimeOut(true); service.setRemoveOnCancelPolicy(true);