diff --git a/src/_zkapauthorizer/_storage_server.py b/src/_zkapauthorizer/_storage_server.py index e535ff6412844db1b5a29a3f0c96a140ced50cf7..04609e3cd325924401a81815214b71bd5ded3162 100644 --- a/src/_zkapauthorizer/_storage_server.py +++ b/src/_zkapauthorizer/_storage_server.py @@ -33,12 +33,9 @@ from struct import calcsize, unpack import attr from allmydata.interfaces import RIStorageServer from allmydata.storage.common import storage_index_to_dir -from allmydata.storage.shares import get_share_file - from allmydata.storage.immutable import ShareFile from allmydata.storage.mutable import MutableShareFile - - +from allmydata.storage.shares import get_share_file from allmydata.util.base32 import b2a from attr.validators import instance_of, provides from challenge_bypass_ristretto import SigningKey, TokenPreimage, VerificationSignature @@ -642,6 +639,7 @@ def stat_slot(storage_server, slot, sharepath): lease_expiration=get_lease_expiration(sharepath), ) + def get_lease_expiration(sharepath): # type: (str) -> Optional[int] """ @@ -651,14 +649,13 @@ def get_lease_expiration(sharepath): :param sharepath: The path to the share file to inspect. """ leases = list( - lease.get_expiration_time() - for lease - in get_share_file(sharepath).get_leases() + lease.get_expiration_time() for lease in get_share_file(sharepath).get_leases() ) if leases: return max(leases) return None + def get_slot_share_size(sharepath): """ Get the size of a share belonging to a slot (a mutable share). diff --git a/src/_zkapauthorizer/tests/test_lease_maintenance.py b/src/_zkapauthorizer/tests/test_lease_maintenance.py index a81b78da4f8854c38f298169f47f898d28d93081..e79e7c40b3c91c4d97483c0129ea177c18a09129 100644 --- a/src/_zkapauthorizer/tests/test_lease_maintenance.py +++ b/src/_zkapauthorizer/tests/test_lease_maintenance.py @@ -34,10 +34,10 @@ from hypothesis.strategies import ( floats, integers, just, - tuples, lists, - sets, randoms, + sets, + tuples, ) from testtools import TestCase from testtools.matchers import ( @@ -66,7 +66,13 @@ from ..lease_maintenance import ( visit_storage_indexes_from_root, ) from .matchers import Provides, between, leases_current -from .strategies import clocks, posix_timestamps, node_hierarchies, storage_indexes, sharenums +from .strategies import ( + clocks, + node_hierarchies, + posix_timestamps, + sharenums, + storage_indexes, +) def interval_means(): @@ -100,17 +106,12 @@ class DummyStorageServer(object): """ clock = attr.ib() - buckets = attr.ib() # type: Dict[bytes, Dict[int, ShareStat]] + buckets = attr.ib() # type: Dict[bytes, Dict[int, ShareStat]] lease_seed = attr.ib() def stat_shares(self, storage_indexes): # type: (List[bytes]) -> Deferred[List[Dict[int, ShareStat]]] - return succeed( - list( - self.buckets.get(idx, {}) - for idx in storage_indexes - ) - ) + return succeed(list(self.buckets.get(idx, {}) for idx in storage_indexes)) def get_lease_seed(self): return self.lease_seed @@ -440,6 +441,7 @@ def lists_of_buckets(): share numbers to lease expiration times (as posix timestamps). Any given storage index will appear only once in the overall result. """ + def add_expiration_times(sharenums): return builds( lambda nums, expires: dict(zip(nums, expires)), @@ -634,7 +636,9 @@ class MaintainLeasesFromRootTests(TestCase): for node in root_node.flatten(): for server in storage_broker.get_connected_servers(): try: - shares = server.get_storage_server().buckets[node.get_storage_index()] + shares = server.get_storage_server().buckets[ + node.get_storage_index() + ] except KeyError: continue else: