Skip to content

Commit 4abd441

Browse files
committed
chore(datastore): address review comments on built-in metrics
Address comments regarding: - Removing @nullable from createOpenTelemetry - Avoiding wrapping no-op OpenTelemetry in DatastoreMetricsRecorder - Using isSameInstanceAs in tests TAG=agy CONV=5a246380-6d14-49d4-b850-ec05f8f89bcb
1 parent a71d22a commit 4abd441

4 files changed

Lines changed: 10 additions & 11 deletions

File tree

java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/telemetry/BuiltInDatastoreMetricsProvider.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import java.util.logging.Level;
3737
import java.util.logging.Logger;
3838
import javax.annotation.Nonnull;
39-
import javax.annotation.Nullable;
4039

4140
/**
4241
* Provides a built-in {@link OpenTelemetry} instance for Datastore client-side metrics.
@@ -116,9 +115,8 @@ private static String hashClientUId(String uuid) {
116115
* the lifetime of their Datastore client.
117116
*
118117
* @param options Datastore Client Options
119-
* @return a new {@link OpenTelemetry} instance, or {@code null} if it could not be created.
118+
* @return a new {@link OpenTelemetry} instance.
120119
*/
121-
@Nullable
122120
public OpenTelemetry createOpenTelemetry(@Nonnull DatastoreOptions options) {
123121
// If built-in metrics export is disabled, return no-op OpenTelemetry to avoid instantiating
124122
// a real SdkMeterProvider. Otherwise, the SDK-internal PeriodicMetricReader will start

java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/telemetry/DatastoreMetricsRecorder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ static DatastoreMetricsRecorder getInstance(
103103
// When using a local emulator, there is no need to configure a built-in Otel instance
104104
if (otelOptions.isExportBuiltinMetricsToGoogleCloudMonitoring()) {
105105
try {
106-
if (builtInOtel != null) {
106+
if (builtInOtel != null && builtInOtel != OpenTelemetry.noop()) {
107107
recorders.add(
108108
new OpenTelemetryDatastoreMetricsRecorder(
109109
builtInOtel, TelemetryConstants.METRIC_PREFIX));

java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/telemetry/BuiltInDatastoreMetricsProviderTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public void testCreateOpenTelemetry_returnsNoOp() {
5555
.setCredentials(NoCredentials.getInstance())
5656
.build();
5757
OpenTelemetry otel = BuiltInDatastoreMetricsProvider.INSTANCE.createOpenTelemetry(options);
58-
assertThat(otel).isInstanceOf(OpenTelemetry.noop().getClass());
58+
assertThat(otel).isSameInstanceAs(OpenTelemetry.noop());
5959
}
6060

6161
@Test
@@ -145,7 +145,7 @@ public void testCreateOpenTelemetry_withEmulatorHostProperty_returnsNoOp() {
145145
.setCredentials(NoCredentials.getInstance())
146146
.build();
147147
OpenTelemetry otel = BuiltInDatastoreMetricsProvider.INSTANCE.createOpenTelemetry(options);
148-
assertThat(otel).isInstanceOf(OpenTelemetry.noop().getClass());
148+
assertThat(otel).isSameInstanceAs(OpenTelemetry.noop());
149149
} finally {
150150
System.clearProperty(DatastoreOptions.LOCAL_HOST_ENV_VAR);
151151
}

java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/telemetry/DatastoreMetricsRecorderTest.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.google.cloud.datastore.DatastoreOpenTelemetryOptions;
2222
import com.google.cloud.datastore.DatastoreOptions;
2323
import io.opentelemetry.api.OpenTelemetry;
24+
import io.opentelemetry.sdk.OpenTelemetrySdk;
2425
import org.easymock.EasyMock;
2526
import org.junit.Test;
2627
import org.junit.runner.RunWith;
@@ -79,7 +80,7 @@ public void tracingEnabledButMetricsDisabledAndBuiltInDisabled_returnsNoRecorder
7980
}
8081

8182
@Test
82-
public void defaultOptionsWithBuiltInMetricsEnabled_butNoCredentials_returnsOneRecorder() {
83+
public void defaultOptionsWithBuiltInMetricsEnabled_butNoCredentials_returnsNoRecorders() {
8384
// Explicitly enable built-in metrics export
8485
DatastoreOptions options =
8586
baseOptions() // Uses NoCredentials by default
@@ -92,12 +93,12 @@ public void defaultOptionsWithBuiltInMetricsEnabled_butNoCredentials_returnsOneR
9293
DatastoreMetricsRecorder.getInstance(options, OpenTelemetry.noop());
9394

9495
// Since baseOptions() uses NoCredentials, the provider returns OpenTelemetry.noop().
95-
// This NoOp instance is passed to getInstance, which adds it to the recorders list.
96-
// So we have 1 recorder (the NoOp one).
96+
// This NoOp instance is passed to getInstance, which should NOT add it to the recorders list.
97+
// So we have 0 recorders.
9798
assertThat(recorder).isInstanceOf(CompositeDatastoreMetricsRecorder.class);
9899
CompositeDatastoreMetricsRecorder compositeRecorder =
99100
(CompositeDatastoreMetricsRecorder) recorder;
100-
assertThat(compositeRecorder.getMetricRecorders().size()).isEqualTo(1);
101+
assertThat(compositeRecorder.getMetricRecorders().size()).isEqualTo(0);
101102
}
102103

103104
@Test
@@ -142,7 +143,7 @@ public void bothEnabled_returnsTwoRecorders() {
142143
.setOpenTelemetry(OpenTelemetry.noop())
143144
.build())
144145
.build();
145-
OpenTelemetry builtInOtel = OpenTelemetry.noop();
146+
OpenTelemetry builtInOtel = OpenTelemetrySdk.builder().build();
146147

147148
DatastoreMetricsRecorder recorder = DatastoreMetricsRecorder.getInstance(options, builtInOtel);
148149
assertThat(recorder).isInstanceOf(CompositeDatastoreMetricsRecorder.class);

0 commit comments

Comments
 (0)