RFR: 8310996: Add JFR event for connect operations [v5]

Alan Bateman alanb at openjdk.org
Sat Nov 23 10:03:43 UTC 2024


On Fri, 22 Nov 2024 20:32:50 GMT, Tim Prinzing <tprinzing at openjdk.org> wrote:

>> Adds a JFR event for socket connect operations.
>> 
>> Existing tests TestSocketEvents and TestSocketChannelEvents modified to also check for connect events.
>
> Tim Prinzing has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Added more tests for socket connect events.
>   
>   - SocketAdapter connect
>   - SocketAdapter connect with exception
>   - Socket connect with exception
>   - SocketChannel connect with exception
>   - SocketChannel non-blocking connect
>   - SocketChannel non-blocking connect with exception

Thanks for the update, it's good to have tests for the 8 possible cases that might record a SocketConnect event. If you have the energy for it, we could also add tests to check that a SocketConnect is not recorded for cases where the connect method fails for other reasons, e.g. already connected, Socket closed, ... but only if you want.

src/java.base/share/classes/jdk/internal/event/SocketConnectEvent.java line 37:

> 35:  * {@code jdk.jfr.events.SocketConnectEvent } where the metadata for the event is
> 36:  * provided with annotations.  Some of the methods are replaced by generated
> 37:  * methods when jfr is enabled.  Note that the order of the arguments of the

In passing, there is a mix of "JFR" and "jfr" through-out, I assume you want "JFR" everywhere.

src/java.base/share/classes/jdk/internal/event/SocketConnectEvent.java line 51:

> 49: 
> 50:     /**
> 51:      * Actually commit an event.  The implementation is generated automatically.

I assume "Actually" should be removed, this method commits an event.

src/jdk.jfr/share/classes/jdk/jfr/events/SocketConnectEvent.java line 38:

> 36: @Label("Socket Connect")
> 37: @Category("Java Application")
> 38: @Description("Connecting a socket")

I wonder if we can improve on this description. The event is recorded when a connection is established or cannot be established so it's more like "Socket Connection".

test/jdk/jdk/jfr/event/io/IOHelper.java line 135:

> 133:     }
> 134: 
> 135:     public static void checkConnectionEventException(RecordedEvent event, IOException ioe) {

I assume this should checkConnectEventException.

test/jdk/jdk/jfr/event/io/TestSocketChannelEvents.java line 157:

> 155:                         while (! sc.finishConnect()) {
> 156:                             Thread.sleep(1);
> 157:                         }

The connect method returns true if the connection is established, you should only need to poll finishConnect if the connection is not established immediately. Using a sleep is okay here (although 1ms is very low) and I'm guessing you've done this to avoid using a Selector.

test/jdk/jdk/jfr/event/io/TestSocketChannelEvents.java line 216:

> 214:                 } catch (IOException ioe) {
> 215:                     // we expect this
> 216:                     connectException = ioe;

I think you'll need to adjust the try-catch to only set connectException if the connect or finishConnect methods fails. If the open or configureBlocking fails then connectException should not be set, instead the test should fail.

-------------

PR Review: https://git.openjdk.org/jdk/pull/21528#pullrequestreview-2456365810
PR Review Comment: https://git.openjdk.org/jdk/pull/21528#discussion_r1855145320
PR Review Comment: https://git.openjdk.org/jdk/pull/21528#discussion_r1855145369
PR Review Comment: https://git.openjdk.org/jdk/pull/21528#discussion_r1855145935
PR Review Comment: https://git.openjdk.org/jdk/pull/21528#discussion_r1855146240
PR Review Comment: https://git.openjdk.org/jdk/pull/21528#discussion_r1855150781
PR Review Comment: https://git.openjdk.org/jdk/pull/21528#discussion_r1855151098


More information about the hotspot-jfr-dev mailing list