Commit Graph

13 Commits

Author SHA1 Message Date
huangzd1997 75d553f99a task-191: 双实例指标区分回归契约(instanceId 分桶不串、未配置归 unknown、跨实例可聚合、名集合一致)+ 8 条测试 2026-09-04 23:53:24 +08:00
huangzd1997 4179e0de23 task-189: 指标命名一致性契约(aiimage.* 前缀、全小写点分、全量名快照对齐 spec11 §1、无拼写漂移)+ 8 条测试 2026-09-04 23:53:22 +08:00
huangzd1997 7967f454ec task-188: 指标标签规范契约(moduleType/instanceId 必带、null 归一 unknown、无用户级标签、磁盘按 path、标签名冻结)+ 8 条测试 2026-09-04 23:53:20 +08:00
huangzd1997 7b73a2cf6e task-187: 临时磁盘容量/占用指标契约(tmpdisk.capacity/used gauge,path 标签,可算占用比对接 09 告警)+ 8 条测试 2026-09-04 23:48:21 +08:00
huangzd1997 03f5b827e2 task-186: 上传耗时/大小/成功率指标契约(upload.duration/size/result)+ 8 条测试 2026-09-04 23:48:21 +08:00
huangzd1997 e365fc84f8 task-185: file-job.* 指标契约(pending/running/success/failed/retry/duration,分模块/实例)+ 8 条测试 2026-09-04 23:48:21 +08:00
huangzd1997 17cfd6902b task-184: task.heartbeat.age 心跳年龄 gauge 契约(新鲜/陈旧/负时钟保护/未写无 meter)+ 8 条测试 2026-09-04 23:48:21 +08:00
huangzd1997 0ec4fb3534 task-183: task.duration 耗时指标契约(Timer,非负、分模块、名称冻结)+ 8 条测试 2026-09-04 23:48:20 +08:00
huangzd1997 0863614e66 task-182: task.success/failed/cancelled 终态计数指标契约(aiimage.task.*,分 moduleType/instanceId)+ 8 条测试 2026-09-04 23:48:20 +08:00
huangzd1997 a2c60d319f task-181: task.created/running 指标埋点(TaskObservabilityMetrics recorder:created 计数 + running gauge + moduleType/instanceId 标签,名称冻结)+ 8 条测试
- 标准指标名 aiimage.task.created/running(spec11 §1);moduleType/instanceId null 归 unknown;running 不为负
- Micrometer 可选:无注册表降级 debug 日志不抛错;recorder 为唯一接线面,各业务状态流转按 spec 待监控栈就绪后挂载
- 仅新增类与测试,不接调用点,零生产行为变化
2026-09-04 23:46:49 +08:00
huangzd1997 5f4fcad2ef 修复双实例 owner-scoped 结果文件 job 被非归属实例误杀
Build Backend JAR / build (push) Has been cancelled
线上现象:货源查询任务 26402/26400(归属 server-121)在归属机正常推进,
却被 server-110 判为「结果生成失败」,错误为「该任务已绑定到另一台服务实例处理」。

两个缺陷叠加:
1. 两台实例共用一个 RocketMQ consumer group,dispatch 消息被轮询投递;
   worker 对"PENDING + owner 不匹配"的 job 选择本地抢跑,模块层
   ensureTaskOwnedByCurrentInstance 直接抛 TaskOwnerMismatchException,
   异常落进通用 catch 被当成生成失败,5 次抢跑即耗尽 retryCount 并终态失败。
2. runPendingJobs 双重 claim:claimRunnableJobsForOwner 已把 job 翻成 RUNNING,
   随后又走 claimRunning(条件 PENDING/FAILED)必然失败 → job 被静默丢弃,
   归属机的定时兜底从未真正生效。

修复:
- worker:非归属实例一律跳过 owner-scoped job;抽出 processClaimed 供已持有
  claim 的调用方使用;processInternal 单独捕获 TaskOwnerMismatchException,
  只 deferRunning 退回 PENDING,不计入重试。
- TaskFileJobLocalDispatcher 新增 dispatchClaimed。
- dispatch 事件带上 owner,coordinator 按归属路由:本机 owner 直接本地派发不发 MQ,
  他机 owner 不发不跑交由归属机轮询接手,owner 为空维持原有 MQ 行为。
- 新增 owner 路由回归测试两组,回滚配合"本地抢跑"的旧断言。

同时提交此前工作区内已随 JAR 上线的 backend-java 改动:SimilarAsin 解析载荷
groups 内嵌 items(Python 旧链路兼容)与 chunk 类型不匹配跳过、
PermissionMenuSchemaInitializer 与 V103 两级菜单分组迁移、相关测试。
2026-09-01 21:07:25 +08:00
huangzd1997 e2607ab723 task-98: 移除 similar-asin/appearance-patent 模块 Coze,状态机与共享组件改名 LLM
Build Backend JAR / build (push) Has been cancelled
- similarasin/appearancepatent 模块全部 Coze 工作流调用改走 direct-LLM(已确认唯一运行路径)
- 共享组件改名:CozeTaskQueueGate→TaskQueueGate、CozeGroupResultPropagator→GroupResultPropagator
- 状态机改名:biz_task_scope_state 的 coze_* 列→llm_*、stateJson coze 键→llm(V100 迁移已应用生产)
- 删除 biz_coze_credential 表、CozeCredential* 类、SimilarAsinCozeClient、AppearancePatentCozeClient→LlmClient
- 前端 brand 页 Coze 文案→LLM;Python 后端删除 cozepy 依赖与死配置
- 修复 TaskResultFileJobWorker 启动失败:TaskFileJobConfig 注册 ResultFileJobHandlerRegistry 与 13 个 handler bean(含 validateCoverage 启动校验)
2026-09-01 02:20:50 +08:00
huangzd1997 4c70ca4101 task-78: 为所有外部调用增加耗时、重试、失败率和 payload 字节指标
新增 ExternalCallMetricsRecorder:通过 RestClient 拦截器统一记录
aiimage.external-call.duration(耗时)、aiimage.external-call.total
(失败率)、aiimage.external-call.payload.bytes(请求字节)与
aiimage.external-call.retry.total(重试次数);Coze/品牌检查/紫鸟
三个外部客户端全部接入,指标注册表缺失时静默降级,不改变调用语义。
2026-08-30 22:01:02 +08:00