This is an automated email from the ASF dual-hosted git repository. not-in-ldap pushed a commit to branch tpollard/subrebase in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit f2867b9da62708ac74abc1d973c9983e679323e6 Author: Tom Pollard <[email protected]> AuthorDate: Fri Sep 27 14:51:53 2019 +0100 Add len of session/total elements members to Stream --- src/buildstream/_frontend/status.py | 4 ++-- src/buildstream/_frontend/widget.py | 4 ++-- src/buildstream/_scheduler/scheduler.py | 5 ++++- src/buildstream/_stream.py | 12 +++++++++++- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/buildstream/_frontend/status.py b/src/buildstream/_frontend/status.py index a3f0d8a..d3132fe 100644 --- a/src/buildstream/_frontend/status.py +++ b/src/buildstream/_frontend/status.py @@ -357,8 +357,8 @@ class _StatusHeader: # # ========= 00:00:00 project-name (143/387) ========= # - session = str(len(self._stream.session_elements)) - total = str(len(self._stream.total_elements)) + session = self._stream.len_session_elements + total = self._stream.len_total_elements size = 0 text = "" diff --git a/src/buildstream/_frontend/widget.py b/src/buildstream/_frontend/widget.py index 63fbfbb..7c846bc 100644 --- a/src/buildstream/_frontend/widget.py +++ b/src/buildstream/_frontend/widget.py @@ -542,8 +542,8 @@ class LogLine(Widget): text += self.content_profile.fmt("Pipeline Summary\n", bold=True) values = OrderedDict() - values["Total"] = self.content_profile.fmt(str(len(stream.total_elements))) - values["Session"] = self.content_profile.fmt(str(len(stream.session_elements))) + values["Total"] = self.content_profile.fmt(stream.len_total_elements) + values["Session"] = self.content_profile.fmt(stream.len_session_elements) processed_maxlen = 1 skipped_maxlen = 1 diff --git a/src/buildstream/_scheduler/scheduler.py b/src/buildstream/_scheduler/scheduler.py index 29d66e7..f974553 100644 --- a/src/buildstream/_scheduler/scheduler.py +++ b/src/buildstream/_scheduler/scheduler.py @@ -71,6 +71,7 @@ class NotificationType(FastEnum): EXCEPTION = "exception" START = "start" TASK_GROUPS = "task_groups" + ELEMENT_TOTALS = "element_totals" # Notification() @@ -94,7 +95,8 @@ class Notification: message=None, task_error=None, exception=None, - task_groups=None + task_groups=None, + element_totals=None ): self.notification_type = notification_type self.full_name = full_name @@ -106,6 +108,7 @@ class Notification: self.task_error = task_error # Tuple of domain & reason self.exception = exception self.task_groups = task_groups + self.element_totals = element_totals # Scheduler() diff --git a/src/buildstream/_stream.py b/src/buildstream/_stream.py index 67c12be..44a1797 100644 --- a/src/buildstream/_stream.py +++ b/src/buildstream/_stream.py @@ -91,6 +91,8 @@ class Stream: self.session_elements = [] # List of elements being processed this session self.total_elements = [] # Total list of elements based on targets self.queues = [] # Queue objects + self.len_session_elements = None + self.len_total_elements = None # # Private members @@ -101,7 +103,6 @@ class Stream: self._project = None self._pipeline = None self._state = State(session_start) # Owned by Stream, used by Core to set state - # self._notification_pipe_front, self._notification_pipe_back = mp.Pipe() self._subprocess = None self._starttime = session_start # Synchronised with Scheduler's relative start time @@ -1430,6 +1431,13 @@ class Stream: else: self._session_start_callback() + # Also send through the session & total elements list lengths for status rendering + element_totals = str(len(self.session_elements)), str(len(self.total_elements)) + if self._notify_front: + self._notify_front.put(Notification(NotificationType.ELEMENT_TOTALS, element_totals=element_totals)) + else: + self.len_session_elements, self.len_total_elements = element_totals + status = self._scheduler.run(self.queues, self._context.get_cascache().get_casd_process_manager()) if status == SchedStatus.ERROR: @@ -1728,6 +1736,8 @@ class Stream: raise notification.exception.re_raise() elif notification.notification_type == NotificationType.START: self._session_start_callback() + elif notification.notification_type == NotificationType.ELEMENT_TOTALS: + self.len_session_elements, self.len_total_elements = notification.element_totals else: raise StreamError("Unrecognised notification type received")
