全部产品
云市场
    注册分支失败

注册分支失败

更新时间:2018-09-03 11:37:51

现象

GTS 分支注册失败,GTS 客户端日志包含如下关键词:

registTrxBranch

可能的原因

导致 GTS 分支注册失败常见的三种情况:

  • 全局锁冲突
  • 全局事务超时
  • 网络异常

解决办法

全局锁冲突解决办法

GTS 通过全局锁保证修改数据的并发冲突。

事务在修改记录需要先获取全局锁,如果另一 GTS 事物正在修改该数据,当前事务会获取锁失败。GTS 会尝试再次获取,如果多次获取不到全局锁(默认尝试 10 次),GTS 会提示 registTrxBranch error。

报错情景如下图:

报错信息

问题定位

在 GTS 日志中搜索关键词“TxcLockConflictException”。如果搜到,可判断该问题由全局锁导致。

解决步骤

  1. 根据错误日志中出现的 DRDS 节点信息,登录 DRDS,查看 /home/admin/logs/txc 目录下的 txc 日志,找到相应的日志,如:

    1. 01 2018-06-27 17:33:14.534 INFO [Processor1-H-6-thread-3:txc] [TxcStyleTransaction:commit:67] [] [] 11.193.75.143:8091:223728533 global commit failed, auto rollbacked, caused by com.taobao.txc.common.exception.TxcException: Trx TimeOut
    • 日志中,11.193.75.143:8091:223728533 代表因为上述锁冲突问题导致回滚的 XID。
    • 11.193.75.143 是 GTS server 的 IP 地址。
    • 223728533 是具体日志。
  2. 根据 IP 地址(例如,11.193.75.143),登录 GTS server。

  3. 在 /home/admin/logs/txc 目录下,搜索相关的 txc 日志(例如,223728533),定位具体的锁冲突情况。

    1. 01 2018-06-27 17:33:14.286 INFO [pool-1-thread-64:txc] [b:a:-1] [] [] transaction:223728533 branch:223728622 requested key (DVS_ACTIVITY_PRIZE:2DE5D4EF90F44AB495228C4C1EDC3907) is occupied by transaction:623723339
  4. 登录 623723339 这个事务所在的 GTS server 上查看日志。

    1. 01 2018-06-27 17:33:14.557 INFO [Thread-9:txc] [h:run:-1] [] [] TxcMergeResultMessage GlobalRollbackResultMessage tranId:623723339,result:1,msg:null

    确定这个事务本身已经完结(提交或回滚),并无长久占据锁不放的情况,则不需要再进一步排查。

网络异常解决办法

如果网络有抖动,GTS 的客户端向服务端注册的时候也容易出现 30000ms 超时,从而导致注册失败的情况。这种异常大多数在用户使用公网模式调试时出现,且一般有一定的偶发性。

如果客户在使用公网模式在本地调试经常出现该问题,建议用户在阿里云的ECS上测试。