[tahoe-dev] zfec: bug with m=16 k=13 parameters at certain file length
Bodecs Bela
bodecsb at vivanet.hu
Wed Sep 11 18:40:31 UTC 2013
I am on 64 bit.
Since my 1st post, I have found the root cause of the bug in filefec.py,
here is the problematic part in decode_from_files method:
while True:
chunks = [ inf.read(CHUNKSIZE) for inf in infs ]
if [ch for ch in chunks if len(ch) != len(chunks[-1])]:
raise CorruptedShareFilesError("Share files were corrupted
-- all share files are required to be the same length, but they weren't.")
if len(chunks[-1]) == CHUNKSIZE:
# Then this was a full read, so we're still in the sharefiles.
resultdata = dec.decode(chunks, shnums, padlen=0)
outf.write(resultdata)
byteswritten += len(resultdata)
if verbose:
if ((byteswritten - len(resultdata)) /
(10*MILLION_BYTES)) != (byteswritten / (10*MILLION_BYTES)):
print str(byteswritten / MILLION_BYTES) + " MB ...",
else:
# Then this was a short read, so we've reached the end of
the sharefiles.
resultdata = dec.decode(chunks, shnums, padlen)
outf.write(resultdata)
return # Done.
In certain cases the else branch never reach if the fec chunk file size
is exactly n times CHUNKSIZE.
(CHUNKSIZE variable value is always 4096)
I have altered the script and it works great now:
while True:
chunks = [ inf.read(CHUNKSIZE) for inf in infs ]
if [ch for ch in chunks if len(ch) != len(chunks[-1])]:
raise CorruptedShareFilesError("Share files were corrupted
-- all share files are required to be the same length, but they weren't.")
#if len(chunks[-1]) == CHUNKSIZE:
if len(chunks[-1]) > 0:
# Then this was a full read, so we're still in the sharefiles.
resultdata = dec.decode(chunks, shnums, padlen=0)
outf.write(resultdata)
byteswritten += len(resultdata)
if verbose:
if ((byteswritten - len(resultdata)) /
(10*MILLION_BYTES)) != (byteswritten / (10*MILLION_BYTES)):
print str(byteswritten / MILLION_BYTES) + " MB ...",
else:
# Then this was a short read, so we've reached the end of
the sharefiles.
#resultdata = dec.decode(chunks, shnums, padlen)
#outf.write(resultdata)
if padlen > 0:
outf.truncate(byteswritten - padlen)
return # Done.
bb
2013.09.11. 20:23 keltezéssel, jg71 írta:
> * Bodecs Bela <bodecsb at vivanet.hu> wrote:
>
>> please confirm the following bug:
>>
>> zfec command line tool, version: 1.4.24
> same here (on Slackware64-13.37 - are you on a 32bit system?)
>
> Well.... I can reproduce the bug.
>
> _______________________________________________
> tahoe-dev mailing list
> tahoe-dev at tahoe-lafs.org
> https://tahoe-lafs.org/cgi-bin/mailman/listinfo/tahoe-dev
>
More information about the tahoe-dev
mailing list