[tor-commits] [tor/master] write v3-status-votes file earlier in consensus voting

nickm at torproject.org nickm at torproject.org
Fri May 27 14:37:17 UTC 2016


commit 694f1fe80874b2280717908d10d40b45e9e2cc82
Author: Roger Dingledine <arma at torproject.org>
Date:   Wed May 11 17:34:38 2016 -0400

    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.
---
 changes/feature19036 |  4 ++++
 src/or/dirvote.c     | 38 ++++++++++++++++++++------------------
 2 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/changes/feature19036 b/changes/feature19036
new file mode 100644
index 0000000..98bcfca
--- /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 9854af7..11b4fd1 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;





More information about the tor-commits mailing list