- Distinguish between detached signatures for the wrong period, and
detached signatures for a divergent vote.
- Fix a small memory leak when computing a consensus.
+ - When there's no concensus, we were forming a vote every 30
+ minutes, but writing the "valid-after" line in our vote based
+ on our configured V3AuthVotingInterval: so unless the intervals
+ matched up, we immediately rejected our own vote because it didn't
+ start at the voting interval that caused us to construct a vote.
o Minor bugfixes (v3 directory protocol):
- Delete unverified-consensus when the real consensus is set.
char tbuf[ISO_TIME_LEN+1];
networkstatus_vote_t *current_consensus =
networkstatus_get_live_consensus(now);
- time_t consensus_interval;
+ time_t last_consensus_interval; /* only used to pick a valid_after */
if (current_consensus)
- consensus_interval = current_consensus->fresh_until -
+ last_consensus_interval = current_consensus->fresh_until -
current_consensus->valid_after;
else
- consensus_interval = timing.vote_interval;
+ last_consensus_interval = DEFAULT_VOTING_INTERVAL_WHEN_NO_CONSENSUS;
v3_out->valid_after =
- dirvote_get_start_of_next_interval(now, consensus_interval);
+ dirvote_get_start_of_next_interval(now, last_consensus_interval);
format_iso_time(tbuf, v3_out->valid_after);
log_notice(LD_DIR,"Choosing valid-after time in vote as %s: "
- "consensus_set=%d, interval=%d",
- tbuf, current_consensus?1:0, (int)consensus_interval);
+ "consensus_set=%d, last_interval=%d",
+ tbuf, current_consensus?1:0, (int)last_consensus_interval);
}
v3_out->fresh_until = v3_out->valid_after + timing.vote_interval;
v3_out->valid_until = v3_out->valid_after +
/** Smallest allowable voting interval. */
#define MIN_VOTE_INTERVAL 300
+/** If there is no consensus, what interval do we default to? */
+#define DEFAULT_VOTING_INTERVAL_WHEN_NO_CONSENSUS (30*60)
+
void dirvote_free_all(void);
/* vote manipulation */