Skip to content

补齐 RSS 旧库 guid 迁移,修复 MCP 管理面序列化与版本显示问题#1126

Open
leavrcn wants to merge 1 commit into
sansan0:masterfrom
leavrcn:fix/mcp-rss-guid-migration
Open

补齐 RSS 旧库 guid 迁移,修复 MCP 管理面序列化与版本显示问题#1126
leavrcn wants to merge 1 commit into
sansan0:masterfrom
leavrcn:fix/mcp-rss-guid-migration

Conversation

@leavrcn

@leavrcn leavrcn commented May 17, 2026

Copy link
Copy Markdown

背景

v6.7.0 中,RSS 主链路已经引入 guid 字段与基于 guid 的去重逻辑,但旧的 SQLite RSS 数据库在升级后仍可能出现兼容问题。

实际排查发现,问题不在于 guid 主逻辑缺失,而在于 legacy 数据库的迁移时机不足

  • 新版 rss_schema.sql 已包含依赖 guid 的索引
  • 但旧库若尚未补齐 guid 列,会在 schema 执行阶段直接报错
  • 同时 MCP 管理面还存在两个独立问题:
    1. get_current_config 返回包含编译后正则对象时,无法 JSON 序列化
    2. get_system_status 在版本文件为空或不可用时,未优先回退到包内版本,导致显示 unknown

本 PR 修复内容

1. 修复配置查询结果的 JSON 序列化问题

  • get_current_config 的返回值增加 JSON-safe 清洗
  • re.Pattern 转换为可序列化结构:
    • type
    • pattern
    • flags

2. 修复系统版本显示逻辑

  • get_system_status 优先读取 trendradar.__version__
  • 当包内版本不可用时,再回退到 version 文件
  • 仅在两者都不可用时返回 unknown

3. 补齐 RSS 旧库 guid 兼容迁移

  • 在执行新版 RSS schema 之前,先为 legacy rss_items 表补齐 guid
  • 避免 guid 相关索引在 schema 执行阶段直接失败
  • 对历史数据执行 guid = url 回填
  • 保持迁移幂等,不破坏现有数据

兼容性说明

  • 不改变 v6.7.0 已有的 RSS 主链路设计
  • 不重复引入上游已有的 guid 去重逻辑
  • 仅补足旧库升级时的迁移缺口
  • 对现有数据为原地兼容修复,不是破坏性迁移

测试与验证

Focused tests

.venv/bin/python -m unittest \
  tests.test_config_json_safe \
  tests.test_system_version_resolution \
  tests.test_rss_guid_migration -v

语法校验

.venv/bin/python -m py_compile \
  mcp_server/services/data_service.py \
  trendradar/storage/sqlite_mixin.py \
  tests/test_config_json_safe.py \
  tests/test_system_version_resolution.py \
  tests/test_rss_guid_migration.py

结果

  • 配置查询结果可正常 JSON 序列化
  • get_system_status 不再错误返回 unknown
  • 旧 RSS SQLite 数据库可在 schema 执行前自动补齐 guid
  • 历史数据可完成 guid=url 回填

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant