[ 
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)

Reply via email to