[
https://issues.apache.org/jira/browse/NIFI-5952?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17032097#comment-17032097
]
Ryan Hendrickson commented on NIFI-5952:
----------------------------------------
[~mosermw] agree - Discussion on this topic after 'fix'.
[https://www.mail-archive.com/[email protected]/msg17898.html]
> RAW Site-to-Site fails with java.nio.channels.IllegalBlockingModeException
> --------------------------------------------------------------------------
>
> Key: NIFI-5952
> URL: https://issues.apache.org/jira/browse/NIFI-5952
> Project: Apache NiFi
> Issue Type: Sub-task
> Components: Core Framework
> Environment: jdk-11.0.1
> Reporter: Koji Kawamura
> Assignee: Koji Kawamura
> Priority: Blocker
> Labels: Java11
> Fix For: 1.10.0
>
> Time Spent: 2h 10m
> Remaining Estimate: 0h
>
> During the review cycle of NIFI-5820, I found that while HTTP S2S works
> without issue, RAW S2S is failing with following Exception:
> {code:java}
> 2018-12-19 16:19:26,811 ERROR [Site-to-Site Listener] org.apache.nifi.NiFi
> java.nio.channels.IllegalBlockingModeException: null
> at
> java.base/sun.nio.ch.ServerSocketAdaptor.accept(ServerSocketAdaptor.java:121)
> at
> org.apache.nifi.remote.SocketRemoteSiteListener$1.run(SocketRemoteSiteListener.java:125)
> at java.base/java.lang.Thread.run(Thread.java:834)
> {code}
> Despite of the fact that the RAW has been worked with older Java versions, it
> seems current nio usage at RAW S2S is not correct. And JDK 11 starts
> complaining about it.
> Here are few things I've discovered with current NiFi and nio SocketChannel:
> - NiFi accepts RAW S2S client connection with SocketRemoteSiteListener,
> which uses ServerSocketChannel as non-blocking manner [1]
> - But SocketRemoteSiteListener doesn't use Selector API to accept incoming
> connection and transfer data with the channel. This is the cause of above
> exception.
> - SocketRemoteSiteListener spawns new thread when it accepts connection.
> This is how connections are handled with a non-nio, standard Socket
> programming. If we want to use non-blocking NIO, we need to use channels with
> Selector
> - But using non-blocking IO with current NiFi S2S protocol can only add few
> or none benefit by doing so. [2]
> To make RAW S2S work with Java 11, we need either:
> A. Stop using nio packages.
> B. Implement correct nio usage, meaning use Selector IO and probably we need
> another thread pool.
> I'm going to take the approach A above, because B would take much more
> refactoring.
> [1]
> [https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-site-to-site/src/main/java/org/apache/nifi/remote/SocketRemoteSiteListener.java#L120]
> [2]
> [https://stackoverflow.com/questions/12338204/in-java-nio-is-a-selector-useful-for-a-client-socketchannel]
--
This message was sent by Atlassian Jira
(v8.3.4#803005)