Skip to content

Commit 1510a12

Browse files
committed
chore: add env var for enabling api tracing
1 parent 3392074 commit 1510a12

File tree

3 files changed

+53
-2
lines changed

3 files changed

+53
-2
lines changed

google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerOptions.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,10 @@ default String getOptimizerStatisticsPackage() {
690690
default boolean isEnableExtendedTracing() {
691691
return false;
692692
}
693+
694+
default boolean isEnableApiTracing() {
695+
return false;
696+
}
693697
}
694698

695699
/**
@@ -702,6 +706,7 @@ private static class SpannerEnvironmentImpl implements SpannerEnvironment {
702706
private static final String SPANNER_OPTIMIZER_STATISTICS_PACKAGE_ENV_VAR =
703707
"SPANNER_OPTIMIZER_STATISTICS_PACKAGE";
704708
private static final String SPANNER_ENABLE_EXTENDED_TRACING = "SPANNER_ENABLE_EXTENDED_TRACING";
709+
private static final String SPANNER_ENABLE_API_TRACING = "SPANNER_ENABLE_API_TRACING";
705710

706711
private SpannerEnvironmentImpl() {}
707712

@@ -722,6 +727,11 @@ public String getOptimizerStatisticsPackage() {
722727
public boolean isEnableExtendedTracing() {
723728
return Boolean.parseBoolean(System.getenv(SPANNER_ENABLE_EXTENDED_TRACING));
724729
}
730+
731+
@Override
732+
public boolean isEnableApiTracing() {
733+
return Boolean.parseBoolean(System.getenv(SPANNER_ENABLE_API_TRACING));
734+
}
725735
}
726736

727737
/** Builder for {@link SpannerOptions} instances. */
@@ -785,7 +795,7 @@ public static class Builder
785795
private DirectedReadOptions directedReadOptions;
786796
private boolean useVirtualThreads = false;
787797
private OpenTelemetry openTelemetry;
788-
private boolean enableApiTracing = false;
798+
private boolean enableApiTracing = SpannerOptions.environment.isEnableApiTracing();
789799
private boolean enableExtendedTracing = SpannerOptions.environment.isEnableExtendedTracing();
790800

791801
private static String createCustomClientLibToken(String token) {

google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryApiTracerTest.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.google.cloud.NoCredentials;
3030
import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime;
3131
import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult;
32+
import com.google.cloud.spanner.SpannerOptions.SpannerEnvironment;
3233
import com.google.cloud.spanner.connection.RandomResultSetGenerator;
3334
import com.google.common.collect.ImmutableList;
3435
import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata;
@@ -408,6 +409,46 @@ public void testLroOperationFailed() {
408409
assertEquals(StatusCode.ERROR, updateDatabaseDdlOperation.getStatus().getStatusCode());
409410
}
410411

412+
@Test
413+
public void testEnableWithEnvVar() {
414+
SpannerOptions.useEnvironment(
415+
new SpannerEnvironment() {
416+
@Override
417+
public boolean isEnableApiTracing() {
418+
return true;
419+
}
420+
});
421+
// Create a Spanner instance without explicitly enabling API tracing.
422+
Spanner spanner =
423+
SpannerOptions.newBuilder()
424+
.setProjectId("test-project")
425+
.setChannelProvider(channelProvider)
426+
.setCredentials(NoCredentials.getInstance())
427+
.setSessionPoolOption(
428+
SessionPoolOptions.newBuilder()
429+
.setWaitForMinSessions(Duration.ofSeconds(5L))
430+
.setFailOnSessionLeak()
431+
.build())
432+
.build()
433+
.getService();
434+
DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of("p", "i", "d"));
435+
436+
try (ResultSet resultSet = client.singleUse().executeQuery(SELECT_RANDOM)) {
437+
assertTrue(resultSet.next());
438+
assertFalse(resultSet.next());
439+
}
440+
441+
assertEquals(CompletableResultCode.ofSuccess(), spanExporter.flush());
442+
List<SpanData> spans = spanExporter.getFinishedSpanItems();
443+
assertContains("CloudSpanner.ReadOnlyTransaction", spans);
444+
assertContains("CloudSpannerOperation.ExecuteStreamingQuery", spans);
445+
assertContains("Spanner.ExecuteStreamingSql", spans);
446+
assertParent(
447+
"CloudSpanner.ReadOnlyTransaction", "CloudSpannerOperation.ExecuteStreamingQuery", spans);
448+
assertParent(
449+
"CloudSpannerOperation.ExecuteStreamingQuery", "Spanner.ExecuteStreamingSql", spans);
450+
}
451+
411452
void assertContains(String expected, List<SpanData> spans) {
412453
assertTrue(
413454
"Expected " + spansToString(spans) + " to contain " + expected,

google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetrySpanTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -769,7 +769,7 @@ public void testRetryOnExecuteSql() {
769769
.run(transaction -> transaction.executeUpdate(UPDATE_STATEMENT));
770770

771771
assertEquals(2, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class));
772-
int numExpectedSpans = isMultiplexedSessionsEnabled() ? 9 : 7;
772+
int numExpectedSpans = isMultiplexedSessionsEnabled() ? 10 : 8;
773773
waitForFinishedSpans(numExpectedSpans);
774774
List<SpanData> finishedSpans = spanExporter.getFinishedSpanItems();
775775
List<String> finishedSpanNames =

0 commit comments

Comments
 (0)