diff --git a/src/_zkapauthorizer/_storage_client.py b/src/_zkapauthorizer/_storage_client.py index a9cced29fa16c610492e53c1f9622ed9eadd6610..656679768f898ae67a4a63ea2bac01f88bf9ec80 100644 --- a/src/_zkapauthorizer/_storage_client.py +++ b/src/_zkapauthorizer/_storage_client.py @@ -66,7 +66,6 @@ from .storage_common import ( required_passes, allocate_buckets_message, add_lease_message, - renew_lease_message, slot_testv_and_readv_and_writev_message, has_writes, get_required_new_passes_for_mutable_write, @@ -403,33 +402,6 @@ class ZKAPAuthorizerStorageClient(object): ) returnValue(result) - @inline_callbacks - @with_rref - def renew_lease( - self, - rref, - storage_index, - renew_secret, - ): - share_sizes = (yield rref.callRemote( - "share_sizes", - storage_index, - None, - )).values() - num_passes = required_passes(self._pass_value, share_sizes) - - result = yield call_with_passes( - lambda passes: rref.callRemote( - "renew_lease", - _encode_passes(passes), - storage_index, - renew_secret, - ), - num_passes, - partial(self._get_passes, renew_lease_message(storage_index).encode("utf-8")), - ) - returnValue(result) - @with_rref def stat_shares(self, rref, storage_indexes): return rref.callRemote( diff --git a/src/_zkapauthorizer/_storage_server.py b/src/_zkapauthorizer/_storage_server.py index ffe74b8e024cd51e81d3d7ef25257e776ac42f15..a7a5616f35ee934868c5a3ae3b33c1953bbbb98a 100644 --- a/src/_zkapauthorizer/_storage_server.py +++ b/src/_zkapauthorizer/_storage_server.py @@ -103,7 +103,6 @@ from .storage_common import ( required_passes, allocate_buckets_message, add_lease_message, - renew_lease_message, slot_testv_and_readv_and_writev_message, has_writes, get_required_new_passes_for_mutable_write, @@ -302,24 +301,6 @@ class ZKAPAuthorizerStorageServer(Referenceable): ) return self._original.remote_add_lease(storage_index, *a, **kw) - def remote_renew_lease(self, passes, storage_index, *a, **kw): - """ - Pass-through after a pass check to ensure clients can only extend the - duration of share storage if they present valid passes. - """ - valid_passes = _ValidationResult.validate_passes( - renew_lease_message(storage_index), - passes, - self._signing_key, - ) - check_pass_quantity_for_lease( - self._pass_value, - storage_index, - valid_passes, - self._original, - ) - return self._original.remote_renew_lease(storage_index, *a, **kw) - def remote_advise_corrupt_share(self, *a, **kw): """ Pass-through without a pass check to let clients inform us of possible diff --git a/src/_zkapauthorizer/foolscap.py b/src/_zkapauthorizer/foolscap.py index 1478d76136278b53f46135bfbf8516b196e83f30..b8f12425e72f3c3e80df6350f59f16a6c93bb635 100644 --- a/src/_zkapauthorizer/foolscap.py +++ b/src/_zkapauthorizer/foolscap.py @@ -141,21 +141,6 @@ def add_arguments(schema, kwargs): return modified_schema -def remoteinterface_hasattr(ri, name): - """ - :param InterfaceClass ri: A ``RemoteInterface`` to inspect. - :param str name: The name of an attribute. - - :return bool: ``True`` if and only if ``ri`` has the attribute named by - ``name``, ``False`` otherwise. - """ - try: - ri[name] - except KeyError: - return False - return True - - class RIPrivacyPassAuthorizedStorageServer(RemoteInterface): """ An object which can store and retrieve shares, subject to pass-based @@ -176,14 +161,6 @@ class RIPrivacyPassAuthorizedStorageServer(RemoteInterface): add_lease = add_passes(RIStorageServer["add_lease"]) - if remoteinterface_hasattr(RIStorageServer, "renew_lease"): - # Tahoe-LAFS 1.16.0 drops renew_lease from the interface. Do likewise - # here, if we discover we have a version of Tahoe that has done so. - # If Tahoe has dropped this method then nothing in Tahoe is going to - # use it so it is fine if we don't define it. We also do not use it - # ourselves. - renew_lease = add_passes(RIStorageServer["renew_lease"]) - get_buckets = RIStorageServer["get_buckets"] def share_sizes( diff --git a/src/_zkapauthorizer/storage_common.py b/src/_zkapauthorizer/storage_common.py index 487c164aa7f5cce69a2e9a66d5cbbfaa475ecd4e..829d5a17e3facf46a12fa2685e788d012e086622 100644 --- a/src/_zkapauthorizer/storage_common.py +++ b/src/_zkapauthorizer/storage_common.py @@ -70,7 +70,6 @@ def _message_maker(label): # construction for different Tahoe-LAFS storage operations. allocate_buckets_message = _message_maker(u"allocate_buckets") add_lease_message = _message_maker(u"add_lease") -renew_lease_message = _message_maker(u"renew_lease") slot_testv_and_readv_and_writev_message = _message_maker(u"slot_testv_and_readv_and_writev") # The number of bytes we're willing to store for a lease period for each pass diff --git a/src/_zkapauthorizer/tests/test_storage_protocol.py b/src/_zkapauthorizer/tests/test_storage_protocol.py index bad75149a0da939fd6692c903915fe2e126fc4b9..f8d57a446e68d4d2a3758c5941df3fdf286d9e96 100644 --- a/src/_zkapauthorizer/tests/test_storage_protocol.py +++ b/src/_zkapauthorizer/tests/test_storage_protocol.py @@ -25,7 +25,6 @@ from fixtures import ( ) from testtools import ( TestCase, - skipIf, ) from testtools.matchers import ( Always, @@ -76,7 +75,6 @@ from challenge_bypass_ristretto import ( random_signing_key, ) -from allmydata import __version__ as allmydata_version from allmydata.storage.common import ( storage_index_to_dir, ) @@ -547,53 +545,6 @@ class ShareTests(TestCase): leases = list(self.anonymous_storage_server.get_leases(storage_index)) self.assertThat(leases, HasLength(2)) - @skipIf(allmydata_version >= "1.16.", "Tahoe-LAFS 1.16.0 removed renew_lease") - @given( - storage_index=storage_indexes(), - renew_secret=lease_renew_secrets(), - cancel_secret=lease_cancel_secrets(), - sharenums=sharenum_sets(), - size=sizes(), - ) - def test_renew_lease(self, storage_index, renew_secret, cancel_secret, sharenums, size): - """ - A lease on an immutable share can be updated to expire at a later time. - """ - # Hypothesis causes our storage server to be used many times. Clean - # up between iterations. - cleanup_storage_server(self.anonymous_storage_server) - - # Take control of time (in this hacky, fragile way) so we can verify - # the expiration time gets bumped by the renewal. - now = 1000000000.5 - self.useFixture(MonkeyPatch("time.time", lambda: now)) - - # Create a share we can toy with. - write_toy_shares( - self.anonymous_storage_server, - storage_index, - renew_secret, - cancel_secret, - sharenums, - size, - canary=self.canary, - ) - - now += 100000 - self.assertThat( - self.client.renew_lease( - storage_index, - renew_secret, - ), - succeeded(Always()), - ) - - [lease] = self.anonymous_storage_server.get_leases(storage_index) - self.assertThat( - lease.get_expiration_time(), - Equals(int(now + self.server.LEASE_PERIOD.total_seconds())), - ) - def _stat_shares_immutable_test(self, storage_index, sharenum, size, clock, leases, write_shares): # Hypothesis causes our storage server to be used many times. Clean # up between iterations. diff --git a/src/_zkapauthorizer/tests/test_storage_server.py b/src/_zkapauthorizer/tests/test_storage_server.py index e5f0e770244838551d03315799ffc6a02d20d704..1adab62a8b9e6e6605424f2a2ee78dc75f2f87bd 100644 --- a/src/_zkapauthorizer/tests/test_storage_server.py +++ b/src/_zkapauthorizer/tests/test_storage_server.py @@ -97,7 +97,6 @@ from ..storage_common import ( required_passes, allocate_buckets_message, add_lease_message, - renew_lease_message, slot_testv_and_readv_and_writev_message, get_implied_data_length, get_required_new_passes_for_mutable_write, @@ -541,40 +540,6 @@ class PassValidationTests(TestCase): add_lease_message, ) - @given( - storage_index=storage_indexes(), - secrets=tuples( - lease_renew_secrets(), - lease_cancel_secrets(), - ), - sharenums=sharenum_sets(), - allocated_size=sizes(), - ) - def test_renew_lease_fails_without_passes(self, storage_index, secrets, sharenums, allocated_size): - """ - If ``remote_renew_lease`` is invoked without supplying enough passes to - cover the storage for all shares on the given storage index, the - operation fails with ``MorePassesRequired``. - """ - renew_secret, cancel_secret = secrets - def renew_lease(storage_server, passes): - return storage_server.doRemoteCall( - "renew_lease", ( - passes, - storage_index, - renew_secret, - ), - {}, - ) - return self._test_lease_operation_fails_without_passes( - storage_index, - secrets, - sharenums, - allocated_size, - renew_lease, - renew_lease_message, - ) - @given( slot=storage_indexes(), secrets=tuples(