From 19068888d125b530e75565312e6868fcfa1ef6e5 Mon Sep 17 00:00:00 2001 From: Mackenzie Starr Date: Mon, 6 Dec 2021 16:23:02 -0500 Subject: [PATCH 1/8] implement gRPC client retry stats measures and views based on https://github.com/grpc/proposal/blob/master/A45-retry-stats.md#metrics-to-expose --- .../grpc/metrics/RpcMeasureConstants.java | 31 +++++++++ .../grpc/metrics/RpcViewConstants.java | 68 +++++++++++++++++++ .../contrib/grpc/metrics/RpcViews.java | 27 ++++++++ .../grpc/metrics/RpcMeasureConstantsTest.java | 3 + .../grpc/metrics/RpcViewConstantsTest.java | 6 +- .../contrib/grpc/metrics/RpcViewsTest.java | 8 +++ 6 files changed, 142 insertions(+), 1 deletion(-) diff --git a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcMeasureConstants.java b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcMeasureConstants.java index 8bb66d2d3b..38b12e9067 100644 --- a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcMeasureConstants.java +++ b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcMeasureConstants.java @@ -227,6 +227,37 @@ public final class RpcMeasureConstants { Measure.MeasureLong.create( "grpc.io/client/started_rpcs", "Number of started client RPCs.", COUNT); + /** + * {@link Measure} for total number of retry or hedging attempts excluding transparent retries + * made during the client call. + * + * @since 0.28 + */ + public static final MeasureLong GRPC_CLIENT_RETRIES_PER_CALL = + Measure.MeasureLong.create( + "grpc.io/client/retries_per_call", "Number of retries per call.", COUNT); + + /** + * {@link Measure} for total number of transparent retries made during the client call. + * + * @since 0.28 + */ + public static final MeasureLong GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL = + Measure.MeasureLong.create( + "grpc.io/client/transparent_retries_per_call", + "Number of transparent retries per call.", + COUNT); + + /** + * {@link Measure} for total time of delay while there is no active attempt during the client + * call. + * + * @since 0.28 + */ + public static final MeasureLong GRPC_CLIENT_RETRY_DELAY_PER_CALL = + Measure.MeasureLong.create( + "grpc.io/client/retry_delay_per_call", "Retry delay per call.", MILLISECOND); + /** * {@link Measure} for gRPC client error counts. * diff --git a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java index 3adb75359f..c23ab48711 100644 --- a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java +++ b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java @@ -28,6 +28,9 @@ import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_SENT_MESSAGES_PER_RPC; import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_SERVER_LATENCY; import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_STARTED_RPCS; +import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_RETRIES_PER_CALL; +import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL; +import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_RETRY_DELAY_PER_CALL; import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_STATUS; import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_SERVER_METHOD; import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_SERVER_RECEIVED_BYTES_PER_METHOD; @@ -502,6 +505,71 @@ public final class RpcViewConstants { COUNT, Arrays.asList(GRPC_CLIENT_METHOD)); + /** + * {@link View} for client retries per call. + * + * @since 0.28 + */ + public static final View GRPC_CLIENT_RETRIES_PER_CALL_VIEW = + View.create( + View.Name.create("grpc.io/client/retries_per_call"), + "Number of client retries per call", + GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL, + COUNT, + Arrays.asList(GRPC_CLIENT_METHOD)); + + /** + * {@link View} for total transparent client retries across calls. + * + * @since 0.28 + */ + public static final View GRPC_CLIENT_TRANSPARENT_RETRIES_VIEW = + View.create( + View.Name.create("grpc.io/client/transparent_retries"), + "Total number of transparent client retries across calls", + GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL, + SUM, + Arrays.asList(GRPC_CLIENT_METHOD)); + + /** + * {@link View} for total time of delay while there is no active attempt during the client call. + * + * @since 0.28 + */ + public static final View GRPC_CLIENT_RETRY_DELAY_PER_CALL_VIEW = + View.create( + View.Name.create("grpc.io/client/retry_delay_per_call"), + "Total time of delay while there is no active attempt during the client call", + GRPC_CLIENT_RETRY_DELAY_PER_CALL, + COUNT, + Arrays.asList(GRPC_CLIENT_METHOD)); + + /** + * {@link View} for total retries across all calls, excluding transparent retries + * + * @since 0.28 + */ + public static final View GRPC_CLIENT_RETRIES_VIEW = + View.create( + View.Name.create("grpc.io/client/retries"), + "Total number of client retries across all calls", + GRPC_CLIENT_RETRIES_PER_CALL, + SUM, + Arrays.asList(GRPC_CLIENT_METHOD)); + + /** + * {@link View} for transparent retries per call + * + * @since 0.28 + */ + public static final View GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL_VIEW = + View.create( + View.Name.create("grpc.io/client/transparent_retries_per_call"), + "Number of transparent client retries per call", + GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL, + COUNT, + Arrays.asList(GRPC_CLIENT_METHOD)); + // Rpc server cumulative views. /** diff --git a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java index f454a8cee5..6e53df981e 100644 --- a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java +++ b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java @@ -144,6 +144,15 @@ public final class RpcViews { RpcViewConstants.GRPC_CLIENT_ROUNDTRIP_LATENCY_VIEW, RpcViewConstants.GRPC_CLIENT_STARTED_RPC_VIEW); + @VisibleForTesting + static final ImmutableSet GRPC_CLIENT_RETRY_VIEWS_SET = + ImmutableSet.of( + RpcViewConstants.GRPC_CLIENT_RETRIES_PER_CALL_VIEW, + RpcViewConstants.GRPC_CLIENT_RETRIES_VIEW, + RpcViewConstants.GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL_VIEW, + RpcViewConstants.GRPC_CLIENT_TRANSPARENT_RETRIES_VIEW, + RpcViewConstants.GRPC_CLIENT_RETRY_DELAY_PER_CALL_VIEW); + @VisibleForTesting static final ImmutableSet GRPC_SERVER_BASIC_VIEWS_SET = ImmutableSet.of( @@ -188,6 +197,24 @@ static void registerClientGrpcViews(ViewManager viewManager) { } } + /** + * Registers client retry gRPC views. + * + *

