[ 
https://issues.apache.org/jira/browse/QPIDJMS-293?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16039410#comment-16039410
 ] 

Keith Wall edited comment on QPIDJMS-293 at 6/7/17 6:04 PM:
------------------------------------------------------------

The change looks good and confirm that I am unable to reproduce my original 
problem.

(below updated 2017/06/07)

However, I think there is an analogous change required on the sending side. 
{{org.apache.qpid.jms.transports.netty.NettyWsTransport#send}} should be 
prepared to write a {{BinaryWebSocketFrame}} with final fragment {{false}} 
followed by a series of {{ContinuationWebSocketFrame}} frames if {{output}} is 
large.

Currently sending a very large JMS message (say, bytes message of size AMQP 
frame size +1) results in a *single*  {{BinaryWebSocketFrame}} being sent 
(which comprises the many transfers). 

Turning the logs up I see:
{noformat}
[1767460652:1] -> Transfer{handle=0, deliveryId=0, deliveryTag=0, 
messageFormat=0, settled=null, more=true, rcvSettleMode=null, state=null, 
resume=false, aborted=false, batchable=false} (262122) 
"\x00Sr\xc1)\x04\xa3\x0ex-opt-jms-destQ\x00\xa3\x12x-opt-jms-msg-typeQ\x03\x00Ss\xc0b\x0a\xa1/ID:3aa56b9f-3d52-493d-acaa-59b4845f70ac:1:1:1-1@\xa1\x05queue@@@\xa3\x18application/octet-stream@@\x83\x00\x00\x01\x5c\x83\xb5\xf9\x05\x00Su\xb0\x00\x04\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"...(truncated)
[1767460652:1] -> Transfer{handle=0, deliveryId=0, deliveryTag=0, 
messageFormat=0, settled=null, more=false, rcvSettleMode=null, state=null, 
resume=false, aborted=false, batchable=false} (180) 
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
18:59:20.109 [AmqpProvider:(1):[amqpws://localhost:5671]] TRACE 
o.a.q.j.t.netty.NettyWsTransport - Attempted write of: 262344 bytes
{noformat}

Receiving this is quite awkward on the server side: for instance, in Jetty 
based implementations you need to tune {{#maxBinaryMessageSize}} to be 
sufficiently large to accommodate the largest websocket message that will be 
received (or turn the check off, which the Jetty authors don't recommend).




was (Author: k-wall):
The change looks good and confirm that I am unable to reproduce my original 
problem.

However, I think there is an analogous change required on the sending side. 
{{org.apache.qpid.jms.transports.netty.NettyWsTransport#send}} should be 
prepared to write a {{BinaryWebSocketFrame}} with final fragment {{false}} 
followed by a series of {{ContinuationWebSocketFrame}} frames if {{output}} is 
large.  Currently sending a very large JMS message results in a correspondingly 
large {{BinaryWebSocketFrame}}. Receiving this is quite awkward on the server 
side: for instance, in Jetty based implementations you need to tune 
{{#maxBinaryMessageSize}} to be sufficiently large to accommodate the largest 
message that will be sent (or turn the check off, which the Jetty authors don't 
recommend).

> the WebSocket transport does not handle continuation frames
> -----------------------------------------------------------
>
>                 Key: QPIDJMS-293
>                 URL: https://issues.apache.org/jira/browse/QPIDJMS-293
>             Project: Qpid JMS
>          Issue Type: Bug
>          Components: qpid-jms-client
>    Affects Versions: 0.23.0
>            Reporter: Robbie Gemmell
>            Assignee: Robbie Gemmell
>             Fix For: 0.24.0
>
>
> the WebSocket transport does not handle continuation frames, only the primary 
> Binary frames, it needs to handle both. Indentified from investigation of 
> followup comments on QPIDJMS-290 once 0.23.0 was under vote.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to