Skip to content
Snippets Groups Projects
storage_common.py 2.04 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jean-Paul Calderone's avatar
    Jean-Paul Calderone committed
    # Copyright 2019 PrivateStorage.io, LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    """
    Functionality shared between the storage client and server.
    """
    
    def _message_maker(label):
        def make_message(storage_index):
            return u"{label} {storage_index}".format(
                label=label,
                storage_index=b64encode(storage_index),
            )
        return make_message
    
    
    Jean-Paul Calderone's avatar
    Jean-Paul Calderone committed
    # Functions to construct the PrivacyPass request-binding message for pass
    # 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
    # submitted.
    BYTES_PER_PASS = 128 * 1024
    
    def required_passes(bytes_per_pass, share_nums, share_size):
        """
        Calculate the number of passes that are required to store ``stored_bytes``
        for one lease period.
    
    
    Jean-Paul Calderone's avatar
    Jean-Paul Calderone committed
        :param int bytes_per_pass: The number of bytes the storage of which for
            one lease period one pass covers.
    
    Jean-Paul Calderone's avatar
    Jean-Paul Calderone committed
        :param set[int] share_nums: The share numbers which will be stored.
        :param int share_size: THe number of bytes in a single share.
    
        :return int: The number of passes required to cover the storage cost.
    
        """
        return int(
            ceil(
                (len(share_nums) * share_size) / bytes_per_pass,
            ),
        )