Browse Source

jooby: updates pgclient tests (#5009)

- use a singleclient/processor and sync access
Edgar Espina 6 years ago
parent
commit
c71ebe831d

+ 16 - 1
frameworks/Java/jooby2/pom.xml

@@ -146,10 +146,25 @@
 
     <profile>
       <id>pgclient</id>
+      <properties>
+        <netty.version>4.1.34.Final</netty.version>
+      </properties>
       <dependencies>
+        <dependency>
+          <groupId>io.netty</groupId>
+          <artifactId>netty-transport-native-kqueue</artifactId>
+          <version>${netty.version}</version>
+          <classifier>osx-x86_64</classifier>
+        </dependency>
+        <dependency>
+          <groupId>io.netty</groupId>
+          <artifactId>netty-transport-native-epoll</artifactId>
+          <version>${netty.version}</version>
+          <classifier>linux-x86_64</classifier>
+        </dependency>
         <dependency>
           <groupId>io.jooby</groupId>
-          <artifactId>jooby-utow</artifactId>
+          <artifactId>jooby-netty</artifactId>
           <version>${jooby.version}</version>
         </dependency>
       </dependencies>

+ 35 - 0
frameworks/Java/jooby2/src/main/java/com/techempower/PgClients.java

@@ -0,0 +1,35 @@
+package com.techempower;
+
+import io.reactiverse.pgclient.PgClient;
+import io.reactiverse.pgclient.PgPoolOptions;
+import io.vertx.core.Vertx;
+import io.vertx.core.VertxOptions;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Stream;
+
+public class PgClients {
+  private final Iterator<PgClient> iterator;
+
+  private PgClients(Collection<PgClient> clients) {
+    iterator = Stream.generate(() -> clients).flatMap(Collection::stream).iterator();
+  }
+
+  public synchronized PgClient next() {
+    return iterator.next();
+  }
+
+  public static PgClients create(PgPoolOptions options) {
+    List<PgClient> clients = new ArrayList<>();
+    VertxOptions vertxOptions = new VertxOptions();
+    vertxOptions.setPreferNativeTransport(true);
+    Vertx vertx = Vertx.vertx(vertxOptions);
+    for (int i = 0; i < Runtime.getRuntime().availableProcessors(); i++) {
+      clients.add(PgClient.pool(vertx, options));
+    }
+    return new PgClients(clients);
+  }
+}

+ 8 - 7
frameworks/Java/jooby2/src/main/java/com/techempower/ReactivePg.java

@@ -30,7 +30,7 @@ public class ReactivePg extends Jooby {
 
   {
     /** PG client: */
-    PgClient client = database(getConfig().getConfig("db"));
+    PgClients pool = database(getConfig().getConfig("db"));
 
     /** Template engine: */
     install(new RockerModule());
@@ -41,7 +41,7 @@ public class ReactivePg extends Jooby {
 
     /** Single query: */
     get("/db", ctx -> {
-      client.preparedQuery(SELECT_WORLD, Tuple.of(randomWorld()), rsp -> {
+      pool.next().preparedQuery(SELECT_WORLD, Tuple.of(randomWorld()), rsp -> {
         try {
           if (rsp.succeeded()) {
             PgIterator rs = rsp.result().iterator();
@@ -64,6 +64,7 @@ public class ReactivePg extends Jooby {
       AtomicInteger counter = new AtomicInteger();
       AtomicBoolean failed = new AtomicBoolean(false);
       World[] result = new World[queries];
+      PgClient client = pool.next();
       for (int i = 0; i < result.length; i++) {
         client.preparedQuery(SELECT_WORLD, Tuple.of(randomWorld()), rsp -> {
           if (rsp.succeeded()) {
@@ -95,7 +96,7 @@ public class ReactivePg extends Jooby {
       World[] result = new World[queries];
       AtomicInteger counter = new AtomicInteger(0);
       AtomicBoolean failed = new AtomicBoolean(false);
-
+      PgClient client = pool.next();
       for (int i = 0; i < queries; i++) {
         client.preparedQuery(SELECT_WORLD, Tuple.of(randomWorld()), rsp -> {
           if (rsp.succeeded()) {
@@ -136,10 +137,9 @@ public class ReactivePg extends Jooby {
 
     /** Fortunes: */
     get("/fortunes", ctx -> {
-      client.preparedQuery(SELECT_FORTUNE, rsp -> {
+      pool.next().preparedQuery(SELECT_FORTUNE, rsp -> {
         if (rsp.succeeded()) {
           PgIterator rs = rsp.result().iterator();
-
           List<Fortune> fortunes = new ArrayList<>();
 
           while (rs.hasNext()) {
@@ -161,7 +161,7 @@ public class ReactivePg extends Jooby {
     });
   }
 
-  private PgClient database(Config config) {
+  private PgClients database(Config config) {
     PgPoolOptions options = new PgPoolOptions();
     options.setDatabase(config.getString("databaseName"));
     options.setHost(config.getString("serverName"));
@@ -169,7 +169,8 @@ public class ReactivePg extends Jooby {
     options.setUser(config.getString("user"));
     options.setPassword(config.getString("password"));
     options.setCachePreparedStatements(true);
-    return PgClient.pool(new PgPoolOptions(options).setMaxSize(4));
+    options.setMaxSize(1);
+    return PgClients.create(options);
   }
 
   public static void main(String[] args) {