Exceptions
RaceCondition
RaceConditionSource: hetu/data/backend/base.py:54
Bases: Exception
事务竞态异常,表示当前事务基于过期状态提交失败,可以丢弃本次Session并重试。
常见触发场景包括:
- 提交
update/delete时,目标行_version已变化或行已被删除; - 提交
insert/update时,唯一索引在提交阶段被其他事务抢先占用; upsert发现锚定的unique索引已被并发事务插入;- 表维护、连接保活等内部流程检测到依赖状态已被其他执行流改变。
SystemCaller 和 Session.retry(...) 会捕获此异常并重新执行事务。
UniqueViolation
UniqueViolationSource: hetu/data/backend/base.py:71
Bases: IndexError
唯一索引违反异常,表示当前Session提交前已确认写入会破坏unique约束。
SessionRepository.insert(...) 和 SessionRepository.update(...) 会在本地
IdentityMap与远程数据库中检查unique字段;发现同事务内重复值,或数据库已有
同值记录时抛出此异常。异常消息通常会包含冲突字段名,便于定位哪个unique索引
发生冲突。
此异常代表确定性的业务/数据冲突,不应被自动重试:本事务从未观察过该unique 值不存在,却试图写入一个已存在的值(典型如“用户名已被占用”)。
与之相对:若本事务此前曾 get 观察到该值不存在、之后写入时却发现远程已被并发
插入,则属于基于过期快照的乐观并发失败,会被转换为 RaceCondition
交由事务重试
机制处理(由 negative observation 机制判定,upsert 的锚定字段冲突是其特例)。