Home / Function/ finishResolve() — netty Function Reference

finishResolve() — netty Function Reference

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

Entity Profile

Dependency Diagram

graph TD
  f701afc3_7b98_f295_5bd8_4cbb368c0263["finishResolve()"]
  3bc002ec_f54e_a55f_0b37_77eac88c60db["DnsResolveContext"]
  f701afc3_7b98_f295_5bd8_4cbb368c0263 -->|defined in| 3bc002ec_f54e_a55f_0b37_77eac88c60db
  b3885856_e061_0f3a_54d9_f9abe9613324["tryToFinishResolve()"]
  b3885856_e061_0f3a_54d9_f9abe9613324 -->|calls| f701afc3_7b98_f295_5bd8_4cbb368c0263
  836e4609_6a00_0ab5_76ae_511f287c23c9["isEmpty()"]
  f701afc3_7b98_f295_5bd8_4cbb368c0263 -->|calls| 836e4609_6a00_0ab5_76ae_511f287c23c9
  bf482da1_b132_070b_41fc_4cdb2284527d["iterator()"]
  f701afc3_7b98_f295_5bd8_4cbb368c0263 -->|calls| bf482da1_b132_070b_41fc_4cdb2284527d
  897b955b_8e11_6099_2d0f_344fd4d5386d["filterResults()"]
  f701afc3_7b98_f295_5bd8_4cbb368c0263 -->|calls| 897b955b_8e11_6099_2d0f_344fd4d5386d
  e1a10468_2ab8_17c7_5dfe_66d356b0d510["cache()"]
  f701afc3_7b98_f295_5bd8_4cbb368c0263 -->|calls| e1a10468_2ab8_17c7_5dfe_66d356b0d510
  style f701afc3_7b98_f295_5bd8_4cbb368c0263 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

resolver-dns/src/main/java/io/netty/resolver/dns/DnsResolveContext.java lines 1081–1140

    private void finishResolve(Promise<List<T>> promise, Throwable cause) {
        // If completeEarly was true we still want to continue processing the queries to ensure we still put everything
        // in the cache eventually.
        if (!completeEarly && !queriesInProgress.isEmpty()) {
            // If there are queries in progress, we should cancel it because we already finished the resolution.
            for (Iterator<Future<AddressedEnvelope<DnsResponse, InetSocketAddress>>> i = queriesInProgress.iterator();
                 i.hasNext();) {
                Future<AddressedEnvelope<DnsResponse, InetSocketAddress>> f = i.next();
                i.remove();

                f.cancel(false);
            }
        }

        if (finalResult != null) {
            if (!promise.isDone()) {
                // Found at least one resolved record.
                final List<T> result = filterResults(finalResult);
                // Lets replace the previous stored result.
                finalResult = Collections.emptyList();
                if (!DnsNameResolver.trySuccess(promise, result)) {
                    for (T item : result) {
                        ReferenceCountUtil.safeRelease(item);
                    }
                }
            } else {
                // This should always be the case as we replaced the list once notify the promise with an empty one
                // and never add to it again.
                assert finalResult.isEmpty();
            }
            return;
        }

        // No resolved address found.
        final int maxAllowedQueries = parent.maxQueriesPerResolve();
        final int tries = maxAllowedQueries - allowedQueries;
        final StringBuilder buf = new StringBuilder(64);

        buf.append("Failed to resolve '").append(hostname).append("' ").append(Arrays.toString(expectedTypes));
        if (tries > 1) {
            if (tries < maxAllowedQueries) {
                buf.append(" after ")
                   .append(tries)
                   .append(" queries ");
            } else {
                buf.append(". Exceeded max queries per resolve ")
                .append(maxAllowedQueries)
                .append(' ');
            }
        }
        final UnknownHostException unknownHostException = new UnknownHostException(buf.toString());
        if (cause == null) {
            // Only cache if the failure was not because of an IO error / timeout that was caused by the query
            // itself.
            cache(hostname, additionals, unknownHostException);
        } else {
            unknownHostException.initCause(cause);
        }
        promise.tryFailure(unknownHostException);
    }

Subdomains

Frequently Asked Questions

What does finishResolve() do?
finishResolve() is a function in the netty codebase, defined in resolver-dns/src/main/java/io/netty/resolver/dns/DnsResolveContext.java.
Where is finishResolve() defined?
finishResolve() is defined in resolver-dns/src/main/java/io/netty/resolver/dns/DnsResolveContext.java at line 1081.
What does finishResolve() call?
finishResolve() calls 4 function(s): cache, filterResults, isEmpty, iterator.
What calls finishResolve()?
finishResolve() is called by 1 function(s): tryToFinishResolve.

Analyze Your Own Codebase

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

Try Supermodel Free