Skip to content

Commit

Permalink
Revamp the "vertx-web-kotlinx" portion project
Browse files Browse the repository at this point in the history
Changes:
1. bump the Gradle versions and the dependency versions to the latest
1. bump the JVM version to 21 with the new `jvmToolchain` DSL
1. resolve deprecations
1. update the dockerfile to use the `installDist` Gradle task so the time for archiving and unarchiving is saved
  • Loading branch information
ShreckYe committed Oct 27, 2024
1 parent 3d7db35 commit eab95c0
Show file tree
Hide file tree
Showing 10 changed files with 64 additions and 60 deletions.
19 changes: 7 additions & 12 deletions frameworks/Kotlin/vertx-web-kotlinx/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

tasks.wrapper {
distributionType = Wrapper.DistributionType.ALL
}

plugins {
val kotlinVersion = "1.8.10"
val kotlinVersion = "2.0.21"
kotlin("jvm") version kotlinVersion
kotlin("plugin.serialization") version kotlinVersion
application
Expand All @@ -16,7 +13,7 @@ repositories {
mavenCentral()
}

val vertxVersion = "4.3.8"
val vertxVersion = "4.5.10"
dependencies {
implementation(platform("io.vertx:vertx-stack-depchain:$vertxVersion"))
implementation("io.vertx:vertx-web")
Expand All @@ -25,14 +22,12 @@ dependencies {
implementation("io.vertx:vertx-lang-kotlin")
implementation("io.vertx:vertx-lang-kotlin-coroutines")

implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1")
implementation("org.jetbrains.kotlinx:kotlinx-html:0.8.0")
//implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
implementation("org.jetbrains.kotlinx:kotlinx-html:0.11.0")
//implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0") // the latest version is 0.6.1
}

tasks.withType<KotlinCompile> {
compilerOptions.jvmTarget.set(JvmTarget.JVM_17)
}
kotlin.jvmToolchain(21)

application.mainClass.set("MainKt")
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
34 changes: 21 additions & 13 deletions frameworks/Kotlin/vertx-web-kotlinx/gradlew
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#

##############################################################################
#
Expand Down Expand Up @@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
Expand Down Expand Up @@ -83,10 +85,9 @@ done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
Expand Down Expand Up @@ -133,26 +134,29 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
Expand Down Expand Up @@ -197,11 +201,15 @@ if "$cygwin" || "$msys" ; then
done
fi

# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.

set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
Expand Down
22 changes: 12 additions & 10 deletions frameworks/Kotlin/vertx-web-kotlinx/gradlew.bat
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem

@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
Expand Down Expand Up @@ -43,11 +45,11 @@ set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

Expand All @@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto execute

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

Expand Down
6 changes: 3 additions & 3 deletions frameworks/Kotlin/vertx-web-kotlinx/src/main/kotlin/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import io.vertx.core.Vertx
import io.vertx.core.impl.cpu.CpuCoreSensor
import io.vertx.kotlin.core.deploymentOptionsOf
import io.vertx.kotlin.core.vertxOptionsOf
import io.vertx.kotlin.coroutines.await
import io.vertx.kotlin.coroutines.coAwait
import java.util.logging.Logger

const val SERVER_NAME = "Vert.x-Web Kotlinx Benchmark"
const val SERVER_NAME = "Vert.x-Web Kotlinx Benchmark server"

val logger = Logger.getLogger("Vert.x-Web Kotlinx Benchmark")
suspend fun main(args: Array<String>) {
Expand All @@ -19,6 +19,6 @@ suspend fun main(args: Array<String>) {
it.printStackTrace()
}
vertx.deployVerticle({ MainVerticle(hasDb) }, deploymentOptionsOf(instances = CpuCoreSensor.availableProcessors()))
.await()
.coAwait()
logger.info("$SERVER_NAME started.")
}
21 changes: 11 additions & 10 deletions frameworks/Kotlin/vertx-web-kotlinx/src/main/kotlin/MainVerticle.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,15 @@ import io.vertx.ext.web.Router
import io.vertx.ext.web.RoutingContext
import io.vertx.kotlin.core.http.httpServerOptionsOf
import io.vertx.kotlin.coroutines.CoroutineVerticle
import io.vertx.kotlin.coroutines.await
import io.vertx.kotlin.coroutines.coAwait
import io.vertx.kotlin.pgclient.pgConnectOptionsOf
import io.vertx.pgclient.PgConnection
import io.vertx.sqlclient.PreparedQuery
import io.vertx.sqlclient.Row
import io.vertx.sqlclient.RowSet
import io.vertx.sqlclient.Tuple
import kotlinx.coroutines.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.html.*
import kotlinx.html.stream.appendHTML
import kotlinx.serialization.Serializable
Expand Down Expand Up @@ -68,7 +69,7 @@ class MainVerticle(val hasDb: Boolean) : CoroutineVerticle() {
cachePreparedStatements = true,
pipeliningLimit = 100000
)
).await()
).coAwait()

