Browse Source

Upgrade http4k, gradle, java. Tweaks to PGclient implementation (#8845)

* Update versions of gradle, http4k etc

* Update versions of gradle in dockerfile

* Downgrade pgclient

* Upgrade pgclient

* update postgres database for pgclient

* tweak

* tweak to postgres client
David Denton 1 year ago
parent
commit
53352ca373
25 changed files with 59 additions and 66 deletions
  1. 4 4
      frameworks/Kotlin/http4k/build.gradle.kts
  2. 2 2
      frameworks/Kotlin/http4k/core-jdbc/build.gradle.kts
  3. 28 35
      frameworks/Kotlin/http4k/core-pgclient/src/main/kotlin/PostgresDatabase.kt
  4. 4 4
      frameworks/Kotlin/http4k/core/build.gradle.kts
  5. 1 1
      frameworks/Kotlin/http4k/gradle/wrapper/gradle-wrapper.properties
  6. 1 1
      frameworks/Kotlin/http4k/http4k-apache-graalvm.dockerfile
  7. 1 1
      frameworks/Kotlin/http4k/http4k-apache.dockerfile
  8. 1 1
      frameworks/Kotlin/http4k/http4k-apache4.dockerfile
  9. 1 1
      frameworks/Kotlin/http4k/http4k-graalvm.dockerfile
  10. 1 1
      frameworks/Kotlin/http4k/http4k-helidon-graalvm.dockerfile
  11. 1 1
      frameworks/Kotlin/http4k/http4k-helidon-jdbc.dockerfile
  12. 1 1
      frameworks/Kotlin/http4k/http4k-helidon-pgclient.dockerfile
  13. 1 1
      frameworks/Kotlin/http4k/http4k-jetty.dockerfile
  14. 1 1
      frameworks/Kotlin/http4k/http4k-jetty11.dockerfile
  15. 1 1
      frameworks/Kotlin/http4k/http4k-jetty11loom-jdbc.dockerfile
  16. 1 1
      frameworks/Kotlin/http4k/http4k-jetty11loom-pgclient.dockerfile
  17. 1 1
      frameworks/Kotlin/http4k/http4k-jettyloom-jdbc.dockerfile
  18. 1 1
      frameworks/Kotlin/http4k/http4k-jettyloom-pgclient.dockerfile
  19. 1 1
      frameworks/Kotlin/http4k/http4k-ktorcio.dockerfile
  20. 1 1
      frameworks/Kotlin/http4k/http4k-ktornetty.dockerfile
  21. 1 1
      frameworks/Kotlin/http4k/http4k-netty.dockerfile
  22. 1 1
      frameworks/Kotlin/http4k/http4k-ratpack.dockerfile
  23. 1 1
      frameworks/Kotlin/http4k/http4k-sunhttploom.dockerfile
  24. 1 1
      frameworks/Kotlin/http4k/http4k-undertow.dockerfile
  25. 1 1
      frameworks/Kotlin/http4k/http4k.dockerfile

+ 4 - 4
frameworks/Kotlin/http4k/build.gradle.kts

@@ -4,7 +4,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 import org.jetbrains.kotlin.js.translate.context.Namer.kotlin
 import org.jetbrains.kotlin.js.translate.context.Namer.kotlin
 
 
 plugins {
 plugins {
-    kotlin("jvm") version "1.9.22"
+    kotlin("jvm") version "1.9.23"
     application
     application
 }
 }
 
 
@@ -35,14 +35,14 @@ allprojects {
     }
     }
 
 
     java {
     java {
-        sourceCompatibility = VERSION_20
-        targetCompatibility = VERSION_20
+        sourceCompatibility = VERSION_21
+        targetCompatibility = VERSION_21
     }
     }
 
 
     tasks {
     tasks {
         withType<KotlinCompile> {
         withType<KotlinCompile> {
             kotlinOptions {
             kotlinOptions {
-                jvmTarget = "20"
+                jvmTarget = "21"
                 allWarningsAsErrors = true
                 allWarningsAsErrors = true
             }
             }
         }
         }

+ 2 - 2
frameworks/Kotlin/http4k/core-jdbc/build.gradle.kts

@@ -1,5 +1,5 @@
 dependencies {
 dependencies {
     api(project(":core"))
     api(project(":core"))
-    api("com.zaxxer:HikariCP:5.0.1")
-    api("org.postgresql:postgresql:42.5.0")
+    api("com.zaxxer:HikariCP:5.1.0")
+    api("org.postgresql:postgresql:42.7.3")
 }
 }

+ 28 - 35
frameworks/Kotlin/http4k/core-pgclient/src/main/kotlin/PostgresDatabase.kt

@@ -1,6 +1,4 @@
 import io.vertx.core.Future
 import io.vertx.core.Future
-import io.vertx.core.Vertx
-import io.vertx.core.VertxOptions
 import io.vertx.pgclient.PgConnectOptions
 import io.vertx.pgclient.PgConnectOptions
 import io.vertx.pgclient.PgPool.client
 import io.vertx.pgclient.PgPool.client
 import io.vertx.sqlclient.PoolOptions
 import io.vertx.sqlclient.PoolOptions
@@ -11,13 +9,7 @@ import java.util.Random
 
 
 
 
 class PostgresDatabase : Database {
 class PostgresDatabase : Database {
-    private val queryPool: SqlClient
-    private val updatePool: SqlClient
-
-    private val random = Random()
-
-    init {
-        val vertx = Vertx.vertx(VertxOptions().setPreferNativeTransport(true))
+    private val dbPool = run {
         val connectOptions = PgConnectOptions().apply {
         val connectOptions = PgConnectOptions().apply {
             port = 5432
             port = 5432
             cachePreparedStatements = true
             cachePreparedStatements = true
@@ -26,52 +18,53 @@ class PostgresDatabase : Database {
             user = "benchmarkdbuser"
             user = "benchmarkdbuser"
             password = "benchmarkdbpass"
             password = "benchmarkdbpass"
         }
         }
-        val clientOptions = PoolOptions().setMaxSize(64)
-        queryPool = client(vertx, connectOptions, clientOptions)
-        updatePool = client(vertx, connectOptions, clientOptions)
+        client(connectOptions, PoolOptions().apply { maxSize = 64 })
     }
     }
 
 
-    override fun findWorld() =
-        queryPool.findWorld(random.world()).toCompletionStage().toCompletableFuture().get()
+    private val random = Random()
+
+    override fun findWorld() = dbPool.findWorld(random.world())
 
 
-    override fun loadAll() = queryPool.preparedQuery("SELECT id, randomnumber FROM world ")
+    override fun loadAll() = dbPool.preparedQuery("SELECT id, randomnumber FROM world")
         .execute()
         .execute()
         .map { it.map(::toWorld) }
         .map { it.map(::toWorld) }
-        .toCompletionStage().toCompletableFuture().get()
+        .awaitComplete()
 
 
-    override fun findWorlds(count: Int) =
-        Future
-            .all(
-                (1..count).map { queryPool.findWorld(random.world()) }
-            ).toCompletionStage().toCompletableFuture().get().list<World>()
+    override fun findWorlds(count: Int) = (1..count)
+        .map { dbPool.findWorld(random.world()) }
 
 
-    override fun updateWorlds(count: Int) = (1..count).map {
-            queryPool.findWorld(random.world())
-                .flatMap { world ->
-                    updatePool.preparedQuery("UPDATE world SET randomnumber = $1 WHERE id = $2")
-                        .execute(Tuple.of(random.world(), world.first))
-                        .map { world }
+    override fun updateWorlds(count: Int) = (1..count)
+        .map { World(random.world(), random.world()) }
+        .onEach {
+            dbPool
+                .preparedQuery("SELECT id, randomnumber FROM world WHERE id = $1")
+                .execute(Tuple.of(it.first))
+                .map { rowSet ->
+                    val row = rowSet.iterator().next()
+                    row.getInteger(1)
+                    dbPool
+                        .preparedQuery("UPDATE world SET randomnumber = $1 WHERE id = $2")
+                        .execute(Tuple.of(it.second, it.first))
                 }
                 }
-                .toCompletionStage()
-                .toCompletableFuture()
-                .get()
+                .awaitComplete()
         }
         }
 
 
-    override fun fortunes() = queryPool.preparedQuery("SELECT id, message FROM fortune")
+    override fun fortunes() = dbPool.preparedQuery("SELECT id, message FROM fortune")
         .execute()
         .execute()
-        .map { it.map(::toFortune) }
+        .map { it.map { Fortune(it.getInteger(0), it.getString(1)) } }
         .map { (it + Fortune(0, "Additional fortune added at request time.")) }
         .map { (it + Fortune(0, "Additional fortune added at request time.")) }
         .map { it.sortedBy { it.message } }
         .map { it.sortedBy { it.message } }
-        .toCompletionStage().toCompletableFuture().get()
+        .awaitComplete()
 
 
     companion object {
     companion object {
         private fun SqlClient.findWorld(id: Int) =
         private fun SqlClient.findWorld(id: Int) =
             preparedQuery("SELECT id, randomnumber FROM world WHERE id = $1")
             preparedQuery("SELECT id, randomnumber FROM world WHERE id = $1")
                 .execute(Tuple.of(id))
                 .execute(Tuple.of(id))
-                .map { toWorld(it.single()) }
+                .map { it.map(::toWorld).first() }
+                .awaitComplete()
     }
     }
 }
 }
 
 
 private fun toWorld(r: Row) = r.getInteger("id") to r.getInteger("randomnumber")
 private fun toWorld(r: Row) = r.getInteger("id") to r.getInteger("randomnumber")
 
 
-private fun toFortune(it: Row) = Fortune(it.getInteger(0), it.getString(1))
+private fun <T> Future<T>.awaitComplete(): T = toCompletionStage().toCompletableFuture().get()

+ 4 - 4
frameworks/Kotlin/http4k/core/build.gradle.kts

@@ -4,13 +4,13 @@ plugins {
 }
 }
 
 
 dependencies {
 dependencies {
-    api(platform("org.http4k:http4k-bom:5.12.0.0"))
-    api("org.jetbrains.kotlin:kotlin-stdlib:1.9.22")
-    api("org.jetbrains.kotlin:kotlin-reflect:1.9.22")
+    api(platform("org.http4k:http4k-bom:5.14.4.0"))
+    api("org.jetbrains.kotlin:kotlin-stdlib:1.9.23")
+    api("org.jetbrains.kotlin:kotlin-reflect:1.9.23")
     api("org.http4k:http4k-core")
     api("org.http4k:http4k-core")
     api("org.http4k:http4k-format-argo")
     api("org.http4k:http4k-format-argo")
     api("org.http4k:http4k-template-rocker")
     api("org.http4k:http4k-template-rocker")
-    api("org.apache.commons:commons-lang3:3.12.0")
+    api("org.apache.commons:commons-lang3:3.14.0")
     api("org.cache2k:cache2k-core:2.6.1.Final")
     api("org.cache2k:cache2k-core:2.6.1.Final")
 
 
     compileOnly("com.fizzed:rocker-compiler:1.4.0")
     compileOnly("com.fizzed:rocker-compiler:1.4.0")

+ 1 - 1
frameworks/Kotlin/http4k/gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,6 @@
 distributionBase=GRADLE_USER_HOME
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
 networkTimeout=10000
 networkTimeout=10000
 validateDistributionUrl=true
 validateDistributionUrl=true
 zipStoreBase=GRADLE_USER_HOME
 zipStoreBase=GRADLE_USER_HOME

+ 1 - 1
frameworks/Kotlin/http4k/http4k-apache-graalvm.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21 as gradle
+FROM gradle:8.7.0-jdk21 as gradle
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-apache.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-apache4.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-graalvm.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21 as gradle
+FROM gradle:8.7.0-jdk21 as gradle
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-helidon-graalvm.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21 as gradle
+FROM gradle:8.7.0-jdk21 as gradle
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-helidon-jdbc.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-helidon-pgclient.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-jetty.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-jetty11.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-jetty11loom-jdbc.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-jetty11loom-pgclient.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-jettyloom-jdbc.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-jettyloom-pgclient.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-ktorcio.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-ktornetty.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-netty.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-ratpack.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-sunhttploom.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k-undertow.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts

+ 1 - 1
frameworks/Kotlin/http4k/http4k.dockerfile

@@ -1,4 +1,4 @@
-FROM gradle:8.4.0-jdk21
+FROM gradle:8.7.0-jdk21
 USER root
 USER root
 WORKDIR /http4k
 WORKDIR /http4k
 COPY build.gradle.kts build.gradle.kts
 COPY build.gradle.kts build.gradle.kts