This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/qpid-proton-j.git
commit 49c740ed3a85b229c772915624deb3a78330bc06 Author: Robbie Gemmell <[email protected]> AuthorDate: Fri Jul 31 17:01:29 2026 +0100 PROTON-2943: set some frame size handling defaults --- .../org/apache/qpid/proton/engine/Transport.java | 2 +- .../qpid/proton/engine/impl/TransportImpl.java | 2 +- .../qpid/proton/engine/impl/TransportImplTest.java | 37 ++++++++++++++++++++-- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java b/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java index 86d189f8..078ccefa 100644 --- a/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java +++ b/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java @@ -79,7 +79,7 @@ public interface Transport extends Endpoint public static final int TRACE_FRM = 2; public static final int TRACE_DRV = 4; - public static final int DEFAULT_MAX_FRAME_SIZE = -1; + public static final int DEFAULT_MAX_FRAME_SIZE = 65535; /** the lower bound for the agreed maximum frame size (in bytes). */ public int MIN_MAX_FRAME_SIZE = 512; diff --git a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java index 222ffd77..05e8c925 100644 --- a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java +++ b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java @@ -111,7 +111,7 @@ public class TransportImpl extends EndpointImpl private int _maxFrameSize = DEFAULT_MAX_FRAME_SIZE; private int _remoteMaxFrameSize = MIN_MAX_FRAME_SIZE; - private int _outboundFrameSizeLimit = 0; + private int _outboundFrameSizeLimit = DEFAULT_MAX_FRAME_SIZE; private int _channelMax = CHANNEL_MAX_LIMIT; private int _remoteChannelMax = CHANNEL_MAX_LIMIT; private int _maxTransfersPerDelivery = TRANSFERS_PER_DELIVERY_MAX_LIMIT; diff --git a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java b/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java index 558cc04b..e534c397 100644 --- a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java +++ b/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java @@ -93,7 +93,7 @@ public class TransportImplTest private static final TransportFrame TRANSPORT_FRAME_BEGIN = new TransportFrame(CHANNEL_ID, new Begin(), null); private static final TransportFrame TRANSPORT_FRAME_OPEN = new TransportFrame(CHANNEL_ID, new Open(), null); - private static final int BUFFER_SIZE = 8 * 1024; + private static final int BUFFER_SIZE = 70 * 1024; @Test public void testInput() @@ -1111,7 +1111,9 @@ public class TransportImplTest assertEquals("Unexpected session capacity", sessionCapacity, session.getIncomingCapacity()); int expectedWindowSize = 2147483647; - if(setSessionCapacity && setFrameSize) { + if(setSessionCapacity && !setFrameSize) { + expectedWindowSize = (100*1024) / TransportImpl.DEFAULT_MAX_FRAME_SIZE; + } else if(setSessionCapacity && setFrameSize) { expectedWindowSize = (100*1024) / (5*1024); // capacity / frameSize } @@ -2714,6 +2716,37 @@ public class TransportImplTest doMaxFrameSizeTestImpl(UnsignedInteger.valueOf(512), 0, 5700, 12); } + @Test + public void testDefaultMaxFrameSize() + { + MockTransportImpl transport = new MockTransportImpl(); + Connection connection = Proton.connection(); + transport.bind(connection); + connection.open(); + + pumpMockTransport(transport); + + assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 1, transport.writes.size()); + final FrameBody frameBody = transport.writes.get(0); + assertTrue("Unexpected frame type", frameBody instanceof Open); + + // Check emitted value on the Open + assertEquals(UnsignedInteger.valueOf(65535), ((Open) frameBody).getMaxFrameSize()); + } + + @Test + public void testDefaultMaxOutgoingFrameSize() + { + final int payloadLength = 65500; + // One transfer frame (allowing some space for transfer performative itself) + doMaxFrameSizeTestImpl(null, 0, payloadLength, 1); + // Two transfer frames with slightly bigger payload definitely pushing it over theoutgoing limit. + doMaxFrameSizeTestImpl(null, 0, payloadLength + 100, 2); + + // Reduce the peer max frame size below the default outgoing frame. + // Now expecting two frames for the same payload size as originally. + doMaxFrameSizeTestImpl(UnsignedInteger.valueOf(64000), 0, payloadLength, 2); + } @Test public void testMaxFrameSizeOutgoingFrameSizeLimitHasEffect() --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
