Browse Source

Fixed pipeline limits and added Postgres test.

nmihajlovski 8 years ago
parent
commit
b333d6f4bb

+ 23 - 5
frameworks/Java/rapidoid/benchmark_config.json

@@ -3,7 +3,7 @@
   "tests": [
   "tests": [
     {
     {
       "default": {
       "default": {
-        "setup_file": "setup-high-level",
+        "setup_file": "setup-default",
         "json_url": "/json",
         "json_url": "/json",
         "plaintext_url": "/plaintext",
         "plaintext_url": "/plaintext",
         "port": 8080,
         "port": 8080,
@@ -22,8 +22,8 @@
         "versus": ""
         "versus": ""
       },
       },
       "mysql": {
       "mysql": {
-        "setup_file": "setup-high-level",
-        "fortune_url": "/fortunes/mysql",
+        "setup_file": "setup-mysql",
+        "fortune_url": "/fortunes",
         "port": 8080,
         "port": 8080,
         "approach": "Realistic",
         "approach": "Realistic",
         "classification": "Platform",
         "classification": "Platform",
@@ -35,12 +35,30 @@
         "webserver": "None",
         "webserver": "None",
         "os": "Linux",
         "os": "Linux",
         "database_os": "Linux",
         "database_os": "Linux",
-        "display_name": "rapidoid",
+        "display_name": "rapidoid-mysql",
+        "notes": "",
+        "versus": ""
+      },
+      "postgres": {
+        "setup_file": "setup-postgres",
+        "fortune_url": "/fortunes",
+        "port": 8080,
+        "approach": "Realistic",
+        "classification": "Platform",
+        "database": "Postgres",
+        "framework": "rapidoid",
+        "language": "Java",
+        "orm": "micro",
+        "platform": "Rapidoid",
+        "webserver": "None",
+        "os": "Linux",
+        "database_os": "Linux",
+        "display_name": "rapidoid-postgres",
         "notes": "",
         "notes": "",
         "versus": ""
         "versus": ""
       },
       },
       "http-fast": {
       "http-fast": {
-        "setup_file": "setup-low-level",
+        "setup_file": "setup-http-fast",
         "json_url": "/json",
         "json_url": "/json",
         "plaintext_url": "/plaintext",
         "plaintext_url": "/plaintext",
         "port": 8080,
         "port": 8080,

+ 7 - 1
frameworks/Java/rapidoid/pom.xml

@@ -16,7 +16,12 @@
 		<dependency>
 		<dependency>
 			<groupId>org.rapidoid</groupId>
 			<groupId>org.rapidoid</groupId>
 			<artifactId>rapidoid-quick</artifactId>
 			<artifactId>rapidoid-quick</artifactId>
-			<version>5.2.2</version>
+			<version>5.2.6</version>
+		</dependency>
+		<dependency>
+			<groupId>org.postgresql</groupId>
+			<artifactId>postgresql</artifactId>
+			<version>9.4.1211</version>
 		</dependency>
 		</dependency>
 	</dependencies>
 	</dependencies>
 
 
@@ -38,6 +43,7 @@
 
 
 			<plugin>
 			<plugin>
 				<artifactId>maven-assembly-plugin</artifactId>
 				<artifactId>maven-assembly-plugin</artifactId>
+				<version>2.6</version>
 				<configuration>
 				<configuration>
 					<descriptorRefs>
 					<descriptorRefs>
 						<descriptorRef>jar-with-dependencies</descriptorRef>
 						<descriptorRef>jar-with-dependencies</descriptorRef>

+ 12 - 0
frameworks/Java/rapidoid/setup-default.sh

@@ -0,0 +1,12 @@
+#!/bin/bash
+
+fw_depends java maven
+
+mvn clean compile assembly:single
+
+cd target
+
+java -server \
+  -XX:+UseNUMA -XX:+UseParallelGC -XX:+AggressiveOpts -cp \
+  rapidoid-1.0-jar-with-dependencies.jar \
+  highlevel.Main profiles=production dbhost="$DBHOST" &

+ 0 - 8
frameworks/Java/rapidoid/setup-high-level.sh

@@ -1,8 +0,0 @@
-#!/bin/bash
-
-fw_depends java maven
-
-mvn clean compile assembly:single
-
-cd target
-java -server -XX:+UseNUMA -XX:+UseParallelGC -XX:+AggressiveOpts -cp rapidoid-1.0-jar-with-dependencies.jar highlevel.Main dbhost="$DBHOST" &

+ 12 - 0
frameworks/Java/rapidoid/setup-http-fast.sh

@@ -0,0 +1,12 @@
+#!/bin/bash
+
+fw_depends java maven
+
+mvn clean compile assembly:single
+
+cd target
+
+java -server \
+  -XX:+UseNUMA -XX:+UseParallelGC -XX:+AggressiveOpts -cp \
+  rapidoid-1.0-jar-with-dependencies.jar \
+  lowlevel.Main profiles=production dbhost="$DBHOST" &

+ 0 - 8
frameworks/Java/rapidoid/setup-low-level.sh

@@ -1,8 +0,0 @@
-#!/bin/bash
-
-fw_depends java maven
-
-mvn clean compile assembly:single
-
-cd target
-java -server -XX:+UseNUMA -XX:+UseParallelGC -XX:+AggressiveOpts -cp rapidoid-1.0-jar-with-dependencies.jar lowlevel.Main &

+ 12 - 0
frameworks/Java/rapidoid/setup-mysql.sh

@@ -0,0 +1,12 @@
+#!/bin/bash
+
+fw_depends java maven
+
+mvn clean compile assembly:single
+
+cd target
+
+java -server \
+  -XX:+UseNUMA -XX:+UseParallelGC -XX:+AggressiveOpts -cp \
+  rapidoid-1.0-jar-with-dependencies.jar \
+  highlevel.Main profiles=mysql,production dbhost="$DBHOST" &

+ 12 - 0
frameworks/Java/rapidoid/setup-postgres.sh

@@ -0,0 +1,12 @@
+#!/bin/bash
+
+fw_depends java maven
+
+mvn clean compile assembly:single
+
+cd target
+
+java -server \
+  -XX:+UseNUMA -XX:+UseParallelGC -XX:+AggressiveOpts -cp \
+  rapidoid-1.0-jar-with-dependencies.jar \
+  highlevel.Main profiles=postgres,production dbhost="$DBHOST" &

+ 11 - 4
frameworks/Java/rapidoid/src/main/java/common/Helper.java

@@ -2,11 +2,18 @@ package common;
 
 
 public class Helper {
 public class Helper {
 
 
-	// this configuration was copied from the undertow-example project
-	public static final String MYSQL_CONFIG = "jdbcCompliantTruncation=false" +
+	// most of this configuration was copied from the other projects
+	public static final String MYSQL_CONFIG = "useSSL=false&jdbcCompliantTruncation=false" +
 		"&elideSetAutoCommits=true&useLocalSessionState=true&cachePrepStmts=true&cacheCallableStmts=true" +
 		"&elideSetAutoCommits=true&useLocalSessionState=true&cachePrepStmts=true&cacheCallableStmts=true" +
 		"&alwaysSendSetIsolation=false&prepStmtCacheSize=4096&cacheServerConfiguration=true&prepStmtCacheSqlLimit=2048" +
 		"&alwaysSendSetIsolation=false&prepStmtCacheSize=4096&cacheServerConfiguration=true&prepStmtCacheSqlLimit=2048" +
-		"&zeroDateTimeBehavior=convertToNull&traceProtocol=false&useUnbufferedInput=false&useReadAheadInput=false" +
-		"&maintainTimeStats=false&useServerPrepStmts&cacheRSMetadata=true";
+		"&zeroDateTimeBehavior=convertToNull&traceProtocol=false&useServerPrepStmts=true&enableQueryTimeouts=false" +
+		"&useUnbufferedIO=false&useReadAheadInput=false&maintainTimeStats=false&cacheRSMetadata=true";
+
+	// most of this configuration was copied from the other projects
+	public static final String POSTGRES_CONFIG = "jdbcCompliantTruncation=false" +
+		"&elideSetAutoCommits=true&useLocalSessionState=true&cachePrepStmts=true&cacheCallableStmts=true" +
+		"&alwaysSendSetIsolation=false&prepStmtCacheSize=4096&cacheServerConfiguration=true&prepStmtCacheSqlLimit=2048" +
+		"&zeroDateTimeBehavior=convertToNull&traceProtocol=false&useServerPrepStmts=true&enableQueryTimeouts=false" +
+		"&useUnbufferedIO=false&useReadAheadInput=false&maintainTimeStats=false&cacheRSMetadata=true";
 
 
 }
 }

+ 32 - 13
frameworks/Java/rapidoid/src/main/java/highlevel/Main.java

@@ -2,6 +2,7 @@ package highlevel;
 
 
 import common.Helper;
 import common.Helper;
 import common.Message;
 import common.Message;
+import org.rapidoid.commons.Env;
 import org.rapidoid.config.Conf;
 import org.rapidoid.config.Conf;
 import org.rapidoid.http.MediaType;
 import org.rapidoid.http.MediaType;
 import org.rapidoid.log.Log;
 import org.rapidoid.log.Log;
@@ -14,31 +15,49 @@ public class Main {
 
 
 	public static void main(String[] args) {
 	public static void main(String[] args) {
 
 
-		App.args(args,
-			"production",
-			"c3p0.maxPoolSize=256",
-			"c3p0.maxIdleTimeExcessConnections=256",
-			"c3p0.maxStatementsPerConnection=3",
-			"http.serverName=X",
-			"http.mandatoryHeaders.connection=false",
-			"http.timeout=0");
+		App.args(args);
 
 
-		String dbHost = Conf.ROOT.entry("dbhost").or("localhost");
-		Log.info("Database hostname is: " + dbHost);
+		Conf.C3P0.set("maxPoolSize", 256);
+		Conf.C3P0.set("maxIdleTimeExcessConnections", 256);
+		Conf.C3P0.set("maxStatementsPerConnection", 3);
+
+		Conf.HTTP.set("maxPipeline", 128);
+		Conf.HTTP.set("timeout", 0);
+		Conf.HTTP.sub("mandatoryHeaders").set("connection", false);
 
 
 		On.port(8080);
 		On.port(8080);
 
 
-		On.get("/plaintext").managed(false).contentType(MediaType.TEXT_PLAIN).serve("Hello, world!");
+		if (Env.hasAnyProfile("mysql", "postgres")) {
+			setupDbHandlers();
+		} else {
+			setupSimpleHandlers();
+		}
+	}
 
 
+	private static void setupSimpleHandlers() {
+		On.get("/plaintext").managed(false).contentType(MediaType.TEXT_PLAIN).serve("Hello, world!");
 		On.get("/json").managed(false).json(() -> new Message("Hello, world!"));
 		On.get("/json").managed(false).json(() -> new Message("Hello, world!"));
+	}
+
+	private static void setupDbHandlers() {
+		String dbHost = Conf.ROOT.entry("dbhost").or("localhost");
+		Log.info("Database hostname is: " + dbHost);
+
+		String dbUrl;
+
+		if (Env.hasProfile("mysql")) {
+			dbUrl = "jdbc:mysql://" + dbHost + ":3306/hello_world?" + Helper.MYSQL_CONFIG;
+		} else {
+			dbUrl = "jdbc:postgresql://" + dbHost + ":5432/hello_world?" + Helper.POSTGRES_CONFIG;
+		}
 
 
 		JdbcClient mysqlJdbc = JDBC.newApi()
 		JdbcClient mysqlJdbc = JDBC.newApi()
-			.url("jdbc:mysql://" + dbHost + ":3306/hello_world?" + Helper.MYSQL_CONFIG)
+			.url(dbUrl)
 			.username("benchmarkdbuser")
 			.username("benchmarkdbuser")
 			.password("benchmarkdbpass")
 			.password("benchmarkdbpass")
 			.pooled();
 			.pooled();
 
 
-		On.get("/fortunes/mysql").html(new FortunesHandler(mysqlJdbc));
+		On.get("/fortunes").html(new FortunesHandler(mysqlJdbc));
 	}
 	}
 
 
 }
 }

+ 8 - 0
frameworks/Java/rapidoid/src/main/java/lowlevel/Main.java

@@ -1,8 +1,16 @@
 package lowlevel;
 package lowlevel;
 
 
+import org.rapidoid.config.Conf;
+import org.rapidoid.setup.App;
+
 public class Main {
 public class Main {
 
 
 	public static void main(String[] args) throws Exception {
 	public static void main(String[] args) throws Exception {
+		App.args(args);
+
+		Conf.HTTP.set("maxPipeline", 128);
+		Conf.HTTP.set("timeout", 0);
+
 		new PlaintextAndJsonServer().listen(8080);
 		new PlaintextAndJsonServer().listen(8080);
 	}
 	}
 
 

+ 7 - 9
frameworks/Java/rapidoid/src/main/java/lowlevel/PlaintextAndJsonServer.java

@@ -2,12 +2,11 @@ package lowlevel;
 
 
 import common.Message;
 import common.Message;
 import org.rapidoid.buffer.Buf;
 import org.rapidoid.buffer.Buf;
-import org.rapidoid.data.BufRange;
-import org.rapidoid.data.BufRanges;
 import org.rapidoid.http.AbstractHttpServer;
 import org.rapidoid.http.AbstractHttpServer;
 import org.rapidoid.http.HttpStatus;
 import org.rapidoid.http.HttpStatus;
 import org.rapidoid.http.MediaType;
 import org.rapidoid.http.MediaType;
 import org.rapidoid.net.abstracts.Channel;
 import org.rapidoid.net.abstracts.Channel;
+import org.rapidoid.net.impl.RapidoidHelper;
 
 
 public class PlaintextAndJsonServer extends AbstractHttpServer {
 public class PlaintextAndJsonServer extends AbstractHttpServer {
 
 
@@ -22,15 +21,14 @@ public class PlaintextAndJsonServer extends AbstractHttpServer {
 	}
 	}
 
 
 	@Override
 	@Override
-	protected HttpStatus handle(Channel ctx, Buf buf, BufRange verb, BufRange uri, BufRange path, BufRange query,
-	                            BufRange protocol, BufRanges headers, boolean isGet, boolean isKeepAlive, BufRange body) {
+	protected HttpStatus handle(Channel ctx, Buf buf, RapidoidHelper data) {
 
 
-		if (isGet) {
-			if (matches(buf, path, URI_PLAINTEXT)) {
-				return ok(ctx, isKeepAlive, HELLO_WORLD, MediaType.TEXT_PLAIN);
+		if (data.isGet.value) {
+			if (matches(buf, data.path, URI_PLAINTEXT)) {
+				return ok(ctx, data.isKeepAlive.value, HELLO_WORLD, MediaType.TEXT_PLAIN);
 
 
-			} else if (matches(buf, path, URI_JSON)) {
-				return serializeToJson(ctx, isKeepAlive, new Message("Hello, World!"));
+			} else if (matches(buf, data.path, URI_JSON)) {
+				return serializeToJson(ctx, data.isKeepAlive.value, new Message("Hello, World!"));
 			}
 			}
 		}
 		}