Skip to contentSkip to conversation

bitbake: runqueue/cooker: catch hashvalidate error

PATCH In review Robert Yang 1 participant 3 messages Apr 10, 2015 – Jul 1, 2015

lore
Share & tools
lore
#0 lore raw

cover bitbake: runqueue/cooker: catch hashvalidate error

*** BLURB HERE ***
The following changes since commit 6ebeae9b2011050c318a764e980bc47e51cc2d74:

tiff: remove extra dev and dbg from PACKAGES (2015-04-10 01:24:01 -0700)

are available in the git repository at:

git://git.pokylinux.org/poky-contrib rbt/hx
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=rbt/hx

Hongxu Jia (1):
bitbake: runqueue/cooker: catch hashvalidate error in
RunQueueExecuteScenequeue

 bitbake/lib/bb/cooker.py   |    4 ++--
 bitbake/lib/bb/runqueue.py |   14 ++++++++------
 2 files changed, 10 insertions(+), 8 deletions(-)
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH 1/1 bitbake: runqueue/cooker: catch hashvalidate error in RunQueueExecuteScenequeue

From: Hongxu Jia <[email protected]>

We need to catch the failure of self.rq.hashvalidate which invoked in RunQueueExecuteScenequeue, and exit in a normal build. So we raise bb.BBHandledException for this specific error.

Tweak execute_runqueue's exception process order. So the build will exit peacefully while the above failure occurs.

---
 bitbake/lib/bb/cooker.py   |    4 ++--
 bitbake/lib/bb/runqueue.py |   14 ++++++++------
 2 files changed, 10 insertions(+), 8 deletions(-)
bitbake/lib/bb/cooker.py +2 -2
index 9c101f2..6762239 100644
@@ -1298,7 +1298,7 @@ class BBCooker:
             except runqueue.TaskFailure as exc:
                 failures += len(exc.args)
                 retval = False
-            except SystemExit as exc:
+            except (SystemExit, bb.BBHandledException) as exc:
                 self.command.finishAsyncCommand()
                 return False
 
@@ -1331,7 +1331,7 @@ class BBCooker:
             except runqueue.TaskFailure as exc:
                 failures += len(exc.args)
                 retval = False
-            except SystemExit as exc:
+            except (SystemExit, bb.BBHandledException) as exc:
                 self.command.finishAsyncCommand()
                 return False
 
bitbake/lib/bb/runqueue.py +8 -6
index b1fe6b8..cd63ba7 100644
@@ -1094,10 +1094,9 @@ class RunQueue:
             return self._execute_runqueue()
         except bb.runqueue.TaskFailure:
             raise
-        except SystemExit:
-            raise
-        except:
-            logger.error("An uncaught exception occured in runqueue, please see the failure below:")
+        except BaseException as e:
+            if not isinstance(e, (SystemExit, bb.BBHandledException)):
+                logger.error("An uncaught exception occured in runqueue, please see the failure below:")
             try:
                 self.teardown_workers()
             except:
@@ -1821,7 +1820,11 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
                 sq_task.append(task)
             call = self.rq.hashvalidate + "(sq_fn, sq_task, sq_hash, sq_hashfn, d)"
             locs = { "sq_fn" : sq_fn, "sq_task" : sq_taskname, "sq_hash" : sq_hash, "sq_hashfn" : sq_hashfn, "d" : self.cooker.expanded_data }
-            valid = bb.utils.better_eval(call, locs)
+            try:
+                valid = bb.utils.better_eval(call, locs)
+            except Exception as e:
+                logger.error("Hash validation failed in RunQueueExecuteScenequeue %s" % str(e))
+                raise bb.BBHandledException()
 
             valid_new = stamppresent
             for v in valid:
@@ -2007,7 +2010,6 @@ class TaskFailure(Exception):
     def __init__(self, x):
         self.args = x
 
-
 class runQueueExitWait(bb.event.Event):
     """
     Event when waiting for task processes to exit
Signature · 1 line
1.7.9.5
#2 lore raw
In reply to Robert Yang

Hi RP,

I rebased the code and put on:

git://git.pokylinux.org/poky-contrib rbt/hx

Do you have any comments, please ?

Author: Hongxu Jia <[email protected]>
Date:   Wed Aug 27 11:32:35 2014 +0800

bitbake: runqueue/cooker: catch hashvalidate error in RunQueueExecuteScenequeue

We need to catch the failure of self.rq.hashvalidate which invoked in RunQueueExecuteScenequeue, and exit in a normal build. So we raise bb.BBHandledException for this specific error.

Tweak execute_runqueue's exception process order. So the build will exit peacefully while the above failure occurs.

(LOCAL REV: NOT UPSTREAM) -- Sent to bitbake-devel on 20140827

bitbake/lib/bb/cooker.py +2 -2
index f31bca6..304cd27 100644
@@ -1298,7 +1298,7 @@ class BBCooker:
             except runqueue.TaskFailure as exc:
                 failures += len(exc.args)
                 retval = False
-            except SystemExit as exc:
+            except (SystemExit, bb.BBHandledException) as exc:
                 self.command.finishAsyncCommand()
                 return False
 
@@ -1331,7 +1331,7 @@ class BBCooker:
             except runqueue.TaskFailure as exc:
                 failures += len(exc.args)
                 retval = False
-            except SystemExit as exc:
+            except (SystemExit, bb.BBHandledException) as exc:
                 self.command.finishAsyncCommand()
                 return False
 
bitbake/lib/bb/runqueue.py +3 -2
index 17a55d3..bd9f3b5 100644
@@ -1103,8 +1103,9 @@ class RunQueue:
                 pass
             self.state = runQueueComplete
             raise
-        except:
-            logger.error("An uncaught exception occured in runqueue, please see the failure below:")
+        except BaseException as e:
+            if not isinstance(e, (SystemExit, bb.BBHandledException)):
+                logger.error("An uncaught exception occured in runqueue, please see the failure below:")
             try:
                 self.teardown_workers()
             except:
@@ -1841,7 +1842,11 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
                 sq_task.append(task)
             call = self.rq.hashvalidate + "(sq_fn, sq_task, sq_hash, 

sq_hashfn, d)"

             locs = { "sq_fn" : sq_fn, "sq_task" : sq_taskname, "sq_hash" : 

sq_hash, "sq_hashfn" : sq_hashfn, "d" : self.cooker.expanded_data }
- valid = bb.utils.better_eval(call, locs)
+ try:
+ valid = bb.utils.better_eval(call, locs)
+ except Exception as e:
+ logger.error("Hash validation failed in RunQueueExecuteScenequeue %s" % str(e))
+ raise bb.BBHandledException()

valid_new = stamppresent
for v in valid:
@@ -2027,7 +2032,6 @@ class TaskFailure(Exception):
def __init__(self, x):
self.args = x

-
class runQueueExitWait(bb.event.Event):
"""
Event when waiting for task processes to exit

// Robert

Quoted 18 lines · Robert Yang

*** BLURB HERE ***
The following changes since commit 6ebeae9b2011050c318a764e980bc47e51cc2d74:

tiff: remove extra dev and dbg from PACKAGES (2015-04-10 01:24:01 -0700)

are available in the git repository at:

git://git.pokylinux.org/poky-contrib rbt/hx
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=rbt/hx

Hongxu Jia (1):
bitbake: runqueue/cooker: catch hashvalidate error in
RunQueueExecuteScenequeue

  bitbake/lib/bb/cooker.py   |    4 ++--
  bitbake/lib/bb/runqueue.py |   14 ++++++++------
  2 files changed, 10 insertions(+), 8 deletions(-)