forked from M-Labs/artiq
worker: gracefully handle compile errors (fixes #179).
This commit is contained in:
parent
5d89acbe82
commit
c6ccc87f54
|
@ -8,6 +8,7 @@ from artiq.tools import file_import
|
||||||
from artiq.master.worker_db import DeviceManager, DatasetManager, get_hdf5_output
|
from artiq.master.worker_db import DeviceManager, DatasetManager, get_hdf5_output
|
||||||
from artiq.language.environment import is_experiment
|
from artiq.language.environment import is_experiment
|
||||||
from artiq.language.core import set_watchdog_factory, TerminationRequested
|
from artiq.language.core import set_watchdog_factory, TerminationRequested
|
||||||
|
from artiq.coredevice.core import CompileError
|
||||||
from artiq import __version__ as artiq_version
|
from artiq import __version__ as artiq_version
|
||||||
|
|
||||||
|
|
||||||
|
@ -109,7 +110,7 @@ class Scheduler:
|
||||||
|
|
||||||
|
|
||||||
def get_exp(file, class_name):
|
def get_exp(file, class_name):
|
||||||
module = file_import(file)
|
module = file_import(file, prefix="artiq_worker_")
|
||||||
if class_name is None:
|
if class_name is None:
|
||||||
exps = [v for k, v in module.__dict__.items()
|
exps = [v for k, v in module.__dict__.items()
|
||||||
if is_experiment(v)]
|
if is_experiment(v)]
|
||||||
|
@ -173,6 +174,7 @@ def main():
|
||||||
expid = None
|
expid = None
|
||||||
exp = None
|
exp = None
|
||||||
exp_inst = None
|
exp_inst = None
|
||||||
|
repository_path = None
|
||||||
|
|
||||||
device_mgr = DeviceManager(ParentDeviceDB,
|
device_mgr = DeviceManager(ParentDeviceDB,
|
||||||
virtual_devices={"scheduler": Scheduler()})
|
virtual_devices={"scheduler": Scheduler()})
|
||||||
|
@ -188,10 +190,11 @@ def main():
|
||||||
expid = obj["expid"]
|
expid = obj["expid"]
|
||||||
if obj["wd"] is not None:
|
if obj["wd"] is not None:
|
||||||
# Using repository
|
# Using repository
|
||||||
expf = os.path.join(obj["wd"], expid["file"])
|
experiment_file = os.path.join(obj["wd"], expid["file"])
|
||||||
|
repository_path = obj["wd"]
|
||||||
else:
|
else:
|
||||||
expf = expid["file"]
|
experiment_file = expid["file"]
|
||||||
exp = get_exp(expf, expid["class_name"])
|
exp = get_exp(experiment_file, expid["class_name"])
|
||||||
device_mgr.virtual_devices["scheduler"].set_run_info(
|
device_mgr.virtual_devices["scheduler"].set_run_info(
|
||||||
rid, obj["pipeline_name"], expid, obj["priority"])
|
rid, obj["pipeline_name"], expid, obj["priority"])
|
||||||
exp_inst = exp(device_mgr, dataset_mgr,
|
exp_inst = exp(device_mgr, dataset_mgr,
|
||||||
|
@ -221,6 +224,11 @@ def main():
|
||||||
put_object({"action": "completed"})
|
put_object({"action": "completed"})
|
||||||
elif action == "terminate":
|
elif action == "terminate":
|
||||||
break
|
break
|
||||||
|
except CompileError as exc:
|
||||||
|
message = "Cannot compile {}\n".format(experiment_file) + exc.render_string()
|
||||||
|
if repository_path is not None:
|
||||||
|
message = message.replace(repository_path, "<repository>")
|
||||||
|
logging.error(message)
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
short_exc_info = type(exc).__name__
|
short_exc_info = type(exc).__name__
|
||||||
exc_str = str(exc)
|
exc_str = str(exc)
|
||||||
|
|
Loading…
Reference in New Issue