On Tue, 8 Nov 2022 00:26:56 GMT, Aleksei Efimov <aefi...@openjdk.org> wrote:
>> ### The Proposed Change >> >> The proposed change updates JNDI's `DnsClient` internal implementation to >> use `DatagramChannel` (DC) as a replacement for `DatagramSocket` (DS). >> The main motivation behind this change is to make JNDI/DNS lookups friendly >> to virtual-thread environments and update its underlying implementation to >> use efficient `DatagramChannel` APIs. >> The list of proposed changes: >> - Replace DS usage with DC. That includes the `DNSDatagramSocketFactory` >> class updates to return DC instead of DS. The factory class was renamed to >> `DNSDatagramChannelFactory` to reflect that. >> - Change DNS query timeouts implementation - the current version introduces >> a nio channels selector to implement timeouts. One selector is created for >> each instance of `DnsClient`. >> - Adjust query retries logic to the new implementation of timeouts. >> - Modify the `Timeout` test to create a bound UDP socket to simulate an >> unresponsive DNS server. Before this change, the test was using the >> '10.0.0.0' network address that doesn't belong to any host. The proposed >> change with a bound unresponsive UDP socket is better for test stability on >> different platforms. >> >> >> ### Testing >> `jdk-tier1` to `jdk-tier3 `tests are showing no failures related to the >> changes. >> JNDI regression and JCK tests also didn't highlight any problems with the >> changes. >> >> Also, an app performing a DNS lookup from a virtual thread context executed >> with the following options `--enable-preview -Djdk.tracePinnedThreads=full` >> showed no pinned carrier threads. Before the proposed change the following >> pinned stack trace was observed: >> ``` >> java.base/sun.nio.ch.DatagramChannelImpl.park(DatagramChannelImpl.java:486) >> >> java.base/sun.nio.ch.DatagramChannelImpl.trustedBlockingReceive(DatagramChannelImpl.java:734) >> >> java.base/sun.nio.ch.DatagramChannelImpl.blockingReceive(DatagramChannelImpl.java:661) >> >> java.base/sun.nio.ch.DatagramSocketAdaptor.receive(DatagramSocketAdaptor.java:241) >> <== monitors:1 >> java.base/java.net.DatagramSocket.receive(DatagramSocket.java:714) >> jdk.naming.dns/com.sun.jndi.dns.DnsClient.doUdpQuery(DnsClient.java:430) >> <== monitors:1 >> jdk.naming.dns/com.sun.jndi.dns.DnsClient.query(DnsClient.java:216) >> jdk.naming.dns/com.sun.jndi.dns.Resolver.query(Resolver.java:81) >> jdk.naming.dns/com.sun.jndi.dns.DnsContext.c_lookup(DnsContext.java:290) >> >> java.naming/com.sun.jndi.toolkit.ctx.ComponentContext.p_lookup(ComponentContext.java:542) >> >> java.naming/com.sun.jndi.toolkit.ctx.PartialCompositeContext.lookup(PartialCompositeContext.java:177) >> >> java.naming/com.sun.jndi.toolkit.ctx.PartialCompositeContext.lookup(PartialCompositeContext.java:166) >> java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409) >> >> After proposed changes - pinned threads are not detectable. > > Aleksei Efimov has updated the pull request incrementally with one additional > commit since the last revision: > > Simplify openRandom Marked as reviewed by jpai (Reviewer). Thank you Aleksei for the changes. The latest revision looks good to me. ------------- PR: https://git.openjdk.org/jdk/pull/11007