From c7f72d60ae8810c0d6392f5263ea25a543f8f66c Mon Sep 17 00:00:00 2001 From: ankiaga <ankiaga@google.com> Date: Tue, 15 Oct 2024 16:56:15 +0530 Subject: [PATCH 1/7] feat: Enabling endToEndTracing support in Connection API --- .../spanner/connection/ConnectionOptions.java | 14 ++++++ .../connection/ConnectionProperties.java | 9 ++++ .../cloud/spanner/connection/SpannerPool.java | 7 +++ .../connection/ConnectionOptionsTest.java | 21 ++++++++ .../spanner/connection/SpannerPoolTest.java | 48 +++++++++++++++++++ 5 files changed, 99 insertions(+) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java index dcc4c663bb..5c2ae2d1d0 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java @@ -26,6 +26,7 @@ import static com.google.cloud.spanner.connection.ConnectionProperties.DATA_BOOST_ENABLED; import static com.google.cloud.spanner.connection.ConnectionProperties.DIALECT; import static com.google.cloud.spanner.connection.ConnectionProperties.ENABLE_API_TRACING; +import static com.google.cloud.spanner.connection.ConnectionProperties.ENABLE_END_TO_END_TRACING; import static com.google.cloud.spanner.connection.ConnectionProperties.ENABLE_EXTENDED_TRACING; import static com.google.cloud.spanner.connection.ConnectionProperties.ENCODED_CREDENTIALS; import static com.google.cloud.spanner.connection.ConnectionProperties.ENDPOINT; @@ -239,6 +240,7 @@ public String[] getValidValues() { static final boolean DEFAULT_RETURN_COMMIT_STATS = false; static final boolean DEFAULT_LENIENT = false; static final boolean DEFAULT_ROUTE_TO_LEADER = true; + static final boolean DEFAULT_ENABLE_END_TO_END_TRACING = false; static final boolean DEFAULT_DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE = false; static final boolean DEFAULT_KEEP_TRANSACTION_ALIVE = false; static final boolean DEFAULT_TRACK_SESSION_LEAKS = true; @@ -267,6 +269,7 @@ public String[] getValidValues() { /** Name of the 'routeToLeader' connection property. */ public static final String ROUTE_TO_LEADER_PROPERTY_NAME = "routeToLeader"; /** Name of the 'retry aborts internally' connection property. */ + public static final String ENABLE_END_TO_END_TRACING_PROPERTY_NAME = "enableEndToEndTracing"; public static final String RETRY_ABORTS_INTERNALLY_PROPERTY_NAME = "retryAbortsInternally"; /** Name of the property to enable/disable virtual threads for the statement executor. */ public static final String USE_VIRTUAL_THREADS_PROPERTY_NAME = "useVirtualThreads"; @@ -382,6 +385,10 @@ static boolean isEnableTransactionalConnectionStateForPostgreSQL() { ROUTE_TO_LEADER_PROPERTY_NAME, "Should read/write transactions and partitioned DML be routed to leader region (true/false)", DEFAULT_ROUTE_TO_LEADER), + ConnectionProperty.createBooleanProperty( + ENABLE_END_TO_END_TRACING_PROPERTY_NAME, + "Should we enable end to end tracing (true/false)", + DEFAULT_ENABLE_END_TO_END_TRACING), ConnectionProperty.createBooleanProperty( RETRY_ABORTS_INTERNALLY_PROPERTY_NAME, "Should the connection automatically retry Aborted errors (true/false)", @@ -1205,6 +1212,13 @@ public boolean isRouteToLeader() { return getInitialConnectionPropertyValue(ROUTE_TO_LEADER); } + /** + * Whether end-to-end tracing is enabled. + */ + public boolean enableEndToEndTracing() { + return getInitialConnectionPropertyValue(ENABLE_END_TO_END_TRACING); + } + /** * The initial retryAbortsInternally value for connections created by this {@link * ConnectionOptions} diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java index c62571c6c0..aa1eff64a8 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java @@ -39,6 +39,7 @@ import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_DDL_IN_TRANSACTION_MODE; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_ENABLE_API_TRACING; +import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_ENABLE_END_TO_END_TRACING; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_ENABLE_EXTENDED_TRACING; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_ENDPOINT; import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_KEEP_TRANSACTION_ALIVE; @@ -65,6 +66,7 @@ import static com.google.cloud.spanner.connection.ConnectionOptions.DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.DIALECT_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.ENABLE_API_TRACING_PROPERTY_NAME; +import static com.google.cloud.spanner.connection.ConnectionOptions.ENABLE_END_TO_END_TRACING_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.ENABLE_EXTENDED_TRACING_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.ENCODED_CREDENTIALS_PROPERTY_NAME; import static com.google.cloud.spanner.connection.ConnectionOptions.ENDPOINT_PROPERTY_NAME; @@ -257,6 +259,13 @@ class ConnectionProperties { DEFAULT_ROUTE_TO_LEADER, BooleanConverter.INSTANCE, Context.STARTUP); + static final ConnectionProperty<Boolean> ENABLE_END_TO_END_TRACING = + create( + ENABLE_END_TO_END_TRACING_PROPERTY_NAME, + "Should we enable end to end tracing (true/false)", + DEFAULT_ENABLE_END_TO_END_TRACING, + BooleanConverter.INSTANCE, + Context.STARTUP); static final ConnectionProperty<Boolean> USE_VIRTUAL_THREADS = create( USE_VIRTUAL_THREADS_PROPERTY_NAME, diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java index 246d340b07..1abf8628fa 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java @@ -156,6 +156,7 @@ static class SpannerPoolKey { private final String userAgent; private final String databaseRole; private final boolean routeToLeader; + private final boolean enableEndToEndTracing; private final boolean useVirtualGrpcTransportThreads; private final OpenTelemetry openTelemetry; private final Boolean enableExtendedTracing; @@ -186,6 +187,7 @@ private SpannerPoolKey(ConnectionOptions options) throws IOException { this.usePlainText = options.isUsePlainText(); this.userAgent = options.getUserAgent(); this.routeToLeader = options.isRouteToLeader(); + this.enableEndToEndTracing = options.enableEndToEndTracing(); this.useVirtualGrpcTransportThreads = options.isUseVirtualGrpcTransportThreads(); this.openTelemetry = options.getOpenTelemetry(); this.enableExtendedTracing = options.isEnableExtendedTracing(); @@ -207,6 +209,7 @@ public boolean equals(Object o) { && Objects.equals(this.usePlainText, other.usePlainText) && Objects.equals(this.userAgent, other.userAgent) && Objects.equals(this.routeToLeader, other.routeToLeader) + && Objects.equals(this.enableEndToEndTracing, other.enableEndToEndTracing) && Objects.equals( this.useVirtualGrpcTransportThreads, other.useVirtualGrpcTransportThreads) && Objects.equals(this.openTelemetry, other.openTelemetry) @@ -226,6 +229,7 @@ public int hashCode() { this.databaseRole, this.userAgent, this.routeToLeader, + this.enableEndToEndTracing, this.useVirtualGrpcTransportThreads, this.openTelemetry, this.enableExtendedTracing, @@ -380,6 +384,9 @@ Spanner createSpanner(SpannerPoolKey key, ConnectionOptions options) { if (!options.isRouteToLeader()) { builder.disableLeaderAwareRouting(); } + if (options.enableEndToEndTracing()) { + builder.setEnableEndToEndTracing(true); + } if (key.usePlainText) { // Credentials may not be sent over a plain text channel. builder.setCredentials(NoCredentials.getInstance()); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java index 94a44579ac..b33188ff3c 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java @@ -322,6 +322,27 @@ public void testBuildWithRouteToLeader() { assertTrue(options.isRouteToLeader()); } + @Test + public void testBuildWithEndToEndTracingEnabled() { + final String BASE_URI = + "cloudspanner:/projects/test-project-123/instances/test-instance-123/databases/test-database-123"; + ConnectionOptions.Builder builder = ConnectionOptions.newBuilder(); + builder.setUri(BASE_URI + "?enableEndToEndTracing=true"); + builder.setCredentialsUrl(FILE_TEST_PATH); + ConnectionOptions options = builder.build(); + assertEquals(options.getHost(), DEFAULT_HOST); + assertEquals(options.getProjectId(), TEST_PROJECT); + assertEquals(options.getInstanceId(), TEST_INSTANCE); + assertEquals(options.getDatabaseName(), TEST_DATABASE); + assertTrue(options.enableEndToEndTracing()); + + // Test for default behavior for enableEndToEndTracing property. + builder = ConnectionOptions.newBuilder().setUri(BASE_URI); + builder.setCredentialsUrl(FILE_TEST_PATH); + options = builder.build(); + assertFalse(options.enableEndToEndTracing()); + } + @Test public void testBuildWithAutoConfigEmulatorAndHost() { ConnectionOptions.Builder builder = ConnectionOptions.newBuilder(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerPoolTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerPoolTest.java index 19d4913963..b3d405947d 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerPoolTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerPoolTest.java @@ -563,6 +563,54 @@ public void testEnableApiTracing() { .build())); } + @Test + public void testEnableEndToEndTracing() { + SpannerPoolKey keyWithoutApiTracingConfig = + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri("cloudspanner:/projects/p/instances/i/databases/d") + .setCredentials(NoCredentials.getInstance()) + .build()); + SpannerPoolKey keyWithApiTracingEnabled = + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri("cloudspanner:/projects/p/instances/i/databases/d?enableEndToEndTracing=true") + .setCredentials(NoCredentials.getInstance()) + .build()); + SpannerPoolKey keyWithApiTracingDisabled = + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri("cloudspanner:/projects/p/instances/i/databases/d?enableEndToEndTracing=false") + .setCredentials(NoCredentials.getInstance()) + .build()); + + assertNotEquals(keyWithoutApiTracingConfig, keyWithApiTracingEnabled); + assertEquals(keyWithoutApiTracingConfig, keyWithApiTracingDisabled); + assertNotEquals(keyWithApiTracingEnabled, keyWithApiTracingDisabled); + + assertEquals( + keyWithApiTracingEnabled, + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri("cloudspanner:/projects/p/instances/i/databases/d?enableEndToEndTracing=true") + .setCredentials(NoCredentials.getInstance()) + .build())); + assertEquals( + keyWithApiTracingDisabled, + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri("cloudspanner:/projects/p/instances/i/databases/d?enableEndToEndTracing=false") + .setCredentials(NoCredentials.getInstance()) + .build())); + assertEquals( + keyWithoutApiTracingConfig, + SpannerPoolKey.of( + ConnectionOptions.newBuilder() + .setUri("cloudspanner:/projects/p/instances/i/databases/d") + .setCredentials(NoCredentials.getInstance()) + .build())); + } + @Test public void testOpenTelemetry() { SpannerPool pool = createSubjectAndMocks(); From 846a00269e460c79702318254e1eef8cfdefc948 Mon Sep 17 00:00:00 2001 From: ankiaga <ankiaga@google.com> Date: Tue, 15 Oct 2024 17:02:40 +0530 Subject: [PATCH 2/7] fix formatting --- .../cloud/spanner/connection/ConnectionOptions.java | 5 ++--- .../cloud/spanner/connection/SpannerPoolTest.java | 12 ++++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java index 5c2ae2d1d0..8ee76635d4 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java @@ -270,6 +270,7 @@ public String[] getValidValues() { public static final String ROUTE_TO_LEADER_PROPERTY_NAME = "routeToLeader"; /** Name of the 'retry aborts internally' connection property. */ public static final String ENABLE_END_TO_END_TRACING_PROPERTY_NAME = "enableEndToEndTracing"; + public static final String RETRY_ABORTS_INTERNALLY_PROPERTY_NAME = "retryAbortsInternally"; /** Name of the property to enable/disable virtual threads for the statement executor. */ public static final String USE_VIRTUAL_THREADS_PROPERTY_NAME = "useVirtualThreads"; @@ -1212,9 +1213,7 @@ public boolean isRouteToLeader() { return getInitialConnectionPropertyValue(ROUTE_TO_LEADER); } - /** - * Whether end-to-end tracing is enabled. - */ + /** Whether end-to-end tracing is enabled. */ public boolean enableEndToEndTracing() { return getInitialConnectionPropertyValue(ENABLE_END_TO_END_TRACING); } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerPoolTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerPoolTest.java index b3d405947d..fea0b8aa6c 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerPoolTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerPoolTest.java @@ -574,13 +574,15 @@ public void testEnableEndToEndTracing() { SpannerPoolKey keyWithApiTracingEnabled = SpannerPoolKey.of( ConnectionOptions.newBuilder() - .setUri("cloudspanner:/projects/p/instances/i/databases/d?enableEndToEndTracing=true") + .setUri( + "cloudspanner:/projects/p/instances/i/databases/d?enableEndToEndTracing=true") .setCredentials(NoCredentials.getInstance()) .build()); SpannerPoolKey keyWithApiTracingDisabled = SpannerPoolKey.of( ConnectionOptions.newBuilder() - .setUri("cloudspanner:/projects/p/instances/i/databases/d?enableEndToEndTracing=false") + .setUri( + "cloudspanner:/projects/p/instances/i/databases/d?enableEndToEndTracing=false") .setCredentials(NoCredentials.getInstance()) .build()); @@ -592,14 +594,16 @@ public void testEnableEndToEndTracing() { keyWithApiTracingEnabled, SpannerPoolKey.of( ConnectionOptions.newBuilder() - .setUri("cloudspanner:/projects/p/instances/i/databases/d?enableEndToEndTracing=true") + .setUri( + "cloudspanner:/projects/p/instances/i/databases/d?enableEndToEndTracing=true") .setCredentials(NoCredentials.getInstance()) .build())); assertEquals( keyWithApiTracingDisabled, SpannerPoolKey.of( ConnectionOptions.newBuilder() - .setUri("cloudspanner:/projects/p/instances/i/databases/d?enableEndToEndTracing=false") + .setUri( + "cloudspanner:/projects/p/instances/i/databases/d?enableEndToEndTracing=false") .setCredentials(NoCredentials.getInstance()) .build())); assertEquals( From 39d392b5db17e9301b569ac1c86177b079a09ce2 Mon Sep 17 00:00:00 2001 From: ankiaga <ankiaga@google.com> Date: Mon, 21 Oct 2024 15:38:57 +0530 Subject: [PATCH 3/7] Comments incorporated --- .../spanner/connection/ConnectionOptions.java | 24 +++++++++++-------- .../connection/ConnectionProperties.java | 17 +++++++------ .../cloud/spanner/connection/SpannerPool.java | 6 ++--- .../connection/ConnectionOptionsTest.java | 4 ++-- 4 files changed, 29 insertions(+), 22 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java index 8ee76635d4..6c215e05fc 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java @@ -240,7 +240,6 @@ public String[] getValidValues() { static final boolean DEFAULT_RETURN_COMMIT_STATS = false; static final boolean DEFAULT_LENIENT = false; static final boolean DEFAULT_ROUTE_TO_LEADER = true; - static final boolean DEFAULT_ENABLE_END_TO_END_TRACING = false; static final boolean DEFAULT_DELAY_TRANSACTION_START_UNTIL_FIRST_WRITE = false; static final boolean DEFAULT_KEEP_TRANSACTION_ALIVE = false; static final boolean DEFAULT_TRACK_SESSION_LEAKS = true; @@ -251,6 +250,7 @@ public String[] getValidValues() { static final int DEFAULT_MAX_PARTITIONED_PARALLELISM = 1; static final Boolean DEFAULT_ENABLE_EXTENDED_TRACING = null; static final Boolean DEFAULT_ENABLE_API_TRACING = null; + static final boolean DEFAULT_ENABLE_END_TO_END_TRACING = false; static final boolean DEFAULT_AUTO_BATCH_DML = false; static final long DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT = 1L; static final boolean DEFAULT_AUTO_BATCH_DML_UPDATE_COUNT_VERIFICATION = true; @@ -269,8 +269,6 @@ public String[] getValidValues() { /** Name of the 'routeToLeader' connection property. */ public static final String ROUTE_TO_LEADER_PROPERTY_NAME = "routeToLeader"; /** Name of the 'retry aborts internally' connection property. */ - public static final String ENABLE_END_TO_END_TRACING_PROPERTY_NAME = "enableEndToEndTracing"; - public static final String RETRY_ABORTS_INTERNALLY_PROPERTY_NAME = "retryAbortsInternally"; /** Name of the property to enable/disable virtual threads for the statement executor. */ public static final String USE_VIRTUAL_THREADS_PROPERTY_NAME = "useVirtualThreads"; @@ -339,6 +337,7 @@ public String[] getValidValues() { public static final String ENABLE_EXTENDED_TRACING_PROPERTY_NAME = "enableExtendedTracing"; public static final String ENABLE_API_TRACING_PROPERTY_NAME = "enableApiTracing"; + public static final String ENABLE_END_TO_END_TRACING_PROPERTY_NAME = "enableEndToEndTracing"; public static final String AUTO_BATCH_DML_PROPERTY_NAME = "auto_batch_dml"; public static final String AUTO_BATCH_DML_UPDATE_COUNT_PROPERTY_NAME = @@ -386,10 +385,6 @@ static boolean isEnableTransactionalConnectionStateForPostgreSQL() { ROUTE_TO_LEADER_PROPERTY_NAME, "Should read/write transactions and partitioned DML be routed to leader region (true/false)", DEFAULT_ROUTE_TO_LEADER), - ConnectionProperty.createBooleanProperty( - ENABLE_END_TO_END_TRACING_PROPERTY_NAME, - "Should we enable end to end tracing (true/false)", - DEFAULT_ENABLE_END_TO_END_TRACING), ConnectionProperty.createBooleanProperty( RETRY_ABORTS_INTERNALLY_PROPERTY_NAME, "Should the connection automatically retry Aborted errors (true/false)", @@ -545,7 +540,14 @@ static boolean isEnableTransactionalConnectionStateForPostgreSQL() { + "to get a detailed view of each RPC that is being executed by your application, " + "or if you want to debug potential latency problems caused by RPCs that are " + "being retried.", - DEFAULT_ENABLE_API_TRACING)))); + DEFAULT_ENABLE_API_TRACING), + ConnectionProperty.createBooleanProperty( + ENABLE_END_TO_END_TRACING_PROPERTY_NAME, + "Enable end-to-end tracing (true/false) to generate traces for both the time " + + "that is spent in the client, as well as time that is spent in the Spanner server. " + + "Server side traces would always go to Google Cloud Trace so to see end to end traces, " + + "client should choose an exporter that exports the traces to Google Cloud Trace.", + DEFAULT_ENABLE_END_TO_END_TRACING)))); private static final Set<ConnectionProperty> INTERNAL_PROPERTIES = Collections.unmodifiableSet( @@ -1213,8 +1215,10 @@ public boolean isRouteToLeader() { return getInitialConnectionPropertyValue(ROUTE_TO_LEADER); } - /** Whether end-to-end tracing is enabled. */ - public boolean enableEndToEndTracing() { + /** + * Whether end-to-end tracing is enabled. + */ + public boolean isEndToEndTracingEnabled() { return getInitialConnectionPropertyValue(ENABLE_END_TO_END_TRACING); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java index aa1eff64a8..889d5328fe 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java @@ -259,13 +259,6 @@ class ConnectionProperties { DEFAULT_ROUTE_TO_LEADER, BooleanConverter.INSTANCE, Context.STARTUP); - static final ConnectionProperty<Boolean> ENABLE_END_TO_END_TRACING = - create( - ENABLE_END_TO_END_TRACING_PROPERTY_NAME, - "Should we enable end to end tracing (true/false)", - DEFAULT_ENABLE_END_TO_END_TRACING, - BooleanConverter.INSTANCE, - Context.STARTUP); static final ConnectionProperty<Boolean> USE_VIRTUAL_THREADS = create( USE_VIRTUAL_THREADS_PROPERTY_NAME, @@ -301,6 +294,16 @@ class ConnectionProperties { DEFAULT_ENABLE_API_TRACING, BooleanConverter.INSTANCE, Context.STARTUP); + static final ConnectionProperty<Boolean> ENABLE_END_TO_END_TRACING = + create( + ENABLE_END_TO_END_TRACING_PROPERTY_NAME, + "Enable end-to-end tracing (true/false) to generate traces for both the time " + + "that is spent in the client, as well as time that is spent in the Spanner server. " + + "Server side traces would always go to Google Cloud Trace so to see end to end traces, " + + "client should choose an exporter that exports the traces to Google Cloud Trace.", + DEFAULT_ENABLE_END_TO_END_TRACING, + BooleanConverter.INSTANCE, + Context.STARTUP); static final ConnectionProperty<Integer> MIN_SESSIONS = create( MIN_SESSIONS_PROPERTY_NAME, diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java index 1abf8628fa..22840045ef 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java @@ -156,11 +156,11 @@ static class SpannerPoolKey { private final String userAgent; private final String databaseRole; private final boolean routeToLeader; - private final boolean enableEndToEndTracing; private final boolean useVirtualGrpcTransportThreads; private final OpenTelemetry openTelemetry; private final Boolean enableExtendedTracing; private final Boolean enableApiTracing; + private final boolean enableEndToEndTracing; @VisibleForTesting static SpannerPoolKey of(ConnectionOptions options) { @@ -187,11 +187,11 @@ private SpannerPoolKey(ConnectionOptions options) throws IOException { this.usePlainText = options.isUsePlainText(); this.userAgent = options.getUserAgent(); this.routeToLeader = options.isRouteToLeader(); - this.enableEndToEndTracing = options.enableEndToEndTracing(); this.useVirtualGrpcTransportThreads = options.isUseVirtualGrpcTransportThreads(); this.openTelemetry = options.getOpenTelemetry(); this.enableExtendedTracing = options.isEnableExtendedTracing(); this.enableApiTracing = options.isEnableApiTracing(); + this.enableEndToEndTracing = options.isEndToEndTracingEnabled(); } @Override @@ -384,7 +384,7 @@ Spanner createSpanner(SpannerPoolKey key, ConnectionOptions options) { if (!options.isRouteToLeader()) { builder.disableLeaderAwareRouting(); } - if (options.enableEndToEndTracing()) { + if (options.isEndToEndTracingEnabled()) { builder.setEnableEndToEndTracing(true); } if (key.usePlainText) { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java index b33188ff3c..f826ec08df 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java @@ -334,13 +334,13 @@ public void testBuildWithEndToEndTracingEnabled() { assertEquals(options.getProjectId(), TEST_PROJECT); assertEquals(options.getInstanceId(), TEST_INSTANCE); assertEquals(options.getDatabaseName(), TEST_DATABASE); - assertTrue(options.enableEndToEndTracing()); + assertTrue(options.isEndToEndTracingEnabled()); // Test for default behavior for enableEndToEndTracing property. builder = ConnectionOptions.newBuilder().setUri(BASE_URI); builder.setCredentialsUrl(FILE_TEST_PATH); options = builder.build(); - assertFalse(options.enableEndToEndTracing()); + assertFalse(options.isEndToEndTracingEnabled()); } @Test From 751c9473d5d03d4ac70b405dd49045231500a9cb Mon Sep 17 00:00:00 2001 From: ankiaga <ankiaga@google.com> Date: Mon, 21 Oct 2024 15:45:38 +0530 Subject: [PATCH 4/7] formatting fixed --- .../google/cloud/spanner/connection/SpannerPool.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java index 22840045ef..ed26f76659 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java @@ -209,12 +209,12 @@ public boolean equals(Object o) { && Objects.equals(this.usePlainText, other.usePlainText) && Objects.equals(this.userAgent, other.userAgent) && Objects.equals(this.routeToLeader, other.routeToLeader) - && Objects.equals(this.enableEndToEndTracing, other.enableEndToEndTracing) && Objects.equals( - this.useVirtualGrpcTransportThreads, other.useVirtualGrpcTransportThreads) + this.useVirtualGrpcTransportThreads, other.useVirtualGrpcTransportThreads) && Objects.equals(this.openTelemetry, other.openTelemetry) && Objects.equals(this.enableExtendedTracing, other.enableExtendedTracing) - && Objects.equals(this.enableApiTracing, other.enableApiTracing); + && Objects.equals(this.enableApiTracing, other.enableApiTracing) + && Objects.equals(this.enableEndToEndTracing, other.enableEndToEndTracing); } @Override @@ -229,11 +229,11 @@ public int hashCode() { this.databaseRole, this.userAgent, this.routeToLeader, - this.enableEndToEndTracing, this.useVirtualGrpcTransportThreads, this.openTelemetry, this.enableExtendedTracing, - this.enableApiTracing); + this.enableApiTracing, + this.enableEndToEndTracing); } } From e4f86e88bcb5ea8a446df2929f3fbe113d10b37a Mon Sep 17 00:00:00 2001 From: ankiaga <ankiaga@google.com> Date: Mon, 21 Oct 2024 16:57:11 +0530 Subject: [PATCH 5/7] formatting fixed --- .../google/cloud/spanner/connection/ConnectionOptions.java | 4 +--- .../java/com/google/cloud/spanner/connection/SpannerPool.java | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java index 6c215e05fc..e4cb67b24e 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java @@ -1215,9 +1215,7 @@ public boolean isRouteToLeader() { return getInitialConnectionPropertyValue(ROUTE_TO_LEADER); } - /** - * Whether end-to-end tracing is enabled. - */ + /** Whether end-to-end tracing is enabled. */ public boolean isEndToEndTracingEnabled() { return getInitialConnectionPropertyValue(ENABLE_END_TO_END_TRACING); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java index ed26f76659..81246e4193 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java @@ -210,7 +210,7 @@ public boolean equals(Object o) { && Objects.equals(this.userAgent, other.userAgent) && Objects.equals(this.routeToLeader, other.routeToLeader) && Objects.equals( - this.useVirtualGrpcTransportThreads, other.useVirtualGrpcTransportThreads) + this.useVirtualGrpcTransportThreads, other.useVirtualGrpcTransportThreads) && Objects.equals(this.openTelemetry, other.openTelemetry) && Objects.equals(this.enableExtendedTracing, other.enableExtendedTracing) && Objects.equals(this.enableApiTracing, other.enableApiTracing) From 5de71f8013328db9639d3c78b75d446c005969e1 Mon Sep 17 00:00:00 2001 From: Ankit Agarwal <146331865+ankiaga@users.noreply.github.com> Date: Tue, 22 Oct 2024 08:52:50 +0530 Subject: [PATCH 6/7] Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Knut Olav Løite <koloite@gmail.com> --- .../google/cloud/spanner/connection/ConnectionOptions.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java index e4cb67b24e..66b09c35af 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java @@ -545,8 +545,8 @@ static boolean isEnableTransactionalConnectionStateForPostgreSQL() { ENABLE_END_TO_END_TRACING_PROPERTY_NAME, "Enable end-to-end tracing (true/false) to generate traces for both the time " + "that is spent in the client, as well as time that is spent in the Spanner server. " - + "Server side traces would always go to Google Cloud Trace so to see end to end traces, " - + "client should choose an exporter that exports the traces to Google Cloud Trace.", + + "Server side traces can only go to Google Cloud Trace, so to see end to end traces, " + + "the application should configure an exporter that exports the traces to Google Cloud Trace.", DEFAULT_ENABLE_END_TO_END_TRACING)))); private static final Set<ConnectionProperty> INTERNAL_PROPERTIES = From bf3361c15e7e6e6e0d250327200b46f448e13b24 Mon Sep 17 00:00:00 2001 From: Ankit Agarwal <146331865+ankiaga@users.noreply.github.com> Date: Tue, 22 Oct 2024 08:52:56 +0530 Subject: [PATCH 7/7] Update google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Knut Olav Løite <koloite@gmail.com> --- .../google/cloud/spanner/connection/ConnectionProperties.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java index 889d5328fe..0ca9b7256e 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java @@ -299,8 +299,8 @@ class ConnectionProperties { ENABLE_END_TO_END_TRACING_PROPERTY_NAME, "Enable end-to-end tracing (true/false) to generate traces for both the time " + "that is spent in the client, as well as time that is spent in the Spanner server. " - + "Server side traces would always go to Google Cloud Trace so to see end to end traces, " - + "client should choose an exporter that exports the traces to Google Cloud Trace.", + + "Server side traces can only go to Google Cloud Trace, so to see end to end traces, " + + "the application should configure an exporter that exports the traces to Google Cloud Trace.", DEFAULT_ENABLE_END_TO_END_TRACING, BooleanConverter.INSTANCE, Context.STARTUP);