Skip to content
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

事务发起方发生系统级别异常导致本地事务回滚远程事务成功,但是本地事务日志已经变成commit状态 #35

Open
xqxyxchy opened this issue Oct 19, 2018 · 5 comments

Comments

@xqxyxchy
Copy link
Contributor

1、业务中调用远程事务时,远程事务成功了;
myth-01
2、远程服务返回时feign在解码时报错了,导致发起方事务回滚;
3、发起方最终还是会发送消息到远程服务,并且成功后本地事务日志会变成commit状态,可是第2步本地事务回滚了;
myth-02
4、最终导致数据不一致,事务日志也变成commit了,无法再进行补偿;

总结:上述问题该怎么处理;

@yu199195
Copy link
Member

为什么远程成功了,还会有远程造成的错误? 不应该去解决这个问题吗?

@yu199195
Copy link
Member

我改一下吧。之前就不会考虑到这种情况

@xqxyxchy
Copy link
Contributor Author

这个问题是并发测试出现的:
1、远程服务执行是成功的;
2、远程服务返回后,偶发性转换异常(class cast exception),导致发起方事务回滚了;
3、最终结果就是数据不一致且无法补偿,发起方事务回滚、发起方事务日志状态commit、远程事务成功(也是commit);
4、这个偶发性转换异常目前我还没查出原因,但是事务框架对这种情况应该有对应的处理方案,事务日志不应该是“第3点”中的结果;

@yu199195
Copy link
Member

1.首先你要解决偶尔性的转换异常。
2.myth设计的时候,考虑的是,本地服务是成功的情况下,发送消息的成功,而不是整个切面的成功。
3.设想,如果你 的远程rpc已经执行成功了,然后随便抛一个异常,造成发起者不成功?应该怎么处理,继续执行一遍? 如果是,那么业务方就要保证接口的幂等。
4 myth的设计就是在够成功调用到你的rpc服务

@xqxyxchy
Copy link
Contributor Author

1、正在排查那个诡异的偶发问题;
2、目前我这边出现的就是像您所说的第三点的设想,您有什么好的建议不,目前比较纠结这个问题;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants