Home / Class/ DefaultProviderHolder Class — netty Architecture

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();
                    }
                };
    }

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