From 61d9ab7690e0b29ad3c43a547cf242f5d97eb770 Mon Sep 17 00:00:00 2001 From: Brian Warner Date: Thu, 8 Nov 2007 04:30:37 -0700 Subject: [PATCH] mutable: cheap padding hack to make zfec tolerate short files --- src/allmydata/mutable.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) 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 -- 2.45.2