You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kudu.apache.org by "Bakai Ádám (Jira)" <ji...@apache.org> on 2022/11/04 12:35:00 UTC

[jira] [Commented] (KUDU-3387) Enable TCP keepalive for connections created by Java client

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

Bakai Ádám commented on KUDU-3387:
----------------------------------

In the commit 57dda5d4868d29f68de4aa0ac516ca390333e6be , the possibility was explored, and the timeout is enabled, but the timeout is not set:
AsyncKuduClient.java:~3030
{code:java}
+      // Unfortunately there is no way to override the keep-alive timeout in
+      // Java since the JRE doesn't expose any way to call setsockopt() with
+      // TCP_KEEPIDLE. And of course the default timeout is >2h. Sigh.
+      b.option(ChannelOption.SO_KEEPALIVE, true);
{code}
As far as I understand netty doesn't expose the Socket itself, but since then it is possible to change the timeout interval on some platform with ExtendedSocketOptions (https://docs.oracle.com/en/java/javase/11/docs/api/jdk.net/jdk/net/ExtendedSocketOptions.html).  Here is an example how to set it: https://stackoverflow.com/questions/22472844/how-to-set-socket-option-tcp-keepcnt-tcp-keepidle-tcp-keepintvl-in-java-or-n

So in theory It may be possible to set options on the SocketChannel (on Mac and Linux, source: https://bugs.openjdk.org/browse/JDK-8194298) , but not with io.netty.channel.socket.nio.NioSocketChannel
. These are the options that can be configured: https://javadoc.io/static/io.netty/netty-transport/5.0.0.Alpha2/io/netty/channel/socket/SocketChannelConfig.html . This is the highest version of netty I could find at the date of the comment.

So, in short: the TCP keepalive is set to true already, but the timeout interval is not explicitly set, and it can be very high (2 hours). Now Java support changing the keepalive time on Mac and Linux(keep in mind the current solution is Linux-only (Socket::SetTcpKeepAlive)), but netty doesn't support it, so it can not be changed. 

> Enable TCP keepalive for connections created by Java client
> -----------------------------------------------------------
>
>                 Key: KUDU-3387
>                 URL: https://issues.apache.org/jira/browse/KUDU-3387
>             Project: Kudu
>          Issue Type: Improvement
>          Components: client, java
>            Reporter: Alexey Serbin
>            Priority: Major
>              Labels: newbie
>
> https://github.com/apache/kudu/commit/89c02fded7595b4712b465bfb939e4f3035b2e75 enabled TCP keepalive for outbound connections; and the C++ client since then is able to detect a dropped off connection when server didn't send a TCP RST.
> It's would be great to enable TCP keepalive for connections created by Java client as well.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)