From 972ab4234f8a7a928bc5650a904a15247c3b6468 Mon Sep 17 00:00:00 2001 From: Vindhya Ningegowda Date: Tue, 21 Mar 2023 09:09:11 -0700 Subject: [PATCH 1/3] added sleep of 60 secs in observability.close(); to allow metrics and traces to flush --- .../grpc/gcp/observability/GcpObservability.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/gcp-observability/src/main/java/io/grpc/gcp/observability/GcpObservability.java b/gcp-observability/src/main/java/io/grpc/gcp/observability/GcpObservability.java index 9470de77050..1a226afef89 100644 --- a/gcp-observability/src/main/java/io/grpc/gcp/observability/GcpObservability.java +++ b/gcp-observability/src/main/java/io/grpc/gcp/observability/GcpObservability.java @@ -53,11 +53,16 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Map; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; import java.util.stream.Collectors; /** The main class for gRPC Google Cloud Platform Observability features. */ @ExperimentalApi("https://github.com/grpc/grpc-java/issues/8869") public final class GcpObservability implements AutoCloseable { + + private static final Logger logger = Logger.getLogger(GcpObservability.class.getName()); private static final int METRICS_EXPORT_INTERVAL = 30; @VisibleForTesting static final ImmutableSet SERVICES_TO_EXCLUDE = ImmutableSet.of( @@ -117,7 +122,14 @@ public void close() { throw new IllegalStateException("GcpObservability already closed!"); } sink.close(); - instance = null; + try { + // Sleeping before shutdown to ensure all metrics and traces are flushed + Thread.sleep(TimeUnit.MILLISECONDS.convert(2 * METRICS_EXPORT_INTERVAL, TimeUnit.SECONDS)); + } catch (InterruptedException e) { + logger.log(Level.SEVERE, "Caught exception during sleep", e); + } finally { + instance = null; + } } } From 4cc71a4d7c06f3f1e31b60fad16c840c155de56e Mon Sep 17 00:00:00 2001 From: Vindhya Ningegowda Date: Tue, 21 Mar 2023 09:45:56 -0700 Subject: [PATCH 2/3] add sleep only when either metrics or traces enabled --- .../grpc/gcp/observability/GcpObservability.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/gcp-observability/src/main/java/io/grpc/gcp/observability/GcpObservability.java b/gcp-observability/src/main/java/io/grpc/gcp/observability/GcpObservability.java index 1a226afef89..adb4256b54d 100644 --- a/gcp-observability/src/main/java/io/grpc/gcp/observability/GcpObservability.java +++ b/gcp-observability/src/main/java/io/grpc/gcp/observability/GcpObservability.java @@ -122,14 +122,16 @@ public void close() { throw new IllegalStateException("GcpObservability already closed!"); } sink.close(); - try { - // Sleeping before shutdown to ensure all metrics and traces are flushed - Thread.sleep(TimeUnit.MILLISECONDS.convert(2 * METRICS_EXPORT_INTERVAL, TimeUnit.SECONDS)); - } catch (InterruptedException e) { - logger.log(Level.SEVERE, "Caught exception during sleep", e); - } finally { - instance = null; + if (config.isEnableCloudMonitoring() || config.isEnableCloudTracing()) { + try { + // Sleeping before shutdown to ensure all metrics and traces are flushed + Thread.sleep( + TimeUnit.MILLISECONDS.convert(2 * METRICS_EXPORT_INTERVAL, TimeUnit.SECONDS)); + } catch (InterruptedException e) { + logger.log(Level.SEVERE, "Caught exception during sleep", e); + } } + instance = null; } } From c323e4f924ec624f5587484a9c1bb21a901b4608 Mon Sep 17 00:00:00 2001 From: Vindhya Ningegowda Date: Tue, 21 Mar 2023 10:55:55 -0700 Subject: [PATCH 3/3] restore interrupt by setting up interrupt flag of the thread --- .../main/java/io/grpc/gcp/observability/GcpObservability.java | 1 + 1 file changed, 1 insertion(+) diff --git a/gcp-observability/src/main/java/io/grpc/gcp/observability/GcpObservability.java b/gcp-observability/src/main/java/io/grpc/gcp/observability/GcpObservability.java index adb4256b54d..bdbba6d619d 100644 --- a/gcp-observability/src/main/java/io/grpc/gcp/observability/GcpObservability.java +++ b/gcp-observability/src/main/java/io/grpc/gcp/observability/GcpObservability.java @@ -128,6 +128,7 @@ public void close() { Thread.sleep( TimeUnit.MILLISECONDS.convert(2 * METRICS_EXPORT_INTERVAL, TimeUnit.SECONDS)); } catch (InterruptedException e) { + Thread.currentThread().interrupt(); logger.log(Level.SEVERE, "Caught exception during sleep", e); } }