diff options
author | Kevin Tian <kevin.tian@intel.com> | 2010-12-14 19:21:24 +0800 |
---|---|---|
committer | Richard Purdie <rpurdie@linux.intel.com> | 2010-12-14 22:40:16 +0000 |
commit | bb783afd4daa3f57fb26e2bb86f5bc9cbeb11df0 (patch) | |
tree | cb3dd729acf0c7eb8ee37b2d7c8cda6403b92ca9 /bitbake/lib/bb/runqueue.py | |
parent | 5fadc9b8be944ab7a61ef5eb33f92f69237d2d93 (diff) | |
download | poky-bb783afd4daa3f57fb26e2bb86f5bc9cbeb11df0.tar.gz |
runqueue.py: use correct task ID when checking validity of setscene tasks
sstate hash validation is done at initialization of RunQueueExecuteScenequeue.
However the index of 'valid' list returned from the validation doesn't
correspond to setscene task ID. It's just an intermediate namespace between
runqueue and sstate hash func. Use it as setscene task ID fully mess the flow.
Previously this doesn't cause trouble because all setscene tasks are passed. Commit
58396a5d24c62710fd0a9f3780d84ac8a95d8e7c add 'noexec' concept to setscene
tasks which grabs some tasks out of the list and thus trigger this problem
Without this fix there're ~50 recipes (gzip-native, glib, ...) rebuilt weirdly
with a minimal build, even though existing sstate packages could accelerate them.
there's another typo using wrong task ID in a debug message which further hide
this issue
Signed-off-by: Kevin Tian <kevin.tian@intel.com>
Diffstat (limited to 'bitbake/lib/bb/runqueue.py')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index e26aa4e075..d605b310ff 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -1358,6 +1358,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute): | |||
1358 | sq_hash = [] | 1358 | sq_hash = [] |
1359 | sq_hashfn = [] | 1359 | sq_hashfn = [] |
1360 | sq_fn = [] | 1360 | sq_fn = [] |
1361 | sq_taskname = [] | ||
1361 | sq_task = [] | 1362 | sq_task = [] |
1362 | noexec = [] | 1363 | noexec = [] |
1363 | for task in range(len(self.sq_revdeps)): | 1364 | for task in range(len(self.sq_revdeps)): |
@@ -1372,14 +1373,19 @@ class RunQueueExecuteScenequeue(RunQueueExecute): | |||
1372 | sq_fn.append(fn) | 1373 | sq_fn.append(fn) |
1373 | sq_hashfn.append(self.rqdata.dataCache.hashfn[fn]) | 1374 | sq_hashfn.append(self.rqdata.dataCache.hashfn[fn]) |
1374 | sq_hash.append(self.rqdata.runq_hash[realtask]) | 1375 | sq_hash.append(self.rqdata.runq_hash[realtask]) |
1375 | sq_task.append(taskname) | 1376 | sq_taskname.append(taskname) |
1376 | 1377 | sq_task.append(task) | |
1377 | call = self.rq.hashvalidate + "(sq_fn, sq_task, sq_hash, sq_hashfn, d)" | 1378 | call = self.rq.hashvalidate + "(sq_fn, sq_task, sq_hash, sq_hashfn, d)" |
1378 | locs = { "sq_fn" : sq_fn, "sq_task" : sq_task, "sq_hash" : sq_hash, "sq_hashfn" : sq_hashfn, "d" : self.cooker.configuration.data } | 1379 | locs = { "sq_fn" : sq_fn, "sq_task" : sq_taskname, "sq_hash" : sq_hash, "sq_hashfn" : sq_hashfn, "d" : self.cooker.configuration.data } |
1379 | valid = bb.utils.better_eval(call, locs) | 1380 | valid = bb.utils.better_eval(call, locs) |
1381 | |||
1382 | valid_new = [] | ||
1383 | for v in valid: | ||
1384 | valid_new.append(sq_task[v]) | ||
1385 | |||
1380 | for task in range(len(self.sq_revdeps)): | 1386 | for task in range(len(self.sq_revdeps)): |
1381 | if task not in valid and task not in noexec: | 1387 | if task not in valid_new and task not in noexec: |
1382 | bb.msg.debug(2, bb.msg.domain.RunQueue, "No package found so skipping setscene task %s" % (self.rqdata.get_user_idstring(task))) | 1388 | bb.msg.debug(2, bb.msg.domain.RunQueue, "No package found so skipping setscene task %s" % (self.rqdata.get_user_idstring(self.rqdata.runq_setscene[task]))) |
1383 | self.task_failoutright(task) | 1389 | self.task_failoutright(task) |
1384 | 1390 | ||
1385 | #print(str(valid)) | 1391 | #print(str(valid)) |