def _update_job_state()

in cli/src/klio_cli/commands/job/stop.py [0:0]


    def _update_job_state(self, 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 = (
            self._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)
            self._update_job_state(job, req_state, retries)