RFR: 8354024: [JMH] Create ephemeral UnixDomainSocketAddress provider with thread-safe close semantics [v2]
Volkan Yazici
vyazici at openjdk.org
Tue Apr 22 09:44:04 UTC 2025
On Tue, 22 Apr 2025 09:41:08 GMT, Volkan Yazici <vyazici at openjdk.org> wrote:
>> `ServerUdsChannelHolder` is introduced to manage the life cycle of a `ServerSocketChannel` created using Unix domain sockets (UDS) in a thread-safe manner.
>>
>> ### Testing
>>
>> Changes can be tested as follows:
>>
>>
>> make build-microbenchmark
>> build/linux-x64/jdk/bin/java \
>> -jar build/linux-x64/images/test/micro/benchmarks.jar \
>> -f 1 -wi 1 -i 1 -t 2 \
>> "(SocketChannelConnectionSetup|UnixSocketChannelReadWrite)"
>>
>>
>> ### Background
>>
>> A UDS need to be pointed to a _non-existent_ file, which is to be created by `bind()`. The created file needs to be deleted as a part of the clean-up at exit. When tests employing UDS run in parallel, failures can happen at multiple places:
>>
>> - `bind()` can fail, if the file is already created by another thread
>> - the clean-up of the socket file can fail, if the file is already deleted
>> - reported for `SocketChannelConnectionSetup` in [8350915](https://bugs.openjdk.org/browse/JDK-8350915)
>> - reported for `UnixSocketChannelReadWrite` in [8351601](https://bugs.openjdk.org/browse/JDK-8351601)
>> - the clean-up of the socket file parent directory can fail, if not all threads deleted their socket files, and hence, the folder is not empty
>> - reported for in `SocketChannelConnectionSetup` in [8354024](https://bugs.openjdk.org/browse/JDK-8354024)
>>
>> This PR introduces `ServerUdsChannelHolder` utility to manage the life cycle of a UDS and avoids above shared issues by:
>> - using a dedicated (temporary and unique) parent folder for the socket
>> - encapsulating the termination logic (i.e., closing the socket, deleting the socket file and its (dedicated) parent folder) in `AutoCloseable::close`
>
> Volkan Yazici has updated the pull request incrementally with one additional commit since the last revision:
>
> Fix copyright year
test/micro/org/openjdk/bench/java/net/ServerUdsChannelHolder.java line 2:
> 1: /*
> 2: * Copyright (c) 2020, 2025, Oracle and/or its affiliates. All rights reserved.
Suggestion:
* Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/24568#discussion_r2053751342
More information about the net-dev
mailing list