Skip to content

Commit 95ca2f7

Browse files
authored
chore: Use domain name from R2DBC connections when configuring the connector. (#2103)
Now, the connector will detect if the R2DBC HOST connection property contains a domain name or a Cloud SQL instance name. If HOST has a domain name, the connector will look up the domain name to determine the instance name. For example, if the R2DBC url is set to r2dbc:gcp:mssql://<DB_USER>:<DB_PASS>@db.example.com/db, the connector will lookup the TXT record for db.example.com. The record should contain a valid Cloud SQL instance name. Part of #2043
1 parent cb745f2 commit 95ca2f7

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

r2dbc/core/src/main/java/com/google/cloud/sql/core/GcpConnectionFactoryProvider.java

+12-1
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,22 @@ public ConnectionFactory create(ConnectionFactoryOptions connectionFactoryOption
124124
? RefreshStrategy.LAZY
125125
: RefreshStrategy.BACKGROUND;
126126

127+
final String r2dbcHostname = (String) connectionFactoryOptions.getRequiredValue(HOST);
128+
final String cloudSqlInstance;
129+
final String domainName;
130+
if (CloudSqlInstanceName.isValidInstanceName(r2dbcHostname)) {
131+
cloudSqlInstance = r2dbcHostname;
132+
domainName = null;
133+
} else {
134+
cloudSqlInstance = null;
135+
domainName = r2dbcHostname;
136+
}
137+
127138
Builder optionBuilder = createBuilder(connectionFactoryOptions);
128-
String cloudSqlInstance = (String) connectionFactoryOptions.getRequiredValue(HOST);
129139
ConnectionConfig config =
130140
new ConnectionConfig.Builder()
131141
.withCloudSqlInstance(cloudSqlInstance)
142+
.withDomainName(domainName)
132143
.withAuthType(enableIamAuth ? AuthType.IAM : AuthType.PASSWORD)
133144
.withIpTypes(ipTypes)
134145
.withNamedConnector(namedConnector)

r2dbc/core/src/test/java/com/google/cloud/sql/core/GcpConnectionFactoryProviderTest.java

+14
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,20 @@ public void testCreateWithAdminApiOptions() {
107107
assertThat(config.getConnectorConfig().getAdminServicePath()).isEqualTo("/service");
108108
}
109109

110+
@Test
111+
public void testCreateWithDomainName() {
112+
113+
ConnectionFactoryOptions.Builder options = ConnectionFactoryOptions.builder();
114+
options.option(ConnectionFactoryOptions.PROTOCOL, "cloudsql");
115+
options.option(ConnectionFactoryOptions.HOST, "db.example.com");
116+
117+
StubConnectionFactory factory = configureConnection(options.build());
118+
ConnectionConfig config = factory.config;
119+
120+
assertThat(config.getDomainName()).isEqualTo("db.example.com");
121+
assertThat(config.getCloudSqlInstance()).isNull();
122+
}
123+
110124
private static class StubConnectionFactory implements ConnectionFactory {
111125

112126
final ConnectionConfig config;

0 commit comments

Comments
 (0)