diff options
Diffstat (limited to 'buildstream')
-rw-r--r-- | buildstream/_scheduler/trackqueue.py | 2 | ||||
-rw-r--r-- | buildstream/element.py | 24 | ||||
-rw-r--r-- | buildstream/source.py | 16 |
3 files changed, 21 insertions, 21 deletions
diff --git a/buildstream/_scheduler/trackqueue.py b/buildstream/_scheduler/trackqueue.py index c3ee7cf7d..5832e4602 100644 --- a/buildstream/_scheduler/trackqueue.py +++ b/buildstream/_scheduler/trackqueue.py @@ -68,7 +68,7 @@ class TrackQueue(Queue): source.warn("Failed to update project file", detail="{}".format(e)) - element._update_state() + element._tracking_done() # We'll appear as a skipped element if tracking resulted in no change return changed diff --git a/buildstream/element.py b/buildstream/element.py index 0f68bf606..867937115 100644 --- a/buildstream/element.py +++ b/buildstream/element.py @@ -156,6 +156,8 @@ class Element(Plugin): self.__remotely_strong_cached = None # Whether we have a remotely cached artifact self.__assemble_scheduled = False # Element is scheduled to be assembled self.__assemble_done = False # Element is assembled + self.__tracking_scheduled = False # Sources are scheduled to be tracked + self.__tracking_done = False # Sources have been tracked self.__pull_failed = False # Whether pull was attempted but failed self.__log_path = None # Path to dedicated log file or None self.__splits = None @@ -830,8 +832,18 @@ class Element(Plugin): # succeeds. # def _schedule_tracking(self): - for source in self.__sources: - source._schedule_tracking() + self.__tracking_scheduled = True + self._update_state() + + # _tracking_done(): + # + # This is called in the main process after the element has been tracked + # + def _tracking_done(self): + assert self.__tracking_scheduled + + self.__tracking_scheduled = False + self.__tracking_done = True self._update_state() @@ -852,7 +864,7 @@ class Element(Plugin): # _assemble_done(): # # This is called in the main process after the element has been assembled - # in both the main process and in a subprocess. + # and in the a subprocess after assembly completes. # # This will result in updating the element state. # @@ -1611,6 +1623,10 @@ class Element(Plugin): # def __update_source_state(self): + # Cannot resolve source state until tracked + if self.__tracking_scheduled: + return + # Determine overall consistency of the element consistency = Consistency.CACHED for source in self.__sources: @@ -1644,7 +1660,7 @@ class Element(Plugin): self.__update_source_state() if self._get_consistency() == Consistency.INCONSISTENT: - # Tracking is still pending + # Tracking may still be pending return if any([not source._stable() for source in self.__sources]): diff --git a/buildstream/source.py b/buildstream/source.py index 9d5449fbc..286db5707 100644 --- a/buildstream/source.py +++ b/buildstream/source.py @@ -88,7 +88,6 @@ class Source(Plugin): self.__element_index = meta.element_index # The index of the source in the owning element's source list self.__directory = meta.directory # Staging relative directory self.__consistency = Consistency.INCONSISTENT # Cached consistency state - self.__tracking = False # Source is scheduled to be tracked self.__assemble_scheduled = False # Source is scheduled to be assembled self.__workspace = None # Directory of the currently active workspace @@ -311,8 +310,6 @@ class Source(Plugin): # This must be called whenever the state of a source may have changed. # def _update_state(self): - if self.__tracking: - return if self.__consistency < Consistency.CACHED: @@ -326,17 +323,6 @@ class Source(Plugin): def _get_consistency(self): return self.__consistency - # Mark a source as scheduled to be tracked - # - # This is used across the pipeline in sessions where the - # source in question are going to be tracked. This is important - # as it will prevent depending elements from producing cache - # keys until the source is RESOLVED and also prevent depending - # elements from being assembled until the source is CACHED. - # - def _schedule_tracking(self): - self.__tracking = True - # _schedule_assemble(): # # This is called in the main process before the element is assembled @@ -443,8 +429,6 @@ class Source(Plugin): # the ref, regardless of whether the original has changed. self.set_ref(ref, node) - self.__tracking = False - return changed # _load_ref(): |