Skip to content
This repository was archived by the owner on Mar 24, 2026. It is now read-only.

Commit 75e10fa

Browse files
authored
Fix connection exhaustion and closing of connections on errors (#10790)
* fix connection exhaustion and closing of connections on errors * added as maintainer * clean up
1 parent ebe80fa commit 75e10fa

3 files changed

Lines changed: 13 additions & 11 deletions

File tree

frameworks/Kotlin/ktor/benchmark_config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"framework": "ktor",
3-
"maintainers": ["ShreckYe"],
3+
"maintainers": ["ShreckYe", "inemtsev"],
44
"tests": [
55
{
66
"default": {

frameworks/Kotlin/ktor/ktor-r2dbc/src/main/kotlin/org/jetbrains/ktor/benchmarks/Hello.kt

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ fun Application.main() {
107107
.then(Mono.from(connection.commitTransaction()))
108108
},
109109
Connection::close,
110-
{ connection, _ -> connection.rollbackTransaction() },
111-
{ connection -> connection.rollbackTransaction() }
110+
{ connection, _ -> Mono.from(connection.rollbackTransaction()).then(Mono.from(connection.close())) },
111+
{ connection -> Mono.from(connection.rollbackTransaction()).then(Mono.from(connection.close())) }
112112
).awaitFirstOrNull()
113113

114114
call.respondJson(updatedWorlds)
@@ -126,11 +126,14 @@ private suspend fun ConnectionFactory.fetchWorlds(
126126
): List<World> {
127127
if (count <= 0) return emptyList()
128128
val concurrency = min(count, 32)
129-
return Mono.usingWhen(create(), { connection ->
130-
Flux.range(0, count)
131-
.flatMap({ selectWorldPublisher(connection) }, concurrency)
132-
.collectList()
133-
}, Connection::close).awaitSingle()
129+
return Flux.range(0, count)
130+
.flatMap({
131+
Mono.usingWhen(create(), { connection ->
132+
selectWorldPublisher(connection)
133+
}, Connection::close)
134+
}, concurrency)
135+
.collectList()
136+
.awaitSingle()
134137
}
135138

136139
private fun selectWorld(connection: Connection): Mono<World> =
@@ -186,7 +189,6 @@ private fun configurePostgresR2DBC(config: ApplicationConfig): ConnectionFactory
186189
.maxSize(config.property("db.maxPoolSize").getString().toInt())
187190
.maxIdleTime(Duration.ofSeconds(30))
188191
.maxAcquireTime(Duration.ofSeconds(5))
189-
.validationQuery("SELECT 1")
190192
.build()
191193

192194
return ConnectionPool(cp)

frameworks/Kotlin/ktor/ktor-r2dbc/src/main/resources/application.conf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ db {
1818
host = "tfb-database"
1919
port = 5432
2020
database = "hello_world"
21-
initPoolSize = 512
22-
maxPoolSize = 512
21+
initPoolSize = 32
22+
maxPoolSize = 256
2323
username = "benchmarkdbuser"
2424
password = "benchmarkdbpass"
2525
//url = "r2dbc:postgresql://"${db.host}":"${db.port}"/"${db.database}"?loggerLevel=OFF&disableColumnSanitiser=true&assumeMinServerVersion=16&sslmode=disable&maxSize="${db.poolSize}

0 commit comments

Comments
 (0)