def api_runCancel(): data = _parse_data_input() jid = simulation_db.job_id(data) if feature_config.cfg.runner_daemon: jhash = template_common.report_parameters_hash(data) run_dir = simulation_db.simulation_run_dir(data) runner_client.cancel_report_job(run_dir, jhash) # Always true from the client's perspective return http_reply.gen_json({'state': 'canceled'}) else: # TODO(robnagler) need to have a way of listing jobs # Don't bother with cache_hit check. We don't have any way of canceling # if the parameters don't match so for now, always kill. #TODO(robnagler) mutex required if runner.job_is_processing(jid): run_dir = simulation_db.simulation_run_dir(data) # Write first, since results are write once, and we want to # indicate the cancel instead of the termination error that # will happen as a result of the kill. simulation_db.write_result({'state': 'canceled'}, run_dir=run_dir) runner.job_kill(jid) # TODO(robnagler) should really be inside the template (t.cancel_simulation()?) # the last frame file may not be finished, remove it t = sirepo.template.import_module(data) if hasattr(t, 'remove_last_frame'): t.remove_last_frame(run_dir) # Always true from the client's perspective return http_reply.gen_json({'state': 'canceled'})
def api_runCancel(): jid = None try: req = http_request.parse_post(id=True, model=True, check_sim_exists=True) jid = req.sim_data.parse_jid(req.req_data) # TODO(robnagler) need to have a way of listing jobs # Don't bother with cache_hit check. We don't have any way of canceling # if the parameters don't match so for now, always kill. #TODO(robnagler) mutex required if runner.job_is_processing(jid): run_dir = simulation_db.simulation_run_dir(req.req_data) # Write first, since results are write once, and we want to # indicate the cancel instead of the termination error that # will happen as a result of the kill. try: simulation_db.write_result({'state': 'canceled'}, run_dir=run_dir) except Exception as e: if not pykern.pkio.exception_is_not_found(e): raise # else: run_dir may have been deleted runner.job_kill(jid) # TODO(robnagler) should really be inside the template (t.cancel_simulation()?) # the last frame file may not be finished, remove it t = sirepo.template.import_module(req.req_data) if hasattr(t, 'remove_last_frame'): t.remove_last_frame(run_dir) except Exception as e: pkdlog('ignoring exception={} jid={} stack={}', e, jid, pkdexc()) # Always true from the client's perspective return http_reply.gen_json({'state': 'canceled'})