Files
ccdi/docs/reports/implementation/2026-03-20-mock-random-logid-fix-record.md

2.0 KiB

Mock 服务随机 logId 实施记录

问题背景

  • 2026-03-20 联调过程中,lsfx-mock-serverlogId 仍使用进程内递增方式分配。
  • 仓库文档与接口预期要求 Mock 返回随机 logId,避免联调时对顺序值形成隐式依赖。

根因分析

  • lsfx-mock-server/services/file_service.py 中,upload_file()fetch_inner_flow() 都直接通过 self.log_counter += 1 生成 logId
  • 现有测试只覆盖了 logId 落在 10000-99999 区间内,没有约束“冲突时需要重试并避让已有记录”。

本次修改

  • lsfx-mock-server/tests/test_file_service.py 先新增红灯测试 test_generate_log_id_should_retry_when_random_value_conflicts
    • 固定随机值第一次命中已存在 logId 时必须重试。
    • 同步把行内流水测试中的旧递增断言改为随机区间断言。
  • lsfx-mock-server/services/file_service.py 新增统一 _generate_log_id()
    • 10000-99999 区间内随机生成。
    • 若命中 file_records 中已存在的 logId,则继续重试直到拿到未占用值。
    • upload_file()fetch_inner_flow() 均切换为调用该方法。

验证结果

  • python3 -m pytest lsfx-mock-server/tests/test_file_service.py -k "fetch_inner_flow_persists_primary_binding_record or generate_log_id_should_retry_when_random_value_conflicts" -v
    • 结果:2 passed
  • python3 -m pytest lsfx-mock-server/tests/test_file_service.py lsfx-mock-server/tests/test_statement_service.py lsfx-mock-server/tests/test_api.py lsfx-mock-server/tests/integration/test_full_workflow.py -v
    • 结果:39 passed, 20 warnings

实施结果

  • Mock 服务的新建上传记录与行内流水记录已改为随机 logId
  • 同一 logId 下的规则命中计划、流水样本与上传状态复用逻辑保持不变。