adding rsockets support into JDK

Lu, Yingqi yingqi.lu at intel.com
Sun Jul 1 03:01:26 UTC 2018


Hi All,

Here is the webrev.08 of the patch http://cr.openjdk.java.net/~ylu/8195160.08/

In this version,

1. Added Javadoc for 5 newly introduced APIs inside jdk.net.Sockets. Thanks to Alan for his help!

2. Changed RQSIZE, SQSIZE and INLINE constants from public and private; Added comments for RDMA_SQSIZE, RDMA_RQSIZE and RDMA_INLINE options.

3. Currently, the patch compiles on Linux, Windows and MacOS. 

Thanks,
Lucy 

>-----Original Message-----
>From: nio-dev [mailto:nio-dev-bounces at openjdk.java.net] On Behalf Of Lu,
>Yingqi
>Sent: Monday, June 25, 2018 7:19 AM
>To: Alan Bateman <Alan.Bateman at oracle.com>
>Cc: nio-dev at openjdk.java.net; Viswanathan, Sandhya
><sandhya.viswanathan at intel.com>; Aundhe, Shirish <shirish.aundhe at intel.com>;
>Kaczmarek, Eric <eric.kaczmarek at intel.com>
>Subject: Re: adding rsockets support into JDK
>
>Hi Alan,
>
>Thank you very much for the help on the javadoc changes. I will put them into
>new webrev.
>
>I will modify the RDMA socket options following the example of standard socket
>options as well and submit version 8 for review today.
>
>Thank,
>Lucy
>
>Sent from my iPhone
>
>> On Jun 25, 2018, at 4:51 AM, Alan Bateman <Alan.Bateman at oracle.com>
>wrote:
>>
>>> On 23/06/2018 01:56, Lu, Yingqi wrote:
>>> Hi All,
>>>
>>> Here is the version 7 of the patch.
>http://cr.openjdk.java.net/~ylu/8195160.07/
>>>
>>> In this version, I did:
>>>
>>> 1. Added SO_LINGER supports (librdmacm supports it) to RDMA based sockets
>and socket channels. Tests are also updated with this newly added Socket Option.
>>>
>>> 2. Added a private static variable rdmaOptionsSet to both java.net.Socket and
>java.net.ServerSocket. This way, I think the supportedOptions will return correct
>values between RDMA based sockets and regular sockets regardless of who is
>created first. Please let me know if I missed any cases here.
>>>
>> I went over the API again. The factory methods don't have complete javadoc
>yet and I'm happy to help with that, see below.
>>
>> The other part of the API is jdk.net.RdmaSocketOptions. The SQSIZE, RQSIZE
>and INLINE constants are currently public so they are leaking into the API. The API
>elements are RMDA_SQSIZE, RMDA_RQSIZE and RQSIZE_INLINE and these will
>need javadoc. Can you java.net.StandardSocketOption as an example of how the
>existing socket options are specified?
>>
>> -Alan.
>>
>>
>> A suggestion to add to the jdk.net.Sockets class description:
>>
>>  * <p> The {@link #openRdmaSelector() openRdmaSelector}, {@link
>>  * #openRdmaSocketChannel() openRdmaSocketChannel}, and {@link
>>  * #openRdmaServerSocketChannel() openRdmaServerSocketChannel} methods
>>  * create selectors and selectable channels for use with RDMA sockets.
>>  * These objects are created a {@link java.nio.channels.spi.SelectorProvider
>>  * SelectorProvider} that is not the default {@code SelectorProvider}.
>>  * Consequently, selectable channels to RDMA sockets may not be multiplexed
>>  * with selectable channel created by the default selector provider. The
>>  * selector provider does not support datagram channels, its {@code
>>  * openDatagramChannel} methods throw {@link
>UnsupportedOperationException}.
>>
>> A suggestion for openRdmaSocketChannel:
>>
>>     /**
>>      * Opens a socket channel to a RDMA socket. A newly-created socket channel
>>      * is {@link SocketChannel#isOpen() open}, not yet bound to a {@link
>>      * SocketChannel#getLocalAddress() local address}, and not yet
>>      * {@link SocketChannel#isConnected() connected}.
>>      *
>>      * <p> A socket channel to a RDMA socket supports all of the socket options
>>      * specified by {@code SocketChannel}. In addition, it also supports the
>>      * socket options specified by {@link RdmaSocketOptions}.
>>      *
>>      * @apiNote The rsocket implementation on Linux only supports IPv4
>addresses.
>>      * Consequently, attempting to bind or connect to an IPv6 address will fail
>>      * with {@code UnsupportedAddressTypeException}.
>>      *
>>      * @throws IOException
>>      *         If an I/O error occurs
>>      * @throws UnsupportedOperationException
>>      *         If RDMA sockets are not supported on this platform
>>      *
>>      * @since N
>>      */
>>
>> A suggestion for openRdmaServerSocketChannel:
>>
>>     /**
>>      * Opens a server-socket channel to a RDMA socket. A newly-created socket
>>      * channel is {@link SocketChannel#isOpen() open} but not yet bound to a
>>      * {@link SocketChannel#getLocalAddress() local address}.
>>      *
>>      * @apiNote The rsocket implementation on Linux only supports IPv4
>addresses.
>>      * Consequently, attempting to bind to an IPv6 address will fail with
>>      * {@code UnsupportedAddressTypeException}.
>>      *
>>      * @throws IOException
>>      *         If an I/O error occurs
>>      * @throws UnsupportedOperationException
>>      *         If RDMA sockets are not supported on this platform
>>      *
>>      * @since N
>>      */
>>
>> A suggestion for openRdmaSelector:
>>
>>     /**
>>      * Opens a selector to multiplex selectable channels to RDMA sockets.
>>      *
>>      * @throws IOException
>>      *         If an I/O error occurs
>>      * @throws UnsupportedOperationException
>>      *         If RDMA sockets are not supported on this platform
>>      *
>>      * @since N
>>      */
>>
>> A suggestion for openRdmaSocket:
>>
>>     /**
>>      * Creates an unconnected RDMA socket.
>>      *
>>      * <p> A RDMA socket supports the same socket options that that {@code
>>      * java.net.Socket} defines. In addition, it also supports the socket options
>>      * specified by {@link RdmaSocketOptions}.
>>      *
>>      * @apiNote The rsocket implementation on Linux only supports IPv4
>addresses.
>>      * Consequently, attempting to bind or connect to an IPv6 address will fail
>>      * with {@code IllegalArgumentException}.
>>      *
>>      * @throws IOException
>>      *         If an I/O error occurs
>>      * @throws UnsupportedOperationException
>>      *         If RDMA sockets are not supported on this platform
>>      *
>>      * @since N
>>      */
>>
>> A suggestion for openRdmaServerSocket:
>>
>>     /**
>>      * Creates an unbound RDMA server socket.
>>      *
>>      * <p> A RDMA socket supports the same socket options that that {@code
>>      * java.net.ServerSocket} defines.
>>      *
>>      * @apiNote The rsocket implementation on Linux only supports IPv4
>addresses.
>>      * Consequently, attempting to bind to an IPv6 address will fail with
>>      * {@code IllegalArgumentException}.
>>      *
>>      * @throws IOException
>>      *         If an I/O error occurs
>>      * @throws UnsupportedOperationException
>>      *         If RDMA sockets are not supported on this platform
>>      *
>>      * @since N
>>      */


More information about the nio-dev mailing list