From: Brian Warner Date: Thu, 8 Nov 2007 11:30:37 +0000 (-0700) Subject: mutable: cheap padding hack to make zfec tolerate short files X-Git-Tag: allmydata-tahoe-0.7.0~237 X-Git-Url: https://git.rkrishnan.org/reedownlee?a=commitdiff_plain;h=61d9ab7690e0b29ad3c43a547cf242f5d97eb770;p=tahoe-lafs%2Ftahoe-lafs.git mutable: cheap padding hack to make zfec tolerate short files --- diff --git a/src/allmydata/mutable.py b/src/allmydata/mutable.py index d7a0d669..d73e6c12 100644 --- a/src/allmydata/mutable.py +++ b/src/allmydata/mutable.py @@ -891,10 +891,16 @@ class Publish: # now apply FEC self.MAX_SEGMENT_SIZE = 1024*1024 + data_length = len(crypttext) + if len(crypttext) < 10: + # TODO: FEC doesn't handle short (or empty) strings very well, so + # give it something longer and we'll trim the results later. For + # some reason I suspect the lower limit is k**2 + crypttext = crypttext + "\x00"*(10-len(crypttext)) + segment_size = min(self.MAX_SEGMENT_SIZE, len(crypttext)) # this must be a multiple of self.required_shares - segment_size = mathutil.next_multiple(segment_size, - required_shares) + segment_size = mathutil.next_multiple(segment_size, required_shares) self.num_segments = mathutil.div_ceil(len(crypttext), segment_size) assert self.num_segments == 1 # SDMF restrictions fec = codec.CRSEncoder() @@ -913,7 +919,7 @@ class Publish: d.addCallback(lambda shares_and_shareids: (shares_and_shareids, required_shares, total_shares, - segment_size, len(crypttext), + segment_size, data_length, target_info) ) return d