yueli
896bbd8eeb
fix(audit): 修复 _collect_snapshot 关系守卫失效导致的审计丢失
hasattr(attr, 'property') 对 inspect(obj).attrs 产出的 AttributeState
恒为 False,这个守卫从未生效过 —— 关系属性一律被 getattr() 取了值。
lazy='dynamic' 的关系(如 SysWarehouseLocation.children)拿到的是
AppenderQuery,_serialize_value 对非基础类型原样放行,最终 json.dumps
兜底走 str(query) → query.session → Session.flush(),而此刻正在 flush 中,
抛 InvalidRequestError("Session is already flushing"),整条审计被 except 吞掉。
后果:
- sys_warehouse_location 的新建/删除审计长期为 0 条
(UPDATE 走 attr.history 而非 getattr,所以不受影响,症状是间歇性的)
- 批量生成 3050 个节点时逐行抛 3050 次异常:请求 873ms → 修复后 349ms
改为按 inspect(cls).relationships 的名字排除;before_update_listener
里的同一处坏守卫一并修正。
另把 warehouse 登记进 AGGREGATE_PATH_MARKERS:库位批量生成一次可产出
3000+ 节点,未登记时一次点击写 3000+ 条审计,登记后只留一条带 targets
清单的记录。
2026-09-29 12:03:43 +08:00
..
2026-09-28 15:18:43 +08:00
2026-09-29 12:03:43 +08:00
2026-09-23 15:17:44 +08:00
2026-02-09 11:29:37 +08:00
2026-09-28 11:07:10 +08:00
2026-09-28 11:07:10 +08:00
2026-09-23 15:17:44 +08:00
2026-09-10 14:16:27 +08:00