示例#1
0
    def testTreeReducerState(self):
        """Test saving and recreation of an IterTreeReducer"""
        itm1a = rorpiter.IterTreeReducer(ITRBadder, [])
        for index in self.i1a:
            val = itm1a(index)
            assert val, index
        itm1b = pickle.loads(pickle.dumps(itm1a))
        for index in self.i1b:
            val = itm1b(index)
            assert val, index
        itm1b.Finish()
        assert itm1b.root_branch.total == 6, itm1b.root_branch.total

        itm2a = rorpiter.IterTreeReducer(ITRBadder2, [])
        for index in self.i2a:
            val = itm2a(index)
            if index == (): assert not val
            else: assert val
        itm2b = pickle.loads(pickle.dumps(itm2a))
        for index in self.i2b:
            val = itm2b(index)
            if index == (): assert not val
            else: assert val
        itm2c = pickle.loads(pickle.dumps(itm2b))
        for index in self.i2c:
            val = itm2c(index)
            if index == (): assert not val
            else: assert val
        itm2c.Finish()
        assert itm2c.root_branch.total == 12, itm2c.root_branch.total
示例#2
0
def Regress(mirror_rp):
    """Bring mirror and inc directory back to regress_to_time

    Also affects the rdiff-backup-data directory, so Globals.rbdir
    should be set.  Regress should only work one step at a time
    (i.e. don't "regress" through two separate backup sets.  This
    function should be run locally to the rdiff-backup-data directory.

    """
    inc_rpath = Globals.rbdir.append_path(b"increments")
    assert mirror_rp.index == () and inc_rpath.index == (), (
        "Mirror and increment paths must have an empty index")
    assert mirror_rp.isdir() and inc_rpath.isdir(), (
        "Mirror and increments paths must be directories")
    assert mirror_rp.conn is inc_rpath.conn is Globals.local_connection, (
        "Regress must happen locally.")
    meta_manager, former_current_mirror_rp = _set_regress_time()
    _set_restore_times()
    _regress_rbdir(meta_manager)
    ITR = rorpiter.IterTreeReducer(RegressITRB, [])
    for rf in _iterate_meta_rfs(mirror_rp, inc_rpath):
        ITR(rf.index, rf)
    ITR.finish_processing()
    if former_current_mirror_rp:
        if Globals.do_fsync:
            C.sync()  # Sync first, since we are marking dest dir as good now
        former_current_mirror_rp.delete()
示例#3
0
    def testTreeReducer(self):
        """testing IterTreeReducer"""
        itm = rorpiter.IterTreeReducer(ITRBadder, [])
        for index in self.i1:
            val = itm(index)
            assert val, (val, index)
        itm.Finish()
        assert itm.root_branch.total == 6, itm.root_branch.total

        itm2 = rorpiter.IterTreeReducer(ITRBadder2, [])
        for index in self.i2:
            val = itm2(index)
            if index == (): assert not val
            else: assert val
        itm2.Finish()
        assert itm2.root_branch.total == 12, itm2.root_branch.total
示例#4
0
    def testTreeReducer(self):
        """testing IterTreeReducer"""
        itm = rorpiter.IterTreeReducer(ITRBadder, [])
        for index in self.i1:
            val = itm(index)
            self.assertTrue(val)
        itm.finish_processing()
        self.assertEqual(itm.root_branch.total, 6)

        itm2 = rorpiter.IterTreeReducer(ITRBadder2, [])
        for index in self.i2:
            val = itm2(index)
            if index == ():
                self.assertFalse(val)
            else:
                self.assertTrue(val)
        itm2.finish_processing()
        self.assertEqual(itm2.root_branch.total, 12)
示例#5
0
 def patch(cls, dest_rpath, source_diffiter, start_index=()):
     """Patch dest_rpath with an rorpiter of diffs"""
     ITR = rorpiter.IterTreeReducer(PatchITRB, [dest_rpath, cls.CCPP])
     for diff in rorpiter.FillInIter(source_diffiter, dest_rpath):
         log.Log("Processing file {cf}".format(cf=diff), log.INFO)
         ITR(diff.index, diff)
     ITR.finish_processing()
     cls.CCPP.close()
     dest_rpath.setdata()
示例#6
0
 def patch_and_increment(cls, dest_rpath, source_diffiter, inc_rpath):
     """Patch dest_rpath with rorpiter of diffs and write increments"""
     ITR = rorpiter.IterTreeReducer(IncrementITRB,
                                    [dest_rpath, inc_rpath, cls.CCPP])
     for diff in rorpiter.FillInIter(source_diffiter, dest_rpath):
         log.Log("Processing changed file {cf}".format(cf=diff), log.INFO)
         ITR(diff.index, diff)
     ITR.finish_processing()
     cls.CCPP.close()
     dest_rpath.setdata()
示例#7
0
    def testTreeReducerState(self):
        """Test saving and recreation of an IterTreeReducer"""
        itm1a = rorpiter.IterTreeReducer(ITRBadder, [])
        for index in self.i1a:
            val = itm1a(index)
            self.assertTrue(val)
        itm1b = pickle.loads(pickle.dumps(itm1a))
        for index in self.i1b:
            val = itm1b(index)
            self.assertTrue(val)
        itm1b.finish_processing()
        self.assertEqual(itm1b.root_branch.total, 6)

        itm2a = rorpiter.IterTreeReducer(ITRBadder2, [])
        for index in self.i2a:
            val = itm2a(index)
            if index == ():
                self.assertFalse(val)
            else:
                self.assertTrue(val)
        itm2b = pickle.loads(pickle.dumps(itm2a))
        for index in self.i2b:
            val = itm2b(index)
            if index == ():
                self.assertFalse(val)
            else:
                self.assertTrue(val)
        itm2c = pickle.loads(pickle.dumps(itm2b))
        for index in self.i2c:
            val = itm2c(index)
            if index == ():
                self.assertFalse(val)
            else:
                self.assertTrue(val)
        itm2c.finish_processing()
        self.assertEqual(itm2c.root_branch.total, 12)
示例#8
0
    def patch(cls, target, diff_iter):
        """
        Patch target with the diffs from the mirror side

        This function and the associated ITRB is similar to the
        patching code in backup.py, but they have different error
        correction requirements, so it seemed easier to just repeat it
        all in this module.
        """
        ITR = rorpiter.IterTreeReducer(_DirPatchITRB, [target])
        for diff in rorpiter.FillInIter(diff_iter, target):
            log.Log("Processing changed file {cf}".format(cf=diff), log.INFO)
            ITR(diff.index, diff)
        ITR.finish_processing()
        target.setdata()