From 2c570fd8893e9cd638cfac177c5d757e115f54fe Mon Sep 17 00:00:00 2001 From: Allen Pradeep Xavier Date: Mon, 6 Jan 2020 12:17:30 -0800 Subject: [PATCH] fix: add keepalives to GRPC channel This patch adds keepalives to the GRPC channel every 2 minutes. By default, there are no keepalives to the GRPC channel. While running dataflow import jobs, issues have been observed with the spanner commit calls that run more than 10 minutes. Adding keepalives to the GRPC channel solves these issues. --- .../com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java index 49d6d9077d3..f30533eb9df 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java @@ -165,6 +165,7 @@ private synchronized void shutdown() { "com.google.cloud.spanner.watchdogPeriodSeconds"; private static final int DEFAULT_TIMEOUT_SECONDS = 30 * 60; private static final int DEFAULT_PERIOD_SECONDS = 10; + private static final int GRPC_KEEPALIVE_SECONDS = 2 * 60; private final ManagedInstantiatingExecutorProvider executorProvider; private boolean rpcIsClosed; @@ -237,6 +238,10 @@ public GapicSpannerRpc(final SpannerOptions options) { .setPoolSize(options.getNumChannels()) .setExecutorProvider(executorProvider) + // Set a keepalive time of 120 seconds to help long running + // commit GRPC calls succeed + .setKeepAliveTime(Duration.ofSeconds(GRPC_KEEPALIVE_SECONDS)) + // Then check if SpannerOptions provides an InterceptorProvider. Create a default // SpannerInterceptorProvider if none is provided .setInterceptorProvider(