shy3130
|
2292c1a75e
|
fix(data): 使用只读进程查询检查跨进程数据发布
Signed-off-by: shy3130 <shy3130@qq.com>
|
2026-11-02 12:32:34 +08:00 |
|
shy3130
|
648bab1bfe
|
fix(enriched): 发布标记残留导致读写永久 fail-closed
发布标记 (state=publishing) 缺少收尾与超时机制: 管道异常中断后标记永久
驻留, 之后所有读写持续报「数据正在发布」, 而停止实时行情反而移除了唯一
能接管它的写入方 —— 这就是用户反馈「关了实时行情还是不行」。
- run_pipeline 拆出包装层, 任何 BaseException 都调 abandon 结束发布会话;
未写分区 → 恢复 ready, 已写部分分区 → 保持 fail-closed 由超时接管
- abandon 不再因「已有写入」直接 return; _publishing 复位移入 finally,
锁竞争失败也不再让对象永久自认「发布中」; 并从活跃表移除, 允许同进程
下一个写入方立即接管
- 长任务每写一个分区刷新心跳, 纯计算阶段可显式 heartbeat(); 超过
CLAIM_STALE_SECONDS(600s) 无心跳时, 即使属主进程存活也允许接管
- 有活跃对象时一律视为在推进, 不能只凭时间戳判定: 全量重建可能在两批
写入之间计算十几分钟, 误判会放行第二个写入方
- 实时单分区写入失败也走 abandon, 避免一次瞬时失败挂到超时
- lifespan 启动自检恢复上次异常退出的残留标记, 重启即自愈
验证: 新增 10 条回归 (未写分区恢复 ready/部分写入保持 fail-closed/锁
竞争仍复位/心跳过期接管/心跳新鲜不抢占/跨进程孤儿自愈/活跃发布不被打断/
heartbeat 续期与空操作/管道两条失败路径); 后端全量 2922 passed; ruff
告警数与基线持平。
|
2026-10-20 16:14:17 +08:00 |
|
shy3130
|
33c114d736
|
fix(enriched): commit() 发布后复位脏标记, 多分区空提交不再误抛 ownership (#417)
EnrichedPublication.commit() 发布完成后 _publishing 置 False、标记写回
ready payload (不含 publication_id), 但 _changed 未复位。多日期分区写入
复用同一发布对象 (repository._write_daily_partition), 有变化分区提交后
再遇到无变化分区时, _write_partition_locked 的"无害空提交"带着过期脏
标记命中 ownership 校验, 必然抛 "ownership was lost", 整批写入中断。
e3baba6 让 ETF 增量日K用完整本地历史重算前复权 (单次 245+ 日期分区),
必然出现无变化分区, 该旧缺陷自此恒定复现 (盘后管道 index/etf 阶段失败)。
修复: commit() 发布完成后复位 _changed — 待发布内容已全部落盘, 之后任何
写入都会经 _claim_or_verify 重新认领并再次置位, 语义不变; 空提交经由
既有的是否脏守卫自然幂等。
回归测试: 单对象重复 commit 幂等 + 仓储级「有变化分区在前、无变化分区
在后」两用例, 修复前均失败、修复后通过。
|
2026-09-24 17:57:01 +08:00 |
|
shy3130
|
defba2124e
|
fix(enriched): 自愈孤儿 publishing 标记, 步进优化不再误报 publishing
清库半删除等异常会留下 owner 已死但状态仍为 publishing 的 generation
标记, 后续读取直接抛 EnrichedGenerationUnavailableError, 步进优化连锁失败。
- 读取侧仅在「owner 是其他进程且该进程已死」时判孤儿并在独占锁内
自愈 (换新 uuid 重建 ready 标记); 同 pid 无活跃对象时保守不判,
避免暴露清库半删除的数据 (fail-closed)
- 回测引擎改为 data_generation_await 轮询等待 (300s 上限), 遇短暂
publishing 自动重试而非直接失败; worker 错误文案同步为可重试提示
|
2026-09-07 15:25:27 +08:00 |
|
shy3130
|
2bac0e5ff0
|
fix(data): 僵死 enriched 发布标记不再阻塞清空与实时落盘
外部进程(崩掉的脚本/中断的管道)残留 state=publishing 标记且 owner pid
已死时, recover=False 的发布器会永久抛
"another enriched publication is incomplete":
- POST /api/data/clear 因此 500 (用户实测)
- 实时 enriched 落盘被持续挡住, 只能等下一次盘后管道 recover
修复: clear 端点与 repository 三处 enriched 写路径 (日K分区写 + 两处
实时 merge flush) 全部改 recover=True — 死进程残留首次写入即接管自愈;
活进程的发布仍抛 "another publication is active", 写盘竞态保护不变。
测试: 僵死标记+死 pid 下 clear 正常完成且标记回 ready、实时写入接管自愈;
全量 1002 passed。
|
2026-08-23 19:13:03 +08:00 |
|
shy3130
|
7128d80fe6
|
feat(v0.2): 异动监控全链路 (偏离值计算/监控页/系统告警接入) + 发布锁 Windows 存活修复
|
2026-08-20 22:56:11 +08:00 |
|
shy3130
|
4737dfdaf1
|
feat(v0.2): 市场阶段与主线识别 + 因子挖掘全链路 + 数据层完善
- 市场环境: 新增情绪周期6阶段(冰点/启动/主升/高潮/退潮/修复, 连板梯队驱动,
EMA平滑+2日确认+弱档否决, 平均段长9.7天)与概念/行业主线排名(涨停梯队聚合,
可配置宽基/风格标签过滤); 市场环境页重构, regime 透明加列, 与5档state并存
- 挖掘: 因子与策略挖掘全链路(API/worker/进程锁/候选库/前端工作台/文档),
周度调度默认关闭且永不自动发布
- 回测: 财务快照因子(点时口径), 批量回测预计算共享下期收益,
信号路径矩阵列依赖展开修复(consecutive_limit_ups 缺列报错)
- 数据/性能: enriched 生成与预热治理, 重任务限流, 行情/K线缓存复用, 时区修复
- 测试: 后端全量 914 通过; GUI 黑盒验证截图存证 gui-test-screenshots/
|
2026-08-16 23:39:07 +08:00 |
|