commit 5bdb4e245581070034dd88217fdb35e0e86f9291 Author: Damian Johnson atagar@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)
tor-commits@lists.torproject.org