def start_task(cls, job, task):
     schedule_logger(task.f_job_id).info(
         "try to start task {} {} on {} {}".format(task.f_task_id,
                                                   task.f_task_version,
                                                   task.f_role,
                                                   task.f_party_id))
     apply_status = ResourceManager.apply_for_task_resource(
         task_info=task.to_human_model_dict(only_primary_with=["status"]))
     if not apply_status:
         return SchedulingStatusCode.NO_RESOURCE
     task.f_status = TaskStatus.RUNNING
     update_status = JobSaver.update_task_status(
         task_info=task.to_human_model_dict(only_primary_with=["status"]))
     if not update_status:
         # Another scheduler scheduling the task
         schedule_logger(task.f_job_id).info(
             "task {} {} start on another scheduler".format(
                 task.f_task_id, task.f_task_version))
         # Rollback
         task.f_status = TaskStatus.WAITING
         ResourceManager.return_task_resource(
             task_info=task.to_human_model_dict(
                 only_primary_with=["status"]))
         return SchedulingStatusCode.PASS
     schedule_logger(task.f_job_id).info("start task {} {} on {} {}".format(
         task.f_task_id, task.f_task_version, task.f_role, task.f_party_id))
     FederatedScheduler.sync_task_status(job=job, task=task)
     status_code, response = FederatedScheduler.start_task(job=job,
                                                           task=task)
     if status_code == FederatedSchedulingStatusCode.SUCCESS:
         return SchedulingStatusCode.SUCCESS
     else:
         return SchedulingStatusCode.FAILED
Exemple #2
0
 def update_task_status(cls, task_info):
     update_status = JobSaver.update_task_status(task_info=task_info)
     if update_status and EndStatus.contains(task_info.get("status")):
         ResourceManager.return_task_resource(task_info=task_info)
         cls.clean_task(job_id=task_info["job_id"],
                        task_id=task_info["task_id"],
                        task_version=task_info["task_version"],
                        role=task_info["role"],
                        party_id=task_info["party_id"],
                        content_type=TaskCleanResourceType.TABLE)
     cls.report_task_to_initiator(task_info=task_info)
     return update_status
Exemple #3
0
 def collect_task_of_all_party(cls, job, initiator_task, set_status=None):
     tasks_on_all_party = JobSaver.query_task(
         task_id=initiator_task.f_task_id,
         task_version=initiator_task.f_task_version)
     tasks_status_on_all = set(
         [task.f_status for task in tasks_on_all_party])
     if not len(tasks_status_on_all
                ) > 1 and not TaskStatus.RUNNING in tasks_status_on_all:
         return
     status, federated_response = FederatedScheduler.collect_task(
         job=job, task=initiator_task)
     if status != FederatedSchedulingStatusCode.SUCCESS:
         schedule_logger(job_id=job.f_job_id).warning(
             f"collect task {initiator_task.f_task_id} {initiator_task.f_task_version} on {initiator_task.f_role} {initiator_task.f_party_id} failed"
         )
     for _role in federated_response.keys():
         for _party_id, party_response in federated_response[_role].items():
             if party_response["retcode"] == RetCode.SUCCESS:
                 JobSaver.update_task_status(
                     task_info=party_response["data"])
                 JobSaver.update_task(task_info=party_response["data"])
             elif party_response[
                     "retcode"] == RetCode.FEDERATED_ERROR and set_status:
                 tmp_task_info = {
                     "job_id": initiator_task.f_job_id,
                     "task_id": initiator_task.f_task_id,
                     "task_version": initiator_task.f_task_version,
                     "role": _role,
                     "party_id": _party_id,
                     "party_status": TaskStatus.RUNNING
                 }
                 JobSaver.update_task_status(task_info=tmp_task_info)
                 tmp_task_info["party_status"] = set_status
                 JobSaver.update_task_status(task_info=tmp_task_info)