示例#1
0
    async def work(self) -> None:
        """
        Start the worker. The worker will poll zeebe for jobs of each task in a different thread.

        Raises:
            ActivateJobsRequestInvalidError: If one of the worker's task has invalid types
            ZeebeBackPressureError: If Zeebe is currently in back pressure (too many requests)
            ZeebeGatewayUnavailableError: If the Zeebe gateway is unavailable
            ZeebeInternalError: If Zeebe experiences an internal error
            UnkownGrpcStatusCodeError: If Zeebe returns an unexpected status code

        """
        self._job_executors, self._job_pollers = [], []

        for task in self.tasks:
            jobs_queue: asyncio.Queue = asyncio.Queue()
            task_state = TaskState()

            poller = JobPoller(
                self.zeebe_adapter,
                task,
                jobs_queue,
                self.name,
                self.request_timeout,
                task_state,
                self.poll_retry_delay,
            )
            executor = JobExecutor(task, jobs_queue, task_state)
            self._job_pollers.append(poller)
            self._job_executors.append(executor)

        coroutines = [poller.poll() for poller in self._job_pollers] + [
            executor.execute() for executor in self._job_executors
        ]

        self._work_task = asyncio.gather(*coroutines)

        try:
            await self._work_task
        except asyncio.CancelledError:
            logger.info("Zeebe worker was stopped")
            return
示例#2
0
def task_state():
    return TaskState()
示例#3
0
def test_add_already_activated_job_does_not_raise_an_error(
        task_state: TaskState, job_from_task: Job):
    task_state.add(job_from_task)
    task_state.add(job_from_task)
示例#4
0
def test_remove_non_existing_job_dont_withdraw_from_active_jobs(
        task_state: TaskState, job_from_task: Job):
    task_state.remove(job_from_task)
    assert task_state.count_active() == 0
示例#5
0
def test_add_then_remove_results_in_0_active(task_state: TaskState,
                                             job_from_task: Job):
    task_state.add(job_from_task)
    task_state.remove(job_from_task)
    assert task_state.count_active() == 0
示例#6
0
def test_add_counts_as_active(task_state: TaskState, job_from_task):
    task_state.add(job_from_task)
    assert task_state.count_active() == 1
示例#7
0
def test_new_task_state_has_0_active_jobs(task_state: TaskState):
    assert task_state.count_active() == 0
示例#8
0
def task_state() -> TaskState:
    return TaskState()