servicecomb-pack icon indicating copy to clipboard operation
servicecomb-pack copied to clipboard

omega执行补偿命令失败,alpha命令状态处于pending状态,无法自愈自动重试吗

Open gene1101 opened this issue 5 years ago • 6 comments

omega的补偿命令本身是可能执行失败的,alpha端命令的状态处于pending状态,此时服务端不会重新下发命令,但是客户端执行失败是有可能整个服务crash,最后也无法本地重试。最后会导致整个补偿事务一直pending。

gene1101 avatar Nov 01 '19 07:11 gene1101

你认为这种情况,alpha 有什么别的方法吗?

cmonkey avatar Nov 04 '19 03:11 cmonkey

如果整个事务有超时设置的话,当超时时间到达以后,alpha标记该事务为SUSPENDED,后续需要人工处理。

zhfeng avatar Nov 04 '19 04:11 zhfeng

这个时候的确需要人工确认,Alpha端很难给出自动的解决方案。

WillemJiang avatar Nov 04 '19 07:11 WillemJiang

你认为这种情况,alpha 有什么别的方法吗?

补偿也应该有个超时策略吧,超过阈值,要不挂起事务,要不就重发命令,目前应该就只能等待整体事务超时,然后挂起事务。

gene1101 avatar Nov 04 '19 08:11 gene1101

omega的补偿命令本身是可能执行失败的,alpha端命令的状态处于pending状态,此时服务端不会重新下发命令,但是客户端执行失败是有可能整个服务crash,最后也无法本地重试。最后会导致整个补偿事务一直pending。

我印象中补偿注解 @Compensable 有一个参数 retries 可以控制重试次数,非状态机模式下我没有验证过。 在状态机模式下应该是超过重试次数后会吧这笔事物设置成挂起状态。

coolbeevip avatar Nov 04 '19 09:11 coolbeevip

你可以在这个文件找到 retries 的定义 https://github.com/apache/servicecomb-pack/blob/master/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/annotations/Compensable.java

coolbeevip avatar Nov 04 '19 09:11 coolbeevip