diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-12-04 11:27:07 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-12-04 12:12:45 +0000 |
commit | 36e40ed24ff7cc0fdb7fd5230256edae7a3c7ade (patch) | |
tree | d33c37f2137aecdeecce872e79b6e5c7fb28bd7e /bitbake/lib/bb/runqueue.py | |
parent | f271a6773a4fb8cbf26acc3a050618cb81eda481 (diff) | |
download | poky-36e40ed24ff7cc0fdb7fd5230256edae7a3c7ade.tar.gz |
bitbake: runqueue/siggen: Allow handling of equivalent hashes
Based on the hashserv's new ability to accept hash mappings, update runqueue
to use this through a helper function in siggen.
This addresses problems with meta-extsdk-toolchain and its dependency on
gdb-cross which caused errors when building eSDK. See the previous commit
for more details.
(Bitbake rev: 39098b4ba2133f4d9229a0aa4fcf4c3e1291286a)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/runqueue.py')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index bd7f03f981..a869ba527a 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -2283,12 +2283,26 @@ class RunQueueExecute: | |||
2283 | for dep in self.rqdata.runtaskentries[tid].depends: | 2283 | for dep in self.rqdata.runtaskentries[tid].depends: |
2284 | procdep.append(dep) | 2284 | procdep.append(dep) |
2285 | orighash = self.rqdata.runtaskentries[tid].hash | 2285 | orighash = self.rqdata.runtaskentries[tid].hash |
2286 | self.rqdata.runtaskentries[tid].hash = bb.parse.siggen.get_taskhash(tid, procdep, self.rqdata.dataCaches[mc_from_tid(tid)]) | 2286 | newhash = bb.parse.siggen.get_taskhash(tid, procdep, self.rqdata.dataCaches[mc_from_tid(tid)]) |
2287 | origuni = self.rqdata.runtaskentries[tid].unihash | 2287 | origuni = self.rqdata.runtaskentries[tid].unihash |
2288 | self.rqdata.runtaskentries[tid].unihash = bb.parse.siggen.get_unihash(tid) | 2288 | newuni = bb.parse.siggen.get_unihash(tid) |
2289 | logger.debug(1, "Task %s hash changes: %s->%s %s->%s" % (tid, orighash, self.rqdata.runtaskentries[tid].hash, origuni, self.rqdata.runtaskentries[tid].unihash)) | 2289 | # FIXME, need to check it can come from sstate at all for determinism? |
2290 | remapped = False | ||
2291 | if newuni == origuni: | ||
2292 | # Nothing to do, we match, skip code below | ||
2293 | remapped = True | ||
2294 | elif tid in self.scenequeue_covered or tid in self.sq_live: | ||
2295 | # Already ran this setscene task or it running. Report the new taskhash | ||
2296 | remapped = bb.parse.siggen.report_unihash_equiv(tid, newhash, origuni, newuni, self.rqdata.dataCaches) | ||
2297 | logger.info("Already covered setscene for %s so ignoring rehash (remap)" % (tid)) | ||
2298 | |||
2299 | if not remapped: | ||
2300 | logger.debug(1, "Task %s hash changes: %s->%s %s->%s" % (tid, orighash, newhash, origuni, newuni)) | ||
2301 | self.rqdata.runtaskentries[tid].hash = newhash | ||
2302 | self.rqdata.runtaskentries[tid].unihash = newuni | ||
2303 | changed.add(tid) | ||
2304 | |||
2290 | next |= self.rqdata.runtaskentries[tid].revdeps | 2305 | next |= self.rqdata.runtaskentries[tid].revdeps |
2291 | changed.add(tid) | ||
2292 | total.remove(tid) | 2306 | total.remove(tid) |
2293 | next.intersection_update(total) | 2307 | next.intersection_update(total) |
2294 | 2308 | ||
@@ -2307,18 +2321,11 @@ class RunQueueExecute: | |||
2307 | self.pending_migrations.add(tid) | 2321 | self.pending_migrations.add(tid) |
2308 | 2322 | ||
2309 | for tid in self.pending_migrations.copy(): | 2323 | for tid in self.pending_migrations.copy(): |
2310 | if tid in self.runq_running: | 2324 | if tid in self.runq_running or tid in self.sq_live: |
2311 | # Too late, task already running, not much we can do now | 2325 | # Too late, task already running, not much we can do now |
2312 | self.pending_migrations.remove(tid) | 2326 | self.pending_migrations.remove(tid) |
2313 | continue | 2327 | continue |
2314 | 2328 | ||
2315 | if tid in self.scenequeue_covered or tid in self.sq_live: | ||
2316 | # Already ran this setscene task or it running | ||
2317 | # Potentially risky, should we report this hash as a match? | ||
2318 | logger.info("Already covered setscene for %s so ignoring rehash" % (tid)) | ||
2319 | self.pending_migrations.remove(tid) | ||
2320 | continue | ||
2321 | |||
2322 | valid = True | 2329 | valid = True |
2323 | # Check no tasks this covers are running | 2330 | # Check no tasks this covers are running |
2324 | for dep in self.sqdata.sq_covered_tasks[tid]: | 2331 | for dep in self.sqdata.sq_covered_tasks[tid]: |