def lock_task(self, *tables):
     num_locked = 0
     self.assertFalse(hasattr(deadlock_detector.context, 'locks'))
     for t in tables:
         deadlock_detector.handle_lock(t)
         num_locked += 1
         self.assertEquals(len(deadlock_detector.context.locks), num_locked)
    def test_not_allowed(self, curs=None):
        #table2 -> table3 NOT ALLOWED
        deadlock_detector.ALLOWED_TRANSITIONS = [
            (self.table1, self.table2),
            (self.table1, self.table3),
        ]
        self.fill_table(self.table2, 1, curs)
        self.fill_table(self.table3, 1, curs)

        deadlock_detector.handle_lock(self.table2)
        self.assertRaises(deadlock_detector.TransitionNotAllowedError, deadlock_detector.handle_lock, self.table3, Eq('name', '1'))
Example #3
0
def get_list(curs, cls, cond, order_by='id', limit=None, offset=0, for_update=False):
    '''
    Selects list of objects
    @return: list of objects selected.
    '''
    if for_update:
        deadlock_detector.handle_lock(cls.table)

    curs.execute(*Select(cls.table, cond=cond, for_update=for_update, order_by=order_by, limit=limit, offset=offset).glue())
    dicts_list = fetchall_dicts(curs)

    if for_update and len(dicts_list) > 1:
        deadlock_detector.handle_lock(cls.table)

    return [cls(**d) for d in dicts_list]
    def test_allowed_same_table(self, curs=None):
        deadlock_detector.ALLOWED_TRANSITIONS = []
        self.fill_table(self.table1, 5, curs)

        deadlock_detector.handle_lock(self.table1)
        deadlock_detector.handle_lock(self.table1)
        deadlock_detector.handle_lock(self.table1)
    def test_allowed(self, curs=None):
        deadlock_detector.ALLOWED_TRANSITIONS = [
            (self.table1, self.table2),
            (self.table2, self.table3),
        ]
        self.fill_table(self.table1, 1, curs)
        self.fill_table(self.table2, 1, curs)
        self.fill_table(self.table3, 1, curs)

        deadlock_detector.handle_lock(self.table1)
        deadlock_detector.handle_lock(self.table2)
        deadlock_detector.handle_lock(self.table3)
Example #6
0
def get(curs, cls, cond, for_update=False):
    if for_update:
        deadlock_detector.handle_lock(cls.table)
    curs.execute(*Select(cls.table, cond=cond, for_update=for_update).glue())
    return cls(**fetchone_dict(curs))