Commit Graph

46 Commits

Author SHA1 Message Date
huangzd1997 f2906e8d6f fix(delete-brand): 分片缺失降级组装收尾+失败兜底生成可下载结果
- 结果分片缺失 ≤ missingChunkFallbackLimit(默认20) 时降级组装,缺失行标「未回传」,任务不再整体白跑
- 超阈值失败/组装异常时通过 ResultFileJobHandler.fallbackAssembleOnFailure 兜底生成部分结果文件
- 组装失败文案带缺失分片号明细(如 缺失分片: [247](已收 4283/4284))
- 新增 GET /api/delete-brand/tasks/{taskId}/missing-chunks,补传后自动恢复终态失败组装 job
- stale-check 失败文案改为含最后心跳时间与最近组装失败真实原因(修复误导性「回传长时间无响应」)
- 新增降级合并/缺失分片单测,Handler/Worker 日志审计 stage 白名单补 FALLBACK
2026-09-08 13:18:58 +08:00
huangzd1997 40224d8e56 fix(backend-java): 收口并发资源与恢复链路 2026-09-05 14:44:00 +08:00
huangzd1997 01e8c608e7 task-212(部分): 04 Handler SPI 实现迁回各业务模块(依赖反转大头)——13 个 *ResultFileJobHandler 从 modules/task/service 迁到各自模块 service
- TaskFileJobConfig 与相关测试 import 同步到新模块包;MappingSnapshot 源码路径按模块映射
- task 模块对业务 import 由 16+ 文件降到 3(TaskHeartbeatService/TaskResultFileJobWorker/ModuleHistoryCleanupService 尚需心跳/worker/清理 SPI 化)
- 全量回归 2308 测试 0 失败
2026-09-05 10:11:53 +08:00
huangzd1997 dacdab7adb task-206: heartbeat 旧字段契约回放(env-gated,真实服务:RUNNING→alive:true、非运行→alive:false、未知任务 alive:false+message、旧/多余字段容忍)+ 已本地真跑 2026-09-05 09:01:55 +08:00
huangzd1997 1b27a3f1ca task-200: 巡检报表任务落地(InspectionSqlReportTask 跑 6 张只读报表 SQL:默认 disabled、分布式锁、单条失败不阻断、只 query)+ 8 条测试 2026-09-05 00:08:44 +08:00
huangzd1997 bde9e75eed task-165: 巡检只读契约(巡检器无删除/状态修改/写库方法集合断言、调度只调 inspect*、可重复、报表隔离)+ 8 条测试 2026-09-02 07:42:10 +08:00
huangzd1997 035ec9ac79 task-161: 巡检任务开关(aiimage.inspection.enabled 默认 disabled、cron 调度、分布式锁双实例去重、单巡检异常隔离、limit 透传)+ 8 条测试 2026-09-02 07:19:56 +08:00
huangzd1997 5305d6dbc2 task-159: 已完成任务活跃 Job 巡检(终态任务 RUNNING/PENDING Job 检出、运行中任务正常、只读、可重复)+ 8 条测试 2026-09-02 07:08:53 +08:00
huangzd1997 9998571770 task-158: 结果存在文件缺失巡检(resultFileUrl 对应 OSS 文件缺失检出、空白 URL 不告警、只读、可重复)+ 8 条测试 2026-09-02 07:04:06 +08:00
huangzd1997 9144bce33f task-157: 任务存在结果缺失巡检(终态任务无 file_result 检出、运行中忽略、只读、可重复)+ 8 条测试 2026-09-02 06:57:50 +08:00
huangzd1997 d773748ae9 task-156: 孤立 Job 巡检报表(task/result 缺失孤儿检出、重试耗尽同样报、只读不修改、可重复)+ 8 条测试 2026-09-02 06:53:06 +08:00
huangzd1997 ffc3963345 task-150: 清理前引用检查契约(chunk 共享/scope 引用保留、自身行可清、异常保守保留、只读无副作用、批量 IN 反查)+ 8 条测试 2026-09-02 06:19:42 +08:00
huangzd1997 eced873779 task-146: collectdata 自洽行为契约(后端无 file 字段 VO 快照、前端 success+downloadUrl 判定含空白边界)+ 前后端 13 条测试 2026-09-02 05:55:43 +08:00
huangzd1997 5e5056b99d task-143: publish 文件级 file 状态语义契约(ready 由 result.success+url 推导、job 字段独立、多文件混合、无结果 null)+ 8 条测试 2026-09-02 05:46:42 +08:00
huangzd1997 b7a403dc22 task-140: 13 模块 file 字段契约快照(fileStatus/fileError/fileReady 类型与白名单冻结、旧字段仍在、collectdata 自洽)+ 8 条守门测试 2026-09-02 05:32:06 +08:00
huangzd1997 4fb33bda1c task-138: 事务时长性能对比基准(prepare/persist 分段测量、200 分片负载上界、文档基线守门不劣化)+ 8 条基准测试 2026-09-02 05:20:54 +08:00
huangzd1997 2493019c27 task-137: 重复提交幂等契约(同 id 幂等接受/不重复落库/终态拒绝/并发撞键不覆盖/多次安全)+ 8 条守门测试 2026-09-02 05:15:18 +08:00
huangzd1997 58cfcfdf35 task-136: 事务外清理异常不阻断契约(响应不受影响/不重试循环/事务已提交/下次可再清理/部分失败继续)+ 8 条守门测试 2026-09-02 05:07:33 +08:00
huangzd1997 a982da0262 task-135: 任务状态成功时机契约(SUCCESS 必在文件生成上传后、无文件不成功、fileReady/downloadUrl 语义不变)+ 8 条守门测试 2026-09-02 05:03:05 +08:00
huangzd1997 c8d14a5b1b task-134: done=true 封口时机契约(分片先落库再强制 finalize、剩余全量行数、result 不重复创建、done=false 只触心跳)+ 8 条守门测试 2026-09-02 04:57:56 +08:00
huangzd1997 44fc43912f task-133: 回滚语义硬约束契约(完整回滚/状态不改写/payload 保留/重试安全/计算幂等/双模块一致)+ 8 条守门测试 2026-09-02 04:51:16 +08:00
huangzd1997 cf83752338 task-132: /result 成功确认时机契约(四模块 200+success=true 必在落库后、失败不成功、重试安全)+ 8 条守门测试 2026-09-02 04:44:21 +08:00
huangzd1997 445b7780c5 task-122: N+1 批量化修复(claim/stuck-reset/stale-check 逐行 selectById 改 selectBatchIds 批量回读 + Map 装配,行为等价) 2026-09-02 03:13:05 +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 fa5a59e5cd task-116: 后台管理新增/导入表单弹窗化 + 分组管理独立菜单与UI优化 + 轻量进度端点
Build Backend JAR / build (push) Has been cancelled
- 后台管理页(admin)所有面板的新增/导入表单改为弹窗操作,原有字段 ID 全部保留、提交逻辑不变;导入删除入口不再触发二次确认拦截
- 分组管理升级为独立菜单(V102 + schema initializer),移除 5 个面板内的管理分组按钮;分组列表改为蓝白主题、增加权限分组横幅
- Python 侧 group-manage 权限守卫(_ensure_backend_menu_access 补充 group-manage)
- 引入 V101(biz_task_file_job 复合索引)+ 新增 TaskProgressLight/TaskFileJob 轻量端点与进度聚合作
- 前端 progress-light / page-separated-loads / dispatch-guard 共享模块及单元测试
2026-09-01 12:54:13 +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 04f45bebec task-76: JSON owner 查询迁移到显式列并补充任务/状态复合索引 2026-08-30 20:51:07 +08:00
huangzd1997 ec9811c8a5 task-73: 本地文件作业队列 in-flight 去重和队列背压 2026-08-30 20:22:58 +08:00
huangzd1997 baa43d80ba task-72: 文件作业数据库原子 claim,避免重复派发同一 job 2026-08-30 20:01:18 +08:00
huangzd1997 6f32ed86e4 task-71: 清理日志改为数量与 sample ID,禁止输出超长任务 ID 列表 2026-08-30 19:53:49 +08:00
huangzd1997 9de4603484 task-70: 历史清理改为 keyset 分页、小批量和短事务 2026-08-30 19:48:59 +08:00
huangzd1997 5749a421cb task-69: 历史清理任务收集 transient payload 指针并提交删除队列 2026-08-30 19:29:32 +08:00
huangzd1997 2de58b7afc task-68: payload 引用删除改为批量引用检查与异步物理删除
- 新增 TransientPayloadDeleteOrchestrator:提交去重入队(maxPendingDeletes 上限),
  flush 时一次性 IN 批量反查 biz_task_chunk / biz_task_scope_state,
  未引用对象交由后台线程池异步物理删除(剥 rustfs: 前缀)
