[tor-commits] [tor/master] Do not store cached_dir_t for consensus in RAM if not a dircache.

nickm at torproject.org nickm at torproject.org
Fri Sep 14 13:17:34 UTC 2018


commit 33a0c619a8f44cacb400eccc4ab6192d330465c6
Author: Nick Mathewson <nickm at torproject.org>
Date:   Fri Sep 7 19:45:01 2018 -0400

    Do not store cached_dir_t for consensus in RAM if not a dircache.
    
    There are three reasons we use a cached_dir_t to hold a consensus:
      1. to serve that consensus to a client
      2. to apply a consensus diff to an existing consensus
      3. to send the consensus to a controller.
    
    But case 1 is dircache-only.  Case 2 and case 3 both fall back to
    networkstatus_read_cached_consensus().  So there's no reason for us
    to store this as a client.  Avoiding this saves about 23% of our RAM
    usage, according to our experiments last month.
    
    This is, semantically, a partial revert of e5c608e535ef9a4c4fe951a2.
    
    Fixes bug 27247; bugfix on 0.3.0.1-alpha.
---
 changes/ticket27247                  |  5 +++++
 src/feature/nodelist/networkstatus.c | 11 ++++++-----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/changes/ticket27247 b/changes/ticket27247
new file mode 100644
index 000000000..e980913d3
--- /dev/null
+++ b/changes/ticket27247
@@ -0,0 +1,5 @@
+  o Minor bugfixes (client, memory usage):
+    - When not running as a directory cache, there is no need to store the
+      text of the current consensus networkstatus in RAM.  Previously,
+      however, clients would store this anyway, at a cost of over 5 MB.
+      Now, they do not. Fixes bug 27247; bugfix on 0.3.0.1-alpha.
diff --git a/src/feature/nodelist/networkstatus.c b/src/feature/nodelist/networkstatus.c
index 6492b828b..4af202166 100644
--- a/src/feature/nodelist/networkstatus.c
+++ b/src/feature/nodelist/networkstatus.c
@@ -2098,12 +2098,13 @@ networkstatus_set_current_consensus(const char *consensus,
   }
 
   if (we_want_to_fetch_flavor(options, flav)) {
-    dirserv_set_cached_consensus_networkstatus(consensus,
-                                               flavor,
-                                               &c->digests,
-                                               c->digest_sha3_as_signed,
-                                               c->valid_after);
     if (dir_server_mode(get_options())) {
+      dirserv_set_cached_consensus_networkstatus(consensus,
+                                                 flavor,
+                                                 &c->digests,
+                                                 c->digest_sha3_as_signed,
+                                                 c->valid_after);
+
       consdiffmgr_add_consensus(consensus, c);
     }
   }





More information about the tor-commits mailing list