From 179c84dda3ffa878ad5d5eddcccf60d07b78d867 Mon Sep 17 00:00:00 2001 From: Mouad BANI Date: Fri, 17 Apr 2026 13:33:43 +0100 Subject: [PATCH] feat: deprecate stuck statue and auto re-onboard stuck repos Signed-off-by: Mouad BANI --- ...661__dropStuckFlagFromRepositoryProcessing.sql | 0 ...661__dropStuckFlagFromRepositoryProcessing.sql | 1 + .../git_integration/src/crowdgit/database/crud.py | 2 -- .../apps/git_integration/src/crowdgit/enums.py | 2 -- .../apps/git_integration/src/crowdgit/errors.py | 6 ------ .../src/crowdgit/models/repository.py | 5 ----- .../src/crowdgit/worker/repository_worker.py | 15 ++------------- 7 files changed, 3 insertions(+), 28 deletions(-) create mode 100644 backend/src/database/migrations/U1776428661__dropStuckFlagFromRepositoryProcessing.sql create mode 100644 backend/src/database/migrations/V1776428661__dropStuckFlagFromRepositoryProcessing.sql diff --git a/backend/src/database/migrations/U1776428661__dropStuckFlagFromRepositoryProcessing.sql b/backend/src/database/migrations/U1776428661__dropStuckFlagFromRepositoryProcessing.sql new file mode 100644 index 0000000000..e69de29bb2 diff --git a/backend/src/database/migrations/V1776428661__dropStuckFlagFromRepositoryProcessing.sql b/backend/src/database/migrations/V1776428661__dropStuckFlagFromRepositoryProcessing.sql new file mode 100644 index 0000000000..a8dde98a93 --- /dev/null +++ b/backend/src/database/migrations/V1776428661__dropStuckFlagFromRepositoryProcessing.sql @@ -0,0 +1 @@ +ALTER TABLE git."repositoryProcessing" DROP COLUMN IF EXISTS "stuckRequiresReOnboard"; diff --git a/services/apps/git_integration/src/crowdgit/database/crud.py b/services/apps/git_integration/src/crowdgit/database/crud.py index 764475f694..0c48c0d5ac 100644 --- a/services/apps/git_integration/src/crowdgit/database/crud.py +++ b/services/apps/git_integration/src/crowdgit/database/crud.py @@ -31,7 +31,6 @@ rp.branch, rp."maintainerFile", rp."lastMaintainerRunAt", - rp."stuckRequiresReOnboard", rp."reOnboardingCount" """ @@ -166,7 +165,6 @@ async def acquire_recurrent_repo() -> Repository | None: states_to_exclude = ( RepositoryState.PENDING, RepositoryState.PROCESSING, - RepositoryState.STUCK, RepositoryState.PENDING_REONBOARD, RepositoryState.AUTH_REQUIRED, ) diff --git a/services/apps/git_integration/src/crowdgit/enums.py b/services/apps/git_integration/src/crowdgit/enums.py index 87b07f8a1a..e574901834 100644 --- a/services/apps/git_integration/src/crowdgit/enums.py +++ b/services/apps/git_integration/src/crowdgit/enums.py @@ -21,7 +21,6 @@ class ErrorCode(str, Enum): CLEANUP_FAILED = "cleanup-failed" PARENT_REPO_INVALID = "parent-repo-invalid" REONBOARDING_REQUIRED = "reonboarding-required" - STUCK_REPO = "stuck-repo" REPO_AUTH_REQUIRED = "repo-auth-required" RATE_LIMITED = "rate-limited" ACCESS_FORBIDDEN = "access-forbidden" @@ -37,7 +36,6 @@ class RepositoryState(str, Enum): COMPLETED = "completed" FAILED = "failed" REQUIRES_PARENT = "requires_parent" # fork repo without valid parent repo in out system - STUCK = "stuck" # requires manual resolution PENDING_REONBOARD = "pending_reonboard" # re-onboarding deferred until weekend AUTH_REQUIRED = "auth_required" # private repo or repo requiring authentication diff --git a/services/apps/git_integration/src/crowdgit/errors.py b/services/apps/git_integration/src/crowdgit/errors.py index eafce1f9fb..0dd85185c7 100644 --- a/services/apps/git_integration/src/crowdgit/errors.py +++ b/services/apps/git_integration/src/crowdgit/errors.py @@ -116,12 +116,6 @@ class ReOnboardingRequiredError(CrowdGitError): error_code: ErrorCode = ErrorCode.REONBOARDING_REQUIRED -@dataclass -class StuckRepoError(CrowdGitError): - error_message = "Repos stuck in processing state for a long time" - error_code: ErrorCode = ErrorCode.STUCK_REPO - - @dataclass class RepoAuthRequiredError(CrowdGitError): error_message: str = "Repository requires authentication (likely private or deleted)" diff --git a/services/apps/git_integration/src/crowdgit/models/repository.py b/services/apps/git_integration/src/crowdgit/models/repository.py index bbd4c06cfc..7a4c1d5d7e 100644 --- a/services/apps/git_integration/src/crowdgit/models/repository.py +++ b/services/apps/git_integration/src/crowdgit/models/repository.py @@ -41,10 +41,6 @@ class Repository(BaseModel): parent_repo: Repository | None = Field( None, description="The parent repository (in case of fork) object from our database" ) - stuck_requires_re_onboard: bool = Field( - default=False, - description="Indicates if the stuck repository is resolved by a re-onboarding", - ) re_onboarding_count: int = Field( default=0, description="Tracks the number of times this repository has been re-onboarded. Used to identify unreachable commits via activity.attributes.cycle matching pattern onboarding-{reOnboardingCount}", @@ -71,7 +67,6 @@ def from_db(cls, db_data: dict[str, Any]) -> Repository: "maintainerFile": "maintainer_file", "lastMaintainerRunAt": "last_maintainer_run_at", "forkedFrom": "forked_from", - "stuckRequiresReOnboard": "stuck_requires_re_onboard", "reOnboardingCount": "re_onboarding_count", } for db_field, model_field in field_mapping.items(): diff --git a/services/apps/git_integration/src/crowdgit/worker/repository_worker.py b/services/apps/git_integration/src/crowdgit/worker/repository_worker.py index 1caa034d27..d949c58f84 100644 --- a/services/apps/git_integration/src/crowdgit/worker/repository_worker.py +++ b/services/apps/git_integration/src/crowdgit/worker/repository_worker.py @@ -14,7 +14,6 @@ ParentRepoInvalidError, ReOnboardingRequiredError, RepoAuthRequiredError, - StuckRepoError, ) # Import configured loguru logger from crowdgit.logger @@ -117,14 +116,9 @@ async def _ensure_repo_not_stuck(self, repository: Repository): # handling if repo_stuck: logger.warning( - f"Repo {repository.url} is stuck for {processing_duration_hours} hours!" + f"Repo {repository.url} is stuck for {processing_duration_hours} hours — queuing for re-onboarding" ) - if repository.stuck_requires_re_onboard: - logger.warning( - f"Repo {repository.url} is stuck due to force-push or dangling commit. Will be re-onboarded" - ) - raise ReOnboardingRequiredError() - raise StuckRepoError() + raise ReOnboardingRequiredError() async def _process_repositories(self): """ @@ -258,11 +252,6 @@ async def _process_single_repository(self, repository: Repository): logger.info("Incremental processing completed successfully") processing_state = RepositoryState.COMPLETED - except StuckRepoError: - logger.error( - f"Repo {repository.url} is stuck for unkown reason, marking it as stuck until manually resolved!" - ) - processing_state = RepositoryState.STUCK except ReOnboardingRequiredError: logger.info(f"Repo {repository.url} needs re-onboarding, deferring until weekend") processing_state = RepositoryState.PENDING_REONBOARD