From c21c3fd3adc7bbbd7018a03e99f058b05bec10b2 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 20 May 2013 16:20:15 +0100 Subject: prserv/cooker: Handle PRService errors cleanly Current if the PR Service fails to start, bitbake carries on regardless or hangs with no error message. This adds an exception and then handles it correctly so the UIs correctly handle the error and exit cleanly. [YOCTO #4010] (Bitbake master rev: 949c01228a977c3b92bfc0802f6c71b40d8e05b3) Signed-off-by: Richard Purdie --- lib/bb/cooker.py | 5 ++++- lib/prserv/serv.py | 9 ++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py index c7c2ca648..2c54209f8 100644 --- a/lib/bb/cooker.py +++ b/lib/bb/cooker.py @@ -1486,7 +1486,10 @@ class BBCooker: # Empty the environment. The environment will be populated as # necessary from the data store. #bb.utils.empty_environment() - prserv.serv.auto_start(self.configuration.data) + try: + prserv.serv.auto_start(self.configuration.data) + except prserv.serv.PRServiceConfigError: + bb.event.fire(CookerExit(), self.configuration.event_data) return def post_serve(self): diff --git a/lib/prserv/serv.py b/lib/prserv/serv.py index 348920053..6132100ee 100644 --- a/lib/prserv/serv.py +++ b/lib/prserv/serv.py @@ -263,6 +263,9 @@ def is_local_special(host, port): else: return False +class PRServiceConfigError(Exception): + pass + def auto_start(d): global singleton @@ -273,14 +276,14 @@ def auto_start(d): if len(host_params) != 2: logger.critical('\n'.join(['PRSERV_HOST: incorrect format', 'Usage: PRSERV_HOST = ":"'])) - return True + raise PRServiceConfigError if is_local_special(host_params[0], int(host_params[1])) and not singleton: import bb.utils cachedir = (d.getVar("PERSISTENT_DIR", True) or d.getVar("CACHE", True)) if not cachedir: logger.critical("Please set the 'PERSISTENT_DIR' or 'CACHE' variable") - sys.exit(1) + raise PRServiceConfigError bb.utils.mkdirhier(cachedir) dbfile = os.path.join(cachedir, "prserv.sqlite3") logfile = os.path.join(cachedir, "prserv.log") @@ -296,7 +299,7 @@ def auto_start(d): return PRServerConnection(host,port).ping() except Exception: logger.critical("PRservice %s:%d not available" % (host, port)) - return False + raise PRServiceConfigError def auto_shutdown(d=None): global singleton -- cgit 1.2.3-korg