mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
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:
parent
4cb2adcd4f
commit
0cfb68454e
@ -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
|
||||||
|
@ -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,
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user