[OJ-55106] Handle NotFoundException for deleted repos in BBS ingestion#458
Merged
Conversation
When a Bitbucket Server repo is deleted between the repo enumeration phase and the commit/PR download phase, api_repo.get() raises NotFoundException and previously crashed the entire run. Now logs a warning and skips the repo, continuing with remaining repos. Also guards repo discovery (get_repos) against the same race condition, and replaces api_repo.get()['name'] calls in error-path logging with the already-fetched repo['name'] to avoid secondary exceptions inside handlers. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
ashleyredzko
approved these changes
May 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



When a Bitbucket Server repo is deleted between the repo enumeration phase and the commit/PR download phase,
api_repo.get()raisesNotFoundExceptionand previously crashed the entire run. Now logs a warning and skips the repo, continuing with remaining repos.Also guards repo discovery (
get_repos) against the same race condition, and replacesapi_repo.get()['name']calls in error-path logging with the already-fetchedrepo['name']to avoid secondary exceptions inside handlers.Root cause: A customer's repo enumeration phase took ~6 hours. A repo was deleted in the window between
project.repos.list()returning it and the commit download phase callingapi_repo.get()on it, crashing the entire git ingestion with an unhandledNotFoundException.Test plan
test_get_repos_skips_deleted_repo— first repo raisesNotFoundExceptionfrom.get(), second repo's data is still returnedtest_get_branch_commits_skips_deleted_repo— same pattern for commit downloadtest_get_pull_requests_skips_deleted_repo— same pattern for PR download