From 588006664721c4775c000aab16fa81ba8c25d44d Mon Sep 17 00:00:00 2001 From: meeral-k <108340829+meeral-k@users.noreply.github.com> Date: Mon, 8 Jul 2024 12:00:58 -0400 Subject: [PATCH] feat: Create new environment variable to toggle directpath scoped to cloud bigtable. (#2261) * mend * mend * address code comments * formatting fix * fixed pom to set environment variable and not a system property * tagged myself in todo,added environment variable to directpath ipv4 only profile --- google-cloud-bigtable/pom.xml | 6 ++++++ .../data/v2/stub/EnhancedBigtableStubSettings.java | 12 +++++++++++- .../cloud/bigtable/test_helpers/env/CloudEnv.java | 7 ------- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/google-cloud-bigtable/pom.xml b/google-cloud-bigtable/pom.xml index 2f41833576..862eede954 100644 --- a/google-cloud-bigtable/pom.xml +++ b/google-cloud-bigtable/pom.xml @@ -499,6 +499,9 @@ ${project.build.directory}/test-grpc-logs/directpath-it REQUIRE_DIRECT_PATH + + true + com.google.cloud.bigtable.data.v2.it.*IT @@ -575,6 +578,9 @@ ${project.build.directory}/test-grpc-logs/directpath-ipv4only-it REQUIRE_DIRECT_PATH_IPV4 + + true + com.google.cloud.bigtable.data.v2.it.*IT diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettings.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettings.java index 9535f1d1ae..5a9e03cf10 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettings.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettings.java @@ -100,6 +100,8 @@ public class EnhancedBigtableStubSettings extends StubSettings IDEMPOTENT_RETRY_CODES = ImmutableSet.of(Code.DEADLINE_EXCEEDED, Code.UNAVAILABLE); @@ -345,7 +347,15 @@ public boolean getEnableRetryInfo() { /** Returns a builder for the default ChannelProvider for this service. */ public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { - return BigtableStubSettings.defaultGrpcTransportProviderBuilder() + Boolean isDirectpathEnabled = Boolean.parseBoolean(System.getenv(CBT_ENABLE_DIRECTPATH)); + InstantiatingGrpcChannelProvider.Builder grpcTransportProviderBuilder = + BigtableStubSettings.defaultGrpcTransportProviderBuilder(); + if (isDirectpathEnabled) { + // Attempts direct access to CBT service over gRPC to improve throughput, + // whether the attempt is allowed is totally controlled by service owner. + grpcTransportProviderBuilder.setAttemptDirectPathXds().setAttemptDirectPath(true); + } + return grpcTransportProviderBuilder .setChannelPoolSettings( ChannelPoolSettings.builder() .setInitialChannelCount(10) diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/CloudEnv.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/CloudEnv.java index d10fd5ea5d..d7b9523b83 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/CloudEnv.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/CloudEnv.java @@ -168,21 +168,18 @@ private static void injectTracingCookie( private void configureConnection(StubSettings.Builder stubSettings) { // Build an remote address restricting interceptor final ClientInterceptor interceptor; - boolean enableDirectPath = false; switch (getConnectionMode()) { case DEFAULT: // nothing special return; case REQUIRE_DIRECT_PATH: - enableDirectPath = true; interceptor = buildRemoteAddrInterceptor( "DirectPath IPv4 or IPv6", Predicates.or(DIRECT_PATH_IPV4_MATCHER, DIRECT_PATH_IPV6_MATCHER)); break; case REQUIRE_DIRECT_PATH_IPV4: - enableDirectPath = true; interceptor = buildRemoteAddrInterceptor("DirectPath IPv4", Predicates.or(DIRECT_PATH_IPV4_MATCHER)); break; @@ -205,10 +202,6 @@ private void configureConnection(StubSettings.Builder stubSettings) { final ApiFunction oldConfigurator = channelProvider.getChannelConfigurator(); - if (enableDirectPath) { - channelProvider.setAttemptDirectPath(true).setAttemptDirectPathXds(); - } - @SuppressWarnings("rawtypes") final ApiFunction newConfigurator = new ApiFunction() {