apache / apache/incubator-seata

[discuss] #525 tx hook should every catch or all catch

Open
#557 38 comments 4 reactions 1 assignee Assigned to @slievrly View on GitHub
type: discussion
Dominant language
Java
Stars
26k
Forks
8.8k
Avg merge
1d 8h
Merged PRs (30d)
4

Description

relates to #525
fescar hook是什么?
fescar hook的提供事务整个生命周期的入口,hook是thread级别,所以hook可以单独的使用在单个事务或多个事务,同理不同事务也可以注册不同的hook或同一hook,hook的生命周期随着单一事务的生命周期结束而结束。
fescar事务钩子需要保证fescar流程不中断,所以需要catch住hook的异常,现在有两个分歧点,当注册了多个钩子时,是否需要在fescar流程中catch每个hook的异常,还是作为整体catch hooks异常
All catch like
![image](https://user-images.githubusercontent.com/25057816/54009415-a4b14100-41a5-11e9-9074-b0d38419b9fe.png)

Every catch like
![image](https://user-images.githubusercontent.com/25057816/54009388-9400cb00-41a5-11e9-8d3d-131685cc23a6.png)

我认为是需要整体保证异常的catch
1.hook的使用是完全交给用户的,fescar是给用户提供了跟踪事务的业务入口,不需要规定用户的使用方式,只需要保证整体不影响事务流程即可。
2.整体catch的hook非常灵活,可以满足各种场景,针对每个hook都需要独立的场景也适用,用户只需要使用hook时,catch住异常,就和fescar catch每个hook异常是相同的效果
3.hooks的整体catch给了更多的扩展性,如优先级hook,链式hook可以根据实际需求场景由用户控制也可以后根据社区呼吁集成到fescar中
4.hook是线程级别的,控制hook的范围是和业务绑定的,不是全局的接口范围,所以需不需要抛出异常,hook链路是否有关联性,用户是非常清楚的,如果需要每个hook都需要catch住,那用户不用fescar做,作为一个考虑周全的程序员,他自己也会实际中那样做,
5. hook与hook之间本来就是相互没影响的,给事务添加hooks是给具体事务添加hook不是全局的,那么这块的hooks应该看成是单个事物的整体hook,具体的子hook是如何搭配,需要如何关联,用户业务决定。hook是需要手动分配给事务的。
like

![image](https://user-images.githubusercontent.com/25057816/54068977-56776d00-428d-11e9-85e4-508b97e19286.png)


A事务则拥有的一个hook的生命周期,A事务结束,hook就会结束。

总结了issue里面对于全局catch的疑惑,我这里说明一下
1.hook与hook之间的设计就是没有任何关系的。hook之间没有任何互相依赖
2.对于单个事务注册的多个hook的hooks默认是有影响顺序的。
关于这两点我解释一下
对应hook是有全局事务注册和单个事务指定注册的使用场景,所以hook天生是需要扩展优先级概念的。
对于全局AHook事务有以下需求场景
A.Ahook不能被其它Hook影响,对于任何事务中的hooks,如果AHook执行失败,其余hooks不能执行,这样Ahook需要优先级靠前(与同为A场景hook判断优先级)且不能catch异常
B.Ahook不能被其它Hook影响,对于任何事务中的hooks,如果AHook执行失败,其余hooks能继续成功,这样Ahook需要优先级与A场景的hook设定优先级,且需要业务catch异常
C.Ahook能被其它Hook影响,对于任何事务中的hooks,如果AHook执行失败,其余hooks不能执行,根据ABC场景的hook比较优先级且不能catch异常
C.Ahook能被其它Hook影响,对于任何事务中的hooks,如果AHook执行失败,其余hooks能执行,则优先级一般是较靠后,且需要业务catch异常
综上所述,异常的catch由用户hook设定优先级,与是否需要对其它hook有影响来判断加入需要的异常处理,这块完全交给业务自由处理。

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.