RFR: 8354024: [JMH] Create ephemeral UnixDomainSocketAddress provider with thread-safe close semantics
Volkan Yazici
vyazici at openjdk.org
Thu Apr 10 10:44:44 UTC 2025
`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`
-------------
Commit messages:
- 8354024: [JMH] Create ephemeral UnixDomainSocketAddress provider with thread-safe close semantics
Changes: https://git.openjdk.org/jdk/pull/24568/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24568&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8354024
Stats: 138 lines in 3 files changed: 75 ins; 37 del; 26 mod
Patch: https://git.openjdk.org/jdk/pull/24568.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/24568/head:pull/24568
PR: https://git.openjdk.org/jdk/pull/24568
More information about the net-dev
mailing list