diff --git a/apps/worker/tasks/test_results_finisher.py b/apps/worker/tasks/test_results_finisher.py index 47c8a50127..5c6024d951 100644 --- a/apps/worker/tasks/test_results_finisher.py +++ b/apps/worker/tasks/test_results_finisher.py @@ -10,6 +10,7 @@ from services.lock_manager import LockManager, LockRetry, LockType from services.test_analytics.ta_finish_upload import ta_finish_upload from shared.celery_config import test_results_finisher_task_name +from shared.django_apps.upload_breadcrumbs.models import Errors, Milestones from shared.yaml import UserYaml from tasks.base import BaseCodecovTask from tasks.notify import notify_task_name @@ -35,6 +36,17 @@ def run_impl( } log.info("Starting test results finisher task", extra=self.extra_dict) + bc_kwargs = { + "commit_sha": commitid, + "repo_id": repoid, + "task_name": self.name, + "parent_task_id": self.request.parent_id, + } + + self._call_upload_breadcrumb_task( + milestone=Milestones.NOTIFICATIONS_TRIGGERED, **bc_kwargs + ) + lock_manager = LockManager( repoid=repoid, commitid=commitid, @@ -43,6 +55,10 @@ def run_impl( blocking_timeout=None, ) + self._call_upload_breadcrumb_task( + milestone=Milestones.LOCK_ACQUIRING, **bc_kwargs + ) + try: # this needs to be the coverage notification lock # since both tests post/edit the same comment @@ -51,6 +67,9 @@ def run_impl( max_retries=5, retry_num=self.attempts, ): + self._call_upload_breadcrumb_task( + milestone=Milestones.LOCK_ACQUIRED, **bc_kwargs + ) finisher_result = self.process_impl_within_lock( db_session=db_session, repoid=repoid, @@ -58,6 +77,10 @@ def run_impl( commit_yaml=UserYaml.from_dict(commit_yaml), **kwargs, ) + self._call_upload_breadcrumb_task( + milestone=Milestones.LOCK_RELEASED, **bc_kwargs + ) + if finisher_result["queue_notify"]: self.app.tasks[notify_task_name].apply_async( args=None, @@ -68,9 +91,16 @@ def run_impl( }, ) + self._call_upload_breadcrumb_task( + milestone=Milestones.NOTIFICATIONS_SENT, **bc_kwargs + ) + return finisher_result except LockRetry as retry: + self._call_upload_breadcrumb_task( + error=Errors.INTERNAL_LOCK_ERROR, **bc_kwargs + ) if retry.max_retries_exceeded: log.error( "Not retrying lock acquisition - max retries exceeded", diff --git a/apps/worker/tasks/test_results_processor.py b/apps/worker/tasks/test_results_processor.py index 3ab8210eaa..d65aa82998 100644 --- a/apps/worker/tasks/test_results_processor.py +++ b/apps/worker/tasks/test_results_processor.py @@ -6,6 +6,7 @@ from services.processing.types import UploadArguments from services.test_analytics.ta_processor import ta_processor from shared.celery_config import test_results_processor_task_name +from shared.django_apps.upload_breadcrumbs.models import Errors, Milestones from tasks.base import BaseCodecovTask log = logging.getLogger(__name__) @@ -25,14 +26,41 @@ def run_impl( arguments_list: list[UploadArguments], **kwargs, ) -> bool: - for argument in arguments_list: - ta_processor( - repoid=repoid, - commitid=commitid, - commit_yaml=commit_yaml, - argument=argument, - update_state=True, + upload_ids = [arg["upload_id"] for arg in arguments_list if "upload_id" in arg] + + bc_kwargs = { + "commit_sha": commitid, + "repo_id": repoid, + "upload_ids": upload_ids, + "task_name": self.name, + "parent_task_id": self.request.parent_id, + } + + self._call_upload_breadcrumb_task( + milestone=Milestones.PROCESSING_UPLOAD, **bc_kwargs + ) + + try: + for argument in arguments_list: + ta_processor( + repoid=repoid, + commitid=commitid, + commit_yaml=commit_yaml, + argument=argument, + update_state=True, + ) + except Exception: + self._call_upload_breadcrumb_task( + error=Errors.UNKNOWN, + error_text="Unhandled exception during test results processing", + **bc_kwargs, ) + raise + + self._call_upload_breadcrumb_task( + milestone=Milestones.UPLOAD_COMPLETE, **bc_kwargs + ) + return True