Closed 0000005 closed 5 years ago
假设TxManager突然死机(用kill -9来模拟),该主机的下线无法及时通知集群中的所有机器。但是参与者的netty确实及时感知到了与TxManager的断链,于是开始使用doConnect来试图重新建立新的链接。doConnect中有一些流程,其中一个子流程需要获取所有TxManager的具体信息(为了获取连接数最多的服务,想要把所有的业务长连接,连接到同一个tm,但是又不能超过最大的连接)。但是因为TxManager突然死机没有通知到其他机器,所以此时调用死机的哪个TxManager获取信息,是调不通的,会有异常。 整个doConnect会失败。所有的分布式事务会瘫痪。
如果获取那个TxManager失败,则将他剔除。
不合并吗,这个是确实有bug
问题描述:
假设TxManager突然死机(用kill -9来模拟),该主机的下线无法及时通知集群中的所有机器。但是参与者的netty确实及时感知到了与TxManager的断链,于是开始使用doConnect来试图重新建立新的链接。doConnect中有一些流程,其中一个子流程需要获取所有TxManager的具体信息(为了获取连接数最多的服务,想要把所有的业务长连接,连接到同一个tm,但是又不能超过最大的连接)。但是因为TxManager突然死机没有通知到其他机器,所以此时调用死机的哪个TxManager获取信息,是调不通的,会有异常。 整个doConnect会失败。所有的分布式事务会瘫痪。
解决办法:
如果获取那个TxManager失败,则将他剔除。