This is an automated email from the ASF dual-hosted git repository. liubao pushed a commit to branch multi-protocol in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
commit edd9d79b5e6d1459c41dddc611a8f877cb9ae7e9 Author: liubao68 <[email protected]> AuthorDate: Tue Aug 29 19:37:51 2023 +0800 [SCB-2805]change default settings for http keepalive timeout and idle timeout (#3927) --- .../vertx/client/http/HttpClientOptionsSPI.java | 8 +++- .../rest/client/TransportClientConfig.java | 45 ++++++++-------------- .../rest/client/TestTransportClientConfig.java | 4 +- .../transport/rest/vertx/RestServerVerticle.java | 10 ++++- .../transport/rest/vertx/TransportConfig.java | 9 ++++- 5 files changed, 39 insertions(+), 37 deletions(-) diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClientOptionsSPI.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClientOptionsSPI.java index 86aaa5564..92a84e67f 100644 --- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClientOptionsSPI.java +++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClientOptionsSPI.java @@ -40,7 +40,7 @@ public interface HttpClientOptionsSPI { boolean enabled(); /* config tag is used for group configurations, like ssl, address resolver, etc. set config tag to distinguish - * other clients configuration or read the common configuration. */ + * other clients configuration or read the common configuration. */ String getConfigTag(); /* for config modules, the configuration is not ready, need set up config reader */ @@ -85,6 +85,7 @@ public interface HttpClientOptionsSPI { int getHttp2MaxPoolSize(); boolean isUseAlpn(); + /***************** proxy settings ***************************/ boolean isProxyEnable(); @@ -105,12 +106,13 @@ public interface HttpClientOptionsSPI { httpClientOptions.setProtocolVersion(spi.getHttpVersion()); httpClientOptions.setConnectTimeout(spi.getConnectTimeoutInMillis()); httpClientOptions.setIdleTimeout(spi.getIdleTimeoutInSeconds()); + httpClientOptions.setReadIdleTimeout(spi.getIdleTimeoutInSeconds()); + httpClientOptions.setWriteIdleTimeout(spi.getIdleTimeoutInSeconds()); httpClientOptions.setTryUseCompression(spi.isTryUseCompression()); httpClientOptions.setMaxWaitQueueSize(spi.getMaxWaitQueueSize()); httpClientOptions.setMaxPoolSize(spi.getMaxPoolSize()); httpClientOptions.setKeepAlive(spi.isKeepAlive()); httpClientOptions.setMaxHeaderSize(spi.getMaxHeaderSize()); - httpClientOptions.setKeepAliveTimeout(spi.getKeepAliveTimeout()); if (spi.isProxyEnable()) { ProxyOptions proxy = new ProxyOptions(); @@ -128,6 +130,8 @@ public interface HttpClientOptionsSPI { httpClientOptions.setHttp2MultiplexingLimit(spi.getHttp2MultiplexingLimit()); httpClientOptions.setHttp2MaxPoolSize(spi.getHttp2MaxPoolSize()); httpClientOptions.setHttp2KeepAliveTimeout(spi.getKeepAliveTimeout()); + } else { + httpClientOptions.setKeepAliveTimeout(spi.getKeepAliveTimeout()); } if (spi.isSsl()) { diff --git a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java index 4172d1878..542955859 100644 --- a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java +++ b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java @@ -22,9 +22,12 @@ import org.apache.servicecomb.transport.common.TransportConfigUtils; import com.netflix.config.DynamicPropertyFactory; import io.vertx.core.http.HttpClientOptions; -import io.vertx.core.net.TCPSSLOptions; public final class TransportClientConfig { + private static final int DEFAULT_IDLE_TIME_OUT = 150; + + private static final int DEFAULT_KEEP_ALIVE_TIME_OUT = 60; + private TransportClientConfig() { } @@ -46,12 +49,6 @@ public final class TransportClientConfig { .get(); } - public static int getHttp2ConnectionIdleTimeoutInSeconds() { - return DynamicPropertyFactory.getInstance() - .getIntProperty("servicecomb.rest.client.http2.idleTimeoutInSeconds", TCPSSLOptions.DEFAULT_IDLE_TIMEOUT) - .get(); - } - public static boolean getUseAlpn() { return DynamicPropertyFactory.getInstance() .getBooleanProperty("servicecomb.rest.client.http2.useAlpnEnabled", true) @@ -71,9 +68,15 @@ public final class TransportClientConfig { .get(); } + public static int getHttp2ConnectionIdleTimeoutInSeconds() { + return DynamicPropertyFactory.getInstance() + .getIntProperty("servicecomb.rest.client.http2.connection.idleTimeoutInSeconds", DEFAULT_IDLE_TIME_OUT) + .get(); + } + public static int getConnectionIdleTimeoutInSeconds() { return DynamicPropertyFactory.getInstance() - .getIntProperty("servicecomb.rest.client.connection.idleTimeoutInSeconds", 30) + .getIntProperty("servicecomb.rest.client.connection.idleTimeoutInSeconds", DEFAULT_IDLE_TIME_OUT) .get(); } @@ -84,35 +87,17 @@ public final class TransportClientConfig { } public static int getConnectionKeepAliveTimeoutInSeconds() { - int result = DynamicPropertyFactory.getInstance() + return DynamicPropertyFactory.getInstance() .getIntProperty("servicecomb.rest.client.connection.keepAliveTimeoutInSeconds", - -1) + DEFAULT_KEEP_ALIVE_TIME_OUT) .get(); - if (result >= 0) { - return result; - } - result = getConnectionIdleTimeoutInSeconds(); - if (result > 1) { - // a bit shorter than ConnectionIdleTimeoutInSeconds - return result - 1; - } - return result; } public static int getHttp2ConnectionKeepAliveTimeoutInSeconds() { - int result = DynamicPropertyFactory.getInstance() + return DynamicPropertyFactory.getInstance() .getIntProperty("servicecomb.rest.client.http2.connection.keepAliveTimeoutInSeconds", - -1) + DEFAULT_KEEP_ALIVE_TIME_OUT) .get(); - if (result >= 0) { - return result; - } - result = getHttp2ConnectionIdleTimeoutInSeconds(); - if (result > 1) { - // a bit shorter than ConnectionIdleTimeoutInSeconds - return result - 1; - } - return result; } public static boolean getConnectionCompression() { diff --git a/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/TestTransportClientConfig.java b/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/TestTransportClientConfig.java index 10f43c23c..4409e2979 100644 --- a/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/TestTransportClientConfig.java +++ b/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/TestTransportClientConfig.java @@ -48,7 +48,7 @@ public class TestTransportClientConfig { @Test public void getConnectionIdleTimeoutInSeconds() { - Assertions.assertEquals(30, TransportClientConfig.getConnectionIdleTimeoutInSeconds()); + Assertions.assertEquals(150, TransportClientConfig.getConnectionIdleTimeoutInSeconds()); } @Test @@ -63,7 +63,7 @@ public class TestTransportClientConfig { @Test public void getHttp2ConnectionIdleTimeoutInSeconds() { - Assertions.assertEquals(0, TransportClientConfig.getHttp2ConnectionIdleTimeoutInSeconds()); + Assertions.assertEquals(150, TransportClientConfig.getHttp2ConnectionIdleTimeoutInSeconds()); } @Test diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java index 4de3e0db1..1c6120f61 100644 --- a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java +++ b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java @@ -250,7 +250,6 @@ public class RestServerVerticle extends AbstractVerticle { private HttpServerOptions createDefaultHttpServerOptions() { HttpServerOptions serverOptions = new HttpServerOptions(); - serverOptions.setIdleTimeout(TransportConfig.getConnectionIdleTimeoutInSeconds()); serverOptions.setCompressionSupported(TransportConfig.getCompressed()); serverOptions.setMaxHeaderSize(TransportConfig.getMaxHeaderSize()); serverOptions.setMaxFormAttributeSize(TransportConfig.getMaxFormAttributeSize()); @@ -258,10 +257,13 @@ public class RestServerVerticle extends AbstractVerticle { serverOptions.setMaxChunkSize(TransportConfig.getMaxChunkSize()); serverOptions.setDecompressionSupported(TransportConfig.getDecompressionSupported()); serverOptions.setDecoderInitialBufferSize(TransportConfig.getDecoderInitialBufferSize()); - serverOptions.setHttp2ConnectionWindowSize(TransportConfig.getHttp2ConnectionWindowSize()); serverOptions.setMaxInitialLineLength(TransportConfig.getMaxInitialLineLength()); if (endpointObject.isHttp2Enabled()) { serverOptions.setUseAlpn(TransportConfig.getUseAlpn()) + .setHttp2ConnectionWindowSize(TransportConfig.getHttp2ConnectionWindowSize()) + .setIdleTimeout(TransportConfig.getHttp2ConnectionIdleTimeoutInSeconds()) + .setReadIdleTimeout(TransportConfig.getHttp2ConnectionIdleTimeoutInSeconds()) + .setWriteIdleTimeout(TransportConfig.getHttp2ConnectionIdleTimeoutInSeconds()) .setInitialSettings(new Http2Settings().setPushEnabled(TransportConfig.getPushEnabled()) .setMaxConcurrentStreams(TransportConfig.getMaxConcurrentStreams()) .setHeaderTableSize(TransportConfig.getHttp2HeaderTableSize()) @@ -269,6 +271,10 @@ public class RestServerVerticle extends AbstractVerticle { .setMaxFrameSize(TransportConfig.getMaxFrameSize()) .setMaxHeaderListSize(TransportConfig.getMaxHeaderListSize()) ); + } else { + serverOptions.setIdleTimeout(TransportConfig.getConnectionIdleTimeoutInSeconds()); + serverOptions.setReadIdleTimeout(TransportConfig.getConnectionIdleTimeoutInSeconds()); + serverOptions.setWriteIdleTimeout(TransportConfig.getConnectionIdleTimeoutInSeconds()); } if (endpointObject.isSslEnabled()) { SSLOptionFactory factory = diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/TransportConfig.java b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/TransportConfig.java index 28665acce..6e7f229b0 100644 --- a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/TransportConfig.java +++ b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/TransportConfig.java @@ -32,7 +32,7 @@ import io.vertx.core.http.Http2Settings; import io.vertx.core.http.HttpServerOptions; public final class TransportConfig { - public static final int DEFAULT_SERVER_CONNECTION_IDLE_TIMEOUT_SECOND = 60; + public static final int DEFAULT_SERVER_CONNECTION_IDLE_TIMEOUT_SECOND = 180; public static final boolean DEFAULT_SERVER_COMPRESSION_SUPPORT = false; @@ -103,6 +103,13 @@ public final class TransportConfig { .get(); } + public static int getHttp2ConnectionIdleTimeoutInSeconds() { + return DynamicPropertyFactory.getInstance() + .getIntProperty("servicecomb.rest.server.http2.connection.idleTimeoutInSeconds", + DEFAULT_SERVER_CONNECTION_IDLE_TIMEOUT_SECOND) + .get(); + } + public static boolean getCompressed() { return DynamicPropertyFactory.getInstance() .getBooleanProperty("servicecomb.rest.server.compression", DEFAULT_SERVER_COMPRESSION_SUPPORT)
