从示例https://github.com/indetail-blockchain/getting-started-with-scalardb中,transaction.commit可以抛出两个异常
·CommitException表示提交失败。在这种情况下,建议使用transaction.abort()·UnknownTransactionStatusException回滚事务,表示事务提交处于未知状态。它可能已经实施了,也可能没有实施。
发布于 2020-07-17 12:01:19
实际上,在当前基于快照隔离的实现中,并不真正需要abort(),因此您可以看到代码,abort()什么也不做。
要中止,只需在调用commit()之前丢弃一个事务对象。在这种情况下,存储中什么都不会发生,所以它看起来是正确回滚的。
如果您已经调用了commit(),那么它是否会真正提交或中止取决于事务的突变和存储可用性。如果一切进展顺利,就会做出承诺。如果它面临一些冲突或失败,它将被中止。在任何情况下,它最终都会被提交(滚动转发)或中止(回滚)。
有一种情况是,它无法识别事务是否已提交或中止,例如,由于系统中的一些灾难性故障,并且在这种情况下抛出UnknownTransactionStatusException。
当抛出UnknownTransactionStatusException时,除了等待状态确定之前,您什么也做不了。您可以调用TransactionService.getState()来检查事务是否最终被提交或中止。
https://stackoverflow.com/questions/62953063
复制相似问题