Skip to content

Load balancing does not return first successful match immediately (or seems not to be parallelized) #1757

@peperunas

Description

@peperunas

Output of the following commands:

./dnscrypt-proxy -version

$ dnscrypt-proxy -version                                                                                                                                                                                                                                                                                                                    
2.0.45

./dnscrypt-proxy -check

[2021-06-21 13:10:44] [NOTICE] dnscrypt-proxy 2.0.45
[2021-06-21 13:10:44] [NOTICE] Source [relays] loaded
[2021-06-21 13:10:44] [NOTICE] Source [public-resolvers] loaded
[2021-06-21 13:10:44] [NOTICE] Configuration successfully checked

./dnscrypt-proxy -resolve example.com

Resolving [example.com] using 127.0.0.1 port 5353

Resolver      : 78.129.140.65

Canonical name: example.com.

IPv4 addresses: 93.184.216.34
IPv6 addresses: 2606:2800:220:1:248:1893:25c8:1946

Name servers  : a.iana-servers.net., b.iana-servers.net.
DNSSEC signed : yes
Mail servers  : 1 mail servers found

HTTPS alias   : -
HTTPS info    : -

Host info     : -
TXT records   : 8j5nfqld20zpcyr8xjw0ydcfq9rk8hgm, v=spf1 -all

What is affected by this bug?

The load balancer (with different strategies) seems to be waiting for all queries to be executed first, without returning the first match. This makes the resolver very slow.

When does this occur?

When resolving any query. Used all the load balancing strategies to check if the issue was related to a specific one but it is not.

Where does it happen?

On any domain that has not been cached before.

How do we replicate the issue?

  1. Setup a list of resolvers
  2. Setup one of the load balancing strategies (in the example here, p2)
  3. Execute a query

Expected behavior (i.e. solution)

Return the first (fastest) response from one of the resolvers.

Other Comments

It seems that the load balancer does not resolve in parallel and/or waits for the requests to either fail or timeout before returning a previous successful query.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions