hhyo / Archery

SQL 审核查询平台
https://archerydms.com
Apache License 2.0
6k stars 1.68k forks source link

notify.py 中 audit_id 错乱 #2677

Closed linora closed 3 months ago

linora commented 3 months ago

重现步骤

本人修改了 sql/notify.py 脚本源码

117     # workflow_url = "{base_url}/workflow/{audit_id}".format(
118     workflow_url = "{base_url}/{audit_id}".format(
119         base_url=base_url, audit_id=audit_detail.audit_id
120     )

291     #url = "{base_url}/workflow/{audit_id}".format(base_url=base_url, audit_id=audit_id)
292     url = "{base_url}/{audit_id}".format(base_url=base_url, audit_id=audit_id)

重启 archery 后发现通知消息中拿到的 audit_id 是旧的。

预期外的结果

通知消息中显示正确的 url

日志文本

No response

版本

1.8

部署方式

Docker

是否还有其他可以辅助定位问题的信息?比如数据库版本等

No response

LeoQuote commented 3 months ago

你好,二次开发问题还请自行解决

linora commented 3 months ago

您好,其实也非二次开发了

因为之前的通知消息中 url 就不对,里面加了 workflow 节,导致点击 url 不能直接跳转到工单详情页,所以我才自行修改。

linora commented 3 months ago

其他脚全部没有动过呢

linora commented 3 months ago

还好我是 DBA,目前发现应该是个 bug。

问题: 1、mysql 层面的 workflow_audit 表 audit_id 列是自增列。 2、innodb_autoinc_lock_mode 配置问题,可能导致 audit_id 内存中自增了,但未持久化,重启后自增丢失。 3、以上,会导致 authid_id 永远落后真实 authid_id,所以通知中的 url 永远是旧的工单 url。

建议解决方式:不依赖 mysql 自增特性,有个全局统一的 audit_id 生成策略。

解决: 参照 web 中最新工单 url 中 authid_id,重置 workflow_audit 表的自增值:

alter table workflow_audit AUTO_INCREMENT=NNNN;

LeoQuote commented 3 months ago

欢迎pr或更新文档提醒使用 archery 的人注意mysql 配置

hhyo commented 3 months ago

1242