aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2016-05-11 17:34:38 -0400
committerRoger Dingledine <arma@torproject.org>2016-05-11 17:34:38 -0400
commit694f1fe80874b2280717908d10d40b45e9e2cc82 (patch)
treef642d8862242c430869539492659180b510b79a4
parent9e44273a4a22803eff900f6df10f13c7548bdb0d (diff)
downloadtor-694f1fe80874b2280717908d10d40b45e9e2cc82.tar.gz
tor-694f1fe80874b2280717908d10d40b45e9e2cc82.zip
write v3-status-votes file earlier in consensus voting
Make directory authorities write the v3-status-votes file out to disk earlier in the consensus process, so we have the votes even if we abort the consensus process later on. Resolves ticket 19036.
-rw-r--r--changes/feature190364
-rw-r--r--src/or/dirvote.c38
2 files changed, 24 insertions, 18 deletions
diff --git a/changes/feature19036 b/changes/feature19036
new file mode 100644
index 0000000000..98bcfca515
--- /dev/null
+++ b/changes/feature19036
@@ -0,0 +1,4 @@
+ o Minor features:
+ - Make directory authorities write the v3-status-votes file out
+ to disk earlier in the consensus process, so we have the votes
+ even if we abort the consensus process below. Resolves ticket 19036.
diff --git a/src/or/dirvote.c b/src/or/dirvote.c
index 9854af7d7f..11b4fd1583 100644
--- a/src/or/dirvote.c
+++ b/src/or/dirvote.c
@@ -3040,6 +3040,26 @@ dirvote_compute_consensuses(void)
if (!pending_vote_list)
pending_vote_list = smartlist_new();
+ /* write the votes out to disk early, so we have them even if we abort
+ * the consensus process below. */
+ votes = smartlist_new();
+ votestrings = smartlist_new();
+ SMARTLIST_FOREACH(pending_vote_list, pending_vote_t *, v,
+ {
+ sized_chunk_t *c = tor_malloc(sizeof(sized_chunk_t));
+ c->bytes = v->vote_body->dir;
+ c->len = v->vote_body->dir_len;
+ smartlist_add(votestrings, c); /* collect strings to write to disk */
+
+ smartlist_add(votes, v->vote); /* collect votes to compute consensus */
+ });
+
+ votefile = get_datadir_fname("v3-status-votes");
+ write_chunks_to_file(votefile, votestrings, 0, 0);
+ tor_free(votefile);
+ SMARTLIST_FOREACH(votestrings, sized_chunk_t *, c, tor_free(c));
+ smartlist_free(votestrings);
+
n_voters = get_n_authorities(V3_DIRINFO);
n_votes = smartlist_len(pending_vote_list);
if (n_votes <= n_voters/2) {
@@ -3066,24 +3086,6 @@ dirvote_compute_consensuses(void)
goto err;
}
- votes = smartlist_new();
- votestrings = smartlist_new();
- SMARTLIST_FOREACH(pending_vote_list, pending_vote_t *, v,
- {
- sized_chunk_t *c = tor_malloc(sizeof(sized_chunk_t));
- c->bytes = v->vote_body->dir;
- c->len = v->vote_body->dir_len;
- smartlist_add(votestrings, c); /* collect strings to write to disk */
-
- smartlist_add(votes, v->vote); /* collect votes to compute consensus */
- });
-
- votefile = get_datadir_fname("v3-status-votes");
- write_chunks_to_file(votefile, votestrings, 0, 0);
- tor_free(votefile);
- SMARTLIST_FOREACH(votestrings, sized_chunk_t *, c, tor_free(c));
- smartlist_free(votestrings);
-
{
char legacy_dbuf[DIGEST_LEN];
crypto_pk_t *legacy_sign=NULL;