@@ -163,6 +163,7 @@ public class SpannerOptions extends ServiceOptions<Spanner, SpannerOptions> {
163
163
private final boolean enableApiTracing ;
164
164
private final boolean enableBuiltInMetrics ;
165
165
private final boolean enableExtendedTracing ;
166
+ private final boolean enableEndToEndTracing ;
166
167
167
168
enum TracingFramework {
168
169
OPEN_CENSUS ,
@@ -670,6 +671,7 @@ protected SpannerOptions(Builder builder) {
670
671
enableApiTracing = builder .enableApiTracing ;
671
672
enableExtendedTracing = builder .enableExtendedTracing ;
672
673
enableBuiltInMetrics = builder .enableBuiltInMetrics ;
674
+ enableEndToEndTracing = builder .enableEndToEndTracing ;
673
675
}
674
676
675
677
/**
@@ -706,6 +708,10 @@ default boolean isEnableApiTracing() {
706
708
default boolean isEnableBuiltInMetrics () {
707
709
return false ;
708
710
}
711
+
712
+ default boolean isEnableEndToEndTracing () {
713
+ return false ;
714
+ }
709
715
}
710
716
711
717
/**
@@ -720,6 +726,8 @@ private static class SpannerEnvironmentImpl implements SpannerEnvironment {
720
726
private static final String SPANNER_ENABLE_EXTENDED_TRACING = "SPANNER_ENABLE_EXTENDED_TRACING" ;
721
727
private static final String SPANNER_ENABLE_API_TRACING = "SPANNER_ENABLE_API_TRACING" ;
722
728
private static final String SPANNER_ENABLE_BUILTIN_METRICS = "SPANNER_ENABLE_BUILTIN_METRICS" ;
729
+ private static final String SPANNER_ENABLE_END_TO_END_TRACING =
730
+ "SPANNER_ENABLE_END_TO_END_TRACING" ;
723
731
724
732
private SpannerEnvironmentImpl () {}
725
733
@@ -752,6 +760,11 @@ public boolean isEnableBuiltInMetrics() {
752
760
// removed in the future.
753
761
return Boolean .parseBoolean (System .getenv (SPANNER_ENABLE_BUILTIN_METRICS ));
754
762
}
763
+
764
+ @ Override
765
+ public boolean isEnableEndToEndTracing () {
766
+ return Boolean .parseBoolean (System .getenv (SPANNER_ENABLE_END_TO_END_TRACING ));
767
+ }
755
768
}
756
769
757
770
/** Builder for {@link SpannerOptions} instances. */
@@ -816,6 +829,7 @@ public static class Builder
816
829
private boolean enableApiTracing = SpannerOptions .environment .isEnableApiTracing ();
817
830
private boolean enableExtendedTracing = SpannerOptions .environment .isEnableExtendedTracing ();
818
831
private boolean enableBuiltInMetrics = SpannerOptions .environment .isEnableBuiltInMetrics ();
832
+ private boolean enableEndToEndTracing = SpannerOptions .environment .isEnableEndToEndTracing ();
819
833
820
834
private static String createCustomClientLibToken (String token ) {
821
835
return token + " " + ServiceOptions .getGoogApiClientLibName ();
@@ -882,6 +896,7 @@ protected Builder() {
882
896
this .enableApiTracing = options .enableApiTracing ;
883
897
this .enableExtendedTracing = options .enableExtendedTracing ;
884
898
this .enableBuiltInMetrics = options .enableBuiltInMetrics ;
899
+ this .enableEndToEndTracing = options .enableEndToEndTracing ;
885
900
}
886
901
887
902
@ Override
@@ -1415,6 +1430,17 @@ public Builder setEnableExtendedTracing(boolean enableExtendedTracing) {
1415
1430
return this ;
1416
1431
}
1417
1432
1433
+ /**
1434
+ * Sets whether to enable end to end tracing. Enabling this option will create the trace spans
1435
+ * at the Spanner layer. By default, end to end tracing is disabled. Enabling end to end tracing
1436
+ * requires OpenTelemetry to be set up. Simply enabling this option won't generate traces at
1437
+ * Spanner layer.
1438
+ */
1439
+ public Builder setEnableEndToEndTracing (boolean enableEndToEndTracing ) {
1440
+ this .enableEndToEndTracing = enableEndToEndTracing ;
1441
+ return this ;
1442
+ }
1443
+
1418
1444
@ SuppressWarnings ("rawtypes" )
1419
1445
@ Override
1420
1446
public SpannerOptions build () {
@@ -1504,6 +1530,7 @@ public static void enableOpenCensusTraces() {
1504
1530
*/
1505
1531
@ ObsoleteApi (
1506
1532
"The OpenCensus project is deprecated. Use enableOpenTelemetryTraces to switch to OpenTelemetry traces" )
1533
+ @ VisibleForTesting
1507
1534
static void resetActiveTracingFramework () {
1508
1535
activeTracingFramework = null ;
1509
1536
}
@@ -1745,6 +1772,14 @@ public boolean isEnableExtendedTracing() {
1745
1772
return enableExtendedTracing ;
1746
1773
}
1747
1774
1775
+ /**
1776
+ * Returns whether end to end tracing is enabled. If this option is enabled then trace spans will
1777
+ * be created at the Spanner layer.
1778
+ */
1779
+ public boolean isEndToEndTracingEnabled () {
1780
+ return enableEndToEndTracing ;
1781
+ }
1782
+
1748
1783
/** Returns the default query options to use for the specific database. */
1749
1784
public QueryOptions getDefaultQueryOptions (DatabaseId databaseId ) {
1750
1785
// Use the specific query options for the database if any have been specified. These have
0 commit comments