This is an automated email from the ASF dual-hosted git repository. juergbi pushed a commit to branch juerg/build-with-source-push in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit 1410fcf23626011a47c5ed7c408841d42bc9fd69 Author: Jürg Billeter <[email protected]> AuthorDate: Thu Mar 18 09:52:04 2021 +0100 _stream.py: Query sources of cached elements in build pipeline The source cache status of all elements is required if source push is enabled, independent of whether the artifact is already available. Fixes #1456. Fixes: 2003805e ("Move artifact and source cache query trigger to...") --- src/buildstream/_stream.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/buildstream/_stream.py b/src/buildstream/_stream.py index 98ecf3b..8ff60df 100644 --- a/src/buildstream/_stream.py +++ b/src/buildstream/_stream.py @@ -195,9 +195,13 @@ class Stream: # # Args: # elements (list of Element): The elements to check + # sources_of_cached_elements (bool): True to query the source cache for elements with a cached artifact # only_sources (bool): True to only query the source cache # - def query_cache(self, elements, *, only_sources=False): + def query_cache(self, elements, *, sources_of_cached_elements=False, only_sources=False): + # It doesn't make sense to combine these flags + assert not sources_of_cached_elements or not only_sources + with self._context.messenger.timed_activity("Query cache", silent_nested=True): # Enqueue complete build plan as this is required to determine `buildable` status. plan = list(_pipeline.dependencies(elements, _Scope.ALL)) @@ -210,7 +214,7 @@ class Stream: pass elif not only_sources and element._get_cache_key(strength=_KeyStrength.WEAK): element._load_artifact(pull=False) - if not element._can_query_cache() or not element._cached_success(): + if sources_of_cached_elements or not element._can_query_cache() or not element._cached_success(): element._query_source_cache() if not element._pull_pending(): element._load_artifact_done() @@ -385,7 +389,11 @@ class Stream: for element in self.targets: element._set_artifact_files_required(scope=scope) - self.query_cache(elements) + source_push_enabled = self._sourcecache.has_push_remotes() + + # If source push is enabled, the source cache status of all elements + # is required, independent of whether the artifact is already available. + self.query_cache(elements, sources_of_cached_elements=source_push_enabled) # Now construct the queues # @@ -401,7 +409,7 @@ class Stream: if self._artifacts.has_push_remotes(): self._add_queue(ArtifactPushQueue(self._scheduler, skip_uncached=True)) - if self._sourcecache.has_push_remotes(): + if source_push_enabled: self._add_queue(SourcePushQueue(self._scheduler)) # Enqueue elements
