DefaultProviderHolder Class — netty Architecture
Architecture documentation for the DefaultProviderHolder class in DnsServerAddressStreamProviders.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 1294fd10_80ef_b859_a7d7_425fc7a1cd48["DefaultProviderHolder"] 841bd276_7a3d_95ef_f1a5_2a8adc12866f["DnsServerAddressStreamProviders.java"] 1294fd10_80ef_b859_a7d7_425fc7a1cd48 -->|defined in| 841bd276_7a3d_95ef_f1a5_2a8adc12866f
Relationship Graph
Source Code
resolver-dns/src/main/java/io/netty/resolver/dns/DnsServerAddressStreamProviders.java lines 118–150
private static final class DefaultProviderHolder {
// We use 5 minutes which is the same as what OpenJDK is using in sun.net.dns.ResolverConfigurationImpl.
private static final long REFRESH_INTERVAL = TimeUnit.MINUTES.toNanos(5);
// TODO(scott): how is this done on Windows? This may require a JNI call to GetNetworkParams
// https://msdn.microsoft.com/en-us/library/aa365968(VS.85).aspx.
static final DnsServerAddressStreamProvider DEFAULT_DNS_SERVER_ADDRESS_STREAM_PROVIDER =
new DnsServerAddressStreamProvider() {
private volatile DnsServerAddressStreamProvider currentProvider = provider();
private final AtomicLong lastRefresh = new AtomicLong(System.nanoTime());
@Override
public DnsServerAddressStream nameServerAddressStream(String hostname) {
long last = lastRefresh.get();
DnsServerAddressStreamProvider current = currentProvider;
if (System.nanoTime() - last > REFRESH_INTERVAL) {
// This is slightly racy which means it will be possible still use the old configuration
// for a small amount of time, but that's ok.
if (lastRefresh.compareAndSet(last, System.nanoTime())) {
current = currentProvider = provider();
}
}
return current.nameServerAddressStream(hostname);
}
private DnsServerAddressStreamProvider provider() {
// If on windows just use the DefaultDnsServerAddressStreamProvider.INSTANCE as otherwise
// we will log some error which may be confusing.
return PlatformDependent.isWindows() ? DefaultDnsServerAddressStreamProvider.INSTANCE :
UnixResolverDnsServerAddressStreamProvider.parseSilently();
}
};
}
Source
Frequently Asked Questions
What is the DefaultProviderHolder class?
DefaultProviderHolder is a class in the netty codebase, defined in resolver-dns/src/main/java/io/netty/resolver/dns/DnsServerAddressStreamProviders.java.
Where is DefaultProviderHolder defined?
DefaultProviderHolder is defined in resolver-dns/src/main/java/io/netty/resolver/dns/DnsServerAddressStreamProviders.java at line 118.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free