[ 
https://issues.apache.org/activemq/browse/AMQ-1156?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_40078
 ] 

Hiram Chirino commented on AMQ-1156:
------------------------------------

Great comments guys.  I just committed a fix to the activemq trunk.

We now actually update the tcpNoDelay setting on the socket once the wireformat 
options are negociated.  This allows
the client to control if his socket and the server's socket use the option.  By 
default tcpNoDelay is enabled.
the client should use a URL like 
tcp://localhost:61616?wireFormat.tcpNoDelayEnabled=false to disable tcpNoDelay 
on
 both the client and the server socket.

If you guys get a chance could you confirm that this fixes the issue?? thanks.  
Hiram

> option "wireFormat.tcpNoDelayEnabled=true" is ignored
> -----------------------------------------------------
>
>                 Key: AMQ-1156
>                 URL: https://issues.apache.org/activemq/browse/AMQ-1156
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Documentation, Test Cases, Transport
>    Affects Versions: 4.0, 4.1.0, 5.0.0
>         Environment: Any.
>            Reporter: David Martín Clavo
>            Assignee: Hiram Chirino
>             Fix For: 5.0.0
>
>
> *A. Description*
> Setting the wireFormat.tcpNoDelayEnabled flag to true in connection uri's 
> (for example _"tcp://localhost:61616?wireFormat.tcpNoDelayEnabled"_) has no 
> effect:
> The sockets created in ActiveMQ do not have the TcpNoDelay flag set to true.
> You can verify this for example in the following way: insert the line 
> _System.err.println(sock.getTcpNoDelay());_ at the end of the method
> _org.apache.activemq.transport.tcp.TcpTransport.initialiseSocket_.
> Also you can try my test at 
> http://www.nabble.com/High-latency-for-small-messages-problem-t3159901.html 
> which makes latency appear if Nagle's algorithm is not disabled.
> This affects versions 4.0, 4.1.0, and 4.2.0 latest snapshot. I guess 4.0.2 is 
> affected too.
> *B. Reason*
> After looking at the source code to understand how the options are set, i saw 
> that in the method 
> org.apache.activemq.transport.tcp.TcpTransportFactory.compositeConfigure the 
> following line appears:
> _Map socketOptions = IntrospectionSupport.extractProperties(options, 
> "socket.")_; 
> and also that the method to set the TcpNoDelay option in class 
> _org.apache.activemq.transport.tcp.TcpTransport_ is called _setTcpNoDelay_ 
> and not _setTcpNoDelayEnabled_
> Therefore, I tried to write _"socket.tcpNoDelay=true"_ instead of 
> _"wireFormat.tcpNoDelayEnabled=true"_ and it *worked!* This is a *workaround*.
> But, _"wireFormat.tcpNoDelayEnabled"_ option is not refused (as 
> _"wireFormat.tcpNoDelayTypoEnabled"_ would be). The option 
> _"tcpNoDelay=true"_ is not refused either, but DOES NOT work either.
> *C. Fix*
> So, please, for the sake of the poor soul who's next going to try to disable 
> Nagle's algorithm without noticing any effect, and will start looking for the 
> problem elsewhere (and for the sake of consistency also):
> -Either change the documentation 
> (http://www.activemq.org/site/tcp-transport-reference.html and 
> http://www.activemq.org/site/configuring-wire-formats.html) to say that one 
> should use the _socket.tcpNoDelay_ option, or
> -Change the code to obey the documentation (and make it refuse old options 
> like just _"tcpNoDelay"_ who have no effect).
> Personally I would change the documentation ASAP so that people know about 
> the _"socket.tcpNoDelay=true"_ workaround until next version, and then change 
> the code to recognize the _"wireFormat.tcpNoDelayTypoEnabled"_ option. I'd 
> like to point out that the own ActiveMQ test cases use 
> _"wireFormat.tcpNoDelayTypoEnabled"_ .
> *D. Related issues*
> This is related to a previous post of mine: 
> http://www.nabble.com/High-latency-for-small-messages-problem-t3159901.html
> Doing quick synchronized sends showed a 39ms latency if the broker is running 
> in Linux, and a 200ms latency if the broker is in Windows (by the way, if 
> someone knows the bottom reason for this exact latency times, please tell 
> me). Putting the _"wireFormat.tcpNoDelayTypoEnabled"_ to true in order to 
> disable Nagle's algorithm had no effect (because ActiveMQ does not recognize 
> it).
> Very probably this is also related to issues 
> https://issues.apache.org/activemq/browse/AMQ-1143 and 
> https://issues.apache.org/activemq/browse/AMQ-1137 (in this one probably 
> Helmutt tried to set the wireFormat.tcpNoDelayTypoEnabled without success 
> because of this).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to