Skip to content

provider端如果在confirm中抛异常,会错误的执行provider端的cancel逻辑。 #146

Open
@beyondbbk2021

Description

@beyondbbk2021

复现条件:就用提供的demo,非simplified模式tcc,try阶段正常,provider端在confirm中抛异常,过一段时间provider端的cancel逻辑会被错误的调用。

初步分析:provider端会定时调度方法org.bytesoft.bytetcc.TransactionRecoveryImpl#branchRecover,此方法会去调用consumer端的/revocer接口,但拿到的是一个空xidArray,后续一系列逻辑会导致provider端的cancel逻辑被调用,代码如下:

image

consumer端/recover接口相关代码如下:

image

最关键的就是这里为啥consumer端的getTransactionRepository得到的transactionList为空?

附上我用的demo:

链接: https://pan.baidu.com/s/1Sr0mk9O58VehoxFnHAlINQ 提取码: f6pz

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions