Skip to content

Commit d40e9c0

Browse files
katukotaadrw
andauthored
Set data source properties for AWS secret fetching (#3485)
* Set data source properties for AWS secret fetching * Update misk-jdbc/src/main/kotlin/misk/jdbc/DataSourceConfig.kt Co-authored-by: Andrew (Paradi) Alexander <[email protected]> --------- Co-authored-by: Andrew (Paradi) Alexander <[email protected]>
1 parent f968848 commit d40e9c0

File tree

5 files changed

+31
-22
lines changed

5 files changed

+31
-22
lines changed

misk-jdbc/api/misk-jdbc.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ public final class misk/jdbc/DataSourceConfig {
303303
public final fun getConnection_idle_timeout ()Ljava/time/Duration;
304304
public final fun getConnection_max_lifetime ()Ljava/time/Duration;
305305
public final fun getConnection_timeout ()Ljava/time/Duration;
306+
public final fun getDataSourceProperties ()Ljava/util/Properties;
306307
public final fun getDatabase ()Ljava/lang/String;
307308
public final fun getDeclarative_schema_config ()Lmisk/jdbc/DeclarativeSchemaConfig;
308309
public final fun getDriverClassName ()Ljava/lang/String;

misk-jdbc/src/main/kotlin/misk/jdbc/DataSourceConfig.kt

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import misk.config.Config
55
import misk.containers.ContainerUtil
66
import wisp.deployment.Deployment
77
import java.time.Duration
8+
import java.util.Properties
89

910
/** Defines a type of datasource */
1011
enum class DataSourceType(
@@ -156,6 +157,30 @@ data class DataSourceConfig @JvmOverloads constructor(
156157
}
157158
}
158159

160+
fun getDataSourceProperties() : Properties {
161+
// https://github.com/brettwooldridge/HikariCP/wiki/MySQL-Configuration
162+
val properties = Properties()
163+
164+
properties["cachePrepStmts"] = "true"
165+
properties["prepStmtCacheSize"] = "250"
166+
properties["prepStmtCacheSqlLimit"] = "2048"
167+
if (type == DataSourceType.MYSQL || type == DataSourceType.VITESS_MYSQL || type == DataSourceType.TIDB) {
168+
properties["useServerPrepStmts"] = "true"
169+
}
170+
if (mysql_use_aws_secret_for_credentials) {
171+
properties["user"] = mysql_aws_secret_name
172+
}
173+
properties["useLocalSessionState"] = "true"
174+
properties["rewriteBatchedStatements"] = "true"
175+
properties["cacheResultSetMetadata"] = "true"
176+
properties["cacheServerConfiguration"] = "true"
177+
properties["elideSetAutoCommits"] = "true"
178+
properties["maintainTimeStats"] = "false"
179+
properties["characterEncoding"] = "UTF-8"
180+
181+
return properties
182+
}
183+
159184
fun withDefaults(): DataSourceConfig {
160185
val server_hostname = ContainerUtil.dockerTargetOrLocalIp()
161186
return when (type) {
@@ -294,8 +319,6 @@ data class DataSourceConfig @JvmOverloads constructor(
294319
}
295320

296321
if(mysql_use_aws_secret_for_credentials) {
297-
val region = "us-east-1"
298-
queryParams += "&secretId=$mysql_aws_secret_name&region=$region"
299322
"jdbc-secretsmanager:mysql://${config.host}:${config.port}/${config.database}$queryParams"
300323
}
301324
else {

misk-jdbc/src/main/kotlin/misk/jdbc/DataSourceService.kt

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -105,21 +105,7 @@ class DataSourceService @JvmOverloads constructor(
105105
else -> {}
106106
}
107107

108-
109-
// https://github.com/brettwooldridge/HikariCP/wiki/MySQL-Configuration
110-
hikariConfig.dataSourceProperties["cachePrepStmts"] = "true"
111-
hikariConfig.dataSourceProperties["prepStmtCacheSize"] = "250"
112-
hikariConfig.dataSourceProperties["prepStmtCacheSqlLimit"] = "2048"
113-
if (config.type == DataSourceType.MYSQL || config.type == DataSourceType.VITESS_MYSQL || config.type == DataSourceType.TIDB) {
114-
hikariConfig.dataSourceProperties["useServerPrepStmts"] = "true"
115-
}
116-
hikariConfig.dataSourceProperties["useLocalSessionState"] = "true"
117-
hikariConfig.dataSourceProperties["rewriteBatchedStatements"] = "true"
118-
hikariConfig.dataSourceProperties["cacheResultSetMetadata"] = "true"
119-
hikariConfig.dataSourceProperties["cacheServerConfiguration"] = "true"
120-
hikariConfig.dataSourceProperties["elideSetAutoCommits"] = "true"
121-
hikariConfig.dataSourceProperties["maintainTimeStats"] = "false"
122-
hikariConfig.dataSourceProperties["characterEncoding"] = "UTF-8"
108+
hikariConfig.dataSourceProperties = config.getDataSourceProperties()
123109
}
124110

125111
// TODO(sahilm): The same mitigation _might_ be applicable to the DataSourceTypes VITESS_MYSQL and TIDB

misk-jdbc/src/main/kotlin/misk/jdbc/PingDatabaseService.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import misk.backoff.retry
77
import wisp.deployment.Deployment
88
import misk.logging.getLogger
99
import java.time.Duration
10-
import java.util.*
1110
import jakarta.inject.Inject
1211
import jakarta.inject.Singleton
1312
import misk.backoff.RetryConfig
@@ -65,7 +64,9 @@ class PingDatabaseService @Inject constructor(
6564

6665
private fun createDataSource(jdbcUrl: String): DriverDataSource {
6766
return DriverDataSource(
68-
jdbcUrl, config.getDriverClassName(), Properties(), config.username, config.password)
67+
jdbcUrl, config.getDriverClassName(), config.getDataSourceProperties(),
68+
config.username, config.password
69+
)
6970
}
7071

7172
/** Kotlin thinks getConnection() is a val but it's really a function. */

misk-jdbc/src/test/kotlin/misk/jdbc/DataSourceConfigTest.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -300,8 +300,7 @@ class DataSourceConfigTest {
300300
assertEquals(
301301
"jdbc-secretsmanager:mysql://127.0.0.1:3306/?useLegacyDatetimeCode=false&" +
302302
"createDatabaseIfNotExist=true&connectTimeout=10000&socketTimeout=60000&" +
303-
"sslMode=PREFERRED&enabledTLSProtocols=TLSv1.2,TLSv1.3&" +
304-
"secretId=secret_name&region=us-east-1",
303+
"sslMode=PREFERRED&enabledTLSProtocols=TLSv1.2,TLSv1.3",
305304
config.buildJdbcUrl(TESTING)
306305
)
307306
}
@@ -321,7 +320,6 @@ class DataSourceConfigTest {
321320
// Should generate correct JDBC URL
322321
val jdbcUrl = config.buildJdbcUrl(TESTING)
323322
assertThat(jdbcUrl).startsWith("jdbc-secretsmanager:mysql://")
324-
assertThat(jdbcUrl).contains("secretId=test-secret")
325323
}
326324

327325
@Test

0 commit comments

Comments
 (0)