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-29 12:03:43 +08:00
2026-05-22 10:59:39 +08:00
2026-01-27 15:50:23 +08:00
2026-09-02 18:39:09 +08:00
2026-01-26 13:47:53 +08:00
2026-09-23 17:16:26 +08:00
2026-09-02 18:39:09 +08:00
2026-03-19 09:49:21 +08:00
2026-07-14 17:02:07 +08:00
2026-01-27 15:50:23 +08:00
2026-03-19 09:49:21 +08:00
2026-07-15 11:11:40 +08:00
2026-09-02 18:39:17 +08:00
2026-09-23 17:41:27 +08:00
2026-02-02 15:06:20 +08:00
2026-03-19 09:49:21 +08:00
2026-04-02 10:31:53 +08:00