This is an automated email from the ASF dual-hosted git repository.

jbertram pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/main by this push:
     new cf73e89  ARTEMIS-3613: Deprecating stompMaxFramePayloadLength in 
favour of webSocketMaxFramePayloadLength
     new 8353eca  This closes #3886
cf73e89 is described below

commit cf73e895f306f159e3314f862b48fcef2714c039
Author: Luis De Bello <[email protected]>
AuthorDate: Fri Dec 17 16:01:17 2021 -0300

    ARTEMIS-3613: Deprecating stompMaxFramePayloadLength in favour of 
webSocketMaxFramePayloadLength
---
 .../remoting/impl/netty/TransportConstants.java    |  9 ++-
 .../artemis/core/protocol/ProtocolHandler.java     |  8 ++-
 docs/user-manual/en/stomp.md                       |  5 +-
 .../stomp/StompWebSocketMaxFrameTest.java          | 78 ++++++++++++++++++----
 4 files changed, 83 insertions(+), 17 deletions(-)

diff --git 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstants.java
 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstants.java
index 43bc67b..4eae868 100644
--- 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstants.java
+++ 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstants.java
@@ -318,9 +318,15 @@ public class TransportConstants {
 
    public static final long DEFAULT_CONNECTIONS_ALLOWED = -1L;
 
+   /**
+    * @deprecated Use {@link 
TransportConstants#WEB_SOCKET_MAX_FRAME_PAYLOAD_LENGTH instead}.
+    */
+   @Deprecated
    public static final String STOMP_MAX_FRAME_PAYLOAD_LENGTH = 
"stompMaxFramePayloadLength";
 
-   public static final int DEFAULT_STOMP_MAX_FRAME_PAYLOAD_LENGTH = 65536;
+   public static final String WEB_SOCKET_MAX_FRAME_PAYLOAD_LENGTH = 
"webSocketMaxFramePayloadLength";
+
+   public static final int DEFAULT_WEB_SOCKET_MAX_FRAME_PAYLOAD_LENGTH = 65536;
 
    public static final String HANDSHAKE_TIMEOUT = "handshake-timeout";
 
@@ -426,6 +432,7 @@ public class TransportConstants {
       allowableAcceptorKeys.add(TransportConstants.STOMP_ENABLE_MESSAGE_ID);
       allowableAcceptorKeys.add(TransportConstants.CONNECTIONS_ALLOWED);
       
allowableAcceptorKeys.add(TransportConstants.STOMP_MAX_FRAME_PAYLOAD_LENGTH);
+      
allowableAcceptorKeys.add(TransportConstants.WEB_SOCKET_MAX_FRAME_PAYLOAD_LENGTH);
       
allowableAcceptorKeys.add(ActiveMQDefaultConfiguration.getPropMaskPassword());
       
allowableAcceptorKeys.add(ActiveMQDefaultConfiguration.getPropPasswordCodec());
       allowableAcceptorKeys.add(TransportConstants.BACKLOG_PROP_NAME);
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/ProtocolHandler.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/ProtocolHandler.java
index 69ab95f..62b09c5 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/ProtocolHandler.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/ProtocolHandler.java
@@ -152,7 +152,13 @@ public class ProtocolHandler {
             HttpHeaders headers = request.headers();
             String upgrade = headers.get("upgrade");
             if (upgrade != null && upgrade.equalsIgnoreCase("websocket")) {
-               ctx.pipeline().addLast("websocket-handler", new 
WebSocketServerHandler(websocketSubprotocolIds, 
ConfigurationHelper.getIntProperty(TransportConstants.STOMP_MAX_FRAME_PAYLOAD_LENGTH,
 TransportConstants.DEFAULT_STOMP_MAX_FRAME_PAYLOAD_LENGTH, 
nettyAcceptor.getConfiguration())));
+               int stompMaxFramePayloadLength = 
ConfigurationHelper.getIntProperty(TransportConstants.STOMP_MAX_FRAME_PAYLOAD_LENGTH,
 -1, nettyAcceptor.getConfiguration());
+               if (stompMaxFramePayloadLength != -1) {
+                  
ActiveMQServerLogger.LOGGER.deprecatedConfigurationOption(TransportConstants.STOMP_MAX_FRAME_PAYLOAD_LENGTH);
+               }
+               stompMaxFramePayloadLength = stompMaxFramePayloadLength != -1 ? 
stompMaxFramePayloadLength : 
TransportConstants.DEFAULT_WEB_SOCKET_MAX_FRAME_PAYLOAD_LENGTH;
+               int webSocketMaxFramePayloadLength = 
ConfigurationHelper.getIntProperty(TransportConstants.WEB_SOCKET_MAX_FRAME_PAYLOAD_LENGTH,
 -1, nettyAcceptor.getConfiguration());
+               ctx.pipeline().addLast("websocket-handler", new 
WebSocketServerHandler(websocketSubprotocolIds, webSocketMaxFramePayloadLength 
!= -1 ? webSocketMaxFramePayloadLength : stompMaxFramePayloadLength));
                ctx.pipeline().addLast(new ProtocolDecoder(false, false));
                ctx.pipeline().remove(this);
                ctx.pipeline().remove(HTTP_HANDLER);
diff --git a/docs/user-manual/en/stomp.md b/docs/user-manual/en/stomp.md
index 97fc80a..eeb1237 100644
--- a/docs/user-manual/en/stomp.md
+++ b/docs/user-manual/en/stomp.md
@@ -362,8 +362,9 @@ description).
 The payload length of Web Socket frames can vary between client
 implementations. By default the broker will accept frames with a payload length
 of 65,536. If the client needs to send payloads longer than this in a single
-frame this length can be adjusted by using the `stompMaxFramePayloadLength` URL
-parameter on the acceptor.
+frame this length can be adjusted by using the 
`webSocketMaxFramePayloadLength` URL
+parameter on the acceptor. In previous version this was configured via the
+similarly named `stompMaxFramePayloadLength` acceptor URL parameter.
 
 The `stomp-websockets` example shows how to configure an Apache ActiveMQ
 Artemis broker to have web browsers and Java applications exchanges messages.
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompWebSocketMaxFrameTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompWebSocketMaxFrameTest.java
index f56a96c..e4ed8ea 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompWebSocketMaxFrameTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompWebSocketMaxFrameTest.java
@@ -20,10 +20,10 @@ import java.net.URI;
 import java.util.Arrays;
 import java.util.Collection;
 
-import org.apache.activemq.artemis.tests.util.Wait;
 import 
org.apache.activemq.artemis.tests.integration.stomp.util.ClientStompFrame;
 import 
org.apache.activemq.artemis.tests.integration.stomp.util.StompClientConnection;
 import 
org.apache.activemq.artemis.tests.integration.stomp.util.StompClientConnectionFactory;
+import org.apache.activemq.artemis.tests.util.Wait;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -32,11 +32,16 @@ import org.junit.runners.Parameterized;
 @RunWith(Parameterized.class)
 public class StompWebSocketMaxFrameTest extends StompTestBase {
 
-   private URI wsURI;
-
-   private int wsport = 61614;
+   private final int wsPortWithStompMaxFrame = 61614;
+   private final int wsPortWithWebSocketMaxFrame = 61615;
+   private final int wsPortWithBothMaxFrameAndWorks = 61619;
+   private final int wsPortWithBothMaxFrameButFails = 61620;
+   private URI wsURIForStompMaxFrame;
+   private URI wsURIForWebSocketMaxFrame;
+   private URI wsURIForBothMaxFrameAndWorks;
+   private URI wsURIForBothMaxFrameButFails;
 
-   private int stompWSMaxFrameSize = 131072; // 128kb
+   private final int stompWSMaxFrameSize = 131072; // 128kb
 
    @Parameterized.Parameters(name = "{0}")
    public static Collection<Object[]> data() {
@@ -46,8 +51,15 @@ public class StompWebSocketMaxFrameTest extends 
StompTestBase {
    @Override
    public void setUp() throws Exception {
       super.setUp();
-      server.getRemotingService().createAcceptor("test", "tcp://127.0.0.1:" + 
wsport + "?stompMaxFramePayloadLength=" + stompWSMaxFrameSize).start();
-      wsURI = createStompClientUri(scheme, hostname, wsport);
+      server.getRemotingService().createAcceptor("test1", "tcp://127.0.0.1:" + 
wsPortWithStompMaxFrame + "?stompMaxFramePayloadLength=" + 
stompWSMaxFrameSize).start();
+      server.getRemotingService().createAcceptor("test2", "tcp://127.0.0.1:" + 
wsPortWithWebSocketMaxFrame + "?webSocketMaxFramePayloadLength=" + 
stompWSMaxFrameSize).start();
+      server.getRemotingService().createAcceptor("test3", "tcp://127.0.0.1:" + 
wsPortWithBothMaxFrameAndWorks + "?stompMaxFramePayloadLength=" + 
stompWSMaxFrameSize / 2 + ";webSocketMaxFramePayloadLength=" + 
stompWSMaxFrameSize).start();
+      server.getRemotingService().createAcceptor("test4", "tcp://127.0.0.1:" + 
wsPortWithBothMaxFrameButFails + "?stompMaxFramePayloadLength=" + 
stompWSMaxFrameSize + ";webSocketMaxFramePayloadLength=" + stompWSMaxFrameSize 
/ 2).start();
+
+      wsURIForStompMaxFrame = createStompClientUri(scheme, hostname, 
wsPortWithStompMaxFrame);
+      wsURIForWebSocketMaxFrame = createStompClientUri(scheme, hostname, 
wsPortWithWebSocketMaxFrame);
+      wsURIForBothMaxFrameAndWorks = createStompClientUri(scheme, hostname, 
wsPortWithBothMaxFrameAndWorks);
+      wsURIForBothMaxFrameButFails = createStompClientUri(scheme, hostname, 
wsPortWithBothMaxFrameButFails);
    }
 
    @Test
@@ -61,31 +73,71 @@ public class StompWebSocketMaxFrameTest extends 
StompTestBase {
       conn.getTransport().setMaxFrameSize(stompWSMaxFrameSize);
       conn.getTransport().connect();
 
-      StompClientConnection conn2 = 
StompClientConnectionFactory.createClientConnection(wsURI, false);
+      StompClientConnection conn2 = 
StompClientConnectionFactory.createClientConnection(wsURIForStompMaxFrame, 
false);
       conn2.getTransport().setMaxFrameSize(stompWSMaxFrameSize);
       conn2.getTransport().connect();
 
-      Wait.waitFor(() -> conn2.getTransport().isConnected() && 
conn.getTransport().isConnected(), 10000);
+      StompClientConnection conn3 = 
StompClientConnectionFactory.createClientConnection(wsURIForWebSocketMaxFrame, 
false);
+      conn3.getTransport().setMaxFrameSize(stompWSMaxFrameSize);
+      conn3.getTransport().connect();
+
+      StompClientConnection conn4 = 
StompClientConnectionFactory.createClientConnection(wsURIForBothMaxFrameAndWorks,
 false);
+      conn4.getTransport().setMaxFrameSize(stompWSMaxFrameSize);
+      conn4.getTransport().connect();
+
+      StompClientConnection conn5 = 
StompClientConnectionFactory.createClientConnection(wsURIForBothMaxFrameButFails,
 false);
+      conn5.getTransport().setMaxFrameSize(stompWSMaxFrameSize);
+      conn5.getTransport().connect();
+
+      Wait.waitFor(() -> conn5.getTransport().isConnected() && 
conn4.getTransport().isConnected() && conn3.getTransport().isConnected() && 
conn2.getTransport().isConnected() && conn.getTransport().isConnected(), 10000);
       conn.connect();
       conn2.connect();
+      conn3.connect();
+      conn4.connect();
+      conn5.connect();
 
       subscribeQueue(conn2, "sub1", getQueuePrefix() + getQueueName());
+      subscribeQueue(conn3, "sub2", getQueuePrefix() + getQueueName());
+      subscribeQueue(conn4, "sub3", getQueuePrefix() + getQueueName());
 
       try {
-         // Client is kicked when sending frame > largest frame size.
+         // Client is kicked when sending frame > largest frame size. Default 
64kb
          send(conn, getQueuePrefix() + getQueueName(), "text/plain", 
largeString1, false);
          Wait.waitFor(() -> !conn.getTransport().isConnected(), 2000);
          assertFalse(conn.getTransport().isConnected());
 
+         // Fails because webSocketMaxFramePayloadLength is only configured 
for 64kb.
+         send(conn5, getQueuePrefix() + getQueueName(), "text/plain", 
largeString1, false);
+         Wait.waitFor(() -> !conn5.getTransport().isConnected(), 2000);
+         assertFalse(conn5.getTransport().isConnected());
+
          send(conn2, getQueuePrefix() + getQueueName(), "text/plain", 
largeString2, false);
          Wait.waitFor(() -> !conn2.getTransport().isConnected(), 2000);
          assertTrue(conn2.getTransport().isConnected());
 
-         ClientStompFrame frame = conn2.receiveFrame();
-         assertNotNull(frame);
-         assertEquals(largeString2, frame.getBody());
+         send(conn3, getQueuePrefix() + getQueueName(), "text/plain", 
largeString2, false);
+         Wait.waitFor(() -> !conn3.getTransport().isConnected(), 2000);
+         assertTrue(conn3.getTransport().isConnected());
+
+         send(conn4, getQueuePrefix() + getQueueName(), "text/plain", 
largeString2, false);
+         Wait.waitFor(() -> !conn4.getTransport().isConnected(), 2000);
+         assertTrue(conn4.getTransport().isConnected());
+
+         ClientStompFrame frame2 = conn2.receiveFrame();
+         assertNotNull(frame2);
+         assertEquals(largeString2, frame2.getBody());
+
+         ClientStompFrame frame3 = conn3.receiveFrame();
+         assertNotNull(frame3);
+         assertEquals(largeString2, frame3.getBody());
 
+         ClientStompFrame frame4 = conn4.receiveFrame();
+         assertNotNull(frame4);
+         assertEquals(largeString2, frame4.getBody());
       } finally {
+         conn5.closeTransport();
+         conn4.closeTransport();
+         conn3.closeTransport();
          conn2.closeTransport();
          conn.closeTransport();
       }

Reply via email to