Home / Class/ MacOSDnsServerAddressStreamProvider Class — netty Architecture

MacOSDnsServerAddressStreamProvider Class — netty Architecture

Architecture documentation for the MacOSDnsServerAddressStreamProvider class in MacOSDnsServerAddressStreamProvider.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  268a4b26_3b4a_685c_306c_99ddbf78df83["MacOSDnsServerAddressStreamProvider"]
  2b7f1dad_500b_b401_652a_64b96662750e["MacOSDnsServerAddressStreamProvider.java"]
  268a4b26_3b4a_685c_306c_99ddbf78df83 -->|defined in| 2b7f1dad_500b_b401_652a_64b96662750e
  762fdf21_e4f7_eaa8_5606_bd43986ec0b2["loadNativeLibrary()"]
  268a4b26_3b4a_685c_306c_99ddbf78df83 -->|method| 762fdf21_e4f7_eaa8_5606_bd43986ec0b2
  2b4fc404_4f79_2ad7_c544_900c3f6ef013["isAvailable()"]
  268a4b26_3b4a_685c_306c_99ddbf78df83 -->|method| 2b4fc404_4f79_2ad7_c544_900c3f6ef013
  85c0afb7_9116_07ec_9b31_a74828538f1a["ensureAvailability()"]
  268a4b26_3b4a_685c_306c_99ddbf78df83 -->|method| 85c0afb7_9116_07ec_9b31_a74828538f1a
  f92ace28_4288_5487_dfa0_430f467810aa["Throwable()"]
  268a4b26_3b4a_685c_306c_99ddbf78df83 -->|method| f92ace28_4288_5487_dfa0_430f467810aa
  8885f722_5e2a_4070_a8f3_2046f1f7c051["MacOSDnsServerAddressStreamProvider()"]
  268a4b26_3b4a_685c_306c_99ddbf78df83 -->|method| 8885f722_5e2a_4070_a8f3_2046f1f7c051
  e7b86b00_0660_4f14_26bc_7b1dd4f94dda["retrieveCurrentMappings()"]
  268a4b26_3b4a_685c_306c_99ddbf78df83 -->|method| e7b86b00_0660_4f14_26bc_7b1dd4f94dda
  d0561e6b_b305_b793_716f_98dda25d5bb9["DnsServerAddressStream()"]
  268a4b26_3b4a_685c_306c_99ddbf78df83 -->|method| d0561e6b_b305_b793_716f_98dda25d5bb9
  4ed831db_e451_8a6c_c552_96d2650b78ff["resolvers()"]
  268a4b26_3b4a_685c_306c_99ddbf78df83 -->|method| 4ed831db_e451_8a6c_c552_96d2650b78ff

Relationship Graph

Source Code

resolver-dns-classes-macos/src/main/java/io/netty/resolver/dns/macos/MacOSDnsServerAddressStreamProvider.java lines 44–202

public final class MacOSDnsServerAddressStreamProvider implements DnsServerAddressStreamProvider {

    private static final Comparator<DnsResolver> RESOLVER_COMPARATOR =
            new Comparator<DnsResolver>() {
                @Override
                public int compare(DnsResolver r1, DnsResolver r2) {
                    // Note: order is descending (from higher to lower) so entries with lower search order override
                    // entries with higher search order.
                    return r1.searchOrder() < r2.searchOrder() ? 1 : r1.searchOrder() == r2.searchOrder() ? 0 : -1;
                }
            };

    private static final Throwable UNAVAILABILITY_CAUSE;

    private static final InternalLogger logger =
            InternalLoggerFactory.getInstance(MacOSDnsServerAddressStreamProvider.class);

    // Let's refresh every 10 seconds.
    private static final long REFRESH_INTERVAL = TimeUnit.SECONDS.toNanos(10);

    static {
        // Preload all classes that will be used in the OnLoad(...) function of JNI to eliminate the possiblity of a
        // class-loader deadlock. This is a workaround for https://github.com/netty/netty/issues/11209.

        // This needs to match all the classes that are loaded via NETTY_JNI_UTIL_LOAD_CLASS or looked up via
        // NETTY_JNI_UTIL_FIND_CLASS.
        ClassInitializerUtil.tryLoadClasses(MacOSDnsServerAddressStreamProvider.class,
                // netty_resolver_dns_macos
                byte[].class, String.class
        );

        Throwable cause = null;
        try {
            loadNativeLibrary();
        } catch (Throwable error) {
            cause = error;
        }
        UNAVAILABILITY_CAUSE = cause;
    }

    private static void loadNativeLibrary() {
        if (!PlatformDependent.isOsx()) {
            throw new IllegalStateException("Only supported on MacOS/OSX");
        }
        String staticLibName = "netty_resolver_dns_native_macos";
        String sharedLibName = staticLibName + '_' + PlatformDependent.normalizedArch();
        ClassLoader cl = PlatformDependent.getClassLoader(MacOSDnsServerAddressStreamProvider.class);
        try {
            NativeLibraryLoader.load(sharedLibName, cl);
        } catch (UnsatisfiedLinkError e1) {
            try {
                NativeLibraryLoader.load(staticLibName, cl);
                logger.debug("Failed to load {}", sharedLibName, e1);
            } catch (UnsatisfiedLinkError e2) {
                ThrowableUtil.addSuppressed(e1, e2);
                throw e1;
            }
        }
    }

    public static boolean isAvailable() {
        return UNAVAILABILITY_CAUSE == null;
    }

    public static void ensureAvailability() {
        if (UNAVAILABILITY_CAUSE != null) {
            throw (Error) new UnsatisfiedLinkError(
                    "failed to load the required native library").initCause(UNAVAILABILITY_CAUSE);
        }
    }

    public static Throwable unavailabilityCause() {
        return UNAVAILABILITY_CAUSE;
    }

    public MacOSDnsServerAddressStreamProvider() {
        ensureAvailability();
        currentMappings = retrieveCurrentMappings();
        lastRefresh = new AtomicLong(System.nanoTime());
    }

Frequently Asked Questions

What is the MacOSDnsServerAddressStreamProvider class?
MacOSDnsServerAddressStreamProvider is a class in the netty codebase, defined in resolver-dns-classes-macos/src/main/java/io/netty/resolver/dns/macos/MacOSDnsServerAddressStreamProvider.java.
Where is MacOSDnsServerAddressStreamProvider defined?
MacOSDnsServerAddressStreamProvider is defined in resolver-dns-classes-macos/src/main/java/io/netty/resolver/dns/macos/MacOSDnsServerAddressStreamProvider.java at line 44.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free