From c5d1039e1345b99f78cccb200eb1e3a5d0512e43 Mon Sep 17 00:00:00 2001 From: Jean-Paul Calderone <exarkun@twistedmatrix.com> Date: Thu, 10 Oct 2019 09:12:53 -0400 Subject: [PATCH] Factor a bit of the low-level details out of the protocol code --- src/_zkapauthorizer/_storage_server.py | 55 +++++++++++++++++++------- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/src/_zkapauthorizer/_storage_server.py b/src/_zkapauthorizer/_storage_server.py index 68e61b6..6f5a448 100644 --- a/src/_zkapauthorizer/_storage_server.py +++ b/src/_zkapauthorizer/_storage_server.py @@ -178,12 +178,7 @@ class ZKAPAuthorizerStorageServer(Referenceable): allocate_buckets_message(storage_index), passes, ) - required_pass_count = required_passes(BYTES_PER_PASS, sharenums, allocated_size) - if len(valid_passes) < required_pass_count: - raise MorePassesRequired( - len(valid_passes), - required_pass_count, - ) + check_pass_quantity_for_write(len(valid_passes), sharenums, allocated_size) return self._original.remote_allocate_buckets( storage_index, @@ -255,15 +250,7 @@ class ZKAPAuthorizerStorageServer(Referenceable): slot_testv_and_readv_and_writev_message(storage_index), passes, ) - sharenums = get_sharenums(tw_vectors) - allocated_size = get_allocated_size(tw_vectors) - required_pass_count = required_passes(BYTES_PER_PASS, sharenums, allocated_size) - if len(valid_passes) < required_pass_count: - raise MorePassesRequired( - len(valid_passes), - required_pass_count, - ) - + check_pass_quantity_for_mutable_write(len(valid_passes), tw_vectors) renew_leases = True # Skip over the remotely exposed method and jump to the underlying @@ -332,6 +319,7 @@ def get_allocated_size(tw_vectors): ), ) + def has_active_lease(storage_server, storage_index, now): """ :param allmydata.storage.server.StorageServer storage_server: A storage @@ -353,6 +341,43 @@ def has_active_lease(storage_server, storage_index, now): ) +def check_pass_quantity_for_write(valid_count, sharenums, allocated_size): + """ + Determine if the given number of valid passes is sufficient for an + attempted write. + + :param int valid_count: The number of valid passes to consider. + :param set[int] sharenums: The shares being written to. + :param int allocated_size: The size of each share. + + :raise MorePassedRequired: If the number of valid passes given is too + small. + + :return: ``None`` if the number of valid passes given is sufficient. + """ + required_pass_count = required_passes(BYTES_PER_PASS, sharenums, allocated_size) + if valid_count < required_pass_count: + raise MorePassesRequired( + valid_count, + required_pass_count, + ) + + +def check_pass_quantity_for_mutable_write(valid_count, tw_vectors): + """ + Determine if the given number of valid passes is sufficient for an + attempted write to a slot. + + :param int valid_count: The number of valid passes to consider. + + :param tw_vectors: See + ``allmydata.interfaces.TestAndWriteVectorsForShares``. + """ + sharenums = get_sharenums(tw_vectors) + allocated_size = get_allocated_size(tw_vectors) + check_pass_quantity_for_write(valid_count, sharenums, allocated_size) + + # I don't understand why this is required. # ZKAPAuthorizerStorageServer is-a Referenceable. It seems like # the built in adapter should take care of this case. -- GitLab