From 71e9b19b1fca5f345af4b2912df13d0beac6c880 Mon Sep 17 00:00:00 2001 From: Joseph Coffland Date: Tue, 27 Nov 2018 17:16:04 -0800 Subject: [PATCH] Catch all preplanner process exceptions --- src/py/bbctrl/Preplanner.py | 59 +++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/src/py/bbctrl/Preplanner.py b/src/py/bbctrl/Preplanner.py index 7b8d6e8..ff481c4 100644 --- a/src/py/bbctrl/Preplanner.py +++ b/src/py/bbctrl/Preplanner.py @@ -39,7 +39,7 @@ from tornado import gen import bbctrl -log = logging.getLogger('Preplaner') +log = logging.getLogger('Preplanner') def hash_dump(o): @@ -177,44 +177,45 @@ class Preplanner(object): def _exec_plan(self, filename, state, config): - hid = plan_hash(filename, config) - plan_path = 'plans/' + filename + '.' + hid + '.gz' + try: + hid = plan_hash(filename, config) + plan_path = 'plans/' + filename + '.' + hid + '.gz' - if not os.path.exists(plan_path): - self._clean_plans(filename) # Clean up old plans + if not os.path.exists(plan_path): + self._clean_plans(filename) # Clean up old plans - path = os.path.abspath('upload/' + filename) - with tempfile.TemporaryDirectory() as tmpdir: - cmd = ( - '/usr/bin/env', 'python3', - bbctrl.get_resource('plan.py'), - path, json.dumps(state), json.dumps(config), - '--max-time=%s' % self.max_plan_time, - '--max-loop=%s' % self.max_loop_time - ) + path = os.path.abspath('upload/' + filename) + with tempfile.TemporaryDirectory() as tmpdir: + cmd = ( + '/usr/bin/env', 'python3', + bbctrl.get_resource('plan.py'), + path, json.dumps(state), json.dumps(config), + '--max-time=%s' % self.max_plan_time, + '--max-loop=%s' % self.max_loop_time + ) - log.info('Running: %s', cmd) + log.info('Running: %s', cmd) - with subprocess.Popen(cmd, stdout = subprocess.PIPE, - stderr = subprocess.PIPE, - cwd = tmpdir) as proc: + with subprocess.Popen(cmd, stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + cwd = tmpdir) as proc: - for line in proc.stdout: - if not self._progress(filename, float(line)): - proc.terminate() - return # Cancelled + for line in proc.stdout: + if not self._progress(filename, float(line)): + proc.terminate() + return # Cancelled - out, errs = proc.communicate() + out, errs = proc.communicate() - if not self._progress(filename, 1): return # Cancelled + if not self._progress(filename, 1): return # Cancelled - if proc.returncode: - log.error('Plan failed: ' + errs) - return # Failed + if proc.returncode: + log.error('Plan failed: ' + errs) + return # Failed - os.rename(tmpdir + '/plan.json.gz', plan_path) + os.rename(tmpdir + '/plan.json.gz', plan_path) - try: with open(plan_path, 'rb') as f: return f.read() + except Exception as e: log.error(e) -- 2.27.0