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..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 @@ -156,9 +156,11 @@ 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(); + + // 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(); } @Override