This is an automated email from the ASF dual-hosted git repository.
oxsean pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.3 by this push:
new 79ff881b48 fix:tcp connection window size split from stream connection
window size for 3.3 (#14670)
79ff881b48 is described below
commit 79ff881b488f9493c42ebee4e67a74d4a0fae49d
Author: Liujunjie <[email protected]>
AuthorDate: Fri Sep 13 10:36:39 2024 +0800
fix:tcp connection window size split from stream connection window size for
3.3 (#14670)
---
.../apache/dubbo/config/nested/TripleConfig.java | 22 ++++++++++++++++++++++
.../config/bootstrap/builders/TripleBuilder.java | 13 +++++++++++++
.../dubbo/config/bootstrap/DubboBootstrapTest.java | 1 +
.../bootstrap/builders/TripleBuilderTest.java | 8 ++++++++
.../protocol/tri/TriHttp2RemoteFlowController.java | 8 ++++----
5 files changed, 48 insertions(+), 4 deletions(-)
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/TripleConfig.java
b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/TripleConfig.java
index 2cf3d79543..0e81f6f334 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/TripleConfig.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/TripleConfig.java
@@ -38,6 +38,7 @@ public class TripleConfig implements Serializable {
public static final boolean DEFAULT_ENABLE_PUSH = false;
public static final int DEFAULT_MAX_CONCURRENT_STREAMS = Integer.MAX_VALUE;
public static final int DEFAULT_INITIAL_WINDOW_SIZE = 8_388_608;
+ public static final int DEFAULT_CONNECTION_INITIAL_WINDOW_SIZE_KEY =
65_536;
public static final int DEFAULT_MAX_FRAME_SIZE = 8_388_608;
public static final int DEFAULT_MAX_HEADER_LIST_SIZE = 32_768;
@@ -124,6 +125,12 @@ public class TripleConfig implements Serializable {
*/
private Integer initialWindowSize;
+ /**
+ * Connection initial window size.
+ * <p>For HTTP/2
+ */
+ private Integer connectionInitialWindowSize;
+
/**
* Maximum frame size.
* <p>For HTTP/2
@@ -283,6 +290,21 @@ public class TripleConfig implements Serializable {
this.initialWindowSize = initialWindowSize;
}
+ public Integer getConnectionInitialWindowSize() {
+ return connectionInitialWindowSize;
+ }
+
+ @Parameter(excluded = true)
+ public Integer getConnectionInitialWindowSizeOrDefault() {
+ return connectionInitialWindowSize == null
+ ? DEFAULT_CONNECTION_INITIAL_WINDOW_SIZE_KEY
+ : connectionInitialWindowSize;
+ }
+
+ public void setConnectionInitialWindowSize(Integer
connectionInitialWindowSize) {
+ this.connectionInitialWindowSize = connectionInitialWindowSize;
+ }
+
public Integer getMaxFrameSize() {
return maxFrameSize;
}
diff --git
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/TripleBuilder.java
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/TripleBuilder.java
index 4e0b553ecf..e6205b39be 100644
---
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/TripleBuilder.java
+++
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/builders/TripleBuilder.java
@@ -90,6 +90,11 @@ public class TripleBuilder {
*/
private Integer initialWindowSize;
+ /**
+ * Connection initial window size.
+ */
+ private Integer connectionInitialWindowSize;
+
/**
* Maximum frame size.
*/
@@ -154,6 +159,11 @@ public class TripleBuilder {
return getThis();
}
+ public TripleBuilder connectionInitialWindowSize(Integer
connectionInitialWindowSize) {
+ this.connectionInitialWindowSize = connectionInitialWindowSize;
+ return getThis();
+ }
+
public TripleBuilder maxFrameSize(Integer maxFrameSize) {
this.maxFrameSize = maxFrameSize;
return getThis();
@@ -201,6 +211,9 @@ public class TripleBuilder {
if (initialWindowSize != null) {
triple.setInitialWindowSize(initialWindowSize);
}
+ if (connectionInitialWindowSize != null) {
+ triple.setConnectionInitialWindowSize(connectionInitialWindowSize);
+ }
if (maxFrameSize != null) {
triple.setMaxFrameSize(maxFrameSize);
}
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java
index 05ea205238..e0c47f1fda 100644
---
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java
@@ -514,6 +514,7 @@ class DubboBootstrapTest {
Assertions.assertFalse(tripleConfig.getEnablePushOrDefault());
Assertions.assertEquals(Integer.MAX_VALUE,
tripleConfig.getMaxConcurrentStreamsOrDefault());
Assertions.assertEquals(1 << 23,
tripleConfig.getInitialWindowSizeOrDefault());
+ Assertions.assertEquals(1 << 16,
tripleConfig.getConnectionInitialWindowSizeOrDefault());
Assertions.assertEquals(1 << 23,
tripleConfig.getMaxFrameSizeOrDefault());
Assertions.assertEquals(1 << 15,
tripleConfig.getMaxHeaderListSizeOrDefault());
}
diff --git
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/TripleBuilderTest.java
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/TripleBuilderTest.java
index 1450412a53..4fea4c0a14 100644
---
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/TripleBuilderTest.java
+++
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/builders/TripleBuilderTest.java
@@ -93,6 +93,13 @@ class TripleBuilderTest {
Assertions.assertEquals(10240, builder.build().getInitialWindowSize());
}
+ @Test
+ void connectionInitialWindowSize() {
+ TripleBuilder builder = TripleBuilder.newBuilder();
+ builder.connectionInitialWindowSize(8192);
+ Assertions.assertEquals(8192,
builder.build().getConnectionInitialWindowSize());
+ }
+
@Test
void maxFrameSize() {
TripleBuilder builder = TripleBuilder.newBuilder();
@@ -120,6 +127,7 @@ class TripleBuilderTest {
.enablePush(true)
.maxConcurrentStreams(Integer.MAX_VALUE)
.initialWindowSize(4096)
+ .connectionInitialWindowSize(8192)
.maxFrameSize(1024)
.maxHeaderListSize(500);
diff --git
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TriHttp2RemoteFlowController.java
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TriHttp2RemoteFlowController.java
index fc08bc94cc..e224fc4b8f 100644
---
a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TriHttp2RemoteFlowController.java
+++
b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TriHttp2RemoteFlowController.java
@@ -18,6 +18,9 @@ package org.apache.dubbo.rpc.protocol.tri;
import org.apache.dubbo.config.nested.TripleConfig;
+import java.util.ArrayDeque;
+import java.util.Deque;
+
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.http2.Http2Connection;
import io.netty.handler.codec.http2.Http2ConnectionAdapter;
@@ -32,9 +35,6 @@ import io.netty.util.internal.UnstableApi;
import io.netty.util.internal.logging.InternalLogger;
import io.netty.util.internal.logging.InternalLoggerFactory;
-import java.util.ArrayDeque;
-import java.util.Deque;
-
import static io.netty.handler.codec.http2.Http2CodecUtil.MAX_WEIGHT;
import static io.netty.handler.codec.http2.Http2CodecUtil.MIN_WEIGHT;
import static io.netty.handler.codec.http2.Http2Error.FLOW_CONTROL_ERROR;
@@ -82,7 +82,7 @@ public class TriHttp2RemoteFlowController implements
Http2RemoteFlowController {
TripleConfig config) {
this.connection = checkNotNull(connection, "connection");
this.streamByteDistributor = checkNotNull(streamByteDistributor,
"streamWriteDistributor");
- this.initialWindowSize = config.getInitialWindowSizeOrDefault();
+ this.initialWindowSize =
config.getConnectionInitialWindowSizeOrDefault();
// Add a flow state for the connection.
stateKey = connection.newKey();