commit | 61d17267051d7ffaf8cd3457207936da93e6d374 | [log] [tgz] |
---|---|---|
author | Mike Yu <yumike@google.com> | Sat Feb 15 18:56:22 2020 +0800 |
committer | Mike Yu <yumike@google.com> | Tue Jul 14 02:53:08 2020 +0000 |
tree | 4b881041db658114a62c3ed8be98b74e00b92744 | |
parent | 6ce587d2c38bcc7dc90985bb7ba687cf27aa1e8e [diff] |
Support prioritizing DNS servers The change introduces a way to prioritize DNS servers on the basis of DNS query response time, which aims to replace the current design that is biased towards using the first DNS server assigned from networks. The quality is evaluated based on the heuristics: - The more latency it is, the less likely it is used. - The longer time it is not used, the more likely it is used. Compared to the current design, the proposed method detects bad DNS servers more quickly. For instance, a server which is unreachable or times out can be detected and deprioritized with few trials by backoff penalty and abnormal latency. Similar to the current design, a server which has been regarded as bad quality can be used again, but it depends on how much worse it is. A counter is used to count how many times a DNS server not being used, which avoids from constantly using the same DNS server. This change comprises: [1] Allow the resolver to sort DNS servers on the basis of DNS query response time. [2] Add an experiment flag to enable/disable the sorting. [3] Show the result of the quantified quality of DNS servers in dumpsys dnsresolver. [4] Add unit tests for DnsStats::getSortedServers(). [5] Revise the integration tests which are sensitive to the nameserver sorting, including two big changes in SkipBadServersDueToInternalError and SkipBadServersDueToTimeout and some minor changes. Bug: 137169582 Test: ran resolv_unit_test ran resolv_integration_test with the sorting enabled ran resolv_integration_test with the sorting disabled Change-Id: I24b6a317f135a942ce0ea310c81dfe658bada6a7
This code uses LOG(X) for logging. Log levels are VERBOSE,DEBUG,INFO,WARNING and ERROR. The default setting is WARNING and logs relate to WARNING and ERROR will be shown. If you want to enable the DEBUG level logs, using following command. adb shell service call dnsresolver 10 i32 1 VERBOSE 0 DEBUG 1 INFO 2 WARNING 3 ERROR 4 Verbose resolver logs could contain PII -- do NOT enable in production builds.