Browse Source

Updates files to run with Helidon 4.0.3. (#8764)

Signed-off-by: Santiago Pericasgeertsen <[email protected]>
Santiago Pericas-Geertsen 1 year ago
parent
commit
cdb3e074ac

+ 3 - 4
frameworks/Java/helidon/helidon-nima.dockerfile

@@ -1,17 +1,16 @@
-FROM docker.io/maven:3.9.2-eclipse-temurin-20 as maven
+FROM docker.io/maven:3.9.6-eclipse-temurin-21 as maven
 WORKDIR /helidon
 COPY nima/src src
 COPY nima/pom.xml pom.xml
 RUN mvn package -q
 
-FROM openjdk:20-jdk-slim
+FROM openjdk:22-rc-jdk-slim
 WORKDIR /helidon
 COPY --from=maven /helidon/target/libs libs
 COPY --from=maven /helidon/target/benchmark-nima.jar app.jar
 
 EXPOSE 8080
 
-CMD java --enable-preview \
-    -XX:+UseNUMA \
+CMD java -XX:+UseNUMA \
     -XX:+UseParallelGC \
     -jar app.jar

+ 9 - 10
frameworks/Java/helidon/nima/pom.xml

@@ -21,7 +21,7 @@
     <parent>
         <groupId>io.helidon.applications</groupId>
         <artifactId>helidon-se</artifactId>
-        <version>4.0.0-ALPHA6</version>
+        <version>4.0.3</version>
         <relativePath/>
     </parent>
 
@@ -33,25 +33,25 @@
 
     <properties>
         <mainClass>io.helidon.benchmark.nima.Main</mainClass>
-        <version.java>20</version.java>
+        <version.java>21</version.java>
         <version.plugin.compiler>3.11.0</version.plugin.compiler>
         <rocker.version>1.3.0</rocker.version>
-        <vertx-pg-client.version>4.4.2</vertx-pg-client.version>
+        <vertx-pg-client.version>4.5.3</vertx-pg-client.version>
         <jsoniter.version>0.9.23</jsoniter.version>
     </properties>
 
     <dependencies>
         <dependency>
-            <groupId>io.helidon.nima.webserver</groupId>
-            <artifactId>helidon-nima-webserver</artifactId>
+            <groupId>io.helidon.webserver</groupId>
+            <artifactId>helidon-webserver</artifactId>
         </dependency>
         <dependency>
             <groupId>io.helidon.config</groupId>
             <artifactId>helidon-config-yaml</artifactId>
         </dependency>
         <dependency>
-            <groupId>io.helidon.nima.http.media</groupId>
-            <artifactId>helidon-nima-http-media-jsonp</artifactId>
+            <groupId>io.helidon.http.media</groupId>
+            <artifactId>helidon-http-media-jsonp</artifactId>
         </dependency>
         <dependency>
             <groupId>io.helidon.common</groupId>
@@ -83,8 +83,8 @@
             <version>${rocker.version}</version>
         </dependency>
         <dependency>
-            <groupId>io.helidon.nima.testing.junit5</groupId>
-            <artifactId>helidon-nima-testing-junit5-webserver</artifactId>
+            <groupId>io.helidon.common.testing</groupId>
+            <artifactId>helidon-common-testing-junit5</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -113,7 +113,6 @@
                     <compilerArgs>
                         <arg>-Xlint:unchecked</arg>
                         <arg>-Xpkginfo:always</arg>
-                        <arg>--enable-preview</arg>
                     </compilerArgs>
                 </configuration>
             </plugin>

+ 19 - 17
frameworks/Java/helidon/nima/src/main/java/io/helidon/benchmark/nima/Main.java

@@ -29,18 +29,17 @@ import io.helidon.benchmark.nima.models.HikariJdbcRepository;
 import io.helidon.benchmark.nima.models.PgClientRepository;
 import io.helidon.benchmark.nima.services.DbService;
 import io.helidon.benchmark.nima.services.FortuneHandler;
-import io.helidon.common.http.Http;
-import io.helidon.common.http.Http.Header;
-import io.helidon.common.http.Http.HeaderValue;
-import io.helidon.common.http.Http.HeaderValues;
+import io.helidon.http.Header;
+import io.helidon.http.HeaderNames;
+import io.helidon.http.HeaderValues;
 import io.helidon.config.Config;
 import io.helidon.config.ConfigException;
 import io.helidon.logging.common.LogConfig;
-import io.helidon.nima.webserver.WebServer;
-import io.helidon.nima.webserver.http.Handler;
-import io.helidon.nima.webserver.http.HttpRules;
-import io.helidon.nima.webserver.http.ServerRequest;
-import io.helidon.nima.webserver.http.ServerResponse;
+import io.helidon.webserver.WebServer;
+import io.helidon.webserver.http.Handler;
+import io.helidon.webserver.http.HttpRules;
+import io.helidon.webserver.http.ServerRequest;
+import io.helidon.webserver.http.ServerResponse;
 
 /**
  * Main class of the benchmark.
@@ -50,9 +49,9 @@ import io.helidon.nima.webserver.http.ServerResponse;
 public final class Main {
     private static final Logger LOGGER = Logger.getLogger(Main.class.getName());
 
-    public static final Http.HeaderValue CONTENT_TYPE_HTML =
-            Http.Header.createCached(Http.Header.CONTENT_TYPE, "text/html; charset=UTF-8");
-    public static final Http.HeaderValue SERVER = Http.Header.createCached(Http.Header.SERVER, "Nima");
+    public static final Header CONTENT_TYPE_HTML =
+            HeaderValues.createCached(HeaderNames.CONTENT_TYPE, "text/html; charset=UTF-8");
+    public static final Header SERVER = HeaderValues.createCached(HeaderNames.SERVER, "Nima");
 
     private Main() {
     }
@@ -67,11 +66,14 @@ public final class Main {
         LogConfig.configureRuntime();
 
         WebServer.builder()
+                .config(Config.create().get("server"))
                 .routing(Main::routing)
+                .build()
                 .start();
     }
 
     // exposed for tests
+    @SuppressWarnings("unchecked")
     static void routing(HttpRules rules) {
         Config config = Config.create();
 
@@ -107,9 +109,9 @@ public final class Main {
     }
 
     static class PlaintextHandler implements Handler {
-        static final HeaderValue CONTENT_TYPE = Header.createCached(Header.CONTENT_TYPE,
+        static final Header CONTENT_TYPE = HeaderValues.createCached(HeaderNames.CONTENT_TYPE,
                 "text/plain; charset=UTF-8");
-        static final HeaderValue CONTENT_LENGTH = Header.createCached(Header.CONTENT_LENGTH, "13");
+        static final Header CONTENT_LENGTH = HeaderValues.createCached(HeaderNames.CONTENT_LENGTH, "13");
 
         private static final byte[] RESPONSE_BYTES = "Hello, World!".getBytes(StandardCharsets.UTF_8);
 
@@ -125,7 +127,7 @@ public final class Main {
     static class JsonHandler implements Handler {
         private static final String MESSAGE = "Hello, World!";
         private static final int JSON_LENGTH = serializeMsg(new Message(MESSAGE)).length;
-        static final HeaderValue CONTENT_LENGTH = Header.createCached(Header.CONTENT_LENGTH,
+        static final Header CONTENT_LENGTH = HeaderValues.createCached(HeaderNames.CONTENT_LENGTH,
                 String.valueOf(JSON_LENGTH));
 
         @Override
@@ -142,13 +144,13 @@ public final class Main {
     }
 
     static class JsonKHandler implements Handler {
-        private final HeaderValue contentLength;
+        private final Header contentLength;
         private final String message;
 
         JsonKHandler(int kilobytes) {
             this.message = "a".repeat(1024 * kilobytes);
             int length = serializeMsg(new Message(message)).length;
-            this.contentLength = Header.createCached(Header.CONTENT_LENGTH,
+            this.contentLength = HeaderValues.createCached(HeaderNames.CONTENT_LENGTH,
                     String.valueOf(length));
         }
 

+ 23 - 18
frameworks/Java/helidon/nima/src/main/java/io/helidon/benchmark/nima/models/PgClientRepository.java

@@ -110,29 +110,34 @@ public class PgClientRepository implements DbRepository {
 
     @Override
     public World updateWorld(World world) {
-        try {
-            updateWorlds(List.of(world), 0, updatePool);
-            return world;
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
+        return Single.create(queryPool.preparedQuery("UPDATE world SET randomnumber = $1 WHERE id = $2")
+                .execute(Tuple.of(world.id, world.id))
+                .toCompletionStage()
+                .thenApply(rows -> world)).await();
     }
 
     @Override
     public List<World> updateWorlds(int count) {
         List<World> worlds = getWorlds(count);
-        for (World w : worlds) {
-            w.randomNumber = randomWorldNumber();
-        }
-        if (count <= batchSize) {
-            LOGGER.finest(() -> "Updating single batch of size " + count);
-            updateWorldsRetry(worlds, 0, 0);
-        } else {
-            int batches = count / batchSize + (count % batchSize == 0 ? 0 : 1);
-            for (int i = 0; i < batches; i++) {
-                final int from = i * batchSize;
-                LOGGER.finest(() -> "Updating batch from " + from + " to " + (from + batchSize));
-                updateWorldsRetry(worlds, from, 0);
+        if (batchSize > 1) {        // batching updates
+            for (World w : worlds) {
+                w.randomNumber = randomWorldNumber();
+            }
+            if (count <= batchSize) {
+                LOGGER.finest(() -> "Updating single batch of size " + count);
+                updateWorldsRetry(worlds, 0, 0);
+            } else {
+                int batches = count / batchSize + (count % batchSize == 0 ? 0 : 1);
+                for (int i = 0; i < batches; i++) {
+                    final int from = i * batchSize;
+                    LOGGER.finest(() -> "Updating batch from " + from + " to " + (from + batchSize));
+                    updateWorldsRetry(worlds, from, 0);
+                }
+            }
+        } else {                    // no batching for size 1
+            for (World w : worlds) {
+                w.randomNumber = randomWorldNumber();
+                updateWorld(w);
             }
         }
         return worlds;

+ 4 - 4
frameworks/Java/helidon/nima/src/main/java/io/helidon/benchmark/nima/services/DbService.java

@@ -7,10 +7,10 @@ import java.util.List;
 import io.helidon.benchmark.nima.models.DbRepository;
 import io.helidon.benchmark.nima.models.World;
 import io.helidon.common.parameters.Parameters;
-import io.helidon.nima.webserver.http.HttpRules;
-import io.helidon.nima.webserver.http.HttpService;
-import io.helidon.nima.webserver.http.ServerRequest;
-import io.helidon.nima.webserver.http.ServerResponse;
+import io.helidon.webserver.http.HttpRules;
+import io.helidon.webserver.http.HttpService;
+import io.helidon.webserver.http.ServerRequest;
+import io.helidon.webserver.http.ServerResponse;
 
 import jakarta.json.Json;
 import jakarta.json.JsonArrayBuilder;

+ 3 - 3
frameworks/Java/helidon/nima/src/main/java/io/helidon/benchmark/nima/services/FortuneHandler.java

@@ -7,9 +7,9 @@ import java.util.List;
 import com.fizzed.rocker.runtime.ArrayOfByteArraysOutput;
 import io.helidon.benchmark.nima.models.DbRepository;
 import io.helidon.benchmark.nima.models.Fortune;
-import io.helidon.nima.webserver.http.Handler;
-import io.helidon.nima.webserver.http.ServerRequest;
-import io.helidon.nima.webserver.http.ServerResponse;
+import io.helidon.webserver.http.Handler;
+import io.helidon.webserver.http.ServerRequest;
+import io.helidon.webserver.http.ServerResponse;
 import views.fortunes;
 
 import static io.helidon.benchmark.nima.Main.CONTENT_TYPE_HTML;

+ 12 - 18
frameworks/Java/helidon/nima/src/main/resources/application.yaml

@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2022, 2023 Oracle and/or its affiliates.
+# Copyright (c) 2022, 2024 Oracle and/or its affiliates.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -15,33 +15,27 @@
 #
 
 server:
+  host: 0.0.0.0
   port: 8080
-  sockets:
-    - name: "@default"
-      host: 0.0.0.0
-      port: 8080
-      backlog: 8192
-      receive-buffer-size: 64000
-      # set write-queue-length to 0 or not setting it will disable async writes
-      # write-queue-length: 1024
-      connection-options:
-        read-timeout-seconds: 0
-        connect-timeout-seconds: 0
-        send-buffer-size: 64000
-        receive-buffer-size: 64000
-  connection-providers:
+  backlog: 8192
+  write-queue-length: 8192
+  connection-options:
+    read-timeout: PT0S
+    connect-timeout: PT0S
+    tcp-no-delay: true
+  protocols:
     "http_1_1":
-      validate-headers: false
+      validate-request-headers: false
+      validate-response-headers: false
       validate-path: false
       recv-log: false
       send-log: false
 
 host: "tfb-database"
-#host: "localhost"
 db: "hello_world"
 username: benchmarkdbuser
 password: benchmarkdbpass
-sql-pool-size: 200
+sql-pool-size: 300
 db-repository: "pgclient"     # "pgclient" (default) or "hikari"
 
 # The following for pgclient only