Skip to content

crawl: リポジトリ不在時のエラーハンドリング改善 #275

@coji

Description

@coji

背景

特定組織の定期 crawl が毎時間失敗していた。原因は削除済みリポジトリが登録に残っていたこと。

GitHub GraphQL API が repository: null を返すが、現在のコードでは適切に処理できていない。

問題点

1. paginateGraphQLrepository: null とページング空結果を区別できない

extractConnection が null を返す場合、現在はページサイズ縮小ループに入る。しかし repository 自体が null の場合はページサイズを変えても解決しないため、無駄にリトライした後 min page size でエラーになる。

  • 該当箇所: batch/github/fetcher.ts L806-824

2. 1リポの失敗で crawl ジョブ全体が止まる

per-repo の for ループ内で throw すると残りのリポが処理されない。

  • 該当箇所: app/services/jobs/crawl.server.ts L69 の for ループ

3. エラーメッセージにリポ名が含まれない

pullrequestList(): empty response at min page size 10 (cursor: null) だけでは、どのリポで失敗したか特定できない。

改善案

  • extractConnection の戻り値で connection 自体が null(リポ不在)と nodes が null(空ページ)を区別し、リポ不在は即座に明確なエラーメッセージで throw する
  • crawl の per-repo ループでエラーをキャッチし、失敗リポをスキップして他のリポの処理を継続する(失敗情報は output に含める)
  • エラーメッセージに owner/repo を含める

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions