activemq-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martyn Taylor (JIRA)" <j...@apache.org>
Subject [jira] [Closed] (ARTEMIS-509) Artemis MQTT doesnt respect MQTT Client's connect keepalive. It disconnects at 0.75 time of the requested keepalive
Date Wed, 08 Jun 2016 12:54:21 GMT

     [ https://issues.apache.org/jira/browse/ARTEMIS-509?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Martyn Taylor closed ARTEMIS-509.
---------------------------------

> Artemis MQTT doesnt respect MQTT Client's connect keepalive. It disconnects at 0.75 time
of the requested keepalive
> -------------------------------------------------------------------------------------------------------------------
>
>                 Key: ARTEMIS-509
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-509
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 1.2.0
>            Reporter: Diego Bes
>
> on MQTTProtocolHandler.java the server creates a ttl of 3/4 of the time set by the keepalive
sent by the client.
> With this setting, the server will always disconnect the connection before the client
can even send a PING packet.
> From the specs, the server should wait 1.5 times the time set by the client's connect
KeepAlive and not 0.75 times
> ( If the Keep Alive value is non-zero and the Server does not receive a Control Packet
from the Client within one and a half times the Keep Alive time period, it MUST disconnect
the Network Connection to the Client as if the network had failed [MQTT-3.1.2-24]. )
> ( link to the git code https://github.com/apache/activemq-artemis/blob/master/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTProtocolHandler.java#L159
)
> The following code:
> {code}
> /**
>     * Called during connection.
>     *
>     * @param connect
>     */
>    void handleConnect(MqttConnectMessage connect, ChannelHandlerContext ctx) throws Exception
{
>       this.ctx = ctx;
>       connectionEntry.ttl = connect.variableHeader().keepAliveTimeSeconds() * 750;
>       String clientId = connect.payload().clientIdentifier();
>       session.getConnectionManager().connect(clientId, connect.payload().userName(),
connect.payload().password(), connect.variableHeader().isWillFlag(), connect.payload().willMessage(),
connect.payload().willTopic(), connect.variableHeader().isWillRetain(), connect.variableHeader().willQos(),
connect.variableHeader().isCleanSession());
>    }
> {code} 
> Should look like:
> {code}
> /**
>     * Called during connection.
>     *
>     * @param connect
>     */
>    void handleConnect(MqttConnectMessage connect, ChannelHandlerContext ctx) throws Exception
{
>       this.ctx = ctx;
>       connectionEntry.ttl = connect.variableHeader().keepAliveTimeSeconds() * 1500;
>       String clientId = connect.payload().clientIdentifier();
>       session.getConnectionManager().connect(clientId, connect.payload().userName(),
connect.payload().password(), connect.variableHeader().isWillFlag(), connect.payload().willMessage(),
connect.payload().willTopic(), connect.variableHeader().isWillRetain(), connect.variableHeader().willQos(),
connect.variableHeader().isCleanSession());
>    }
> {code}
> Where the ttl is set to keepalive * 1500 ( keepalive is in seconds ) 



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

Mime
View raw message