[seata]Seata1.5.2|1.6 saga模式 存在 java.lang.NullPointerException: null at java.base/java.util.Date.getMillisOf(Date.java:956) bug

2024-02-02 519 views
0

问题描述:saga模式时,客户端调用两个服务,这两个服务都有补偿服务,例如: A服务 -- 补偿服务为 AU B服务 -- 补偿服务为 BU Seata服务为远程服务模式。客户端运行时,根据流程定义先执行A服务,再执行B服务,此时B服务出现异常,根据流程定义如果触发异常则触发补偿,即开始执行BU服务,然后再执行AU服务。这是正常流程。如果在执行BU服务还有没有结束时,强制停止运行(模拟挂机),此时BU这个补偿服务在seata_state_inst表里的记录的gmt_end为null,接下来再重新运行客户端时,seata服务会远程触发二阶段回滚,二阶段回滚成功后,我再调用如下代码:

  String instancdID = stateMachineEngine.getStateMachineConfig().getStateLogStore().
                     getStateMachineInstanceByBusinessKey(businessKey, null).getId();

会导致如下异常: 图片

分析原因知道是由于代码里没有判断gmt_end=null的情况,下方代码错误位置如下: 图片

回答

7

@ulwx 可能会在 #4954 中修复

5

@ulwx 该问题在1.6.0版本中已修复,请帮忙确认1.6中是否存在该问题。

4

1.6.1同样存在这个问题,没有修复干净

8

辛苦提供一下错误栈? 还是同样的代码栈吗? 您能提供一下错误栈吗?是同一个代码栈吗?