Browse Source

Upgrade to Inverno 1.10.0 (#8943)

* Inverno framework test

* Remove unused code

* Optimization

* remove db.sql

* Upgrade to Inverno 1.2.2

* Upgrade to Inverno 1.4.1

* Update README.md

* Upgrade to Inverno 1.6.2

* Add missing binutils when building docker images

* Fix inverno postgres CMD

* Upgrade to Inverno 1.7.0

* Upgrade to Inverno 1.9.0 + make app resilient to DB connection loss

* Upgrade to Inverno 1.10.0 + minor changes
Jeremy Kuhn 1 year ago
parent
commit
e68f504e27

+ 3 - 2
frameworks/Java/inverno/inverno-postgres.dockerfile

@@ -7,6 +7,7 @@ RUN mvn package -q -Pio.inverno.io_uring
 
 EXPOSE 8080
 
-# CMD [ "target/inverno-benchmark-1.0.0-SNAPSHOT-application_linux_amd64/bin/inverno-benchmark" ]
 CMD export DBIP=`getent hosts tfb-database | awk '{ print $1 }'` && \
-    target/inverno-benchmark-1.0.0-SNAPSHOT-application_linux_amd64/bin/inverno-benchmark --com.techempower.inverno.benchmark.appConfiguration.db_host=\"$DBIP\"
+    target/inverno-benchmark-1.0.0-SNAPSHOT-application_linux_amd64/bin/inverno-benchmark \
+    --com.techempower.inverno.benchmark.appConfiguration.db_host=\"$DBIP\" \
+    --com.techempower.inverno.benchmark.appConfiguration.boot.reactor_event_loop_group_size=$((`grep --count ^processor /proc/cpuinfo`))

+ 4 - 4
frameworks/Java/inverno/pom.xml

@@ -6,7 +6,7 @@
 	<parent>
 		<groupId>io.inverno.dist</groupId>
 		<artifactId>inverno-parent</artifactId>
-		<version>1.9.0</version>
+		<version>1.10.0</version>
 	</parent>
 	<groupId>com.techempower</groupId>
 	<artifactId>inverno-benchmark</artifactId>
@@ -47,7 +47,7 @@
 			<groupId>io.inverno.mod</groupId>
 			<artifactId>inverno-sql-vertx</artifactId>
 		</dependency>
-		
+
 		<dependency>
 			<groupId>org.unbescape</groupId>
 			<artifactId>unbescape</artifactId>
@@ -110,7 +110,7 @@
 									<launchers>
 										<launcher>
 											<name>inverno-benchmark</name>
-											<vmOptions>-Xms2g -Xmx2g -server -XX:+UseNUMA -XX:+UseParallelGC -Dio.netty.leakDetection.level=disabled -Dio.netty.buffer.checkBounds=false -Dio.netty.buffer.checkBounds=false -Dvertx.disableHttpHeadersValidation=true -Dvertx.disableMetrics=true -Dvertx.disableH2c=true -Dvertx.disableWebsockets=true -Dvertx.flashPolicyHandler=false -Dvertx.threadChecks=false -Dvertx.disableContextTimings=true -Dvertx.disableTCCL=true --add-modules io.netty.transport.unix.common,io.netty.transport.classes.epoll,io.netty.transport.epoll.linux.x86_64</vmOptions>
+											<vmOptions>-Xms2g -Xmx2g -server -XX:+UseNUMA -XX:+UseParallelGC -Dlog4j2.level=OFF -Dio.netty.leakDetection.level=disabled -Dio.netty.buffer.checkBounds=false -Dio.netty.buffer.checkAccessible=false -Dvertx.disableHttpHeadersValidation=true -Dvertx.disableMetrics=true -Dvertx.disableH2c=true -Dvertx.disableWebsockets=true -Dvertx.flashPolicyHandler=false -Dvertx.threadChecks=false -Dvertx.disableContextTimings=true -Dvertx.disableTCCL=true --add-modules io.netty.transport.unix.common,io.netty.transport.classes.epoll,io.netty.transport.epoll.linux.x86_64</vmOptions>
 										</launcher>
 									</launchers>
 									<archiveFormats>
@@ -157,7 +157,7 @@
 									<launchers>
 										<launcher>
 											<name>inverno-benchmark</name>
-											<vmOptions>-Xms2g -Xmx2g -server -XX:+UseNUMA -XX:+UseParallelGC -Dio.netty.leakDetection.level=disabled -Dio.netty.buffer.checkBounds=false -Dio.netty.buffer.checkBounds=false -Dvertx.disableHttpHeadersValidation=true -Dvertx.disableMetrics=true -Dvertx.disableH2c=true -Dvertx.disableWebsockets=true -Dvertx.flashPolicyHandler=false -Dvertx.threadChecks=false -Dvertx.disableContextTimings=true -Dvertx.disableTCCL=true --add-modules io.netty.transport.unix.common,io.netty.incubator.transport.classes.io_uring,io.netty.incubator.transport.io_uring.linux.x86_64</vmOptions>
+											<vmOptions>-Xms2g -Xmx2g -server -XX:+UseNUMA -XX:+UseParallelGC -Dlog4j2.level=OFF -Dio.netty.leakDetection.level=disabled -Dio.netty.buffer.checkBounds=false -Dio.netty.buffer.checkAccessible=false -Dvertx.disableHttpHeadersValidation=true -Dvertx.disableMetrics=true -Dvertx.disableH2c=true -Dvertx.disableWebsockets=true -Dvertx.flashPolicyHandler=false -Dvertx.threadChecks=false -Dvertx.disableContextTimings=true -Dvertx.disableTCCL=true --add-modules io.netty.transport.unix.common,io.netty.incubator.transport.classes.io_uring,io.netty.incubator.transport.io_uring.linux.x86_64</vmOptions>
 										</launcher>
 									</launchers>
 									<archiveFormats>

+ 15 - 15
frameworks/Java/inverno/src/main/java/com/techempower/inverno/benchmark/internal/Controller.java

@@ -1,20 +1,11 @@
 package com.techempower.inverno.benchmark.internal;
 
-import java.time.ZonedDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.Collections;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ThreadLocalRandom;
-import java.util.concurrent.TimeUnit;
-import java.util.function.Supplier;
-
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.techempower.inverno.benchmark.model.Fortune;
 import com.techempower.inverno.benchmark.model.Message;
 import com.techempower.inverno.benchmark.model.World;
 import com.techempower.inverno.benchmark.templates.FortunesTemplate;
-
 import io.inverno.core.annotation.Bean;
 import io.inverno.core.annotation.Bean.Visibility;
 import io.inverno.core.annotation.Destroy;
@@ -39,6 +30,13 @@ import io.netty.channel.EventLoopGroup;
 import io.netty.handler.codec.http.HttpHeaderNames;
 import io.netty.handler.codec.http.HttpHeaderValues;
 import io.netty.util.AsciiString;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Collections;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Supplier;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
@@ -81,6 +79,8 @@ public class Controller implements ServerController<ExchangeContext, Exchange<Ex
 		this.dateEventLoopGroup.scheduleAtFixedRate(() -> {
 			this.date = new AsciiString(DateTimeFormatter.RFC_1123_DATE_TIME.format(ZonedDateTime.now()));
 		}, 0, 1000, TimeUnit.MILLISECONDS);
+		
+		
 	}
 	
 	@Destroy
@@ -133,7 +133,7 @@ public class Controller implements ServerController<ExchangeContext, Exchange<Ex
 
 	private static final ByteBuf STATIC_PLAINTEXT_BYTEBUF;
 	static {
-		ByteBuf tmpBuf = Unpooled.directBuffer(STATIC_PLAINTEXT_LEN);
+		ByteBuf tmpBuf = Unpooled.buffer(STATIC_PLAINTEXT_LEN);
 		tmpBuf.writeBytes(STATIC_PLAINTEXT);
 		STATIC_PLAINTEXT_BYTEBUF = Unpooled.unreleasableBuffer(tmpBuf);
 	}
@@ -172,7 +172,7 @@ public class Controller implements ServerController<ExchangeContext, Exchange<Ex
 				)
 				.body()
 					.raw()
-						.value(Unpooled.unreleasableBuffer(Unpooled.wrappedBuffer(this.mapper.writeValueAsBytes(new Message("Hello, World!")))));
+						.value(Unpooled.wrappedBuffer(this.mapper.writeValueAsBytes(new Message("Hello, World!"))));
 		} 
 		catch (JsonProcessingException | IllegalStateException e) {
 			throw new InternalServerErrorException("Error serializing message as JSON", e);
@@ -196,7 +196,7 @@ public class Controller implements ServerController<ExchangeContext, Exchange<Ex
 						DB_SELECT_WORLD, 
 						row -> {
 							try {
-								return Unpooled.unreleasableBuffer(Unpooled.wrappedBuffer(this.mapper.writeValueAsBytes(new World(row.getInteger(0), row.getInteger(1)))));
+								return Unpooled.wrappedBuffer(this.mapper.writeValueAsBytes(new World(row.getInteger(0), row.getInteger(1))));
 							} 
 							catch (JsonProcessingException e) {
 								throw new InternalServerErrorException(e);
@@ -241,7 +241,7 @@ public class Controller implements ServerController<ExchangeContext, Exchange<Ex
 					.collectList()
 					.map(worlds -> {
 						try {
-							return Unpooled.unreleasableBuffer(Unpooled.wrappedBuffer(this.mapper.writeValueAsBytes(worlds)));
+							return Unpooled.wrappedBuffer(this.mapper.writeValueAsBytes(worlds));
 						} 
 						catch (JsonProcessingException e) {
 							throw new InternalServerErrorException(e);
@@ -278,7 +278,7 @@ public class Controller implements ServerController<ExchangeContext, Exchange<Ex
 					)
 					.map(worlds -> {
 						try {
-							return Unpooled.unreleasableBuffer(Unpooled.wrappedBuffer(this.mapper.writeValueAsBytes(worlds)));
+							return Unpooled.wrappedBuffer(this.mapper.writeValueAsBytes(worlds));
 						} 
 						catch (JsonProcessingException e) {
 							throw new InternalServerErrorException(e);
@@ -290,7 +290,7 @@ public class Controller implements ServerController<ExchangeContext, Exchange<Ex
 	
 	private static final CharSequence MEDIA_TEXT_HTML_UTF8 = AsciiString.cached("text/html; charset=utf-8");
 	
-	private static final FortunesTemplate.Renderer<CompletableFuture<ByteBuf>> FORTUNES_RENDERER = FortunesTemplate.bytebuf(() -> Unpooled.unreleasableBuffer(Unpooled.buffer()));
+	private static final FortunesTemplate.Renderer<CompletableFuture<ByteBuf>> FORTUNES_RENDERER = FortunesTemplate.bytebuf(() -> Unpooled.buffer());
 	
 	public void handle_fortunes(Exchange<ExchangeContext> exchange) throws HttpException {
 		exchange.response()

+ 3 - 1
frameworks/Java/inverno/src/main/resources/configuration.cprops

@@ -6,7 +6,9 @@ com.techempower.inverno.benchmark.appConfiguration {
 	http_server { 
 		tls_enabled = false
 		server_port = 8080
-		h2c_enabled = false
+		h2_enabled = false
+		http1x_validate_headers = false
+		ws_enabled = false
 	}
 	db_database = "hello_world"
 	db_host = "tfb-database"