Home / Class/ InflightNameResolver Class — netty Architecture

InflightNameResolver Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  96700b12_6a8e_ec6f_d49a_03fc1a687cdc["InflightNameResolver"]
  31892189_9449_8feb_47f9_d22900c73119["InflightNameResolver.java"]
  96700b12_6a8e_ec6f_d49a_03fc1a687cdc -->|defined in| 31892189_9449_8feb_47f9_d22900c73119
  d9ef5f38_8a7c_a58b_7208_d7b12167c847["InflightNameResolver()"]
  96700b12_6a8e_ec6f_d49a_03fc1a687cdc -->|method| d9ef5f38_8a7c_a58b_7208_d7b12167c847
  eac29cdb_5496_e513_42f6_89cec1f8cd3c["resolve()"]
  96700b12_6a8e_ec6f_d49a_03fc1a687cdc -->|method| eac29cdb_5496_e513_42f6_89cec1f8cd3c
  c41ae46a_8389_0772_f9b5_703eb5455fd2["resolveAll()"]
  96700b12_6a8e_ec6f_d49a_03fc1a687cdc -->|method| c41ae46a_8389_0772_f9b5_703eb5455fd2
  0efb2665_a3c0_ea95_264e_11fc0af77650["close()"]
  96700b12_6a8e_ec6f_d49a_03fc1a687cdc -->|method| 0efb2665_a3c0_ea95_264e_11fc0af77650
  5695645f_ddbb_4431_9ea7_5d62044e9e96["transferResult()"]
  96700b12_6a8e_ec6f_d49a_03fc1a687cdc -->|method| 5695645f_ddbb_4431_9ea7_5d62044e9e96
  df47d5de_c0a1_1811_058b_72f8a600186f["String()"]
  96700b12_6a8e_ec6f_d49a_03fc1a687cdc -->|method| df47d5de_c0a1_1811_058b_72f8a600186f

Relationship Graph

Source Code

resolver-dns/src/main/java/io/netty/resolver/dns/InflightNameResolver.java lines 32–121

final class InflightNameResolver<T> implements NameResolver<T> {

    private final EventExecutor executor;
    private final NameResolver<T> delegate;
    private final ConcurrentMap<String, Promise<T>> resolvesInProgress;
    private final ConcurrentMap<String, Promise<List<T>>> resolveAllsInProgress;

    InflightNameResolver(EventExecutor executor, NameResolver<T> delegate,
                         ConcurrentMap<String, Promise<T>> resolvesInProgress,
                         ConcurrentMap<String, Promise<List<T>>> resolveAllsInProgress) {

        this.executor = checkNotNull(executor, "executor");
        this.delegate = checkNotNull(delegate, "delegate");
        this.resolvesInProgress = checkNotNull(resolvesInProgress, "resolvesInProgress");
        this.resolveAllsInProgress = checkNotNull(resolveAllsInProgress, "resolveAllsInProgress");
    }

    @Override
    public Future<T> resolve(String inetHost) {
        return resolve(inetHost, executor.<T>newPromise());
    }

    @Override
    public Future<List<T>> resolveAll(String inetHost) {
        return resolveAll(inetHost, executor.<List<T>>newPromise());
    }

    @Override
    public void close() {
        delegate.close();
    }

    @Override
    public Promise<T> resolve(String inetHost, Promise<T> promise) {
        return resolve(resolvesInProgress, inetHost, promise, false);
    }

    @Override
    public Promise<List<T>> resolveAll(String inetHost, Promise<List<T>> promise) {
        return resolve(resolveAllsInProgress, inetHost, promise, true);
    }

    private <U> Promise<U> resolve(
            final ConcurrentMap<String, Promise<U>> resolveMap,
            final String inetHost, final Promise<U> promise, boolean resolveAll) {

        final Promise<U> earlyPromise = resolveMap.putIfAbsent(inetHost, promise);
        if (earlyPromise != null) {
            // Name resolution for the specified inetHost is in progress already.
            if (earlyPromise.isDone()) {
                transferResult(earlyPromise, promise);
            } else {
                earlyPromise.addListener((FutureListener<U>) f -> transferResult(f, promise));
            }
        } else {
            try {
                if (resolveAll) {
                    @SuppressWarnings("unchecked")
                    final Promise<List<T>> castPromise = (Promise<List<T>>) promise; // U is List<T>
                    delegate.resolveAll(inetHost, castPromise);
                } else {
                    @SuppressWarnings("unchecked")
                    final Promise<T> castPromise = (Promise<T>) promise; // U is T
                    delegate.resolve(inetHost, castPromise);
                }
            } finally {
                if (promise.isDone()) {
                    resolveMap.remove(inetHost);
                } else {
                    promise.addListener((FutureListener<U>) f -> resolveMap.remove(inetHost));
                }
            }
        }

        return promise;
    }

    private static <T> void transferResult(Future<T> src, Promise<T> dst) {
        if (src.isSuccess()) {
            dst.trySuccess(src.getNow());
        } else {

Frequently Asked Questions

What is the InflightNameResolver class?
InflightNameResolver is a class in the netty codebase, defined in resolver-dns/src/main/java/io/netty/resolver/dns/InflightNameResolver.java.
Where is InflightNameResolver defined?
InflightNameResolver is defined in resolver-dns/src/main/java/io/netty/resolver/dns/InflightNameResolver.java at line 32.

Analyze Your Own Codebase

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

Try Supermodel Free