selectWorldQuery = pgConnection.preparedQuery(SELECT_WORLD_SQL)
selectFortuneQuery = pgConnection.preparedQuery(SELECT_FORTUNE_SQL)
Expand All @@ -89,7 +90,7 @@ class MainVerticle(val hasDb: Boolean) : CoroutineVerticle() {
logger.info("Exception in HttpServer: $it")
it.printStackTrace()
}
.listen().await()
.listen().coAwait()
}


Expand All @@ -114,7 +115,7 @@ class MainVerticle(val hasDb: Boolean) : CoroutineVerticle() {
checkedCoroutineHandlerUnconfined {
it.response().run {
putJsonResponseHeader()
end(Json.encodeToString(requestHandler(it)))/*.await()*/
end(Json.encodeToString(requestHandler(it)))/*.coAwait()*/
}
}

Expand All @@ -131,7 +132,7 @@ class MainVerticle(val hasDb: Boolean) : CoroutineVerticle() {
}

get("/db").jsonResponseHandler {
val rowSet = selectWorldQuery.execute(Tuple.of(randomIntBetween1And10000())).await()
val rowSet = selectWorldQuery.execute(Tuple.of(randomIntBetween1And10000())).coAwait()
rowSet.single().toWorld()
}

Expand All @@ -142,7 +143,7 @@ class MainVerticle(val hasDb: Boolean) : CoroutineVerticle() {

get("/fortunes").checkedCoroutineHandlerUnconfined {
val fortunes = mutableListOf<Fortune>()
selectFortuneQuery.execute().await()
selectFortuneQuery.execute().coAwait()
.mapTo(fortunes) { it.toFortune() }

fortunes.add(Fortune(0, "Additional fortune added at request time."))
Expand Down Expand Up @@ -173,7 +174,7 @@ class MainVerticle(val hasDb: Boolean) : CoroutineVerticle() {
it.response().run {
putCommonHeaders()
putHeader(HttpHeaders.CONTENT_TYPE, "text/html; charset=utf-8")
end(htmlString)/*.await()*/
end(htmlString)/*.coAwait()*/
}
}

Expand All @@ -185,7 +186,7 @@ class MainVerticle(val hasDb: Boolean) : CoroutineVerticle() {
// Approach 1
// The updated worlds need to be sorted first to avoid deadlocks.
updateWordQuery
.executeBatch(updatedWorlds.sortedBy { it.id }.map { Tuple.of(it.randomNumber, it.id) }).await()
.executeBatch(updatedWorlds.sortedBy { it.id }.map { Tuple.of(it.randomNumber, it.id) }).coAwait()

/*
// Approach 2, worse performance
Expand All @@ -201,7 +202,7 @@ class MainVerticle(val hasDb: Boolean) : CoroutineVerticle() {
it.response().run {
putCommonHeaders()
putHeader(HttpHeaders.CONTENT_TYPE, "text/plain")
end("Hello, World!")/*.await()*/
end("Hello, World!")/*.coAwait()*/
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import io.vertx.core.CompositeFuture
import io.vertx.core.Future
import io.vertx.kotlin.coroutines.await
import io.vertx.kotlin.coroutines.coAwait

suspend fun <T> List<Future<T>>.awaitAll(): List<T> =
CompositeFuture.all(this).await().list()
Future.all(this).coAwait().list()
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
FROM gradle:8.0-jdk17
FROM gradle:8.10.2-jdk21

WORKDIR /vertx-web-kotlinx
COPY build.gradle.kts build.gradle.kts
COPY settings.gradle.kts settings.gradle.kts
COPY gradle.properties gradle.properties
COPY src src
RUN gradle assembleDist
RUN tar -xf build/distributions/vertx-web-kotlinx-benchmark.tar
RUN gradle installDist

EXPOSE 8080

Expand All @@ -25,4 +24,4 @@ CMD export JAVA_OPTS=" \
-Dio.netty.buffer.checkBounds=false \
-Dio.netty.buffer.checkAccessible=false \
" && \
vertx-web-kotlinx-benchmark/bin/vertx-web-kotlinx-benchmark true
build/install/vertx-web-kotlinx-benchmark/bin/vertx-web-kotlinx-benchmark true
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
FROM gradle:8.0-jdk17
FROM gradle:8.10.2-jdk21

WORKDIR /vertx-web-kotlinx
COPY build.gradle.kts build.gradle.kts
COPY settings.gradle.kts settings.gradle.kts
COPY gradle.properties gradle.properties
COPY src src
RUN gradle assembleDist
RUN tar -xf build/distributions/vertx-web-kotlinx-benchmark.tar
RUN gradle installDist

EXPOSE 8080

Expand All @@ -25,4 +24,4 @@ CMD export JAVA_OPTS=" \
-Dio.netty.buffer.checkBounds=false \
-Dio.netty.buffer.checkAccessible=false \
" && \
vertx-web-kotlinx-benchmark/bin/vertx-web-kotlinx-benchmark false
build/install/vertx-web-kotlinx-benchmark/bin/vertx-web-kotlinx-benchmark false

0 comments on commit eab95c0

Please sign in to comment.