Home / Class/ DnsQueryContext Class — netty Architecture

DnsQueryContext Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  360b8eed_0666_8e3d_9331_e795bb312381["DnsQueryContext"]
  cb1d9388_7b83_b134_ea61_865801958fcf["DnsQueryContext.java"]
  360b8eed_0666_8e3d_9331_e795bb312381 -->|defined in| cb1d9388_7b83_b134_ea61_865801958fcf
  be3000c7_6102_7cd7_e0aa_fedd49a8e5a8["DnsQueryContext()"]
  360b8eed_0666_8e3d_9331_e795bb312381 -->|method| be3000c7_6102_7cd7_e0aa_fedd49a8e5a8
  5b521f80_75c3_e8d7_5d14_477d64235fee["hasOptRecord()"]
  360b8eed_0666_8e3d_9331_e795bb312381 -->|method| 5b521f80_75c3_e8d7_5d14_477d64235fee
  74bccd11_01b5_da96_3a42_7c9f607f3a24["isDone()"]
  360b8eed_0666_8e3d_9331_e795bb312381 -->|method| 74bccd11_01b5_da96_3a42_7c9f607f3a24
  59048201_ab1c_e65a_e051_081d0cdc8dab["DnsQuestion()"]
  360b8eed_0666_8e3d_9331_e795bb312381 -->|method| 59048201_ab1c_e65a_e051_081d0cdc8dab
  b6b09ba0_9205_b433_4d84_8c5f2fc77391["DnsQuery()"]
  360b8eed_0666_8e3d_9331_e795bb312381 -->|method| b6b09ba0_9205_b433_4d84_8c5f2fc77391
  8fa5e7bd_4d88_7f31_94aa_c7cdaf35a08e["String()"]
  360b8eed_0666_8e3d_9331_e795bb312381 -->|method| 8fa5e7bd_4d88_7f31_94aa_c7cdaf35a08e
  d553b80a_9410_aa58_ac6c_ad8bcdf2e222["writeQuery()"]
  360b8eed_0666_8e3d_9331_e795bb312381 -->|method| d553b80a_9410_aa58_ac6c_ad8bcdf2e222
  83864166_f1ac_4045_c639_0eaffca1b560["removeFromContextManager()"]
  360b8eed_0666_8e3d_9331_e795bb312381 -->|method| 83864166_f1ac_4045_c639_0eaffca1b560
  6f692862_9d69_de7f_1c52_b61a73cddf20["ChannelFuture()"]
  360b8eed_0666_8e3d_9331_e795bb312381 -->|method| 6f692862_9d69_de7f_1c52_b61a73cddf20
  02e54375_a4b8_ba90_af41_190cf641d5e4["onQueryWriteCompletion()"]
  360b8eed_0666_8e3d_9331_e795bb312381 -->|method| 02e54375_a4b8_ba90_af41_190cf641d5e4
  ff2b708f_f879_8705_1346_618909272134["finishSuccess()"]
  360b8eed_0666_8e3d_9331_e795bb312381 -->|method| ff2b708f_f879_8705_1346_618909272134
  15b8d7e2_1c7e_b2d0_cb57_de6cae85f5f0["trySuccess()"]
  360b8eed_0666_8e3d_9331_e795bb312381 -->|method| 15b8d7e2_1c7e_b2d0_cb57_de6cae85f5f0
  c1b3ef8a_d203_e5e3_4c2f_67fdad9bbd92["finishFailure()"]
  360b8eed_0666_8e3d_9331_e795bb312381 -->|method| c1b3ef8a_d203_e5e3_4c2f_67fdad9bbd92

Relationship Graph

Source Code

resolver-dns/src/main/java/io/netty/resolver/dns/DnsQueryContext.java lines 51–549

abstract class DnsQueryContext {

    private static final InternalLogger logger = InternalLoggerFactory.getInstance(DnsQueryContext.class);
    private static final long ID_REUSE_ON_TIMEOUT_DELAY_MILLIS;

    static {
        ID_REUSE_ON_TIMEOUT_DELAY_MILLIS =
                SystemPropertyUtil.getLong("io.netty.resolver.dns.idReuseOnTimeoutDelayMillis", 10000);
        logger.debug("-Dio.netty.resolver.dns.idReuseOnTimeoutDelayMillis: {}", ID_REUSE_ON_TIMEOUT_DELAY_MILLIS);
    }

    private static final TcpDnsQueryEncoder TCP_ENCODER = new TcpDnsQueryEncoder();

    private final Channel channel;
    private final InetSocketAddress nameServerAddr;
    private final DnsQueryContextManager queryContextManager;
    private final DnsQueryLifecycleObserver queryLifecycleObserver;
    private final Promise<AddressedEnvelope<DnsResponse, InetSocketAddress>> promise;

    private final DnsQuestion question;
    private final DnsRecord[] additionals;
    private final DnsRecord optResource;

    private final boolean recursionDesired;

    private final Bootstrap socketBootstrap;

    private final boolean retryWithTcpOnTimeout;
    private final long queryTimeoutMillis;

    private volatile Future<?> timeoutFuture;

    private int id = Integer.MIN_VALUE;

    DnsQueryContext(Channel channel,
                    InetSocketAddress nameServerAddr,
                    DnsQueryContextManager queryContextManager,
                    DnsQueryLifecycleObserver queryLifecycleObserver,
                    int maxPayLoadSize,
                    boolean recursionDesired,
                    long queryTimeoutMillis,
                    DnsQuestion question,
                    DnsRecord[] additionals,
                    Promise<AddressedEnvelope<DnsResponse, InetSocketAddress>> promise,
                    Bootstrap socketBootstrap,
                    boolean retryWithTcpOnTimeout) {
        this.channel = checkNotNull(channel, "channel");
        this.queryContextManager = checkNotNull(queryContextManager, "queryContextManager");
        this.queryLifecycleObserver = checkNotNull(queryLifecycleObserver, "queryLifecycleObserver");
        this.nameServerAddr = checkNotNull(nameServerAddr, "nameServerAddr");
        this.question = checkNotNull(question, "question");
        this.additionals = checkNotNull(additionals, "additionals");
        this.promise = checkNotNull(promise, "promise");
        this.recursionDesired = recursionDesired;
        this.queryTimeoutMillis = queryTimeoutMillis;
        this.socketBootstrap = socketBootstrap;
        this.retryWithTcpOnTimeout = retryWithTcpOnTimeout;

        if (maxPayLoadSize > 0 &&
                // Only add the extra OPT record if there is not already one. This is required as only one is allowed
                // as per RFC:
                //  - https://datatracker.ietf.org/doc/html/rfc6891#section-6.1.1
                !hasOptRecord(additionals)) {
            optResource = new AbstractDnsOptPseudoRrRecord(maxPayLoadSize, 0, 0) {
                // We may want to remove this in the future and let the user just specify the opt record in the query.
            };
        } else {
            optResource = null;
        }
    }

    private static boolean hasOptRecord(DnsRecord[] additionals) {
        if (additionals != null && additionals.length > 0) {
            for (DnsRecord additional: additionals) {
                if (additional.type() == DnsRecordType.OPT) {
                    return true;
                }
            }
        }
        return false;
    }

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free