summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarius Makovsky <traveltissues@protonmail.com>2019-11-07 12:24:06 +0000
committerDarius Makovsky <traveltissues@protonmail.com>2019-11-07 12:42:49 +0000
commit66c7a0523f7e229b8119cda8124e063fa3d0a409 (patch)
tree39472439e3cfaad3649009b9e042f9f7cf783746
parentb629133448cff7d6632b59b795054836edb062c2 (diff)
downloadbuildstream-traveltissues/remove-tracking-scheduled.tar.gz
WIP Remove element.__tracking_scheduledtraveltissues/remove-tracking-scheduled
-rw-r--r--src/buildstream/_stream.py12
-rw-r--r--src/buildstream/element.py29
2 files changed, 19 insertions, 22 deletions
diff --git a/src/buildstream/_stream.py b/src/buildstream/_stream.py
index e89d22b03..a7bf693fe 100644
--- a/src/buildstream/_stream.py
+++ b/src/buildstream/_stream.py
@@ -379,7 +379,17 @@ class Stream():
# FIXME: this can be refactored after element._update_state is simplified/removed
elements = [element for element in elements if element._schedule_tracking()]
- self._pipeline.resolve_elements(elements)
+ with self._pipeline._context.messenger.simple_task("Resolving cached state", silent_nested=True) as task:
+ if task:
+ task.set_maximum_progress(self._pipeline._project.loader.loaded)
+
+ for element in self._pipeline.dependencies(elements, Scope.ALL):
+ if not element._resolved_initial_state:
+ element._resolved_initial_state = True
+ element._update_ready_for_runtime_and_cached()
+
+ if task:
+ task.add_current_progress()
self._scheduler.clear_queues()
track_queue = TrackQueue(self._scheduler)
diff --git a/src/buildstream/element.py b/src/buildstream/element.py
index e35192d84..764dfe1bc 100644
--- a/src/buildstream/element.py
+++ b/src/buildstream/element.py
@@ -264,7 +264,6 @@ class Element(Plugin):
self.__consistency = Consistency.INCONSISTENT # Cached overall consistency state
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.__pull_done = False # Whether pull was attempted
self.__cached_successfully = None # If the Element is known to be successfully cached
self.__source_cached = None # If the sources are known to be successfully cached
@@ -1331,32 +1330,24 @@ class Element(Plugin):
# and reinterrogation of element state after tracking of elements
# succeeds.
#
- # This method should return the value of `__tracking_scheduled` to callers
- # that the element was marked for tracking.
- #
- # If `__tracking_scheduled` is not already determined then set it to `True`
- # if at least one source advertises that it can be tracked.
+ # This method should return a boolean indicating whether the element can
+ # be tracked. This is `True` if at least one source advertises that it can
+ # be tracked and `False` otherwise.
#
# Returns:
- # (bool): value of the `__tracking_scheduled` attribute
+ # (bool): if any source is trackable
#
def _schedule_tracking(self) -> bool:
- # if the tracking schedule is already determined then this can be skipped
- if self.__tracking_scheduled is None:
- # Tracking does not make sense in cases where no sources can be tracked.
- if any(source.is_trackable() for source in self.__sources):
- self.__tracking_scheduled = True
- return self.__tracking_scheduled
+ if any(source.is_trackable() for source in self.__sources):
+ return True
+ return False
# _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
-
+ # FIXME: avoid unnecessary work here
self._update_state()
# _track():
@@ -2392,10 +2383,6 @@ class Element(Plugin):
#
def __update_source_state(self):
- # Cannot resolve source state until tracked
- if self.__tracking_scheduled:
- return
-
self.__consistency = Consistency.CACHED
workspace = self._get_workspace()