- 幂等:重复提交只入队一次;保守:查询失败整批保留可重试,不误删
- 空值/非指针忽略,本地/OSS 指针不在批量删除范围(各有归属与清理路径)
2026-08-30 19:13:43 +08:00
huangzd1997 9b1978aec8 task-65: transient payload 读取流式解压 + 解压后字节上限
- 新增 aiimage.transient-storage.max-decompressed-payload-bytes 配置
  (默认 100MB,即 2x 存储上限),覆盖 gzip 二进制与 gzip64 兼容两条路径
- decodeGzipStream 按 8KB 缓冲流式解压,累计输出超过上限立即中止并报错,
  防止压缩炸弹(zip bomb)在读取时无界膨胀内存
- 超限错误保留可识别消息(exceeds configured limit),由 resolvePayload 统一包装
2026-08-30 18:49:55 +08:00
huangzd1997 ca32cde4fe task-64: transient payload 压缩改为直接 gzip 二进制流上传
- RustfsObjectStorageService 新增 uploadBytes/readObjectBytes 二进制流 API
  (application/gzip),uploadText/readObjectAsString 改为其薄包装
- TransientPayloadStorageService 的 encodeStoredPayload 直接输出 gzip 字节,
  不再经过 gzip64 + Base64 文本编码(消除 33% 体积膨胀与中间字符串副本)
