You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "MayDay (JIRA)" <ji...@apache.org> on 2017/10/27 00:22:01 UTC

[jira] [Comment Edited] (SSHD-781) The heartbeat task of client not support keepalive function well

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

MayDay edited comment on SSHD-781 at 10/27/17 12:21 AM:
--------------------------------------------------------

If the client can not receive a reponse from servver,how to make the keeoalive available?


was (Author: mayday):
If the client can not receive a reponse from servver,how to make the keeoalive available?

> The heartbeat task of client not support keepalive function well
> ----------------------------------------------------------------
>
>                 Key: SSHD-781
>                 URL: https://issues.apache.org/jira/browse/SSHD-781
>             Project: MINA SSHD
>          Issue Type: Question
>    Affects Versions: 1.4.0, 1.6.0
>         Environment: Any environment
>            Reporter: MayDay
>            Assignee: Goldstein Lyor
>              Labels: test
>
>  
>         The heartbeat request of sshClient is a SSH_MSG_GLOBAL_REQUEST, but the default buffer of heartbeat set false (see [ClientConnectService#sendHeartbeat|https://github.com/apache/mina-sshd/blob/693fa5d90f54676de6655954046a8a4f5d09728a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientConnectionService.java])
> {code:java}
> buf.putBoolean(false);
> {code}
>         The sshServer reponse the heartbeat by the [KeepAliveHandler|https://github.com/apache/mina-sshd/blob/693fa5d90f54676de6655954046a8a4f5d09728a/sshd-core/src/main/java/org/apache/sshd/server/global/KeepAliveHandler.java], then [AbstractConnectionService #sendGlobalResponse|https://github.com/apache/mina-sshd/blob/693fa5d90f54676de6655954046a8a4f5d09728a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractConnectionService.java].
> {code:java}
>  boolean wantReply = buffer.getBoolean();
> {code}
>        but if the buffer of heartbeat set false, then the sendGlobalResponse will not reponse sshClient {color:#205081}because of the wantReply is false{color} .(see [AbstractConnectionService #globalRequest|https://github.com/apache/mina-sshd/blob/693fa5d90f54676de6655954046a8a4f5d09728a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractConnectionService.java])
> {code:java}
> if (RequestHandler.Result.Replied.equals(result) || (!wantReply)) {
>             return new AbstractIoWriteFuture(req, null) {
>                 {
>                     setValue(Boolean.TRUE);
>                 }
>             };
> }
> {code}
> 1 、Is it a Bug(set the heartbeat buffer false default)? how the sshClient know the server is available when the server don't response.
> I have test it whth create a client with params (
> HEARTBEAT_INTERAL = 60
> IDLE_TIMEOUT = 300
> NIO_READ_TIMEOUT = 315)and a server, and the client will close seesion after the NIO_READ_TIMEOUT.
> 2、If the client reach the NIO_READ_TIMEOUT, then thows a {color:#8eb021}InterruptedByTimeoutException{color},and close the session.But the task of heratbeat not stoped, it will continue to run even though it will not send packet.See the 
> [ClientConnectionService #startHeartBeat|https://github.com/apache/mina-sshd/blob/693fa5d90f54676de6655954046a8a4f5d09728a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientConnectionService.java]
> {code:java}
> service.scheduleAtFixedRate(this::sendHeartBeat, interval, interval, TimeUnit.MILLISECONDS);
> {code}
> if the sshClient reopen a new session and close it many times,the number of invalid scheduling heartbeat  task will become very large, it's not  equitable.
>          



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)