Skip to content

Commit 3d8d830

Browse files
committed
refactor and fix tests
1 parent 54a8d25 commit 3d8d830

16 files changed

+63
-28
lines changed

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/BigtableDataSettings.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -533,11 +533,16 @@ public boolean isBulkMutationFlowControlEnabled() {
533533
}
534534

535535
/**
536-
* Sets the {@link MetricsProvider}. By default, this is set to {@link
537-
* com.google.cloud.bigtable.data.v2.stub.metrics.DefaultMetricsProvider} which will collect and
538-
* export built-in metrics. To disable built-in metrics, set it to {@link
539-
* com.google.cloud.bigtable.data.v2.stub.metrics.NoopMetricsProvider}. To use a custom
540-
* OpenTelemetry, refer to {@link
536+
* Sets the {@link MetricsProvider}.
537+
*
538+
* <p>By default, this is set to {@link
539+
* com.google.cloud.bigtable.data.v2.stub.metrics.DefaultMetricsProvider#INSTANCE} which will
540+
* collect and export client side metrics.
541+
*
542+
* <p>To disable client side metrics, set it to {@link
543+
* com.google.cloud.bigtable.data.v2.stub.metrics.NoopMetricsProvider#INSTANCE}.
544+
*
545+
* <p>To use a custom OpenTelemetry instance, refer to {@link
541546
* com.google.cloud.bigtable.data.v2.stub.metrics.CustomOpenTelemetryMetricsProvider} on how to
542547
* set it up.
543548
*/

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStub.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@
102102
import com.google.cloud.bigtable.data.v2.stub.metrics.CustomOpenTelemetryMetricsProvider;
103103
import com.google.cloud.bigtable.data.v2.stub.metrics.DefaultMetricsProvider;
104104
import com.google.cloud.bigtable.data.v2.stub.metrics.MetricsTracerFactory;
105+
import com.google.cloud.bigtable.data.v2.stub.metrics.NoopMetricsProvider;
105106
import com.google.cloud.bigtable.data.v2.stub.metrics.RpcMeasureConstants;
106107
import com.google.cloud.bigtable.data.v2.stub.metrics.StatsHeadersServerStreamingCallable;
107108
import com.google.cloud.bigtable.data.v2.stub.metrics.StatsHeadersUnaryCallable;
@@ -323,8 +324,11 @@ private static BuiltinMetricsTracerFactory setupBuiltinMetricsTracerFactory(
323324
OpenTelemetry openTelemetry =
324325
OpenTelemetrySdk.builder().setMeterProvider(meterProvider.build()).build();
325326
return BuiltinMetricsTracerFactory.create(openTelemetry, attributes);
327+
} else if (settings.getMetricsProvider() instanceof NoopMetricsProvider) {
328+
return null;
326329
}
327-
return null;
330+
throw new IOException(
331+
"Invalid MetricsProvider type " + settings.getMetricsProvider().getClass());
328332
}
329333

