首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ScalarDB什么时候为什么抛出UnknownTransactionStatusException

ScalarDB什么时候为什么抛出UnknownTransactionStatusException
EN

Stack Overflow用户
提问于 2020-07-17 11:30:44
回答 1查看 36关注 0票数 1

从示例https://github.com/indetail-blockchain/getting-started-with-scalardb中,transaction.commit可以抛出两个异常

·CommitException表示提交失败。在这种情况下,建议使用transaction.abort()·UnknownTransactionStatusException回滚事务,表示事务提交处于未知状态。它可能已经实施了,也可能没有实施。

  1. 是否保证回滚?

  1. 在什么情况下UnknownTransactionStatusException抛出?

  1. ,如果抛出UnknownTransactionStatusException,有什么补救办法?我要叫中止吗?这会保证回滚到以前的一致状态吗?
EN

回答 1

Stack Overflow用户

发布于 2020-07-17 12:01:19

  1. 是否保证回滚?

实际上,在当前基于快照隔离的实现中,并不真正需要abort(),因此您可以看到代码,abort()什么也不做。

https://github.com/scalar-labs/scalardb/blob/master/src/main/java/com/scalar/db/transaction/consensuscommit/ConsensusCommit.java#L126

要中止,只需在调用commit()之前丢弃一个事务对象。在这种情况下,存储中什么都不会发生,所以它看起来是正确回滚的。

如果您已经调用了commit(),那么它是否会真正提交或中止取决于事务的突变和存储可用性。如果一切进展顺利,就会做出承诺。如果它面临一些冲突或失败,它将被中止。在任何情况下,它最终都会被提交(滚动转发)或中止(回滚)。

  1. 在什么情况下UnknownTransactionStatusException抛出?

有一种情况是,它无法识别事务是否已提交或中止,例如,由于系统中的一些灾难性故障,并且在这种情况下抛出UnknownTransactionStatusException

  1. ,如果抛出UnknownTransactionStatusException,有什么补救办法?我要叫中止吗?这会保证回滚到以前的一致状态吗?

当抛出UnknownTransactionStatusException时,除了等待状态确定之前,您什么也做不了。您可以调用TransactionService.getState()来检查事务是否最终被提交或中止。

https://github.com/scalar-labs/scalardb/blob/master/src/main/java/com/scalar/db/service/TransactionService.java#L70

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62953063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档