diff --git a/src/allmydata/immutable/checker.py b/src/allmydata/immutable/checker.py index 0268d8d..4e6e609 100644 --- a/src/allmydata/immutable/checker.py +++ b/src/allmydata/immutable/checker.py @@ -612,19 +612,22 @@ class Checker(log.PrefixingLogMixin): return d d.addCallback(_got_ueb) - def _discard_result(r): - assert isinstance(r, str), r - # to free up the RAM - return None def _get_blocks(vrbp): - ds = [] - for blocknum in range(veup.num_segments): + def _discard_result(r): + assert isinstance(r, str), r + # to free up the RAM + return None + def _get_block(ign, blocknum): db = vrbp.get_block(blocknum) db.addCallback(_discard_result) - ds.append(db) - # this gatherResults will fire once every block of this share has - # been downloaded and verified, or else it will errback. - return deferredutil.gatherResults(ds) + return db + dbs = defer.succeed(None) + for blocknum in range(veup.num_segments): + dbs.addCallback(_get_block, blocknum) + # The Deferred we return will fire after every block of this + # share has been downloaded and verified successfully, or else it + # will errback as soon as the first error is observed. + return dbs d.addCallback(_get_blocks) # if none of those errbacked, the blocks (and the hashes above them)