330334
private static void patchCredentials(EnhancedBigtableStubSettings.Builder settings)

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettings.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -664,7 +664,7 @@ private Builder() {
664664
this.enableRoutingCookie = true;
665665
this.enableRetryInfo = true;
666666

667-
metricsProvider = new DefaultMetricsProvider();
667+
metricsProvider = DefaultMetricsProvider.INSTANCE;
668668

669669
// Defaults provider
670670
BigtableStubSettings.Builder baseDefaults = BigtableStubSettings.newBuilder();

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableExporterUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ static List<TimeSeries> convertCollectionToListOfTimeSeries(
107107
if (!metricData
108108
.getInstrumentationScopeInfo()
109109
.getName()
110-
.equals(BuiltinMetricsConstants.SCOPE)) {
110+
.equals(BuiltinMetricsConstants.METER_NAME)) {
111111
continue;
112112
}
113113
metricData.getData().getPoints().stream()

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsConstants.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public class BuiltinMetricsConstants {
6161
300.0, 400.0, 500.0, 650.0, 800.0, 1000.0, 2000.0, 5000.0, 10000.0, 20000.0, 50000.0,
6262
100000.0, 200000.0, 400000.0, 800000.0, 1600000.0, 3200000.0)); // max is 53.3 minutes
6363

64-
static final String SCOPE = "bigtable.googleapis.com";
64+
public static final String METER_NAME = "bigtable.googleapis.com/internal/client/";
6565

6666
static final Set<String> COMMON_ATTRIBUTES =
6767
ImmutableSet.of(
@@ -84,15 +84,15 @@ static void defineView(
8484
InstrumentSelector selector =
8585
InstrumentSelector.builder()
8686
.setName(id)
87-
.setMeterName(SCOPE)
87+
.setMeterName(METER_NAME)
8888
.setType(type)
8989
.setUnit(unit)
9090
.build();
9191
Set<String> attributesFilter =
9292
ImmutableSet.<String>builder().addAll(COMMON_ATTRIBUTES).addAll(extraAttributes).build();
9393
View view =
9494
View.builder()
95-
.setName(SCOPE + "/internal/client/" + id)
95+
.setName(METER_NAME + id)
9696
.setAggregation(aggregation)
9797
.setAttributeFilter(attributesFilter)
9898
.build();

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracer.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,9 +299,10 @@ private void recordOperationCompletion(@Nullable Throwable status) {
299299
operationLatenciesHistogram.record(
300300
operationLatency,
301301
attributes.toBuilder().put(STREAMING, isStreaming).put(STATUS, statusStr).build());
302+
303+
long applicationLatencyNano = operationLatencyNano - totalServerLatencyNano.get();
302304
applicationBlockingLatenciesHistogram.record(
303-
Duration.ofNanos(operationLatencyNano - totalServerLatencyNano.get()).toMillis(),
304-
attributes);
305+
Duration.ofNanos(applicationLatencyNano).toMillis(), attributes);
305306

306307
if (operationType == OperationType.ServerStreaming
307308
&& spanName.getMethodName().equals("ReadRows")) {

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracerFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.CLIENT_BLOCKING_LATENCIES_NAME;
2121
import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.CONNECTIVITY_ERROR_COUNT_NAME;
2222
import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.FIRST_RESPONSE_LATENCIES_NAME;
23+
import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.METER_NAME;
2324
import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.OPERATION_LATENCIES_NAME;
2425
import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.RETRY_COUNT_NAME;
25-
import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.SCOPE;
2626
import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.SERVER_LATENCIES_NAME;
2727

2828
import com.google.api.core.InternalApi;
@@ -65,7 +65,7 @@ public static BuiltinMetricsTracerFactory create(
6565

6666
BuiltinMetricsTracerFactory(OpenTelemetry openTelemetry, Attributes attributes) {
6767
this.attributes = attributes;
68-
Meter meter = openTelemetry.getMeter(SCOPE);
68+
Meter meter = openTelemetry.getMeter(METER_NAME);
6969

7070
operationLatenciesHistogram =
7171
meter

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/CustomOpenTelemetryMetricsProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
* .builder()
3838
* .setMeterProvider(sdkMeterProvider().build());
3939
*
40-
*
40+
* // Override MetricsProvider in BigtableDataSettings
4141
* BigtableDataSettings settings = BigtableDataSettings.newBuilder()
4242
* .setProjectId("my-project")
4343
* .setInstanceId("my-instance-id")

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/DefaultMetricsProvider.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,16 @@
1515
*/
1616
package com.google.cloud.bigtable.data.v2.stub.metrics;
1717

18+
/**
19+
* Set {@link
20+
* com.google.cloud.bigtable.data.v2.BigtableDataSettings.Builder#setMetricsProvider(MetricsProvider)},
21+
* to {@link this#INSTANCE} to enable collecting and export client side metrics
22+
* https://cloud.google.com/bigtable/docs/client-side-metrics. This is the default setting in {@link
23+
* com.google.cloud.bigtable.data.v2.BigtableDataSettings}.
24+
*/
1825
public final class DefaultMetricsProvider implements MetricsProvider {
1926

20-
public DefaultMetricsProvider() {}
27+
public static DefaultMetricsProvider INSTANCE = new DefaultMetricsProvider();
28+
29+
private DefaultMetricsProvider() {}
2130
}

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/NoopMetricsProvider.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,15 @@
1515
*/
1616
package com.google.cloud.bigtable.data.v2.stub.metrics;
1717

18-
public class NoopMetricsProvider implements MetricsProvider {}
18+
/**
19+
* Set {@link
20+
* com.google.cloud.bigtable.data.v2.BigtableDataSettings.Builder#setMetricsProvider(MetricsProvider)},
21+
* to {@link this#INSTANCE} to disable collecting and export client side metrics
22+
* https://cloud.google.com/bigtable/docs/client-side-metrics.
23+
*/
24+
public class NoopMetricsProvider implements MetricsProvider {
25+
26+
public static NoopMetricsProvider INSTANCE = new NoopMetricsProvider();
27+
28+
private NoopMetricsProvider() {}
29+
}

0 commit comments

Comments
 (0)