Ticket #1395: serialize-verifier.diff

File serialize-verifier.diff, 1.6 KB (added by warner, at 2011-05-08T20:47:00Z)

patch to serialize block-fetches in Verifier. Multiple shares are still done in parallel.

  • src/allmydata/immutable/checker.py

    diff --git a/src/allmydata/immutable/checker.py b/src/allmydata/immutable/checker.py
    index 0268d8d..4e6e609 100644
    a b class Checker(log.PrefixingLogMixin): 
    612612            return d
    613613        d.addCallback(_got_ueb)
    614614
    615         def _discard_result(r):
    616             assert isinstance(r, str), r
    617             # to free up the RAM
    618             return None
    619615        def _get_blocks(vrbp):
    620             ds = []
    621             for blocknum in range(veup.num_segments):
     616            def _discard_result(r):
     617                assert isinstance(r, str), r
     618                # to free up the RAM
     619                return None
     620            def _get_block(ign, blocknum):
    622621                db = vrbp.get_block(blocknum)
    623622                db.addCallback(_discard_result)
    624                 ds.append(db)
    625             # this gatherResults will fire once every block of this share has
    626             # been downloaded and verified, or else it will errback.
    627             return deferredutil.gatherResults(ds)
     623                return db
     624            dbs = defer.succeed(None)
     625            for blocknum in range(veup.num_segments):
     626                dbs.addCallback(_get_block, blocknum)
     627            # The Deferred we return will fire after every block of this
     628            # share has been downloaded and verified successfully, or else it
     629            # will errback as soon as the first error is observed.
     630            return dbs
    628631        d.addCallback(_get_blocks)
    629632
    630633        # if none of those errbacked, the blocks (and the hashes above them)