Skip to content

feat(mongo): BatchUploader.enqueue 回傳 bool 修 silent drop dedup 污染#139

Open
csp0924 wants to merge 1 commit into
mainfrom
fix/batch-uploader-enqueue-bool-return
Open

feat(mongo): BatchUploader.enqueue 回傳 bool 修 silent drop dedup 污染#139
csp0924 wants to merge 1 commit into
mainfrom
fix/batch-uploader-enqueue-bool-return

Conversation

@csp0924

@csp0924 csp0924 commented May 12, 2026

Copy link
Copy Markdown
Owner

問題

Closed-loop probe 發現:MongoBatchUploader.enqueueBatchQueue.enqueue 的 bool 結果丟掉(回 None)。底層 queue 達 max_queue_size 觸發 popleft 驅逐最舊資料時,DataUploadManager._safe_enqueue 無從感知 silent drop。ON_CHANGE dedup state(rt.last_result)與 legacy save_interval 節流時戳在丟資料當下被 commit,下次同 payload 被去重吞掉 → silent data corruption。

Sandbox 證據(sandbox/data_upload_backpressure_demo.py H1 scenario):2000 筆 enqueue producer 視角 100% 成功,實際只 451 筆落庫、1549 筆靜默丟棄。

改動

BatchUploader.enqueue Protocol 簽名從 -> None 改為 -> bool

  • True = document 安全入隊
  • False = 底層佇列已滿、最舊資料被 popleft 丟棄

更新所有內建實作(MongoBatchUploader / LocalBufferedUploader / NullBatchUploader / InMemoryBatchUploader),DataUploadManager._safe_enqueue 收到 False 視同失敗、不 commit ON_CHANGE / save_interval 狀態並 emit warning log。同步更新 examples/09_custom_database.py (CSVBatchUploader) 與三份 docs(docs/07-Manager/BatchUploader.mddocs/13-Guides/Custom Database Backend.mddocs/13-Guides/No MongoDB Setup.md)。

相容性

技術上 Protocol 回傳型別變更,自訂 BatchUploader 實作需更新簽名(沒有容量上限的後端永遠回 True,會丟資料的後端必須回 False)。Commit type 為 feat 不帶 !、不含 BREAKING CHANGE trailer,release-please 將推 minor bump

驗證

  • 新增 6 個 failing tests(tests/mongo/test_uploader_overflow_signal.py × 3、tests/manager/test_data_upload_overflow.py × 3),confirm pre-fix FAIL → post-fix PASS
  • 全 4857 tests pass、ruff / mypy clean

…E dedup

`MongoBatchUploader.enqueue` 過去把 `BatchQueue.enqueue` 的 bool 結果丟掉
(回 `None`),導致底層 queue 達 `max_queue_size` 觸發 `popleft` 驅逐最舊
資料時,`DataUploadManager._safe_enqueue` 無從感知 silent drop。
ON_CHANGE dedup state(`rt.last_result`)與 legacy `save_interval` 節流
時戳會在丟棄資料的當下被 commit,下次相同 payload 被去重吞掉,產生
silent data corruption。Sandbox closed-loop probe 觀察到 2000 筆 producer
視角 100% 成功的 enqueue 實際只有 451 筆落庫,1549 筆被靜默丟棄。

修復把 `BatchUploader.enqueue` 簽名從 `-> None` 改為 `-> bool`:
- True = document 安全入隊
- False = 底層佇列已滿、最舊資料被 popleft 丟棄

`DataUploadManager._safe_enqueue` 依此判斷是否 commit ON_CHANGE /
save_interval 狀態,False 視同失敗、保持舊狀態以便下次重試。所有內建
實作(`MongoBatchUploader` / `LocalBufferedUploader` /
`NullBatchUploader` / `InMemoryBatchUploader`)已更新。

自訂實作(含 `CSVBatchUploader` 範例與 `Custom Database Backend` 指南中的
InfluxDB / PostgreSQL 範例)需同步更新回傳型別:沒有容量上限的後端永遠
回 True,會丟棄資料的後端必須回 False。
Copilot AI review requested due to automatic review settings May 12, 2026 23:01

Copilot AI 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.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

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.

2 participants