Home / Function/ query() — netty Function Reference

query() — netty Function Reference

Architecture documentation for the query() function in DnsResolveContext.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  07f53a31_718c_c4a3_04b0_19d21f5a6af4["query()"]
  3bc002ec_f54e_a55f_0b37_77eac88c60db["DnsResolveContext"]
  07f53a31_718c_c4a3_04b0_19d21f5a6af4 -->|defined in| 3bc002ec_f54e_a55f_0b37_77eac88c60db
  9f561f45_6801_ce1e_316a_a956c08ce604["internalResolve()"]
  9f561f45_6801_ce1e_316a_a956c08ce604 -->|calls| 07f53a31_718c_c4a3_04b0_19d21f5a6af4
  a0a3ef5b_50ac_f197_edc6_5c2f3f1c03c1["DnsServerAddressStream()"]
  a0a3ef5b_50ac_f197_edc6_5c2f3f1c03c1 -->|calls| 07f53a31_718c_c4a3_04b0_19d21f5a6af4
  804ea022_5b6c_6eb0_3048_d20c3d4093fb["queryUnresolvedNameServer()"]
  804ea022_5b6c_6eb0_3048_d20c3d4093fb -->|calls| 07f53a31_718c_c4a3_04b0_19d21f5a6af4
  6b22df1c_91b5_21bf_29f9_518f692074d4["onResponse()"]
  6b22df1c_91b5_21bf_29f9_518f692074d4 -->|calls| 07f53a31_718c_c4a3_04b0_19d21f5a6af4
  65c57ffd_71d8_8f62_ab38_e8ff772695a7["handleRedirect()"]
  65c57ffd_71d8_8f62_ab38_e8ff772695a7 -->|calls| 07f53a31_718c_c4a3_04b0_19d21f5a6af4
  b3885856_e061_0f3a_54d9_f9abe9613324["tryToFinishResolve()"]
  b3885856_e061_0f3a_54d9_f9abe9613324 -->|calls| 07f53a31_718c_c4a3_04b0_19d21f5a6af4
  9887dab6_1e3b_0204_7d07_03b65a1c5e4d["followCname()"]
  9887dab6_1e3b_0204_7d07_03b65a1c5e4d -->|calls| 07f53a31_718c_c4a3_04b0_19d21f5a6af4
  b3885856_e061_0f3a_54d9_f9abe9613324["tryToFinishResolve()"]
  07f53a31_718c_c4a3_04b0_19d21f5a6af4 -->|calls| b3885856_e061_0f3a_54d9_f9abe9613324
  804ea022_5b6c_6eb0_3048_d20c3d4093fb["queryUnresolvedNameServer()"]
  07f53a31_718c_c4a3_04b0_19d21f5a6af4 -->|calls| 804ea022_5b6c_6eb0_3048_d20c3d4093fb
  161fe130_19c1_016b_ea22_8d91937c6452["add()"]
  07f53a31_718c_c4a3_04b0_19d21f5a6af4 -->|calls| 161fe130_19c1_016b_ea22_8d91937c6452
  6b22df1c_91b5_21bf_29f9_518f692074d4["onResponse()"]
  07f53a31_718c_c4a3_04b0_19d21f5a6af4 -->|calls| 6b22df1c_91b5_21bf_29f9_518f692074d4
  da77f527_215a_7164_ca37_07a76673c344["size()"]
  07f53a31_718c_c4a3_04b0_19d21f5a6af4 -->|calls| da77f527_215a_7164_ca37_07a76673c344
  style 07f53a31_718c_c4a3_04b0_19d21f5a6af4 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

