Example #1
0
def cancel_job(beam_job_run_model: beam_job_models.BeamJobRunModel) -> None:
    """Refreshs the state of the given BeamJobRunModel.

    Args:
        beam_job_run_model: BeamJobRunModel. The model to update.

    Raises:
        ValueError. The given model has no job ID.
    """
    job_id = beam_job_run_model.dataflow_job_id
    if job_id is None:
        raise ValueError('dataflow_job_id must not be None')

    try:
        dataflow.JobsV1Beta3Client().update_job(
            dataflow.UpdateJobRequest(
                job_id=job_id,
                project_id=feconf.OPPIA_PROJECT_ID,
                location=feconf.GOOGLE_APP_ENGINE_REGION,
                job=dataflow.Job(
                    requested_state=dataflow.JobState.JOB_STATE_CANCELLED)))
    except Exception:
        logging.exception('Failed to cancel job_id="%s"!' % job_id)
    else:
        beam_job_run_model.latest_job_state = (
            beam_job_models.BeamJobState.CANCELLING.value)
        beam_job_run_model.update_timestamps()
Example #2
0
    def setUp(self) -> None:
        super().setUp()

        self.run_model = beam_job_services.create_beam_job_run_model(
            'WorkingJob', dataflow_job_id='123')

        self.dataflow_job = dataflow.Job(
            id='123',
            project_id=feconf.OPPIA_PROJECT_ID,
            location=feconf.GOOGLE_APP_ENGINE_REGION,
            current_state=dataflow.JobState.JOB_STATE_CANCELLING,
            current_state_time=datetime.datetime.utcnow())

        self.dataflow_client_mock = mock.Mock()
        self.dataflow_client_mock.update_job.return_value = self.dataflow_job

        self.exit_stack = contextlib.ExitStack()
        self.exit_stack.enter_context(self.swap_to_always_return(
            dataflow, 'JobsV1Beta3Client', value=self.dataflow_client_mock))