Skip to content

feat(desktop): releaseNotes CDN 请求加重试逻辑 - #2507

Merged
MagicLizi merged 1 commit into
mainfrom
feat/announcement-fetch-retry
Aug 12, 2026
Merged

feat(desktop): releaseNotes CDN 请求加重试逻辑#2507
MagicLizi merged 1 commit into
mainfrom
feat/announcement-fetch-retry

Conversation

@MagicLizi

Copy link
Copy Markdown
Contributor

这次改了什么

摘要

给 的 CDN 请求加自动重试:网络错误或超时时最多重试 3 次,指数退避 1s → 2s → 4s。HTTP 非 200(如 404)和 JSON 解析错误不重试(属于确定性失败,重试无意义)。

海外用户从国内 CDN 拉取公告容易因跨境网络抖动导致瞬时丢包/超时,目前一次失败即彻底放弃(auto 路径甚至是静默失败),加重试后大幅提升弱网环境下的成功率。

变更类型

  • feat 新功能

范围

  • 关联 Issue / 需求:无
  • 本 PR 包含:
    • releaseNotesService.tsfetchCdnJson 拆为单次尝试 fetchCdnJsonOnce + 带重试的 fetchCdnJson
    • 4 条新增单测:网络错误重试成功、HTTP 404 不重试、全部重试耗尽、超时重试
  • 明确不包含:renderer 侧改动(IPC 接口、缓存策略、UI 交互均不变)
  • 用户可见变化:弱网环境下公告弹窗更不容易静默丢失
  • 是否存在 breaking change:无

UI 变化

不涉及

怎么验证的

自动验证

pnpm --filter desktop exec vitest run src/main/__tests__/releaseNotesService.test.ts
结果:10 tests passed(含 4 条新增重试测试)

pnpm --filter desktop run typecheck
结果:零错误

pnpm test:unit
结果:全部 PASS,无 FAIL

手工验证

不涉及(逻辑变更仅影响 main 进程 CDN 请求行为,IPC 接口与 renderer 交互不变)

未执行的验证

风险

风险分类

  • 无已知风险

影响与回滚

  • 影响范围:仅 releaseNotesService 的 CDN 请求路径(公告/更新通知拉取)
  • 回滚 / 降级方式:revert 此 commit 即可恢复无重试行为

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s
  • UI 改动已在「UI 变化」注明引用的设计规范章节(不涉及 UI 则跳过)
  • 未提交凭证、令牌或授权文件
  • 已补充必要文档
  • 已确认测试结果或说明未执行原因

🤖 Generated with Claude Code

网络错误/超时自动重试(最多 3 次,指数退避 1s/2s/4s),
HTTP 非 200 和 JSON 解析错误不重试(确定性失败)。

修复了海外用户从国内 CDN 拉取公告容易因瞬时丢包/超时
失败的问题。

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Lizi <jiali@magiclizi.com>
@MagicLizi
MagicLizi requested a review from a team as a code owner August 12, 2026 07:00

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c86bae90ba

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread apps/desktop/src/main/releaseNotesService.ts
@greptile-apps

greptile-apps Bot commented Aug 12, 2026

Copy link
Copy Markdown

Greptile Summary

该 PR 为桌面端 release notes CDN 请求增加网络错误和超时重试,并补充相应单元测试。

  • 将单次请求结果区分为成功、可重试失败和不可重试失败
  • 使用 1、2、4 秒指数退避执行最多三次重试
  • HTTP 非 200 和 JSON 解析失败仍立即返回
  • 当前重试时间会直接传播到没有整体时间预算的自动及手动公告流程

Confidence Score: 4/5

合并前应限制重试的整体等待时间,避免公告自动流程和手动入口在 CDN 不可达时长时间无响应。

新重试循环可让一次 CDN 调用持续约 67 秒,而现有自动流程还会串行等待 index 和版本公告,将用户可见结果推迟到约 134 秒。

Files Needing Attention: apps/desktop/src/main/releaseNotesService.ts

Important Files Changed

Filename Overview
apps/desktop/src/main/releaseNotesService.ts 新增结构化单次请求结果和指数退避重试,但缺少整体时间预算,使调用方最坏等待时间显著增长。
apps/desktop/src/main/tests/releaseNotesService.test.ts 覆盖了网络错误重试成功、404 不重试、重试耗尽和超时重试,但未覆盖上层串行调用的总等待时间。

Sequence Diagram

sequenceDiagram
  participant UI as 公告入口
  participant IPC as Electron IPC
  participant Service as releaseNotesService
  participant CDN
  UI->>IPC: 获取 index / 版本公告
  IPC->>Service: fetchCdnJson()
  loop 首次请求 + 最多 3 次重试
    Service->>CDN: net.request(15 秒超时)
    CDN-->>Service: 网络错误或超时
    Service->>Service: 退避 1s / 2s / 4s
  end
  Service-->>IPC: null
  IPC-->>UI: 最晚约 67 秒后返回
Loading
Prompt To Fix All With AI
### Issue 1
apps/desktop/src/main/releaseNotesService.ts:156-162
**重试缺少整体时间预算**

当 CDN 持续不可达或连续四次请求均超时时,单次调用会等待约 67 秒;自动公告流程还会串行获取 index 和版本公告,导致弹窗延迟约 134 秒,而手动公告入口也会超过一分钟没有响应。

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Reviews (1): Last reviewed commit: "feat(desktop): releaseNotes CDN 请求加重试逻辑" | Re-trigger Greptile

Comment thread apps/desktop/src/main/releaseNotesService.ts
@MagicLizi MagicLizi added status:threads-open 还有未 resolve 的评审讨论(review-pr 自动维护,仅展示) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) and removed status:threads-open 还有未 resolve 的评审讨论(review-pr 自动维护,仅展示) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) labels Aug 12, 2026
@MagicLizi
MagicLizi merged commit 8f9c38d into main Aug 12, 2026
18 checks passed
@MagicLizi
MagicLizi deleted the feat/announcement-fetch-retry branch August 12, 2026 08:48

@MagicLizi MagicLizi left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

已合并。releaseNotes CDN 重试逻辑干净利落——MAX_RETRIES=3 + 指数退避,404 不重试的分类也正确。测试覆盖了网络错误重试、超时重试、全部耗尽三种路径。🚀

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