You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Pavel Moravec (JIRA)" <ji...@apache.org> on 2016/03/07 20:39:41 UTC

[jira] [Commented] (QPID-7127) [C++ broker] Setting large idle timeout cause confuses timers in the C++ broker

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

Pavel Moravec commented on QPID-7127:
-------------------------------------

Reproducer: set idle timeout to ffffffff. Then:

http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp?annotate=1713529#l334 :

uint32_t timeout = pn_transport_get_remote_idle_timeout(transport);
if (timeout) {
    // if idle generate empty frames at 1/2 the timeout interval as keepalives:
    ticker = boost::intrusive_ptr<qpid::sys::TimerTask>(new ConnectionTickerTask((timeout+1)/2,
                                                getBroker().getTimer(),
                                                *this));

I.e. then ConnectionTickerTask is scheduled with zero timeout. So the task is always behind its schedule and spamming logs.

> [C++ broker] Setting large idle timeout cause confuses timers in the C++ broker
> -------------------------------------------------------------------------------
>
>                 Key: QPID-7127
>                 URL: https://issues.apache.org/jira/browse/QPID-7127
>             Project: Qpid
>          Issue Type: Bug
>          Components: C++ Broker
>    Affects Versions: qpid-cpp-0.34
>            Reporter: Jakub Scholz
>
> I run into following problem. When I try to connect with SwiftMQ AMQP client (http://www.swiftmq.com/) to the Qpid C++ broker and don't specify idle timeout, it will use in64_max. The Qpid broker seems to be fine with it and opens the connection:
> ConnectionDispatcher, , visit, po=[POOpen, containerId=356a476d-4678-4cfa-9680-8bf648b808d2@schojak, maxFrameSize=2147483647, maxChannel=255, idleTimeout=9223372036854775807]
> ConnectionDispatcher, , visit, po=[POConnectionFrameReceived, frame=[Open containerId=91655fa5-80d3-4cd1-9a72-51b82e36de00, maxFrameSize=4294967295, channelMax=255, idleTimeOut=2147483647, offeredCapabilities=[ANONYMOUS-RELAY], properties=[product=qpid-cpp, platform=Linux, host=6a2d20e32f38, version=0.35]], sassl=false]
> However, the timers in the broker get crazy from it and start raising milions of errors like this:
> 2016-03-04 15:55:40 [System] error ConnectionTicker couldn't setup next timer firing: 33.8867ms[0ns]
> 2016-03-04 15:55:40 [System] error ConnectionTicker couldn't setup next timer firing: 33.8937ms[0ns]
> 2016-03-04 15:55:40 [System] error ConnectionTicker couldn't setup next timer firing: 33.9006ms[0ns]
> 2016-03-04 15:55:40 [System] error ConnectionTicker couldn't setup next timer firing: 33.9076ms[0ns]
> This seems to go on until the client disconnects or until the disk goes full. IT also seems to cause some secondary problems (perfomance, the affected client cannot close producer etc.)
> The int64 idle timeout seems to be bug in the SwiftMQ client. But Qpid should definitely handle this better:
> - Not open the connection when the indle timeout is invalid
> - Make sure that the timer errors don't appear
> The problem seems to be present in both 0.34 as well as in trunk.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org