diff --git a/frameworks/Java/vertx/README.md b/frameworks/Java/vertx/README.md
index 47a3f1d2673..1e8ef72450e 100644
--- a/frameworks/Java/vertx/README.md
+++ b/frameworks/Java/vertx/README.md
@@ -33,7 +33,7 @@ This is the Vert.x portion of a [benchmarking test suite](../) comparing a varie
## Versions
* [Java 17](https://jdk.java.net)
-* [vertx 4.3.8](http://vertx.io/)
+* [vertx 5.0.0.CR6](http://vertx.io/)
## Test URLs
diff --git a/frameworks/Java/vertx/pom.xml b/frameworks/Java/vertx/pom.xml
index 4230d89326b..a827456676c 100644
--- a/frameworks/Java/vertx/pom.xml
+++ b/frameworks/Java/vertx/pom.xml
@@ -10,22 +10,26 @@
17
vertx.App
- 4.5.9
+ 5.0.0.CR6
+ 4.2.0.Final
2.16.1
- 4.1.111.Final
- 0.0.25.Final
io.vertx
vertx-core
- ${stack.version}
+ ${vertx.version}
+
+
+ io.vertx
+ vertx-core-logging
+ ${vertx.version}
io.vertx
vertx-pg-client
- ${stack.version}
+ ${vertx.version}
com.dslplatform
@@ -151,14 +155,9 @@
- io.vertx
- vertx-io_uring-incubator
- ${stack.version}
-
-
- io.netty.incubator
- netty-incubator-transport-native-io_uring
- ${netty.io_uring.version}
+ io.netty
+ netty-transport-native-io_uring
+ ${netty.version}
linux-x86_64
diff --git a/frameworks/Java/vertx/src/main/java/vertx/App.java b/frameworks/Java/vertx/src/main/java/vertx/App.java
index 5afa269ae9e..ca9d0929cca 100755
--- a/frameworks/Java/vertx/src/main/java/vertx/App.java
+++ b/frameworks/Java/vertx/src/main/java/vertx/App.java
@@ -3,7 +3,10 @@
import com.fizzed.rocker.ContentType;
import com.fizzed.rocker.RockerOutputFactory;
import io.netty.util.concurrent.MultithreadEventExecutorGroup;
-import io.vertx.core.impl.VertxInternal;
+import io.vertx.core.impl.SysProps;
+import io.vertx.core.internal.VertxInternal;
+import io.vertx.core.internal.logging.Logger;
+import io.vertx.core.internal.logging.LoggerFactory;
import io.vertx.pgclient.*;
import io.vertx.core.*;
import io.vertx.core.buffer.Buffer;
@@ -13,8 +16,6 @@
import io.vertx.core.http.HttpServerRequest;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.core.json.JsonObject;
-import io.vertx.core.logging.Logger;
-import io.vertx.core.logging.LoggerFactory;
import io.vertx.sqlclient.*;
import io.vertx.sqlclient.impl.SqlClientInternal;
import vertx.model.*;
@@ -73,21 +74,20 @@ static int getQueries(HttpServerRequest request) {
private static final String PATH_FORTUNES = "/fortunes";
private static final String PATH_CACHING = "/cached-queries";
- private static final Handler> NULL_HANDLER = null;
-
private static final CharSequence RESPONSE_TYPE_PLAIN = HttpHeaders.createOptimized("text/plain");
private static final CharSequence RESPONSE_TYPE_HTML = HttpHeaders.createOptimized("text/html; charset=UTF-8");
- static final CharSequence RESPONSE_TYPE_JSON = HttpHeaders.createOptimized("application/json");
+ private static final CharSequence RESPONSE_TYPE_JSON = HttpHeaders.createOptimized("application/json");
private static final String HELLO_WORLD = "Hello, world!";
private static final Buffer HELLO_WORLD_BUFFER = Buffer.buffer(HELLO_WORLD, "UTF-8");
- private static final CharSequence HEADER_SERVER = HttpHeaders.createOptimized("server");
- private static final CharSequence HEADER_DATE = HttpHeaders.createOptimized("date");
- private static final CharSequence HEADER_CONTENT_TYPE = HttpHeaders.createOptimized("content-type");
- private static final CharSequence HEADER_CONTENT_LENGTH = HttpHeaders.createOptimized("content-length");
+ private static final CharSequence HEADER_SERVER = HttpHeaders.SERVER;
+ private static final CharSequence HEADER_DATE = HttpHeaders.DATE;
+ private static final CharSequence HEADER_CONTENT_TYPE = HttpHeaders.CONTENT_TYPE;
+ private static final CharSequence HEADER_CONTENT_LENGTH = HttpHeaders.CONTENT_LENGTH;
private static final CharSequence HELLO_WORLD_LENGTH = HttpHeaders.createOptimized("" + HELLO_WORLD.length());
+ private static final CharSequence JSON_LENGTH = HttpHeaders.createOptimized("" + new Message("Hello, World!").toJson().length());
private static final CharSequence SERVER = HttpHeaders.createOptimized("vert.x");
private static final String SELECT_WORLD = "SELECT id, randomnumber from WORLD where id=$1";
@@ -114,7 +114,8 @@ static Integer boxedRandomWorldNumber() {
private HttpServer server;
private SqlClientInternal client;
private CharSequence dateString;
- private CharSequence[] plaintextHeaders;
+ private MultiMap plaintextHeaders;
+ private MultiMap jsonHeaders;
private final RockerOutputFactory factory = BufferRockerOutput.factory(ContentType.RAW);
@@ -125,19 +126,43 @@ static Integer boxedRandomWorldNumber() {
private PreparedQuery>[] AGGREGATED_UPDATE_WORLD_QUERY = new PreparedQuery[500];
private WorldCache WORLD_CACHE;
+ private MultiMap plaintextHeaders() {
+ return HttpHeaders
+ .headers()
+ .add(HEADER_CONTENT_TYPE, RESPONSE_TYPE_PLAIN)
+ .add(HEADER_SERVER, SERVER)
+ .add(HEADER_DATE, dateString)
+ .add(HEADER_CONTENT_LENGTH, HELLO_WORLD_LENGTH)
+ .copy(false);
+ }
+
+ private MultiMap jsonHeaders() {
+ return HttpHeaders
+ .headers()
+ .add(HEADER_CONTENT_TYPE, RESPONSE_TYPE_JSON)
+ .add(HEADER_SERVER, SERVER)
+ .add(HEADER_DATE, dateString)
+ .add(HEADER_CONTENT_LENGTH, JSON_LENGTH)
+ .copy(false);
+ }
+
@Override
public void start(Promise startPromise) throws Exception {
int port = 8080;
- server = vertx.createHttpServer(new HttpServerOptions())
+ server = vertx
+ .createHttpServer(new HttpServerOptions()
+ .setHttp2ClearTextEnabled(false)
+ .setStrictThreadMode(true))
.requestHandler(App.this);
dateString = createDateHeader();
- plaintextHeaders = new CharSequence[] {
- HEADER_CONTENT_TYPE, RESPONSE_TYPE_PLAIN,
- HEADER_SERVER, SERVER,
- HEADER_DATE, dateString,
- HEADER_CONTENT_LENGTH, HELLO_WORLD_LENGTH };
+ plaintextHeaders = plaintextHeaders();
+ jsonHeaders = jsonHeaders();
JsonObject config = config();
- vertx.setPeriodic(1000, id -> plaintextHeaders[5] = dateString = createDateHeader());
+ vertx.setPeriodic(1000, id -> {
+ dateString = createDateHeader();
+ plaintextHeaders = plaintextHeaders();
+ jsonHeaders = jsonHeaders();
+ });
PgConnectOptions options = new PgConnectOptions();
options.setDatabase(config.getString("database", "hello_world"));
options.setHost(config.getString("host", "tfb-database"));
@@ -261,26 +286,19 @@ private void sendError(HttpServerRequest req, Throwable cause) {
private void handlePlainText(HttpServerRequest request) {
HttpServerResponse response = request.response();
- MultiMap headers = response.headers();
- for (int i = 0;i < plaintextHeaders.length; i+= 2) {
- headers.add(plaintextHeaders[i], plaintextHeaders[i + 1]);
- }
- response.end(HELLO_WORLD_BUFFER, NULL_HANDLER);
+ response.headers().setAll(plaintextHeaders);
+ response.end(HELLO_WORLD_BUFFER);
}
private void handleJson(HttpServerRequest request) {
HttpServerResponse response = request.response();
- MultiMap headers = response.headers();
- headers
- .add(HEADER_CONTENT_TYPE, RESPONSE_TYPE_JSON)
- .add(HEADER_SERVER, SERVER)
- .add(HEADER_DATE, dateString);
- response.end(new Message("Hello, World!").toJson(), NULL_HANDLER);
+ response.headers().setAll(jsonHeaders);
+ response.end(new Message("Hello, World!").toJson());
}
private void handleDb(HttpServerRequest req) {
HttpServerResponse resp = req.response();
- SELECT_WORLD_QUERY.execute(Tuple.of(boxedRandomWorldNumber()), res -> {
+ SELECT_WORLD_QUERY.execute(Tuple.of(boxedRandomWorldNumber())).onComplete(res -> {
if (res.succeeded()) {
RowIterator resultSet = res.result().iterator();
if (!resultSet.hasNext()) {
@@ -293,7 +311,7 @@ private void handleDb(HttpServerRequest req) {
headers.add(HttpHeaders.SERVER, SERVER);
headers.add(HttpHeaders.DATE, dateString);
headers.add(HttpHeaders.CONTENT_TYPE, RESPONSE_TYPE_JSON);
- resp.end(word.toJson(), NULL_HANDLER);
+ resp.end(word.toJson());
} else {
sendError(req, res.cause());
}
@@ -322,7 +340,9 @@ public Queries(HttpServerRequest req) {
private void handle() {
client.group(c -> {
for (int i = 0; i < queries; i++) {
- c.preparedQuery(SELECT_WORLD).execute(Tuple.of(boxedRandomWorldNumber()), this);
+ c.preparedQuery(SELECT_WORLD)
+ .execute(Tuple.of(boxedRandomWorldNumber()))
+ .onComplete(this);
}
});
}
@@ -346,7 +366,7 @@ public void handle(AsyncResult> ar) {
headers.add(HttpHeaders.SERVER, SERVER);
headers.add(HttpHeaders.DATE, dateString);
headers.add(HttpHeaders.CONTENT_TYPE, RESPONSE_TYPE_JSON);
- resp.end(World.toJson(worlds), NULL_HANDLER);
+ resp.end(World.toJson(worlds));
}
}
}
@@ -370,7 +390,7 @@ public void handle() {
for (int i = 0; i < worldsToUpdate.length; i++) {
final Integer id = boxedRandomWorldNumber();
final int index = i;
- preparedQuery.execute(Tuple.of(id), res -> {
+ preparedQuery.execute(Tuple.of(id)).onComplete(res -> {
if (!failed) {
if (res.failed()) {
failed = true;
@@ -395,7 +415,9 @@ private void randomWorldsQueryCompleted() {
params.add(world.getId());
params.add(world.getRandomNumber());
}
- AGGREGATED_UPDATE_WORLD_QUERY[worldsToUpdate.length - 1].execute(Tuple.wrap(params), updateResult -> {
+ AGGREGATED_UPDATE_WORLD_QUERY[worldsToUpdate.length - 1]
+ .execute(Tuple.wrap(params))
+ .onComplete(updateResult -> {
if (updateResult.failed()) {
sendError(request, updateResult.cause());
return;
@@ -411,12 +433,14 @@ private void sendResponse() {
headers.add(HttpHeaders.DATE, dateString);
headers.add(HttpHeaders.CONTENT_TYPE, RESPONSE_TYPE_JSON);
Buffer buff = WorldJsonSerializer.toJsonBuffer(worldsToUpdate);
- res.end(buff, null);
+ res.end(buff);
}
}
private void handleFortunes(HttpServerRequest req) {
- SELECT_FORTUNE_QUERY.execute(ar -> {
+ SELECT_FORTUNE_QUERY
+ .execute()
+ .onComplete(ar -> {
HttpServerResponse response = req.response();
if (ar.succeeded()) {
SqlResult> result = ar.result();
@@ -432,7 +456,7 @@ private void handleFortunes(HttpServerRequest req) {
headers.add(HttpHeaders.DATE, dateString);
headers.add(HttpHeaders.CONTENT_TYPE, RESPONSE_TYPE_HTML);
FortunesTemplate template = FortunesTemplate.template(fortunes);
- response.end(template.render(factory).buffer(), NULL_HANDLER);
+ response.end(template.render(factory).buffer());
} else {
sendError(req, ar.cause());
}
@@ -457,7 +481,7 @@ private void handleCaching(HttpServerRequest req) {
.add(HEADER_CONTENT_TYPE, RESPONSE_TYPE_JSON)
.add(HEADER_SERVER, SERVER)
.add(HEADER_DATE, dateString);
- response.end(CachedWorld.toJson(worlds), NULL_HANDLER);
+ response.end(CachedWorld.toJson(worlds));
}
public static void main(String[] args) throws Exception {
@@ -471,24 +495,30 @@ public static void main(String[] args) throws Exception {
}
}
JsonObject config = new JsonObject(new String(Files.readAllBytes(new File(args[0]).toPath())));
- Vertx vertx = Vertx.vertx(new VertxOptions().setEventLoopPoolSize(eventLoopPoolSize).setPreferNativeTransport(true));
+ Vertx vertx = Vertx.vertx(new VertxOptions()
+ .setEventLoopPoolSize(eventLoopPoolSize)
+ .setPreferNativeTransport(true)
+ .setDisableTCCL(true)
+ );
vertx.exceptionHandler(err -> {
err.printStackTrace();
});
- printConfig(vertx);
- vertx.deployVerticle(App.class.getName(),
- new DeploymentOptions().setInstances(eventLoopPoolSize).setConfig(config), event -> {
- if (event.succeeded()) {
- logger.info("Server listening on port " + 8080);
- } else {
- logger.error("Unable to start your application", event.cause());
- }
- });
+ printConfig((VertxInternal) vertx);
+ vertx.deployVerticle(
+ App.class.getName(),
+ new DeploymentOptions().setInstances(eventLoopPoolSize).setConfig(config))
+ .onComplete(event -> {
+ if (event.succeeded()) {
+ logger.info("Server listening on port " + 8080);
+ } else {
+ logger.error("Unable to start your application", event.cause());
+ }
+ });
}
- private static void printConfig(Vertx vertx) {
+ private static void printConfig(VertxInternal vertx) {
boolean nativeTransport = vertx.isNativeTransportEnabled();
- String transport = ((VertxInternal) vertx).transport().getClass().getSimpleName();
+ String transport = vertx.transport().getClass().getSimpleName();
String version = "unknown";
try {
InputStream in = Vertx.class.getClassLoader().getResourceAsStream("META-INF/vertx/vertx-version.txt");
@@ -513,5 +543,10 @@ private static void printConfig(Vertx vertx) {
logger.info("Event Loop Size: " + ((MultithreadEventExecutorGroup)vertx.nettyEventLoopGroup()).executorCount());
logger.info("Native transport : " + nativeTransport);
logger.info("Transport : " + transport);
+ logger.info("Netty buffer bound check : " + System.getProperty("io.netty.buffer.checkBounds"));
+ logger.info("Netty buffer accessibility check : " + System.getProperty("io.netty.buffer.checkAccessible"));
+ for (SysProps sysProp : SysProps.values()) {
+ logger.info(sysProp.name + " : " + sysProp.get());
+ }
}
}
diff --git a/frameworks/Java/vertx/src/main/java/vertx/rocker/BufferRockerOutput.java b/frameworks/Java/vertx/src/main/java/vertx/rocker/BufferRockerOutput.java
index 326d45e3e96..36d1144f5d6 100644
--- a/frameworks/Java/vertx/src/main/java/vertx/rocker/BufferRockerOutput.java
+++ b/frameworks/Java/vertx/src/main/java/vertx/rocker/BufferRockerOutput.java
@@ -5,7 +5,8 @@
import com.fizzed.rocker.RockerOutputFactory;
import io.netty.buffer.ByteBuf;
import io.vertx.core.buffer.Buffer;
-import io.vertx.core.buffer.impl.PartialPooledByteBufAllocator;
+import io.vertx.core.impl.buffer.VertxByteBufAllocator;
+import io.vertx.core.internal.buffer.BufferInternal;
import java.io.IOException;
import java.nio.charset.Charset;
@@ -21,8 +22,8 @@ public static RockerOutputFactory factory(ContentType conten
};
}
- private final ByteBuf buff = PartialPooledByteBufAllocator.INSTANCE.directBuffer();
- private final Buffer buffer = Buffer.buffer(buff);
+ private final ByteBuf buff = VertxByteBufAllocator.DEFAULT.directBuffer();
+ private final Buffer buffer = BufferInternal.buffer(buff);
private final ContentType contentType;
BufferRockerOutput(ContentType contentType) {
diff --git a/frameworks/Java/vertx/vertx-postgres.dockerfile b/frameworks/Java/vertx/vertx-postgres.dockerfile
index dec7fa545a3..95e731f2d9a 100644
--- a/frameworks/Java/vertx/vertx-postgres.dockerfile
+++ b/frameworks/Java/vertx/vertx-postgres.dockerfile
@@ -16,13 +16,11 @@ CMD export DBIP=`getent hosts tfb-database | awk '{ print $1 }'` && \
-XX:+UseParallelGC \
-Djava.lang.Integer.IntegerCache.high=10000 \
-Dvertx.disableMetrics=true \
- -Dvertx.disableH2c=true \
-Dvertx.disableWebsockets=true \
- -Dvertx.flashPolicyHandler=false \
- -Dvertx.threadChecks=false \
-Dvertx.disableContextTimings=true \
- -Dvertx.disableTCCL=true \
-Dvertx.disableHttpHeadersValidation=true \
+ -Dvertx.cacheImmutableHttpResponseHeaders=true \
+ -Dvertx.internCommonHttpRequestHeadersToLowerCase=true \
-Dvertx.eventLoopPoolSize=$((`grep --count ^processor /proc/cpuinfo`)) \
-Dio.netty.buffer.checkBounds=false \
-Dio.netty.buffer.checkAccessible=false \
diff --git a/frameworks/Java/vertx/vertx.dockerfile b/frameworks/Java/vertx/vertx.dockerfile
index 2fe2a27a2c2..27c34140e64 100644
--- a/frameworks/Java/vertx/vertx.dockerfile
+++ b/frameworks/Java/vertx/vertx.dockerfile
@@ -6,4 +6,4 @@ RUN mvn package -q
EXPOSE 8080
-CMD ["java", "-Xms2G", "-Xmx2G", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Djava.lang.Integer.IntegerCache.high=10000", "-Dvertx.disableMetrics=true", "-Dvertx.disableH2c=true", "-Dvertx.disableWebsockets=true", "-Dvertx.flashPolicyHandler=false", "-Dvertx.threadChecks=false", "-Dvertx.disableContextTimings=true", "-Dvertx.disableTCCL=true", "-Dvertx.disableHttpHeadersValidation=true", "-Dio.netty.buffer.checkBounds=false", "-Dio.netty.buffer.checkAccessible=false", "-jar", "target/vertx.benchmark-0.0.1-SNAPSHOT-fat.jar", "src/main/conf/config.json"]
+CMD ["java", "-Xms2G", "-Xmx2G", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Djava.lang.Integer.IntegerCache.high=10000", "-Dvertx.disableMetrics=true", "-Dvertx.disableWebsockets=true", "-Dvertx.disableContextTimings=true", "-Dvertx.disableHttpHeadersValidation=true", "-Dvertx.cacheImmutableHttpResponseHeaders=true", "-Dvertx.internCommonHttpRequestHeadersToLowerCase=true", "-Dio.netty.buffer.checkBounds=false", "-Dio.netty.buffer.checkAccessible=false", "-jar", "target/vertx.benchmark-0.0.1-SNAPSHOT-fat.jar", "src/main/conf/config.json"]