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();

Reply via email to