- 读取端按 gzip magic 识别二进制流解压;兼容旧 gzip64: 文本与历史裸文本
- 本地回落文件同步改为写二进制(Files.write),超限判定基于 gzip 后字节数
2026-08-30 18:42:19 +08:00
huangzd1997 9c9b8a6078 task-63: 进度快照写入最小更新间隔节流(终态豁免+删除清理跟踪) 2026-08-30 18:28:15 +08:00
huangzd1997 8d91e599ab task-62: 本地任务实体缓存共享组件(容量 LRU/TTL 即时回收/定时清理)接入 8 模块 2026-08-30 18:17:52 +08:00
supernijia 7a7f1dfa21 完善任务存储、权限及货源查询流程
Build Backend JAR / build (push) Has been cancelled
2026-08-14 22:49:15 +08:00
supernijia 5b1ccad40e 后台更新 服务优化
Build Backend JAR / build (push) Failing after 16m54s
2026-08-11 14:50:21 +08:00
supernijia 28e7fce11c 新需求更新 同步更新 2026-08-06 01:11:54 +08:00
supernijia 9048bbb7f8 处理数据量binlog问题 2026-07-28 15:49:41 +08:00
supernijia 7c3c9e53a0 菜单修改优化 2026-07-28 13:40:19 +08:00
supernijia 4ddb8b47b0 完成上架相关优化、oss迁移 2026-07-25 17:57:34 +08:00
supernijia 8ab36b1aaf 上架需求增加 2026-07-25 09:58:29 +08:00
super bca1335dc6 后端优化,增加新需求 2026-07-21 19:53:47 +08:00
super c85e5b278f 新增内容,新增拉起软件层 2026-06-08 09:19:15 +08:00