Document that we break ties in favor of smaller SD digest if there are still ties after comparing the published timestamp

svn:r16432
This commit is contained in:
Peter Palfrader 2008-08-05 18:54:23 +00:00
parent 4cb2adcd4f
commit 0cfb68454e
2 changed files with 9 additions and 3 deletions

View File

@ -1145,8 +1145,9 @@ $Id$
* Two router entries are "the same" if they have the same * Two router entries are "the same" if they have the same
<descriptor digest, published time, nickname, IP, ports> tuple. <descriptor digest, published time, nickname, IP, ports> tuple.
We choose the tuple for a given router as whichever tuple appears We choose the tuple for a given router as whichever tuple appears
for that router in the most votes. We break ties in favor of for that router in the most votes. We break ties first in favor of
the more recently published. the more recently published, then in favor of smaller server
descriptor digest.
* The Named flag appears if it is included for this routerstatus by * The Named flag appears if it is included for this routerstatus by
_any_ authority, and if all authorities that list it list the same _any_ authority, and if all authorities that list it list the same

View File

@ -337,7 +337,8 @@ _compare_vote_rs(const void **_a, const void **_b)
/** Given a list of vote_routerstatus_t, all for the same router identity, /** Given a list of vote_routerstatus_t, all for the same router identity,
* return whichever is most frequent, breaking ties in favor of more * return whichever is most frequent, breaking ties in favor of more
* recently published vote_routerstatus_t. * recently published vote_routerstatus_t and in case of ties there,
* in favour of smaller descriptor digest.
*/ */
static vote_routerstatus_t * static vote_routerstatus_t *
compute_routerstatus_consensus(smartlist_t *votes) compute_routerstatus_consensus(smartlist_t *votes)
@ -346,6 +347,10 @@ compute_routerstatus_consensus(smartlist_t *votes)
int most_n = 0, cur_n = 0; int most_n = 0, cur_n = 0;
time_t most_published = 0; time_t most_published = 0;
/* _compare_vote_rs() sorts the items by identity digest (all the same),
* then by SD digest. That way, if we have a tie that the published_on
* date cannot tie, we use the descriptor with the smaller digest.
*/
smartlist_sort(votes, _compare_vote_rs); smartlist_sort(votes, _compare_vote_rs);
SMARTLIST_FOREACH(votes, vote_routerstatus_t *, rs, SMARTLIST_FOREACH(votes, vote_routerstatus_t *, rs,
{ {