Skip to content

fix: 提出ページが404のコンテストは即スキップしてクロールを高速化する#1531

Merged
kenkoooo merged 1 commit into
mainfrom
fix/skip-404-submission-pages
Jun 14, 2026
Merged

fix: 提出ページが404のコンテストは即スキップしてクロールを高速化する#1531
kenkoooo merged 1 commit into
mainfrom
fix/skip-404-submission-pages

Conversation

@kenkoooo

@kenkoooo kenkoooo commented Jun 13, 2026

Copy link
Copy Markdown
Owner

背景 / 原因

issue #1518 / #1520 で「abc308 / abc358 / abc410(CodeQUEEN 予選に流用された回)への 2026-01 以降の提出が反映されない」と報告されている。AWS(ECS + CloudWatch Logs)で本番クローラのログを確認したところ、コンテスト固有の問題ではなく 古い全コンテスト共通の取りこぼしであり、原因は提出クロールの周回が遅すぎることだった。

submissions のクロール (crawler_utils::fetch_submissions) は すべてのエラーを一律に最大10回・指数バックオフ(2s→4s→…→1024s, 合計約34分)でリトライする。提出ページが 404 を返す古い/非公開コンテストに対してもこのリトライが走るため、該当コンテスト1件につき最大約34分を空費していた。

実際のログでは:

  • crawl-new が起動から5時間以上経っても1周目の途中で、404 を返すコンテストのリトライ(attempt 10/10)で延々と待たされていた
  • crawl-all は別要因(巨大コンテストの全ページクロール)で詰まる

その結果、古いコンテストを唯一カバーできる crawl-new / crawl-all が1周しきれず、abc308 等への新規提出が反映されなかった。

なお fetch_problems 側はすでに 404 を CrawlerError::NotFound で即スキップしており、submissions 側だけこの分岐が欠けていた。

変更

  • crawler/src/client.rsfetch_submissions: 404 を CrawlerError::NotFound として返す(fetch_problems と同じ扱い)
  • crawler_utils.rsfetch_submissions(リトライ層): NotFound はリトライせず即スキップ。429(Too Many Requests) や 5xx など他のエラーは従来どおりリトライする

効果

404 コンテストでの最大約34分の浪費がなくなり、crawl-new の1周時間が大幅に短縮される。古いコンテスト(abc308/358/410 含む)への提出も現実的な周期で拾われるようになる。レート制限/一時障害に対するリトライ耐性は維持。

確認

  • cargo build --bin crawl-submissions パス
  • cargo clippy -p crawler --all-targets -- -D warnings / cargo clippy --bin crawl-submissions -- -D warnings パス

(関連) #1518
(関連) #1520

🤖 Generated with Claude Code


注記: 当初 Closes #1518 / #1520 としていたが、調査の結果これらの2コンテスト群(abc308/358/410=CodeQUEEN合同開催回)の未反映は 404ではなく「HTTP 200 だが提出一覧が空で返る(クローラ視点)」 という別原因と判明したため、このPRでは解消しない。本PRは404コンテストでの無駄なリトライ(最大~34分/件)を除去する一般的な高速化として独立して有効。#1518/#1520 は別途対応が必要。

submissions のクロールで404も他のエラーと同様に最大10回・指数
バックオフ(2s→…→1024s, 約34分)でリトライしており、提出ページが
404を返す古い/非公開コンテスト1件ごとに大量の時間を浪費していた。
これにより crawl-new / crawl-all が1周しきれず、abc308/358/410 など
古いコンテストへの提出が反映されない一因となっていた (#1518, #1520)。

fetch_submissions が404を CrawlerError::NotFound として返すようにし
(fetch_problems と同じ扱い)、リトライ層では404を即スキップ。429や
5xx など他のエラーは従来どおりリトライする。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kenkoooo kenkoooo merged commit 08635de into main Jun 14, 2026
2 checks passed
@kenkoooo kenkoooo deleted the fix/skip-404-submission-pages branch June 14, 2026 01:29
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