]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blobdiff - src/allmydata/mutable/layout.py
SDMF: update filenode with correct k/N after Retrieve. Fixes #1510.
[tahoe-lafs/tahoe-lafs.git] / src / allmydata / mutable / layout.py
index 02069edd1780a5a6908aaf025838e27932b7d824..93d0c8f15c2b055715d04465e7797e67aab8252d 100644 (file)
@@ -1,5 +1,5 @@
 
-import struct, math
+import struct
 from allmydata.mutable.common import NeedMoreDataError, UnknownVersionError
 from allmydata.interfaces import HASH_SIZE, SALT_SIZE, SDMF_VERSION, \
                                  MDMF_VERSION, IMutableSlotWriter
@@ -499,7 +499,7 @@ class SDMFSlotWriteProxy:
         """
         for k in ["sharedata", "encprivkey", "signature", "verification_key",
                   "share_hash_chain", "block_hash_tree"]:
-            assert k in self._share_pieces
+            assert k in self._share_pieces, (self.shnum, k, self._share_pieces.keys())
         # This is the only method that actually writes something to the
         # remote server.
         # First, we need to pack the share into data that we can write
@@ -548,10 +548,10 @@ MDMFOFFSETS_LENGTH = struct.calcsize(MDMFOFFSETS)
 PRIVATE_KEY_SIZE = 1220
 SIGNATURE_SIZE = 260
 VERIFICATION_KEY_SIZE = 292
-# We know we won't have more than 256 shares, and we know that we won't
-# need to store more than lg 256 of them to validate, so that's our
-# bound. We add 1 to the int cast to round to the next integer.
-SHARE_HASH_CHAIN_SIZE = int(math.log(HASH_SIZE * 256)) + 1
+# We know we won't have more than 256 shares, and we know that we won't need
+# to store more than ln2(256) hash-chain nodes to validate, so that's our
+# bound. Each node requires 2 bytes of node-number plus 32 bytes of hash.
+SHARE_HASH_CHAIN_SIZE = (2+HASH_SIZE)*mathutil.log_ceil(256, 2)
 
 class MDMFSlotWriteProxy:
     implements(IMutableSlotWriter)