Example #1
0
    def add_new_available_task(self, task: Task, job_id: int):
        """
        Adds the task to the Available Tasks Queue and attaches job id to them

        :param task:
        :param job_id:
        :return:
        """
        task.set_job(job_id)
        task.set_message_type(TaskMessageType.TASK_RAW)
        self.available_tasks.put(task)
        logger.log_trace(f'{self.log_prefix}New Available Task {task.task_id}')
Example #2
0
        def get_tasks(job_id: int, num_tasks: int):
            """
            fetch task from the queue
            return this task "formatted" back to slave

            :param job_id: Integer
            :param num_tasks: Integer
            :return Any:
            """
            try:
                conn_id = request.cookies.get('id')
                job_check(job_id)
                tasks: List[Task] = self.task_manager.connect_available_tasks(
                    num_tasks, conn_id)
                pickled_tasks = pickle_dumps(tasks)
                compressed_data = compress(pickled_tasks)
                return create_binary_resp(compressed_data,
                                          f'tasks_job_{self.job.job_id}')

            except NoMoreTasks:
                if self.status_manager.is_job_done():
                    job_finished_task = Task(-1, "", [], None, "", "")
                    job_finished_task.set_message_type(TaskMessageType.JOB_END)
                    pickled_tasks = pickle_dumps([job_finished_task])
                    compressed_data = compress(pickled_tasks)
                    return create_binary_resp(compressed_data,
                                              f'job_{self.job.job_id}_done')

                logger.log_error('Unable to retrieve tasks from manager')
                return Response(status=500)

            except JobNotInitialized:
                return Response(response="Job Not Initialized", status=403)

            except WrongJob:
                return Response(response="Wrong Master", status=403)

            except PicklingError as error:
                logger.log_error(f'Unable to pickle tasks\n{error}')
                return Response(status=500)

            except CompressionException as error:
                logger.log_error(f'Unable to compress pickled tasks\n{error}')
                return Response(status=500)

            except Exception as error:
                logger.log_error(f'{type(error)} {error}')
                return Response(status=501)