[tor-commits] [stem/master] Include headers in sqlite cache

atagar at torproject.org atagar at torproject.org
Fri Jan 12 18:16:53 UTC 2018


commit 5bdb4e245581070034dd88217fdb35e0e86f9291
Author: Damian Johnson <atagar at torproject.org>
Date:   Fri Jan 12 09:36:52 2018 -0800

    Include headers in sqlite cache
---
 cache_fallback_directories.py  | 6 +++++-
 stem/descriptor/remote.py      | 8 ++++++--
 test/unit/descriptor/remote.py | 5 ++++-
 3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/cache_fallback_directories.py b/cache_fallback_directories.py
index c5926c8c..50139f56 100755
--- a/cache_fallback_directories.py
+++ b/cache_fallback_directories.py
@@ -46,6 +46,10 @@ if __name__ == '__main__':
     print('Fallback directories are already up to date, nothing to do.')
     sys.exit(0)
 
+  # all fallbacks have the same header metadata, so just picking one
+
+  headers = latest_fallback_directories.values()[0].header if latest_fallback_directories else {}
+
   print('Differences detected...\n')
   print(stem.descriptor.remote._fallback_directory_differences(cached_fallback_directories, latest_fallback_directories))
-  stem.descriptor.remote.FallbackDirectory._write(latest_fallback_directories, fallback_dir_commit, stem_commit)
+  stem.descriptor.remote.FallbackDirectory._write(latest_fallback_directories, fallback_dir_commit, stem_commit, headers)
diff --git a/stem/descriptor/remote.py b/stem/descriptor/remote.py
index 453061e0..f4845922 100644
--- a/stem/descriptor/remote.py
+++ b/stem/descriptor/remote.py
@@ -992,7 +992,7 @@ class FallbackDirectory(Directory):
     results = {}
 
     for fingerprint in set([key.split('.')[0] for key in conf.keys()]):
-      if fingerprint in ('tor_commit', 'stem_commit'):
+      if fingerprint in ('tor_commit', 'stem_commit', 'header'):
         continue
 
       attr = {}
@@ -1185,7 +1185,7 @@ class FallbackDirectory(Directory):
     return section_lines
 
   @staticmethod
-  def _write(fallbacks, tor_commit, stem_commit, path = CACHE_PATH):
+  def _write(fallbacks, tor_commit, stem_commit, headers, path = CACHE_PATH):
     """
     Persists fallback directories to a location in a way that can be read by
     from_cache().
@@ -1193,6 +1193,7 @@ class FallbackDirectory(Directory):
     :param dict fallbacks: mapping of fingerprints to their fallback directory
     :param str tor_commit: tor commit the fallbacks came from
     :param str stem_commit: stem commit the fallbacks came from
+    :param dict headers: metadata about the file these came from
     :param str path: location fallbacks will be persisted to
     """
 
@@ -1200,6 +1201,9 @@ class FallbackDirectory(Directory):
     conf.set('tor_commit', tor_commit)
     conf.set('stem_commit', stem_commit)
 
+    for k, v in headers.items():
+      conf.set('header.%s' % k, v)
+
     for directory in sorted(fallbacks.values(), key = lambda x: x.fingerprint):
       fingerprint = directory.fingerprint
       conf.set('%s.address' % fingerprint, directory.address)
diff --git a/test/unit/descriptor/remote.py b/test/unit/descriptor/remote.py
index 8bfdffc1..c17a1342 100644
--- a/test/unit/descriptor/remote.py
+++ b/test/unit/descriptor/remote.py
@@ -267,6 +267,9 @@ class TestDescriptorDownloader(unittest.TestCase):
     excepted_config = {
       'tor_commit': ['abc'],
       'stem_commit': ['def'],
+      'header.type': ['fallback'],
+      'header.version': ['2.0.0'],
+      'header.timestamp': ['20170526090242'],
       '01A9258A46E97FF8B2CAC7910577862C14F2C524.address': ['193.171.202.146'],
       '01A9258A46E97FF8B2CAC7910577862C14F2C524.or_port': ['9001'],
       '01A9258A46E97FF8B2CAC7910577862C14F2C524.dir_port': ['9030'],
@@ -278,7 +281,7 @@ class TestDescriptorDownloader(unittest.TestCase):
     }
 
     with tempfile.NamedTemporaryFile(prefix = 'fallbacks.') as tmp:
-      stem.descriptor.remote.FallbackDirectory._write(expected, 'abc', 'def', tmp.name)
+      stem.descriptor.remote.FallbackDirectory._write(expected, 'abc', 'def', header, tmp.name)
 
       conf = stem.util.conf.Config()
       conf.load(tmp.name)





More information about the tor-commits mailing list