From dafe6a627dae35455cc4086ca9c8de2ce66a3990 Mon Sep 17 00:00:00 2001 From: Igor Bernstein Date: Mon, 1 Dec 2025 10:37:58 -0500 Subject: [PATCH 1/2] fix: prevent npe in metrics during a batching retry Change-Id: I14d2fd195568fc9d827ec7ae1044d031a1d5cc04 --- .../wrappers/veneer/metrics/MetricsApiTracerAdapter.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bigtable-client-core-parent/bigtable-hbase/src/main/java/com/google/cloud/bigtable/hbase/wrappers/veneer/metrics/MetricsApiTracerAdapter.java b/bigtable-client-core-parent/bigtable-hbase/src/main/java/com/google/cloud/bigtable/hbase/wrappers/veneer/metrics/MetricsApiTracerAdapter.java index 39b3aa85b1..135ed5fb16 100644 --- a/bigtable-client-core-parent/bigtable-hbase/src/main/java/com/google/cloud/bigtable/hbase/wrappers/veneer/metrics/MetricsApiTracerAdapter.java +++ b/bigtable-client-core-parent/bigtable-hbase/src/main/java/com/google/cloud/bigtable/hbase/wrappers/veneer/metrics/MetricsApiTracerAdapter.java @@ -156,9 +156,10 @@ public void attemptFailed(Throwable error, Duration delay) { lastRetryStatus = RetryStatus.ATTEMPT_RETRYABLE_FAILURE; rpcMetrics.markRetry(); activeRpcCounter.dec(); - BigtableClientMetrics.meter( - MetricLevel.Info, "grpc.errors." + Status.fromThrowable(error).getCode()) - .mark(); + + Status status = (error == null) ? Status.OK : Status.fromThrowable(error); + + BigtableClientMetrics.meter(MetricLevel.Info, "grpc.errors." + status.getCode()).mark(); } @Override From 6a5afd88db4ca8abecff48c9c10c4611826335c1 Mon Sep 17 00:00:00 2001 From: Igor Bernstein Date: Mon, 1 Dec 2025 10:40:15 -0500 Subject: [PATCH 2/2] comment Change-Id: I2d5876db67c2d8710d6930e4c64095113313cd34 --- .../hbase/wrappers/veneer/metrics/MetricsApiTracerAdapter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/bigtable-client-core-parent/bigtable-hbase/src/main/java/com/google/cloud/bigtable/hbase/wrappers/veneer/metrics/MetricsApiTracerAdapter.java b/bigtable-client-core-parent/bigtable-hbase/src/main/java/com/google/cloud/bigtable/hbase/wrappers/veneer/metrics/MetricsApiTracerAdapter.java index 135ed5fb16..50ffb2794c 100644 --- a/bigtable-client-core-parent/bigtable-hbase/src/main/java/com/google/cloud/bigtable/hbase/wrappers/veneer/metrics/MetricsApiTracerAdapter.java +++ b/bigtable-client-core-parent/bigtable-hbase/src/main/java/com/google/cloud/bigtable/hbase/wrappers/veneer/metrics/MetricsApiTracerAdapter.java @@ -157,6 +157,7 @@ public void attemptFailed(Throwable error, Duration delay) { rpcMetrics.markRetry(); activeRpcCounter.dec(); + // For batching, retries can be invoked despite the rpc status being OK because an entry failed. Status status = (error == null) ? Status.OK : Status.fromThrowable(error); BigtableClientMetrics.meter(MetricLevel.Info, "grpc.errors." + status.getCode()).mark();