Skip to content

Commit 1f5b386

Browse files
committed
Change error message shown when experiment is terminated by user
1 parent d2f2ca9 commit 1f5b386

File tree

1 file changed

+32
-14
lines changed

1 file changed

+32
-14
lines changed

src/ert/run_models/base_run_model.py

+32-14
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ def delete_runpath(run_path: str) -> None:
9898
shutil.rmtree(run_path)
9999

100100

101+
class UserCancelled(Exception):
102+
pass
103+
104+
101105
class _LogAggregration(logging.Handler):
102106
def __init__(self, messages: MutableSequence[str]) -> None:
103107
self.messages = messages
@@ -572,10 +576,11 @@ async def run_monitor(
572576
logger.debug(
573577
"observed evaluation cancelled event, exit drainer"
574578
)
575-
# Allow track() to emit an EndEvent.
576-
return False
579+
raise UserCancelled(
580+
"Experiment cancelled by user during evaluation"
581+
)
577582
elif type(event) is EETerminated:
578-
logger.debug("got terminator event")
583+
logger.debug("got terminated event")
579584

580585
if not self._end_queue.empty():
581586
logger.debug("Run model canceled - during evaluation")
@@ -584,7 +589,9 @@ async def run_monitor(
584589
logger.debug(
585590
"Run model canceled - during evaluation - cancel sent"
586591
)
587-
except BaseException as e:
592+
except UserCancelled:
593+
raise
594+
except Exception as e:
588595
logger.exception(f"unexpected error: {e}")
589596
# We really don't know what happened... shut down
590597
# the thread and get out of here. The monitor has
@@ -602,7 +609,8 @@ async def run_ensemble_evaluator_async(
602609
if not self._end_queue.empty():
603610
logger.debug("Run model canceled - pre evaluation")
604611
self._end_queue.get()
605-
return []
612+
raise UserCancelled("Experiment cancelled by user in pre evaluation")
613+
606614
ee_ensemble = self._build_ensemble(run_args, ensemble.experiment_id)
607615
evaluator = EnsembleEvaluator(
608616
ee_ensemble,
@@ -623,8 +631,14 @@ async def run_ensemble_evaluator_async(
623631
if not self._end_queue.empty():
624632
logger.debug("Run model canceled - post evaluation")
625633
self._end_queue.get()
626-
await evaluator_task
627-
return []
634+
try:
635+
await evaluator_task
636+
except Exception as e:
637+
raise Exception(
638+
"Exception occured during user initiatied termination of experiment"
639+
) from e
640+
raise UserCancelled("Experiment cancelled by user in post evaluation")
641+
628642
await evaluator_task
629643
ensemble.refresh_ensemble_state()
630644

@@ -638,10 +652,9 @@ def run_ensemble_evaluator(
638652
ensemble: Ensemble,
639653
ee_config: EvaluatorServerConfig,
640654
) -> list[int]:
641-
successful_realizations = asyncio.run(
655+
return asyncio.run(
642656
self.run_ensemble_evaluator_async(run_args, ensemble, ee_config)
643657
)
644-
return successful_realizations
645658

646659
def _build_ensemble(
647660
self,
@@ -761,11 +774,16 @@ def _evaluate_and_postprocess(
761774
"run_paths": self.run_paths,
762775
},
763776
)
764-
successful_realizations = self.run_ensemble_evaluator(
765-
run_args,
766-
ensemble,
767-
evaluator_server_config,
768-
)
777+
try:
778+
successful_realizations = self.run_ensemble_evaluator(
779+
run_args,
780+
ensemble,
781+
evaluator_server_config,
782+
)
783+
except UserCancelled:
784+
self.active_realizations = [False for _ in self.active_realizations]
785+
raise
786+
769787
starting_realizations = [real.iens for real in run_args if real.active]
770788
failed_realizations = list(
771789
set(starting_realizations) - set(successful_realizations)

0 commit comments

Comments
 (0)