It is recommended to call this method before doing any RPC call to avoid missing stats. + * + * @since 0.28 + */ + public static void registerClientRetryGrpcViews() { + registerClientRetryGrpcViews(Stats.getViewManager()); + } + + @VisibleForTesting + static void registerClientRetryGrpcViews(ViewManager viewManager) { + for (View view : GRPC_CLIENT_RETRY_VIEWS_SET) { + viewManager.registerView(view); + } + } + /** * Registers all standard server gRPC views. * diff --git a/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcMeasureConstantsTest.java b/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcMeasureConstantsTest.java index 21e92c6cd0..18146135a5 100644 --- a/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcMeasureConstantsTest.java +++ b/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcMeasureConstantsTest.java @@ -57,6 +57,9 @@ public void testConstants() { assertThat(RpcMeasureConstants.GRPC_CLIENT_SERVER_LATENCY).isNotNull(); assertThat(RpcMeasureConstants.GRPC_CLIENT_ROUNDTRIP_LATENCY).isNotNull(); assertThat(RpcMeasureConstants.GRPC_CLIENT_STARTED_RPCS).isNotNull(); + assertThat(RpcMeasureConstants.GRPC_CLIENT_RETRIES_PER_CALL).isNotNull(); + assertThat(RpcMeasureConstants.GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL).isNotNull(); + assertThat(RpcMeasureConstants.GRPC_CLIENT_RETRY_DELAY_PER_CALL).isNotNull(); // Test server measurement descriptors. assertThat(RpcMeasureConstants.RPC_SERVER_ERROR_COUNT).isNotNull(); diff --git a/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewConstantsTest.java b/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewConstantsTest.java index 87875ceab0..749340c73a 100644 --- a/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewConstantsTest.java +++ b/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewConstantsTest.java @@ -112,7 +112,11 @@ public void testConstants() { assertThat(RpcViewConstants.GRPC_CLIENT_SENT_MESSAGES_PER_METHOD_VIEW).isNotNull(); assertThat(RpcViewConstants.GRPC_CLIENT_RECEIVED_MESSAGES_PER_METHOD_VIEW).isNotNull(); assertThat(RpcViewConstants.GRPC_CLIENT_SERVER_LATENCY_VIEW).isNotNull(); - assertThat(RpcViewConstants.GRPC_CLIENT_STARTED_RPC_VIEW).isNotNull(); + assertThat(RpcViewConstants.GRPC_CLIENT_RETRIES_PER_CALL_VIEW).isNotNull(); + assertThat(RpcViewConstants.GRPC_CLIENT_RETRIES_VIEW).isNotNull(); + assertThat(RpcViewConstants.GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL_VIEW).isNotNull(); + assertThat(RpcViewConstants.GRPC_CLIENT_TRANSPARENT_RETRIES_VIEW).isNotNull(); + assertThat(RpcViewConstants.GRPC_CLIENT_RETRY_DELAY_PER_CALL_VIEW).isNotNull(); // Test server distribution view descriptors. assertThat(RpcViewConstants.RPC_SERVER_ERROR_COUNT_VIEW).isNotNull(); diff --git a/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewsTest.java b/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewsTest.java index 70f3dd3fdf..a9295321e8 100644 --- a/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewsTest.java +++ b/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewsTest.java @@ -83,6 +83,14 @@ public void registerClientGrpcViews() { .containsExactlyElementsIn(RpcViews.GRPC_CLIENT_VIEWS_SET); } + @Test + public void registerClientRetryGrpcViews() { + FakeViewManager fakeViewManager = new FakeViewManager(); + RpcViews.registerClientRetryGrpcViews(fakeViewManager); + assertThat(fakeViewManager.getRegisteredViews()) + .containsExactlyElementsIn(RpcViews.GRPC_CLIENT_RETRY_VIEWS_SET); + } + @Test public void registerServerGrpcViews() { FakeViewManager fakeViewManager = new FakeViewManager(); From dd3b3f43bc7f489f99a1e35624f6c174fa8efe2f Mon Sep 17 00:00:00 2001 From: Mackenzie Starr Date: Wed, 8 Dec 2021 12:42:22 -0500 Subject: [PATCH 2/8] fix aggregation arguments for new RpcViewConstants --- .../opencensus/contrib/grpc/metrics/RpcViewConstants.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java index c23ab48711..60b65bf8d2 100644 --- a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java +++ b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java @@ -515,7 +515,7 @@ public final class RpcViewConstants { View.Name.create("grpc.io/client/retries_per_call"), "Number of client retries per call", GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL, - COUNT, + AGGREGATION_WITH_COUNT_HISTOGRAM, Arrays.asList(GRPC_CLIENT_METHOD)); /** @@ -541,7 +541,7 @@ public final class RpcViewConstants { View.Name.create("grpc.io/client/retry_delay_per_call"), "Total time of delay while there is no active attempt during the client call", GRPC_CLIENT_RETRY_DELAY_PER_CALL, - COUNT, + AGGREGATION_WITH_MILLIS_HISTOGRAM, Arrays.asList(GRPC_CLIENT_METHOD)); /** @@ -567,7 +567,7 @@ public final class RpcViewConstants { View.Name.create("grpc.io/client/transparent_retries_per_call"), "Number of transparent client retries per call", GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL, - COUNT, + AGGREGATION_WITH_COUNT_HISTOGRAM, Arrays.asList(GRPC_CLIENT_METHOD)); // Rpc server cumulative views. From d33b70313f0a84f3b0ca3d0811fafacbbe33cc08 Mon Sep 17 00:00:00 2001 From: Mackenzie Starr Date: Thu, 16 Dec 2021 12:24:24 -0500 Subject: [PATCH 3/8] attempt to fix checkstyle --- .../contrib/grpc/metrics/RpcViewConstants.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java index 60b65bf8d2..7501438d4d 100644 --- a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java +++ b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java @@ -21,6 +21,8 @@ import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_RECEIVED_BYTES_PER_RPC; import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_RECEIVED_MESSAGES_PER_METHOD; import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_RECEIVED_MESSAGES_PER_RPC; +import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_RETRIES_PER_CALL; +import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_RETRY_DELAY_PER_CALL; import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_ROUNDTRIP_LATENCY; import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_SENT_BYTES_PER_METHOD; import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_SENT_BYTES_PER_RPC; @@ -28,10 +30,8 @@ import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_SENT_MESSAGES_PER_RPC; import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_SERVER_LATENCY; import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_STARTED_RPCS; -import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_RETRIES_PER_CALL; -import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL; -import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_RETRY_DELAY_PER_CALL; import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_STATUS; +import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL; import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_SERVER_METHOD; import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_SERVER_RECEIVED_BYTES_PER_METHOD; import static io.opencensus.contrib.grpc.metrics.RpcMeasureConstants.GRPC_SERVER_RECEIVED_BYTES_PER_RPC; @@ -545,7 +545,7 @@ public final class RpcViewConstants { Arrays.asList(GRPC_CLIENT_METHOD)); /** - * {@link View} for total retries across all calls, excluding transparent retries + * {@link View} for total retries across all calls, excluding transparent retries. * * @since 0.28 */ @@ -558,7 +558,7 @@ public final class RpcViewConstants { Arrays.asList(GRPC_CLIENT_METHOD)); /** - * {@link View} for transparent retries per call + * {@link View} for transparent retries per call. * * @since 0.28 */ From 1c7d888695be472458fe2434c3192ff2d8fb8d6d Mon Sep 17 00:00:00 2001 From: Mackenzie Starr Date: Wed, 5 Jan 2022 12:06:17 -0500 Subject: [PATCH 4/8] add more sensible bucket boundaries for retry per call histograms --- .../grpc/metrics/RpcViewConstants.java | 58 +++++++++++-------- .../contrib/grpc/metrics/RpcViews.java | 12 ++-- .../grpc/metrics/RpcViewConstantsTest.java | 8 ++- .../contrib/grpc/metrics/RpcViewsTest.java | 2 +- 4 files changed, 47 insertions(+), 33 deletions(-) diff --git a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java index 7501438d4d..e0eb044662 100644 --- a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java +++ b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java @@ -134,6 +134,10 @@ public final class RpcViewConstants { 0.0, 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0, 2048.0, 4096.0, 8192.0, 16384.0, 32768.0, 65536.0)); + @VisibleForTesting + static final List RETRY_COUNT_PER_CALL_BUCKET_BOUNDARIES = + Collections.unmodifiableList(Arrays.asList(1.0, 2.0, 3.0, 4.0, 5.0, 10.0, 100.0, 1000.0)); + // Use Aggregation.Mean to record sum and count stats at the same time. @VisibleForTesting static final Aggregation MEAN = Aggregation.Mean.create(); @VisibleForTesting static final Aggregation COUNT = Count.create(); @@ -154,6 +158,10 @@ public final class RpcViewConstants { static final Aggregation AGGREGATION_WITH_COUNT_HISTOGRAM = Distribution.create(BucketBoundaries.create(RPC_COUNT_BUCKET_BOUNDARIES)); + @VisibleForTesting + static final Aggregation AGGREGATION_WITH_COUNT_RETRY_HISTOGRAM = + Distribution.create(BucketBoundaries.create(RETRY_COUNT_PER_CALL_BUCKET_BOUNDARIES)); + @VisibleForTesting static final Duration MINUTE = Duration.create(60, 0); @VisibleForTesting static final Duration HOUR = Duration.create(60 * 60, 0); @@ -515,7 +523,7 @@ public final class RpcViewConstants { View.Name.create("grpc.io/client/retries_per_call"), "Number of client retries per call", GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL, - AGGREGATION_WITH_COUNT_HISTOGRAM, + AGGREGATION_WITH_COUNT_RETRY_HISTOGRAM, Arrays.asList(GRPC_CLIENT_METHOD)); /** @@ -524,12 +532,12 @@ public final class RpcViewConstants { * @since 0.28 */ public static final View GRPC_CLIENT_TRANSPARENT_RETRIES_VIEW = - View.create( - View.Name.create("grpc.io/client/transparent_retries"), - "Total number of transparent client retries across calls", - GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL, - SUM, - Arrays.asList(GRPC_CLIENT_METHOD)); + View.create( + View.Name.create("grpc.io/client/transparent_retries"), + "Total number of transparent client retries across calls", + GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL, + SUM, + Arrays.asList(GRPC_CLIENT_METHOD)); /** * {@link View} for total time of delay while there is no active attempt during the client call. @@ -537,12 +545,12 @@ public final class RpcViewConstants { * @since 0.28 */ public static final View GRPC_CLIENT_RETRY_DELAY_PER_CALL_VIEW = - View.create( - View.Name.create("grpc.io/client/retry_delay_per_call"), - "Total time of delay while there is no active attempt during the client call", - GRPC_CLIENT_RETRY_DELAY_PER_CALL, - AGGREGATION_WITH_MILLIS_HISTOGRAM, - Arrays.asList(GRPC_CLIENT_METHOD)); + View.create( + View.Name.create("grpc.io/client/retry_delay_per_call"), + "Total time of delay while there is no active attempt during the client call", + GRPC_CLIENT_RETRY_DELAY_PER_CALL, + AGGREGATION_WITH_MILLIS_HISTOGRAM, + Arrays.asList(GRPC_CLIENT_METHOD)); /** * {@link View} for total retries across all calls, excluding transparent retries. @@ -550,12 +558,12 @@ public final class RpcViewConstants { * @since 0.28 */ public static final View GRPC_CLIENT_RETRIES_VIEW = - View.create( - View.Name.create("grpc.io/client/retries"), - "Total number of client retries across all calls", - GRPC_CLIENT_RETRIES_PER_CALL, - SUM, - Arrays.asList(GRPC_CLIENT_METHOD)); + View.create( + View.Name.create("grpc.io/client/retries"), + "Total number of client retries across all calls", + GRPC_CLIENT_RETRIES_PER_CALL, + SUM, + Arrays.asList(GRPC_CLIENT_METHOD)); /** * {@link View} for transparent retries per call. @@ -563,12 +571,12 @@ public final class RpcViewConstants { * @since 0.28 */ public static final View GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL_VIEW = - View.create( - View.Name.create("grpc.io/client/transparent_retries_per_call"), - "Number of transparent client retries per call", - GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL, - AGGREGATION_WITH_COUNT_HISTOGRAM, - Arrays.asList(GRPC_CLIENT_METHOD)); + View.create( + View.Name.create("grpc.io/client/transparent_retries_per_call"), + "Number of transparent client retries per call", + GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL, + AGGREGATION_WITH_COUNT_RETRY_HISTOGRAM, + Arrays.asList(GRPC_CLIENT_METHOD)); // Rpc server cumulative views. diff --git a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java index 6e53df981e..8fe0c506f8 100644 --- a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java +++ b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java @@ -146,12 +146,12 @@ public final class RpcViews { @VisibleForTesting static final ImmutableSet GRPC_CLIENT_RETRY_VIEWS_SET = - ImmutableSet.of( - RpcViewConstants.GRPC_CLIENT_RETRIES_PER_CALL_VIEW, - RpcViewConstants.GRPC_CLIENT_RETRIES_VIEW, - RpcViewConstants.GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL_VIEW, - RpcViewConstants.GRPC_CLIENT_TRANSPARENT_RETRIES_VIEW, - RpcViewConstants.GRPC_CLIENT_RETRY_DELAY_PER_CALL_VIEW); + ImmutableSet.of( + RpcViewConstants.GRPC_CLIENT_RETRIES_PER_CALL_VIEW, + RpcViewConstants.GRPC_CLIENT_RETRIES_VIEW, + RpcViewConstants.GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL_VIEW, + RpcViewConstants.GRPC_CLIENT_TRANSPARENT_RETRIES_VIEW, + RpcViewConstants.GRPC_CLIENT_RETRY_DELAY_PER_CALL_VIEW); @VisibleForTesting static final ImmutableSet GRPC_SERVER_BASIC_VIEWS_SET = diff --git a/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewConstantsTest.java b/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewConstantsTest.java index 749340c73a..67a943db3d 100644 --- a/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewConstantsTest.java +++ b/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewConstantsTest.java @@ -66,6 +66,9 @@ public void testConstants() { 0.0, 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0, 2048.0, 4096.0, 8192.0, 16384.0, 32768.0, 65536.0) .inOrder(); + assertThat(RpcViewConstants.RETRY_COUNT_PER_CALL_BUCKET_BOUNDARIES) + .containsExactly(1.0, 2.0, 3.0, 4.0, 5.0, 10.0, 100.0, 1000.0) + .inOrder(); // Test Aggregations assertThat(RpcViewConstants.MEAN).isEqualTo(Mean.create()); @@ -82,7 +85,10 @@ public void testConstants() { .isEqualTo( Distribution.create( BucketBoundaries.create(RpcViewConstants.RPC_COUNT_BUCKET_BOUNDARIES))); - + assertThat(RpcViewConstants.AGGREGATION_WITH_COUNT_RETRY_HISTOGRAM) + .isEqualTo( + Distribution.create( + BucketBoundaries.create(RpcViewConstants.RETRY_COUNT_PER_CALL_BUCKET_BOUNDARIES))); // Test Duration and Window assertThat(RpcViewConstants.MINUTE).isEqualTo(Duration.create(60, 0)); assertThat(RpcViewConstants.HOUR).isEqualTo(Duration.create(60 * 60, 0)); diff --git a/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewsTest.java b/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewsTest.java index a9295321e8..5052ab17a8 100644 --- a/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewsTest.java +++ b/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewsTest.java @@ -88,7 +88,7 @@ public void registerClientRetryGrpcViews() { FakeViewManager fakeViewManager = new FakeViewManager(); RpcViews.registerClientRetryGrpcViews(fakeViewManager); assertThat(fakeViewManager.getRegisteredViews()) - .containsExactlyElementsIn(RpcViews.GRPC_CLIENT_RETRY_VIEWS_SET); + .containsExactlyElementsIn(RpcViews.GRPC_CLIENT_RETRY_VIEWS_SET); } @Test From e597fe63c3bf64bdad4643c5ac62a93a1176b1a3 Mon Sep 17 00:00:00 2001 From: Mackenzie Starr Date: Wed, 5 Jan 2022 14:45:34 -0500 Subject: [PATCH 5/8] remove extraneous buckets and make >= 5 the upper bound --- .../io/opencensus/contrib/grpc/metrics/RpcViewConstants.java | 2 +- .../opencensus/contrib/grpc/metrics/RpcViewConstantsTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java index e0eb044662..44d6ab076b 100644 --- a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java +++ b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java @@ -136,7 +136,7 @@ public final class RpcViewConstants { @VisibleForTesting static final List RETRY_COUNT_PER_CALL_BUCKET_BOUNDARIES = - Collections.unmodifiableList(Arrays.asList(1.0, 2.0, 3.0, 4.0, 5.0, 10.0, 100.0, 1000.0)); + Collections.unmodifiableList(Arrays.asList(1.0, 2.0, 3.0, 4.0, 5.0)); // Use Aggregation.Mean to record sum and count stats at the same time. @VisibleForTesting static final Aggregation MEAN = Aggregation.Mean.create(); diff --git a/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewConstantsTest.java b/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewConstantsTest.java index 67a943db3d..0212487d6a 100644 --- a/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewConstantsTest.java +++ b/contrib/grpc_metrics/src/test/java/io/opencensus/contrib/grpc/metrics/RpcViewConstantsTest.java @@ -67,7 +67,7 @@ public void testConstants() { 8192.0, 16384.0, 32768.0, 65536.0) .inOrder(); assertThat(RpcViewConstants.RETRY_COUNT_PER_CALL_BUCKET_BOUNDARIES) - .containsExactly(1.0, 2.0, 3.0, 4.0, 5.0, 10.0, 100.0, 1000.0) + .containsExactly(1.0, 2.0, 3.0, 4.0, 5.0) .inOrder(); // Test Aggregations From ebc4321bb6643351ab3f8ee91644cc19cb3a25a1 Mon Sep 17 00:00:00 2001 From: Mackenzie Starr Date: Tue, 18 Jan 2022 09:21:37 -0500 Subject: [PATCH 6/8] apply fix pointed out by @asafdav2 --- .../io/opencensus/contrib/grpc/metrics/RpcViewConstants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java index 44d6ab076b..35dffdddad 100644 --- a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java +++ b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViewConstants.java @@ -522,7 +522,7 @@ public final class RpcViewConstants { View.create( View.Name.create("grpc.io/client/retries_per_call"), "Number of client retries per call", - GRPC_CLIENT_TRANSPARENT_RETRIES_PER_CALL, + GRPC_CLIENT_RETRIES_PER_CALL, AGGREGATION_WITH_COUNT_RETRY_HISTOGRAM, Arrays.asList(GRPC_CLIENT_METHOD)); From 284417fdfc320688e6daf859420a5c1270925cc1 Mon Sep 17 00:00:00 2001 From: Punya Biswal Date: Mon, 24 Jan 2022 14:13:03 -0500 Subject: [PATCH 7/8] Update "since" version to 0.31.0 --- .../io/opencensus/contrib/grpc/metrics/RpcMeasureConstants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcMeasureConstants.java b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcMeasureConstants.java index 38b12e9067..215e4de795 100644 --- a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcMeasureConstants.java +++ b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcMeasureConstants.java @@ -231,7 +231,7 @@ public final class RpcMeasureConstants { * {@link Measure} for total number of retry or hedging attempts excluding transparent retries * made during the client call. * - * @since 0.28 + * @since 0.31.0 */ public static final MeasureLong GRPC_CLIENT_RETRIES_PER_CALL = Measure.MeasureLong.create( From 589c729888e719ea31a868a7a3a1a66ec2f9d3b6 Mon Sep 17 00:00:00 2001 From: Punya Biswal Date: Mon, 24 Jan 2022 14:13:11 -0500 Subject: [PATCH 8/8] Update "since" version to 0.31.0 --- .../main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java index 8fe0c506f8..1926c30a59 100644 --- a/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java +++ b/contrib/grpc_metrics/src/main/java/io/opencensus/contrib/grpc/metrics/RpcViews.java @@ -202,7 +202,7 @@ static void registerClientGrpcViews(ViewManager viewManager) { * *

It is recommended to call this method before doing any RPC call to avoid missing stats. * - * @since 0.28 + * @since 0.31.0 */ public static void registerClientRetryGrpcViews() { registerClientRetryGrpcViews(Stats.getViewManager());