Skip to content

Commit

Permalink
chore: Use domain name from R2DBC connections when configuring the co…
Browse files Browse the repository at this point in the history
…nnector.
  • Loading branch information
hessjcg committed Jan 23, 2025
1 parent 1f19f2b commit 221aeac
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -124,11 +124,22 @@ public ConnectionFactory create(ConnectionFactoryOptions connectionFactoryOption
? RefreshStrategy.LAZY
: RefreshStrategy.BACKGROUND;

final String r2dbcHostname = (String) connectionFactoryOptions.getRequiredValue(HOST);
final String cloudSqlInstance;
final String domainName;
if (CloudSqlInstanceName.isValidInstanceName(r2dbcHostname)) {
cloudSqlInstance = r2dbcHostname;
domainName = null;
} else {
cloudSqlInstance = null;
domainName = r2dbcHostname;
}

Builder optionBuilder = createBuilder(connectionFactoryOptions);
String cloudSqlInstance = (String) connectionFactoryOptions.getRequiredValue(HOST);
ConnectionConfig config =
new ConnectionConfig.Builder()
.withCloudSqlInstance(cloudSqlInstance)
.withDomainName(domainName)
.withAuthType(enableIamAuth ? AuthType.IAM : AuthType.PASSWORD)
.withIpTypes(ipTypes)
.withNamedConnector(namedConnector)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
import static com.google.common.truth.Truth.assertThat;

import com.google.cloud.sql.AuthType;
import com.google.cloud.sql.ConnectorConfig;
import com.google.cloud.sql.ConnectorRegistry;
import com.google.cloud.sql.IpType;
import com.google.cloud.sql.RefreshStrategy;
import io.netty.handler.ssl.SslContextBuilder;
Expand Down Expand Up @@ -107,6 +109,26 @@ public void testCreateWithAdminApiOptions() {
assertThat(config.getConnectorConfig().getAdminServicePath()).isEqualTo("/service");
}

@Test
public void testCreateWithDomainName() {
ConnectorRegistry.register(
"resolver-test",
new ConnectorConfig.Builder()
.withInstanceNameResolver(
(n) -> "db.example.com".equals(n) ? "project:region:instance" : null)
.build());
ConnectionFactoryOptions.Builder options = ConnectionFactoryOptions.builder();
options.option(ConnectionFactoryOptions.PROTOCOL, "cloudsql");
options.option(ConnectionFactoryOptions.HOST, "db.example.com");
options.option(GcpConnectionFactoryProvider.NAMED_CONNECTOR, "resolver-test");

StubConnectionFactory factory = configureConnection(options.build());
ConnectionConfig config = factory.config;

assertThat(config.getDomainName()).isEqualTo("db.example.com");
assertThat(config.getCloudSqlInstance()).isNull();
}

private static class StubConnectionFactory implements ConnectionFactory {

final ConnectionConfig config;
Expand Down

0 comments on commit 221aeac

Please sign in to comment.