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

Helmut Janknecht commented on AMQ-1156:
---------------------------------------

On Linux 2.6.16 or 2.6.17 perhaps setting this {{sysctl net.ipv4.tcp_abc=0}} 
may help as described in 
https://issues.apache.org/activemq/browse/AMQ-1137#action_38799.

> 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, 4.2.0
>         Environment: Any.
>            Reporter: David Martín Clavo
>
> *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