理解循环内事务中的grails死锁

时间:2015-08-07 09:46:46

标签: hibernate grails deadlock database-deadlocks

当前在循环内的事务中存在事务死锁:

def method() {
    attemptIds.each { attemptId ->
        Attempt.withTransaction {
            def attempt = Attempt.findById(attemptId, [lock:true])
            attempt.refresh()
            //modify attempt and save
        }
    }
}

此方法属于非事务性服务。并且该方法被同时调用。列表中的attemptId可能在attemptIds中重复/不唯一。

因此尝试的处理应该阻止处理相同尝试的其他线程。

我们将事务包含在循环中,认为它会立即提交事务,让其他线程更新先前锁定的尝试。

日志表明,findBy查询被另一个查询阻止,反之亦然,我不知道这是怎么回事。

为什么你认为发生了僵局?

0 个答案:

没有答案