RFC Errata
RFC 2782, "A DNS RR for specifying the location of services (DNS SRV)", February 2000
Note: This RFC has been updated by RFC 6335, RFC 8553
Source of RFC: dnsext (int)
Errata ID: 2984
Status: Rejected
Type: Technical
Publication Format(s) : TEXT
Reported By: Jordan Brown
Date Reported: 2011-10-04
Rejected by: Brian Haberman
Date Rejected: 2012-05-01
Section Weight says:
To select a target to be contacted next, arrange all SRV RRs
(that have not been ordered yet) in any order, except that all
those with weight 0 are placed at the beginning of the list.
Compute the sum of the weights of those RRs, and with each RR
associate the running sum in the selected order. Then choose a
uniform random number between 0 and the sum computed
(inclusive), and select the RR whose running sum value is the
first in the selected order which is greater than or equal to
the random number selected. The target host specified in the
selected SRV RR is the next one to be contacted by the client.
Remove this SRV RR from the set of the unordered SRV RRs and
apply the described algorithm to the unordered SRV RRs to select
the next target host. Continue the ordering process until there
are no unordered SRV RRs. This process is repeated for each
Priority.
It should say:
Correcting the text requires agreement on what to do with entries with weight=0, so I don't want to try to craft text until we have agreement there.
Notes:
The problem with this algorithm is that for a total weight T, it generates a random number 0..T and so allocates T+1 shares and gives the extra share to the first entry. Thus with weights {1, 1}, the first entry is selected 2/3 of the time while the second entry is selected 1/3 of the time.
I suspect that this is an attempt to do *something* with entries with weight=0, but yields unobvious results there: for {0, 1, 1}, the three entries are each selected 1/3 of the time.
I suggest:
- Ordering weight=0 entries to the end.
- Generating random numbers 0..(T-1).
- Using a "greater" test rather than "greater or equal".
- Selecting weight=0 entries in any order when all of the weight!=0 entries have been selected.
--VERIFIER NOTES--
The errata is not actionable. Issue should be raised with the DNSEXT WG.
