-
Notifications
You must be signed in to change notification settings - Fork 2.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
异常崩溃情况下,有些未完成的事务会一直处于Trying阶段无法继续下去,造成事务不一致 #8
Comments
@kixiong |
@changmingxie
StringBuilder builder = new StringBuilder();
builder.append("SELECT GLOBAL_TX_ID, BRANCH_QUALIFIER, CONTENT,STATUS,TRANSACTION_TYPE,RETRIED_COUNT" +
" FROM TCC_TRANSACTION "); 重启后,这个重启的节点将会加载所有的事务,包括其他节点正在处理中的事务,而这些事务中有可能是其他节点刚刚创建或正处于Trying节点正在处理中的事务,都将会被这个重启节点的事务恢复器给Rollback掉,造成系统异常。 |
@kixiong |
@changmingxie 请问针对@kixiong 提的两个问题,在新的V1.1.0版中是否做了改进和修复? |
@weldon01 |
@changmingxie 如果节点挂了 又没有重启,那么这个节点中还未完成的事务会一直存在,目前没有特别处理,需要干预。 1.1.0版本是这么解决问题的 |
其实在更新事务单据状态的时候当前节点挂掉 这种情况我直接走cancel 这类业务 应该也能接受吧。 |
分析代码发现TransactionManager代码中的commit和rollback方法中,如果在更新数据库记录变更事务状态前,虚拟机被kill了,之前Trying阶段的事务会一直处于Trying阶段,无法继续处理下去,TransactionRecoveryJob不处理这中情况,造成事务不一致。是否可以考虑加上事务超时机制,后台定时扫描超时Trying阶段事务,使得这中情况下可以保证事务一致性。
The text was updated successfully, but these errors were encountered: