def _update_job_state()

in exec/src/klio_exec/commands/stop.py [0:0]


def _update_job_state(job, req_state=None, retries=None):
    if retries is None:
        retries = 0

    _req_state = JOB_STATE_MAP.get(req_state, JOB_STATE_MAP["cancel"])
    if job.get("requestedState") is not _req_state:
        job["requestedState"] = _req_state

    request = (
        _client.projects()
        .locations()
        .jobs()
        .update(
            jobId=job["id"],
            projectId=job["projectId"],
            location=job["location"],
            body=job,
        )
    )

    try:
        request.execute()

    except Exception as e:
        # generic catch if 4xx error - probably shouldn't retry
        if getattr(e, "resp", None):
            if e.resp.status < 500:
                msg = "Failed to {} job '{}': {}".format(
                    req_state, job["name"], e
                )
                logging.error(msg)
                raise SystemExit(1)

        if retries > 2:
            msg = "Max retries reached: could not {} job '{}': {}".format(
                req_state, job["name"], e
            )
            logging.error(msg)
            raise SystemExit(1)

        logging.info(
            "Failed to {} job '{}'. Trying again after 30s...".format(
                req_state, job["name"]
            )
        )
        retries += 1
        time.sleep(30)
        _update_job_state(job, req_state, retries)