rtt value for nameserver includes timeouts for all previous addresses
While debugging the DROP + TC issue, I found out that effective RTT for address set via kr_nsrep_update_rtt
in kr_resolve_produce()
is calculated as a sum of timeouts for all previous addresses. Thus if there's 4 address in total and only the last responds, the score fed to kr_nsrep_update_rtt will be 3*KR_CONN_RETRY + + real RTT (f.e. 901) instead of just the real RTT for the address (f.e. 1).
It can be seen here:
**[nsrep] updating reputation for 194.0.12.1 from 0 to 90**
[resl] <= server: '194.0.12.1' rtt: 90 ms
[resl] => querying: '193.29.206.1' score: 10 zone cut: 'cz.' m12n: 'TurRIs.cZ.' type: 'DNSKEY'
[resl] optional: '194.0.14.1' score: 10 zone cut: 'cz.' m12n: 'TurRIs.cZ.' type: 'DNSKEY'
[resl] optional: '194.0.13.1' score: 10 zone cut: 'cz.' m12n: 'TurRIs.cZ.' type: 'DNSKEY'
[resl] optional: '194.0.12.1' score: 10 zone cut: 'cz.' m12n: 'TurRIs.cZ.' type: 'DNSKEY'
[iter] <= truncated response, failover to TCP
**[nsrep] updating reputation for 194.0.12.1 from 90 to 90**
[resl] <= server: '194.0.12.1' rtt: 91 ms
[resl] kr_resolve_consume requery over TCP
[resl] => retrying over TCP, electing (d.ns.nic.cz.)
[resl] => querying: '193.29.206.1' score: 10 zone cut: 'cz.' m12n: 'tuRRIs.Cz.' type: 'DNSKEY'
[resl] => querying: '194.0.14.1' score: 10 zone cut: 'cz.' m12n: 'TURriS.cZ.' type: 'DNSKEY'
[resl] optional: '194.0.13.1' score: 10 zone cut: 'cz.' m12n: 'TURriS.cZ.' type: 'DNSKEY'
[resl] optional: '194.0.12.1' score: 10 zone cut: 'cz.' m12n: 'TURriS.cZ.' type: 'DNSKEY'
[iter] <= truncated response, failover to TCP
**[nsrep] updating reputation for 194.0.12.1 from 90 to 75**
[resl] <= server: '194.0.12.1' rtt: 61 ms
[resl] kr_resolve_consume requery over TCP
[resl] => retrying over TCP, electing (c.ns.nic.cz.)
[resl] => querying: '194.0.14.1' score: 10 zone cut: 'cz.' m12n: 'TURRIs.cz.' type: 'DNSKEY'
[resl] => querying: '194.0.13.1' score: 10 zone cut: 'cz.' m12n: 'tURrIS.cz.' type: 'DNSKEY'
[resl] optional: '194.0.12.1' score: 10 zone cut: 'cz.' m12n: 'tURrIS.cz.' type: 'DNSKEY'
[iter] <= truncated response, failover to TCP
**[nsrep] updating reputation for 194.0.12.1 from 75 to 53**
[resl] <= server: '194.0.12.1' rtt: 31 ms
[resl] kr_resolve_consume requery over TCP
[resl] => retrying over TCP, electing (b.ns.nic.cz.)
[resl] => querying: '194.0.13.1' score: 10 zone cut: 'cz.' m12n: 'tuRRIS.Cz.' type: 'DNSKEY'
[resl] => querying: '194.0.12.1' score: 53 zone cut: 'cz.' m12n: 'TurRIs.Cz.' type: 'DNSKEY'
[iter] <= truncated response, failover to TCP
**[nsrep] updating reputation for 194.0.12.1 from 53 to 32**
[resl] <= server: '194.0.12.1' rtt: 1 ms