adding rsockets support into JDK
Lu, Yingqi
yingqi.lu at intel.com
Mon Jun 25 14:19:21 UTC 2018
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