resolver-dns/src/main/java/io/netty/resolver/dns/DnsResolveContext.java lines 434–521

    private void query(final DnsServerAddressStream nameServerAddrStream,
                       final int nameServerAddrStreamIndex,
                       final DnsQuestion question,
                       final DnsQueryLifecycleObserver queryLifecycleObserver,
                       final boolean flush,
                       final Promise<List<T>> promise,
                       final Throwable cause) {
        if (completeEarly || nameServerAddrStreamIndex >= nameServerAddrStream.size() ||
                allowedQueries == 0 || originalPromise.isCancelled() || promise.isCancelled()) {
            tryToFinishResolve(nameServerAddrStream, nameServerAddrStreamIndex, question, queryLifecycleObserver,
                               promise, cause);
            return;
        }

        --allowedQueries;

        final InetSocketAddress nameServerAddr = nameServerAddrStream.next();
        if (nameServerAddr.isUnresolved()) {
            queryUnresolvedNameServer(nameServerAddr, nameServerAddrStream, nameServerAddrStreamIndex, question,
                                      queryLifecycleObserver, promise, cause);
            return;
        }
        final Promise<AddressedEnvelope<? extends DnsResponse, InetSocketAddress>> queryPromise =
                channel.eventLoop().newPromise();

        final long queryStartTimeNanos;
        final boolean isFeedbackAddressStream;
        if (nameServerAddrStream instanceof DnsServerResponseFeedbackAddressStream) {
            queryStartTimeNanos = System.nanoTime();
            isFeedbackAddressStream = true;
        } else {
            queryStartTimeNanos = -1;
            isFeedbackAddressStream = false;
        }

        final Future<AddressedEnvelope<DnsResponse, InetSocketAddress>> f =
                parent.doQuery(channel, nameServerAddr, question,
                        queryLifecycleObserver, additionals, flush, queryPromise);

        queriesInProgress.add(f);

        f.addListener((FutureListener<AddressedEnvelope<DnsResponse, InetSocketAddress>>) future -> {
            queriesInProgress.remove(future);

            if (promise.isDone() || future.isCancelled()) {
                queryLifecycleObserver.queryCancelled(allowedQueries);

                // Check if we need to release the envelope itself. If the query was cancelled the getNow() will
                // return null as well as the Future will be failed with a CancellationException.
                AddressedEnvelope<DnsResponse, InetSocketAddress> result = future.getNow();
                if (result != null) {
                    result.release();
                }
                return;
            }

            final Throwable queryCause = future.cause();
            try {
                if (queryCause == null) {
                    if (isFeedbackAddressStream) {
                        final DnsServerResponseFeedbackAddressStream feedbackNameServerAddrStream =
                                (DnsServerResponseFeedbackAddressStream) nameServerAddrStream;
                        feedbackNameServerAddrStream.feedbackSuccess(nameServerAddr,
                                System.nanoTime() - queryStartTimeNanos);
                    }
                    onResponse(nameServerAddrStream, nameServerAddrStreamIndex, question, future.getNow(),
                               queryLifecycleObserver, promise);
                } else {
                    // Server did not respond or I/O error occurred; try again.
                    if (isFeedbackAddressStream) {
                        final DnsServerResponseFeedbackAddressStream feedbackNameServerAddrStream =
                                (DnsServerResponseFeedbackAddressStream) nameServerAddrStream;
                        feedbackNameServerAddrStream.feedbackFailure(nameServerAddr, queryCause,
                                System.nanoTime() - queryStartTimeNanos);
                    }
                    queryLifecycleObserver.queryFailed(queryCause);
                    query(nameServerAddrStream, nameServerAddrStreamIndex + 1, question,
                          newDnsQueryLifecycleObserver(question), true, promise, queryCause);
                }
            } finally {
                tryToFinishResolve(nameServerAddrStream, nameServerAddrStreamIndex, question,

Subdomains

Frequently Asked Questions

What does query() do?
query() is a function in the netty codebase, defined in resolver-dns/src/main/java/io/netty/resolver/dns/DnsResolveContext.java.
Where is query() defined?
query() is defined in resolver-dns/src/main/java/io/netty/resolver/dns/DnsResolveContext.java at line 434.
What does query() call?
query() calls 5 function(s): add, onResponse, queryUnresolvedNameServer, size, tryToFinishResolve.
What calls query()?
query() is called by 7 function(s): DnsServerAddressStream, followCname, handleRedirect, internalResolve, onResponse, queryUnresolvedNameServer, tryToFinishResolve.

Analyze Your Own Codebase

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

Try Supermodel Free