diff --git a/commons/rapidoid-commons/src/main/resources/built-in-config.yml b/commons/rapidoid-commons/src/main/resources/built-in-config.yml index 3ecbf50d10..44a207159f 100644 --- a/commons/rapidoid-commons/src/main/resources/built-in-config.yml +++ b/commons/rapidoid-commons/src/main/resources/built-in-config.yml @@ -79,6 +79,7 @@ net: # workers: ${system.cpus} bufSizeKB: 256 noDelay: false + maxPipeline: 0 syncBufs: true blockingAccept: false diff --git a/networking/rapidoid-net/src/main/java/org/rapidoid/net/NetworkingParams.java b/networking/rapidoid-net/src/main/java/org/rapidoid/net/NetworkingParams.java new file mode 100644 index 0000000000..b1aa72e3a6 --- /dev/null +++ b/networking/rapidoid-net/src/main/java/org/rapidoid/net/NetworkingParams.java @@ -0,0 +1,140 @@ +package org.rapidoid.net; + +import org.rapidoid.config.BasicConfig; +import org.rapidoid.net.impl.DefaultExchange; +import org.rapidoid.net.impl.RapidoidHelper; + +public class NetworkingParams { + + private volatile String address; + + private volatile int port; + + private volatile int workers; + + private volatile int bufSizeKB; + + private volatile boolean noDelay; + + private volatile long maxPipeline; + + private volatile boolean syncBufs; + + private volatile boolean blockingAccept; + + private volatile Protocol protocol = null; + + private volatile Class> exchangeClass = null; + + private volatile Class helperClass = RapidoidHelper.class; + + public NetworkingParams(BasicConfig cfg) { + address = cfg.entry("address").or("0.0.0.0"); + port = cfg.entry("port").or(8080); + workers = cfg.entry("workers").or(Runtime.getRuntime().availableProcessors()); + bufSizeKB = cfg.entry("bufSizeKB").or(16); + noDelay = cfg.entry("noDelay").or(false); + maxPipeline = cfg.entry("maxPipeline").or(0); + syncBufs = cfg.entry("syncBufs").or(true); + blockingAccept = cfg.entry("blockingAccept").or(false); + } + + public String address() { + return address; + } + + public NetworkingParams address(String address) { + this.address = address; + return this; + } + + public int port() { + return port; + } + + public NetworkingParams port(int port) { + this.port = port; + return this; + } + + public int workers() { + return workers; + } + + public NetworkingParams workers(int workers) { + this.workers = workers; + return this; + } + + public int bufSizeKB() { + return bufSizeKB; + } + + public NetworkingParams bufSizeKB(int bufSizeKB) { + this.bufSizeKB = bufSizeKB; + return this; + } + + public boolean noDelay() { + return noDelay; + } + + public NetworkingParams noDelay(boolean noDelay) { + this.noDelay = noDelay; + return this; + } + + public long maxPipeline() { + return maxPipeline; + } + + public NetworkingParams maxPipeline(long maxPipelineSize) { + this.maxPipeline = maxPipelineSize; + return this; + } + + public boolean syncBufs() { + return syncBufs; + } + + public NetworkingParams syncBufs(boolean syncBufs) { + this.syncBufs = syncBufs; + return this; + } + + public boolean blockingAccept() { + return blockingAccept; + } + + public NetworkingParams blockingAccept(boolean blockingAccept) { + this.blockingAccept = blockingAccept; + return this; + } + + public Protocol protocol() { + return protocol; + } + + public NetworkingParams protocol(Protocol protocol) { + this.protocol = protocol; + return this; + } + + public Class> exchangeClass() { + return exchangeClass; + } + + public NetworkingParams exchangeClass(Class> exchangeClass) { + this.exchangeClass = exchangeClass; + return this; + } + + public Class helperClass() { + return helperClass; + } + + public NetworkingParams helperClass(Class helperClass) { + this.helperClass = helperClass; + return this; + } +} diff --git a/networking/rapidoid-net/src/main/java/org/rapidoid/net/ServerBuilder.java b/networking/rapidoid-net/src/main/java/org/rapidoid/net/ServerBuilder.java index d801f45c86..5afce6e2b4 100644 --- a/networking/rapidoid-net/src/main/java/org/rapidoid/net/ServerBuilder.java +++ b/networking/rapidoid-net/src/main/java/org/rapidoid/net/ServerBuilder.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -23,220 +23,127 @@ import org.rapidoid.RapidoidThing; import org.rapidoid.annotation.Authors; import org.rapidoid.annotation.Since; -import org.rapidoid.config.Conf; +import org.rapidoid.config.BasicConfig; +import org.rapidoid.net.impl.DefaultExchange; import org.rapidoid.net.impl.RapidoidHelper; import org.rapidoid.net.impl.RapidoidServerLoop; -import org.rapidoid.net.tls.TLSUtil; -import org.rapidoid.util.MscOpts; +import org.rapidoid.u.U; import javax.net.ssl.SSLContext; - @Authors("Nikolche Mihajlovski") @Since("5.1.0") public class ServerBuilder extends RapidoidThing { - private volatile String address = Conf.NET.entry("address").or("0.0.0.0"); - - private volatile int port = Conf.NET.entry("port").or(8080); - - private volatile int workers = Conf.NET.entry("workers").or(Runtime.getRuntime().availableProcessors()); - - private volatile int bufSizeKB = Conf.NET.entry("bufSizeKB").or(16); - - private volatile boolean noDelay = Conf.NET.entry("noDelay").or(false); - - private volatile boolean syncBufs = Conf.NET.entry("syncBufs").or(true); - - private volatile boolean blockingAccept = Conf.NET.entry("blockingAccept").or(false); - - private volatile org.rapidoid.net.Protocol protocol = null; - - private volatile Class> exchangeClass = null; - - private volatile Class helperClass = RapidoidHelper.class; - - // auto-activate if TLS is enabled - private volatile boolean tls = MscOpts.isTLSEnabled(); - - private volatile String keystore = Conf.TLS.entry("keystore").or(""); - - private volatile char[] keystorePassword = Conf.TLS.entry("keystorePassword").or("").toCharArray(); - - private volatile char[] keyManagerPassword = Conf.TLS.entry("keyManagerPassword").or("").toCharArray(); - - private volatile String truststore = Conf.TLS.entry("truststore").or(""); + private final NetworkingParams netParams; - private volatile char[] truststorePassword = Conf.TLS.entry("truststorePassword").or("").toCharArray(); + private final TLSParams tlsParams = new TLSParams(); - private volatile boolean selfSignedTLS = Conf.TLS.is("selfSigned"); + private volatile boolean built; - private volatile SSLContext tlsContext; + public ServerBuilder(BasicConfig cfg) { + this.netParams = new NetworkingParams(cfg); + } public ServerBuilder address(String address) { - this.address = address; + netParams.address(address); return this; } - public String address() { - return this.address; - } - public ServerBuilder port(int port) { - this.port = port; + netParams.port(port); return this; } - public int port() { - return this.port; - } - public ServerBuilder workers(int workers) { - this.workers = workers; + netParams.workers(workers); return this; } - public int workers() { - return this.workers; - } - - public ServerBuilder protocol(org.rapidoid.net.Protocol protocol) { - this.protocol = protocol; + public ServerBuilder bufSizeKB(int bufSizeKB) { + netParams.bufSizeKB(bufSizeKB); return this; } - public org.rapidoid.net.Protocol protocol() { - return this.protocol; - } - - public ServerBuilder exchangeClass(Class> exchangeClass) { - this.exchangeClass = exchangeClass; + public ServerBuilder noDelay(boolean noDelay) { + netParams.noDelay(noDelay); return this; } - public Class> exchangeClass() { - return this.exchangeClass; - } - - public ServerBuilder helperClass(Class helperClass) { - this.helperClass = helperClass; + public ServerBuilder maxPipeline(long maxPipelineSize) { + netParams.maxPipeline(maxPipelineSize); return this; } - public Class helperClass() { - return this.helperClass; - } - - public int bufSizeKB() { - return bufSizeKB; - } - - public ServerBuilder bufSizeKB(int bufSizeKB) { - this.bufSizeKB = bufSizeKB; + public ServerBuilder syncBufs(boolean syncBufs) { + netParams.syncBufs(syncBufs); return this; } - public boolean noDelay() { - return noDelay; - } - - public ServerBuilder noDelay(boolean noDelay) { - this.noDelay = noDelay; + public ServerBuilder blockingAccept(boolean blockingAccept) { + netParams.blockingAccept(blockingAccept); return this; } - public boolean syncBufs() { - return syncBufs; - } - - public ServerBuilder syncBufs(boolean syncBufs) { - this.syncBufs = syncBufs; + public ServerBuilder protocol(Protocol protocol) { + netParams.protocol(protocol); return this; } - public boolean blockingAccept() { - return blockingAccept; - } - - public ServerBuilder blockingAccept(boolean blockingAccept) { - this.blockingAccept = blockingAccept; + public ServerBuilder exchangeClass(Class> exchangeClass) { + netParams.exchangeClass(exchangeClass); return this; } - public boolean tls() { - return tls; + public ServerBuilder helperClass(Class helperClass) { + netParams.helperClass(helperClass); + return this; } public ServerBuilder tls(boolean tls) { - this.tls = tls; + tlsParams.tls(tls); return this; } - public String keystore() { - return keystore; - } - public ServerBuilder keystore(String keystore) { - this.keystore = keystore; + tlsParams.keystore(keystore); return this; } - public char[] keystorePassword() { - return keystorePassword; - } - public ServerBuilder keystorePassword(char[] keystorePassword) { - this.keystorePassword = keystorePassword; + tlsParams.keystorePassword(keystorePassword); return this; } - public char[] keyManagerPassword() { - return keyManagerPassword; - } - public ServerBuilder keyManagerPassword(char[] keyManagerPassword) { - this.keyManagerPassword = keyManagerPassword; + tlsParams.keyManagerPassword(keyManagerPassword); return this; } - public String truststore() { - return truststore; - } - public ServerBuilder truststore(String truststore) { - this.truststore = truststore; + tlsParams.truststore(truststore); return this; } - public char[] truststorePassword() { - return truststorePassword; - } - public ServerBuilder truststorePassword(char[] truststorePassword) { - this.truststorePassword = truststorePassword; + tlsParams.truststorePassword(truststorePassword); return this; } - public SSLContext tlsContext() { - return tlsContext; + public ServerBuilder selfSignedTLS(boolean selfSignedTLS) { + tlsParams.selfSignedTLS(selfSignedTLS); + return this; } public ServerBuilder tlsContext(SSLContext tlsContext) { - this.tlsContext = tlsContext; + tlsParams.tlsContext(tlsContext); return this; } public synchronized Server build() { - - if (tls && tlsContext == null) { - tlsContext = TLSUtil.createContext(keystore, keystorePassword, keyManagerPassword, truststore, truststorePassword, selfSignedTLS); - } - - // don't provide TLS context unless TLS is enabled - SSLContext tlsCtx = tls ? tlsContext : null; - - return new RapidoidServerLoop(protocol, exchangeClass, helperClass, address, port, - workers, bufSizeKB, noDelay, syncBufs, blockingAccept, tlsCtx); + U.must(!built, "This builder was already used! Please instantiate a new one!"); + built = true; + return new RapidoidServerLoop(netParams, tlsParams.buildTLSContext()); } } diff --git a/networking/rapidoid-net/src/main/java/org/rapidoid/net/TCP.java b/networking/rapidoid-net/src/main/java/org/rapidoid/net/TCP.java index e464921e28..672a56beb7 100644 --- a/networking/rapidoid-net/src/main/java/org/rapidoid/net/TCP.java +++ b/networking/rapidoid-net/src/main/java/org/rapidoid/net/TCP.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -23,6 +23,8 @@ import org.rapidoid.RapidoidThing; import org.rapidoid.annotation.Authors; import org.rapidoid.annotation.Since; +import org.rapidoid.config.BasicConfig; +import org.rapidoid.config.Conf; @Authors("Nikolche Mihajlovski") @@ -30,11 +32,19 @@ public class TCP extends RapidoidThing { public static ServerBuilder server() { - return new ServerBuilder(); + return new ServerBuilder(Conf.NET); + } + + public static ServerBuilder server(BasicConfig cfg) { + return new ServerBuilder(cfg.or(Conf.NET)); } public static TCPClientBuilder client() { - return new TCPClientBuilder(); + return new TCPClientBuilder(Conf.NET); + } + + public static TCPClientBuilder client(BasicConfig cfg) { + return new TCPClientBuilder(cfg.or(Conf.NET)); } public static TCPClient connect(String host, int port, Protocol protocol) { diff --git a/networking/rapidoid-net/src/main/java/org/rapidoid/net/TCPClientBuilder.java b/networking/rapidoid-net/src/main/java/org/rapidoid/net/TCPClientBuilder.java index d171020b7f..348ca49704 100644 --- a/networking/rapidoid-net/src/main/java/org/rapidoid/net/TCPClientBuilder.java +++ b/networking/rapidoid-net/src/main/java/org/rapidoid/net/TCPClientBuilder.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -24,10 +24,11 @@ import org.rapidoid.RapidoidThing; import org.rapidoid.annotation.Authors; import org.rapidoid.annotation.Since; -import org.rapidoid.config.Conf; +import org.rapidoid.config.BasicConfig; import org.rapidoid.net.impl.DefaultExchange; import org.rapidoid.net.impl.RapidoidClientLoop; import org.rapidoid.net.impl.RapidoidHelper; +import org.rapidoid.u.U; import javax.net.ssl.SSLContext; @@ -35,134 +36,129 @@ @Since("5.5.0") public class TCPClientBuilder extends RapidoidThing { - private volatile String host; - - private volatile int port; - private volatile int connections; private volatile boolean reconnecting = true; - private volatile int bufSizeKB = Conf.NET.entry("bufSizeKB").or(16); - - private volatile boolean syncBufs = Conf.NET.entry("syncBufs").or(true); - - private volatile int workers = Conf.NET.entry("workers").or(Runtime.getRuntime().availableProcessors()); - - private volatile boolean noDelay = Conf.NET.entry("noDelay").or(false); - - private volatile Protocol protocol; + private final NetworkingParams netParams; - private volatile Class> exchangeClass = null; + private final TLSParams tlsParams = new TLSParams(); - private volatile Class helperClass = RapidoidHelper.class; + private volatile boolean built; - public String host() { - return host; + public TCPClientBuilder(BasicConfig cfg) { + this.netParams = new NetworkingParams(cfg); } public TCPClientBuilder host(String host) { - this.host = host; + netParams.address(host); return this; } - public int port() { - return port; - } - public TCPClientBuilder port(int port) { - this.port = port; + netParams.port(port); return this; } - public int connections() { - return connections; + public TCPClientBuilder workers(int workers) { + netParams.workers(workers); + return this; } - public TCPClientBuilder connections(int connections) { - this.connections = connections; + public TCPClientBuilder bufSizeKB(int bufSizeKB) { + netParams.bufSizeKB(bufSizeKB); return this; } - public boolean reconnecting() { - return reconnecting; + public TCPClientBuilder noDelay(boolean noDelay) { + netParams.noDelay(noDelay); + return this; } - public TCPClientBuilder reconnecting(boolean reconnecting) { - this.reconnecting = reconnecting; + public TCPClientBuilder maxPipeline(long maxPipelineSize) { + netParams.maxPipeline(maxPipelineSize); return this; } - public int bufSizeKB() { - return bufSizeKB; + public TCPClientBuilder syncBufs(boolean syncBufs) { + netParams.syncBufs(syncBufs); + return this; } - public TCPClientBuilder bufSizeKB(int bufSizeKB) { - this.bufSizeKB = bufSizeKB; + public TCPClientBuilder blockingAccept(boolean blockingAccept) { + netParams.blockingAccept(blockingAccept); return this; } - public boolean syncBufs() { - return syncBufs; + public TCPClientBuilder protocol(Protocol protocol) { + netParams.protocol(protocol); + return this; } - public TCPClientBuilder syncBufs(boolean syncBufs) { - this.syncBufs = syncBufs; + public TCPClientBuilder exchangeClass(Class> exchangeClass) { + netParams.exchangeClass(exchangeClass); return this; } - public int workers() { - return workers; + public TCPClientBuilder helperClass(Class helperClass) { + netParams.helperClass(helperClass); + return this; } - public TCPClientBuilder workers(int workers) { - this.workers = workers; + public TCPClientBuilder tls(boolean tls) { + tlsParams.tls(tls); return this; } - public boolean noDelay() { - return noDelay; + public TCPClientBuilder keystore(String keystore) { + tlsParams.keystore(keystore); + return this; } - public TCPClientBuilder noDelay(boolean noDelay) { - this.noDelay = noDelay; + public TCPClientBuilder keystorePassword(char[] keystorePassword) { + tlsParams.keystorePassword(keystorePassword); return this; } - public Protocol protocol() { - return protocol; + public TCPClientBuilder keyManagerPassword(char[] keyManagerPassword) { + tlsParams.keyManagerPassword(keyManagerPassword); + return this; } - public TCPClientBuilder protocol(Protocol protocol) { - this.protocol = protocol; + public TCPClientBuilder truststore(String truststore) { + tlsParams.truststore(truststore); return this; } - public Class> exchangeClass() { - return exchangeClass; + public TCPClientBuilder truststorePassword(char[] truststorePassword) { + tlsParams.truststorePassword(truststorePassword); + return this; } - public TCPClientBuilder exchangeClass(Class> exchangeClass) { - this.exchangeClass = exchangeClass; + public TCPClientBuilder selfSignedTLS(boolean selfSignedTLS) { + tlsParams.selfSignedTLS(selfSignedTLS); return this; } - public Class helperClass() { - return helperClass; + public TCPClientBuilder tlsContext(SSLContext tlsContext) { + tlsParams.tlsContext(tlsContext); + return this; } - public TCPClientBuilder helperClass(Class helperClass) { - this.helperClass = helperClass; + public TCPClientBuilder connections(int connections) { + this.connections = connections; return this; } - public TCPClient build() { - - // FIXME TLS support (see ServerBuilder) - SSLContext tlsCtx = null; + public TCPClientBuilder reconnecting(boolean reconnecting) { + this.reconnecting = reconnecting; + return this; + } - return new RapidoidClientLoop(protocol, exchangeClass, helperClass, host, port, workers, - bufSizeKB, noDelay, syncBufs, reconnecting, connections, tlsCtx); + public synchronized TCPClient build() { + U.must(!built, "This builder was already used! Please instantiate a new one!"); + built = true; + return new RapidoidClientLoop(netParams, reconnecting, connections, tlsParams.buildTLSContext()); } } diff --git a/networking/rapidoid-net/src/main/java/org/rapidoid/net/TLSParams.java b/networking/rapidoid-net/src/main/java/org/rapidoid/net/TLSParams.java new file mode 100644 index 0000000000..a1bd0f64e3 --- /dev/null +++ b/networking/rapidoid-net/src/main/java/org/rapidoid/net/TLSParams.java @@ -0,0 +1,109 @@ +package org.rapidoid.net; + +import org.rapidoid.config.Conf; +import org.rapidoid.net.tls.TLSUtil; +import org.rapidoid.util.MscOpts; + +import javax.net.ssl.SSLContext; + +public class TLSParams { + + // auto-activate if TLS is enabled + private volatile boolean tls = MscOpts.isTLSEnabled(); + + private volatile String keystore = Conf.TLS.entry("keystore").or(""); + + private volatile char[] keystorePassword = Conf.TLS.entry("keystorePassword").or("").toCharArray(); + + private volatile char[] keyManagerPassword = Conf.TLS.entry("keyManagerPassword").or("").toCharArray(); + + private volatile String truststore = Conf.TLS.entry("truststore").or(""); + + private volatile char[] truststorePassword = Conf.TLS.entry("truststorePassword").or("").toCharArray(); + + private volatile boolean selfSignedTLS = Conf.TLS.is("selfSigned"); + + private volatile SSLContext tlsContext; + + public boolean tls() { + return tls; + } + + public TLSParams tls(boolean tls) { + this.tls = tls; + return this; + } + + public String keystore() { + return keystore; + } + + public TLSParams keystore(String keystore) { + this.keystore = keystore; + return this; + } + + public char[] keystorePassword() { + return keystorePassword; + } + + public TLSParams keystorePassword(char[] keystorePassword) { + this.keystorePassword = keystorePassword; + return this; + } + + public char[] keyManagerPassword() { + return keyManagerPassword; + } + + public TLSParams keyManagerPassword(char[] keyManagerPassword) { + this.keyManagerPassword = keyManagerPassword; + return this; + } + + public String truststore() { + return truststore; + } + + public TLSParams truststore(String truststore) { + this.truststore = truststore; + return this; + } + + public char[] truststorePassword() { + return truststorePassword; + } + + public TLSParams truststorePassword(char[] truststorePassword) { + this.truststorePassword = truststorePassword; + return this; + } + + public boolean selfSignedTLS() { + return selfSignedTLS; + } + + public TLSParams selfSignedTLS(boolean selfSignedTLS) { + this.selfSignedTLS = selfSignedTLS; + return this; + } + + public SSLContext tlsContext() { + return tlsContext; + } + + public TLSParams tlsContext(SSLContext tlsContext) { + this.tlsContext = tlsContext; + return this; + } + + public synchronized SSLContext buildTLSContext() { + if (tls && tlsContext == null) { + tlsContext = TLSUtil.createContext(keystore, keystorePassword, keyManagerPassword, truststore, truststorePassword, selfSignedTLS); + } + + // don't provide TLS context unless TLS is enabled + return tls ? tlsContext : null; + } + +} diff --git a/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/ConnectionTarget.java b/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/ConnectionTarget.java index f0a920753f..ebdf9ed230 100644 --- a/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/ConnectionTarget.java +++ b/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/ConnectionTarget.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -44,12 +44,12 @@ public class ConnectionTarget extends RapidoidThing { final ChannelHolderImpl holder; - final boolean autoreconnecting; + final boolean reconnecting; final ConnState state; public ConnectionTarget(SocketChannel socketChannel, InetSocketAddress addr, Protocol protocol, - ChannelHolderImpl holder, boolean autoreconnecting, ConnState state) { + ChannelHolderImpl holder, boolean reconnecting, ConnState state) { U.notNull(protocol, "connection protocol"); U.notNull(holder, "connection holder"); @@ -59,7 +59,7 @@ public ConnectionTarget(SocketChannel socketChannel, InetSocketAddress addr, Pro this.protocol = protocol; this.retryAfter = U.time(); this.holder = holder; - this.autoreconnecting = autoreconnecting; + this.reconnecting = reconnecting; this.state = state; } diff --git a/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/ExtendedWorker.java b/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/ExtendedWorker.java index f097301f68..ddb169fb66 100644 --- a/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/ExtendedWorker.java +++ b/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/ExtendedWorker.java @@ -34,6 +34,7 @@ import org.rapidoid.insight.Insights; import org.rapidoid.insight.StatsMeasure; import org.rapidoid.log.Log; +import org.rapidoid.net.NetworkingParams; import org.rapidoid.net.Protocol; import org.rapidoid.pool.Pool; import org.rapidoid.pool.Pools; @@ -82,7 +83,7 @@ public class ExtendedWorker extends AbstractEventLoop implements private final Set allConnections = Coll.concurrentSet(); - private final int maxPipelineSize; + private final int maxPipeline; private final int selectorTimeout = 10; @@ -102,8 +103,6 @@ public class ExtendedWorker extends AbstractEventLoop implements private final SSLContext sslContext; - ExtendedWorker next; - private final StatsMeasure dataIn; private final StatsMeasure dataOut; @@ -119,21 +118,20 @@ public class ExtendedWorker extends AbstractEventLoop implements } } - public ExtendedWorker(String name, final Protocol protocol, final RapidoidHelper helper, - int bufSizeKB, boolean noDelay, boolean syncBufs, SSLContext sslContext) { + public ExtendedWorker(String name, RapidoidHelper helper, NetworkingParams net, SSLContext sslContext) { super(name); - this.bufSize = bufSizeKB * 1024; - this.noDelay = noDelay; - this.bufs = new BufGroup(bufSize, syncBufs); + this.bufSize = net.bufSizeKB() * 1024; + this.noDelay = net.noDelay(); + this.bufs = new BufGroup(bufSize, net.syncBufs()); this.bufSizeLimit = 1024L * Conf.NET.entry("bufSizeLimit").or(1024); // in KB - this.serverProtocol = protocol; + this.serverProtocol = net.protocol(); this.helper = helper; this.sslContext = sslContext; - this.maxPipelineSize = Conf.HTTP.entry("maxPipeline").or(10); + this.maxPipeline = Conf.HTTP.entry("maxPipeline").or(10); final int queueSize = ConfigUtil.micro() ? 1000 : 1000000; final int growFactor = ConfigUtil.micro() ? 2 : 10; @@ -211,7 +209,7 @@ protected void connectOP(SelectionKey key) throws IOException { Log.info("Connected", "address", target.addr); connected.add(new RapidoidChannel(socketChannel, true, target.protocol, target.holder, - target.autoreconnecting, target.state)); + target.reconnecting, target.state)); } catch (ConnectException e) { retryConnecting(target); @@ -310,7 +308,7 @@ public void process(RapidoidConnection conn) { private long processMsgs(RapidoidConnection conn) { long reqN = 0; - while (reqN < maxPipelineSize && conn.input().hasRemaining() && processNext(conn, false, false)) { + while ((reqN < maxPipeline || maxPipeline <= 0) && conn.input().hasRemaining() && processNext(conn, false, false)) { reqN++; } diff --git a/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidClientLoop.java b/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidClientLoop.java index 7dfb2719c1..8bfbbb7d1f 100644 --- a/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidClientLoop.java +++ b/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidClientLoop.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -24,7 +24,7 @@ import org.rapidoid.annotation.Authors; import org.rapidoid.annotation.Since; import org.rapidoid.cls.Cls; -import org.rapidoid.config.ConfigUtil; +import org.rapidoid.net.NetworkingParams; import org.rapidoid.net.Protocol; import org.rapidoid.net.TCPClient; import org.rapidoid.net.TCPClientInfo; @@ -34,65 +34,31 @@ import javax.net.ssl.SSLContext; import java.io.IOException; import java.net.InetSocketAddress; -import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; @Authors("Nikolche Mihajlovski") @Since("5.5.0") public class RapidoidClientLoop extends AbstractEventLoop implements TCPClient, TCPClientInfo { - private volatile ExtendedWorker[] ioWorkers; - - private ExtendedWorker currentWorker; - - private final String host; - - private final int port; - - private int workers = ConfigUtil.cpus(); - - private boolean blockingAccept = false; - - protected final Protocol protocol; - - private final Class helperClass; - - private final Class> exchangeClass; - - private ServerSocketChannel serverSocketChannel; + private final NetworkingParams net; - private final int bufSizeKB; - - private final boolean noDelay; + // initial number of connections to the default server + private final int connections; - private final boolean syncBufs; + private final boolean autoReconnect; - private final boolean autoreconnecting; + private final SSLContext sslContext; - // initial number of connections to the default server - private final int connections; + private volatile ExtendedWorker[] ioWorkers; // round-robin workers for new connections private int currentWorkerInd = 0; - private final SSLContext sslContext; - - public RapidoidClientLoop(Protocol protocol, Class> exchangeClass, - Class helperClass, String host, int port, - int workers, int bufSizeKB, boolean noDelay, boolean syncBufs, - boolean autoreconnecting, int connections, SSLContext sslContext) { + public RapidoidClientLoop(NetworkingParams net, boolean autoReconnect, int connections, SSLContext sslContext) { super("client"); - this.protocol = protocol; - this.exchangeClass = exchangeClass; - this.host = host; - this.port = port; - this.workers = workers; - this.bufSizeKB = bufSizeKB; - this.noDelay = noDelay; - this.syncBufs = syncBufs; - this.helperClass = U.or(helperClass, RapidoidHelper.class); - this.autoreconnecting = autoreconnecting; + this.net = net; + this.autoReconnect = autoReconnect; this.connections = connections; this.sslContext = sslContext; } @@ -111,12 +77,12 @@ protected final void beforeLoop() { } private void openSockets() throws IOException { - ioWorkers = new ExtendedWorker[workers]; + ioWorkers = new ExtendedWorker[net.workers()]; for (int i = 0; i < ioWorkers.length; i++) { - RapidoidHelper helper = Cls.newInstance(helperClass, exchangeClass); + RapidoidHelper helper = Cls.newInstance(net.helperClass(), net.exchangeClass()); String workerName = "client" + (i + 1); - ioWorkers[i] = new ExtendedWorker(workerName, protocol, helper, bufSizeKB, noDelay, syncBufs, sslContext); + ioWorkers[i] = new ExtendedWorker(workerName, helper, net, sslContext); new Thread(ioWorkers[i], workerName).start(); } @@ -188,7 +154,7 @@ public synchronized TCPClient start() { super.start(); - connect(host, port, protocol, connections, autoreconnecting, null); + connect(net.address(), net.port(), net.protocol(), connections, autoReconnect, null); return this; } diff --git a/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidServerLoop.java b/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidServerLoop.java index 9d6860176c..075ef8d532 100644 --- a/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidServerLoop.java +++ b/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidServerLoop.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -25,6 +25,7 @@ import org.rapidoid.annotation.Since; import org.rapidoid.commons.Rnd; import org.rapidoid.log.Log; +import org.rapidoid.net.NetworkingParams; import org.rapidoid.net.Protocol; import org.rapidoid.net.Server; import org.rapidoid.net.TCPServerInfo; @@ -45,52 +46,20 @@ public class RapidoidServerLoop extends AbstractLoop implements Server, private static final int MAX_PENDING_CONNECTIONS = 16 * 1024; - private volatile RapidoidWorker[] ioWorkers; - - private RapidoidWorker currentWorker; - - private final String address; - - private final int port; - - private final int workers; - - private final boolean blockingAccept; - - protected final Protocol protocol; - - private final Class helperClass; - - private final Class> exchangeClass; - - private ServerSocketChannel serverSocketChannel; + private final NetworkingParams net; + private final SSLContext sslContext; private final Selector selector; + private ServerSocketChannel serverSocketChannel; - private final int bufSizeKB; - - private final boolean noDelay; - - private final boolean syncBufs; + private volatile RapidoidWorker[] ioWorkers; - private final SSLContext sslContext; + private RapidoidWorker currentWorker; - public RapidoidServerLoop(Protocol protocol, Class> exchangeClass, - Class helperClass, String address, int port, - int workers, int bufSizeKB, boolean noDelay, boolean syncBufs, - boolean blockingAccept, SSLContext sslContext) { + public RapidoidServerLoop(NetworkingParams net, SSLContext sslContext) { super("server"); - this.protocol = protocol; - this.exchangeClass = exchangeClass; - this.address = address; - this.port = port; - this.workers = workers; - this.bufSizeKB = bufSizeKB; - this.noDelay = noDelay; - this.syncBufs = syncBufs; - this.blockingAccept = blockingAccept; - this.helperClass = U.or(helperClass, RapidoidHelper.class); + this.net = net; this.sslContext = sslContext; try { @@ -113,28 +82,28 @@ protected final void beforeLoop() { } private void validate() { - U.must(workers <= RapidoidWorker.MAX_IO_WORKERS, "Too many workers! Maximum = %s", + U.must(net.workers() <= RapidoidWorker.MAX_IO_WORKERS, "Too many workers! Maximum = %s", RapidoidWorker.MAX_IO_WORKERS); } private void openSocket() throws IOException { - U.notNull(protocol, "protocol"); - U.notNull(helperClass, "helperClass"); + U.notNull(net.protocol(), "protocol"); + U.notNull(net.helperClass(), "helperClass"); - String blockingInfo = blockingAccept ? "blocking" : "non-blocking"; - Log.debug("Initializing server", "address", address, "port", port, "sync", syncBufs, "accept", blockingInfo); + String blockingInfo = net.blockingAccept() ? "blocking" : "non-blocking"; + Log.debug("Initializing server", "address", net.address(), "port", net.port(), "sync", net.syncBufs(), "accept", blockingInfo); serverSocketChannel = ServerSocketChannel.open(); if ((serverSocketChannel.isOpen()) && (selector.isOpen())) { - serverSocketChannel.configureBlocking(blockingAccept); + serverSocketChannel.configureBlocking(net.blockingAccept()); ServerSocket socket = serverSocketChannel.socket(); - Log.info("!Starting server", "!address", address, "!port", port, "I/O workers", workers, "sync", syncBufs, "accept", blockingInfo); + Log.info("!Starting server", "!address", net.address(), "!port", net.port(), "I/O workers", net.workers(), "sync", net.syncBufs(), "accept", blockingInfo); - InetSocketAddress addr = new InetSocketAddress(address, port); + InetSocketAddress addr = new InetSocketAddress(net.address(), net.port()); socket.setReceiveBufferSize(16 * 1024); socket.setReuseAddress(true); @@ -142,7 +111,7 @@ private void openSocket() throws IOException { Log.debug("Opened server socket", "address", addr); - if (!blockingAccept) { + if (!net.blockingAccept()) { Log.debug("Registering accept selector"); serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); } @@ -155,12 +124,11 @@ private void openSocket() throws IOException { } private void initWorkers() { - ioWorkers = new RapidoidWorker[workers]; + ioWorkers = new RapidoidWorker[net.workers()]; for (int i = 0; i < ioWorkers.length; i++) { - RapidoidWorkerThread workerThread = new RapidoidWorkerThread(i, protocol, exchangeClass, - helperClass, bufSizeKB, noDelay, syncBufs, sslContext); + RapidoidWorkerThread workerThread = new RapidoidWorkerThread(i, net, sslContext); workerThread.start(); @@ -235,13 +203,13 @@ public synchronized String process(String input) { RapidoidConnection conn = newConnection(); conn.setInitial(false); conn.input.append(input); - conn.setProtocol(protocol); + conn.setProtocol(net.protocol()); process(conn); return conn.output.asText(); } public Protocol getProtocol() { - return protocol; + return net.protocol(); } @Override @@ -262,7 +230,7 @@ public long messagesProcessed() { @Override protected void insideLoop() { - if (blockingAccept) { + if (net.blockingAccept()) { processBlocking(); } else { processNonBlocking(); diff --git a/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidWorker.java b/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidWorker.java index 493e0b0f2c..217ea5c9ea 100644 --- a/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidWorker.java +++ b/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidWorker.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -32,6 +32,7 @@ import org.rapidoid.expire.ExpirationCrawlerThread; import org.rapidoid.expire.Expire; import org.rapidoid.log.Log; +import org.rapidoid.net.NetworkingParams; import org.rapidoid.net.Protocol; import org.rapidoid.pool.Pool; import org.rapidoid.pool.Pools; @@ -71,8 +72,6 @@ public class RapidoidWorker extends AbstractEventLoop implements private final Set allConnections = Coll.concurrentSet(); - private final int maxPipelineSize; - final Protocol serverProtocol; final RapidoidHelper helper; @@ -81,6 +80,8 @@ public class RapidoidWorker extends AbstractEventLoop implements private final boolean noDelay; + private final long maxPipeline; + private final BufGroup bufs; private volatile long messagesProcessed; @@ -100,20 +101,19 @@ public class RapidoidWorker extends AbstractEventLoop implements } } - public RapidoidWorker(String name, final Protocol protocol, final RapidoidHelper helper, - int bufSizeKB, boolean noDelay, boolean syncBufs, SSLContext sslContext) { + public RapidoidWorker(String name, final RapidoidHelper helper, NetworkingParams net, SSLContext sslContext) { super(name); - this.bufSize = bufSizeKB * 1024; - this.noDelay = noDelay; - this.bufs = new BufGroup(bufSize, syncBufs); + this.bufSize = net.bufSizeKB() * 1024; + this.noDelay = net.noDelay(); + this.bufs = new BufGroup(bufSize, net.syncBufs()); - this.serverProtocol = protocol; + this.serverProtocol = net.protocol(); this.helper = helper; this.sslContext = sslContext; - this.maxPipelineSize = Conf.HTTP.entry("maxPipeline").or(10); + this.maxPipeline = net.maxPipeline(); final int queueSize = ConfigUtil.micro() ? 1000 : 1000000; final int growFactor = ConfigUtil.micro() ? 2 : 10; @@ -213,7 +213,7 @@ public void process(RapidoidConnection conn) { private long processMsgs(RapidoidConnection conn) { long reqN = 0; - while (reqN < maxPipelineSize && conn.input().hasRemaining() && processNext(conn, false)) { + while ((reqN < maxPipeline || maxPipeline <= 0) && conn.input().hasRemaining() && processNext(conn, false)) { reqN++; } diff --git a/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidWorkerThread.java b/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidWorkerThread.java index 674f09e8fa..a3195d5a96 100644 --- a/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidWorkerThread.java +++ b/networking/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidWorkerThread.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -25,7 +25,7 @@ import org.rapidoid.annotation.Authors; import org.rapidoid.annotation.Since; import org.rapidoid.cls.Cls; -import org.rapidoid.net.Protocol; +import org.rapidoid.net.NetworkingParams; import org.rapidoid.u.U; import javax.net.ssl.SSLContext; @@ -35,45 +35,25 @@ public class RapidoidWorkerThread extends RapidoidThread { private final int workerIndex; - - private final Protocol protocol; - - private final Class> exchangeClass; - - private final Class helperClass; - - private volatile RapidoidWorker worker; - - private final int bufSizeKB; - - private final boolean noDelay; - - private final boolean syncBufs; - + private final NetworkingParams net; private final SSLContext sslContext; - public RapidoidWorkerThread(int workerIndex, Protocol protocol, Class> exchangeClass, - Class helperClass, int bufSizeKB, boolean noDelay, - boolean syncBufs, SSLContext sslContext) { + private volatile RapidoidWorker worker; + RapidoidWorkerThread(int workerIndex, NetworkingParams net, SSLContext sslContext) { super("server" + (workerIndex + 1)); this.workerIndex = workerIndex; - this.protocol = protocol; - this.exchangeClass = exchangeClass; - this.helperClass = helperClass; - this.bufSizeKB = bufSizeKB; - this.noDelay = noDelay; - this.syncBufs = syncBufs; + this.net = net; this.sslContext = sslContext; } @Override public void run() { - RapidoidHelper helper = Cls.newInstance(helperClass, exchangeClass); + RapidoidHelper helper = Cls.newInstance(net.helperClass(), net.exchangeClass()); helper.requestIdGen = workerIndex; // to generate UNIQUE request ID (+= MAX_IO_WORKERS) - worker = new RapidoidWorker("server" + (workerIndex + 1), protocol, helper, bufSizeKB, noDelay, syncBufs, sslContext); + worker = new RapidoidWorker("server" + (workerIndex + 1), helper, net, sslContext); worker.run(); } diff --git a/rapidoid-http-fast/src/main/java/org/rapidoid/http/AbstractHttpServer.java b/rapidoid-http-fast/src/main/java/org/rapidoid/http/AbstractHttpServer.java index 76a1f5270d..4ef864abb8 100644 --- a/rapidoid-http-fast/src/main/java/org/rapidoid/http/AbstractHttpServer.java +++ b/rapidoid-http-fast/src/main/java/org/rapidoid/http/AbstractHttpServer.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -27,6 +27,7 @@ import org.rapidoid.buffer.Buf; import org.rapidoid.bytes.BytesUtil; import org.rapidoid.commons.Dates; +import org.rapidoid.config.Conf; import org.rapidoid.data.BufRange; import org.rapidoid.data.JSON; import org.rapidoid.http.impl.HttpParser; @@ -226,7 +227,7 @@ public Server listen(int port) { } public Server listen(String address, int port) { - return TCP.server() + return TCP.server(Conf.HTTP) .protocol(this) .address(address) .port(port) diff --git a/rapidoid-http-fast/src/main/java/org/rapidoid/http/processor/AbstractHttpProcessor.java b/rapidoid-http-fast/src/main/java/org/rapidoid/http/processor/AbstractHttpProcessor.java index dc03acfbbf..7ace647d01 100644 --- a/rapidoid-http-fast/src/main/java/org/rapidoid/http/processor/AbstractHttpProcessor.java +++ b/rapidoid-http-fast/src/main/java/org/rapidoid/http/processor/AbstractHttpProcessor.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -24,6 +24,7 @@ import org.rapidoid.RapidoidThing; import org.rapidoid.annotation.Authors; import org.rapidoid.annotation.Since; +import org.rapidoid.config.Conf; import org.rapidoid.http.FastHttpProtocol; import org.rapidoid.http.HttpMetadata; import org.rapidoid.net.Server; @@ -44,7 +45,14 @@ protected AbstractHttpProcessor(HttpProcessor next) { @Override public Server listen(String address, int port) { FastHttpProtocol protocol = new FastHttpProtocol(this); - return TCP.server().protocol(protocol).address(address).port(port).syncBufs(syncBufs).build().start(); + + return TCP.server(Conf.HTTP) + .protocol(protocol) + .address(address) + .port(port) + .syncBufs(syncBufs) + .build() + .start(); } @Override diff --git a/rapidoid-http-fast/src/test/java/org/rapidoid/http/MaxHttpPerfTest.java b/rapidoid-http-fast/src/test/java/org/rapidoid/http/MaxHttpPerfTest.java index fc21b1d06d..1de1a77bc0 100644 --- a/rapidoid-http-fast/src/test/java/org/rapidoid/http/MaxHttpPerfTest.java +++ b/rapidoid-http-fast/src/test/java/org/rapidoid/http/MaxHttpPerfTest.java @@ -26,6 +26,7 @@ import org.rapidoid.buffer.Buf; import org.rapidoid.buffer.BufGroup; import org.rapidoid.bytes.BytesUtil; +import org.rapidoid.config.Conf; import org.rapidoid.data.BufRanges; import org.rapidoid.env.Env; import org.rapidoid.http.impl.HttpParser; @@ -68,7 +69,7 @@ public void run() { }); } - TCP.server().protocol(new Protocol() { + TCP.server(Conf.HTTP).protocol(new Protocol() { @Override public void process(Channel ctx) { if (ctx.isInitial()) { diff --git a/rapidoid-integration-tests/src/test/resources/test-results/ConfigurationTest/testBuiltInConfig/root b/rapidoid-integration-tests/src/test/resources/test-results/ConfigurationTest/testBuiltInConfig/root index 79370e83a5..b60551f2ad 100644 --- a/rapidoid-integration-tests/src/test/resources/test-results/ConfigurationTest/testBuiltInConfig/root +++ b/rapidoid-integration-tests/src/test/resources/test-results/ConfigurationTest/testBuiltInConfig/root @@ -83,6 +83,7 @@ "port" : 8080, "bufSizeKB" : 256, "noDelay" : false, + "maxPipeline" : 0, "syncBufs" : true, "blockingAccept" : false }, diff --git a/rapidoid-integration-tests/src/test/resources/test-results/ConfigurationTest/testMySqlProfile/root b/rapidoid-integration-tests/src/test/resources/test-results/ConfigurationTest/testMySqlProfile/root index ba61b995cd..881a34e4fd 100644 --- a/rapidoid-integration-tests/src/test/resources/test-results/ConfigurationTest/testMySqlProfile/root +++ b/rapidoid-integration-tests/src/test/resources/test-results/ConfigurationTest/testMySqlProfile/root @@ -85,6 +85,7 @@ "port" : 8080, "bufSizeKB" : 256, "noDelay" : false, + "maxPipeline" : 0, "syncBufs" : true, "blockingAccept" : false }, diff --git a/rapidoid-integration-tests/src/test/resources/test-results/ConfigurationTest/testPlatformProfile/root b/rapidoid-integration-tests/src/test/resources/test-results/ConfigurationTest/testPlatformProfile/root index ad1a0b4b26..d29052ef60 100644 --- a/rapidoid-integration-tests/src/test/resources/test-results/ConfigurationTest/testPlatformProfile/root +++ b/rapidoid-integration-tests/src/test/resources/test-results/ConfigurationTest/testPlatformProfile/root @@ -84,6 +84,7 @@ "port" : 8080, "bufSizeKB" : 256, "noDelay" : false, + "maxPipeline" : 0, "syncBufs" : true, "blockingAccept" : false }, diff --git a/rapidoid-integration-tests/src/test/resources/test-results/ConfigurationTest/testPostgresProfile/root b/rapidoid-integration-tests/src/test/resources/test-results/ConfigurationTest/testPostgresProfile/root index 40f3d7d699..1b8541c3cd 100644 --- a/rapidoid-integration-tests/src/test/resources/test-results/ConfigurationTest/testPostgresProfile/root +++ b/rapidoid-integration-tests/src/test/resources/test-results/ConfigurationTest/testPostgresProfile/root @@ -85,6 +85,7 @@ "port" : 8080, "bufSizeKB" : 256, "noDelay" : false, + "maxPipeline" : 0, "syncBufs" : true, "blockingAccept" : false }, diff --git a/rapidoid-integration-tests/src/test/resources/test-results/DefaultConfigTest/exercise/1__GET_ b/rapidoid-integration-tests/src/test/resources/test-results/DefaultConfigTest/exercise/1__GET_ index 261ec80265..4ee7251b16 100644 --- a/rapidoid-integration-tests/src/test/resources/test-results/DefaultConfigTest/exercise/1__GET_ +++ b/rapidoid-integration-tests/src/test/resources/test-results/DefaultConfigTest/exercise/1__GET_ @@ -3,7 +3,7 @@ Connection: keep-alive Server: Rapidoid Date: XXXXX GMT Content-Type: text/html; charset=utf-8 -Content-Length: 19344 +Content-Length: 19415 @@ -481,6 +481,10 @@ Content-Length: 19344 + + maxPipeline + 0 + syncBufs