diff options
author | Jonathan Maw <jonathan.maw@codethink.co.uk> | 2019-06-10 14:22:23 +0100 |
---|---|---|
committer | bst-marge-bot <marge-bot@buildstream.build> | 2019-07-09 16:54:37 +0000 |
commit | bd0dada6189934b6f11fdc0cadfe9f36b67af077 (patch) | |
tree | 931ff6429b94efe0c71e206e7f632b5c6a7e6e10 | |
parent | 1e11d190562e641d10e2e435a8411c802eaedc81 (diff) | |
download | buildstream-bd0dada6189934b6f11fdc0cadfe9f36b67af077.tar.gz |
Queue: Make queues store counts of the number of skipped/processed elements
We only seen to generate the list so we can get its length, so it is
more efficient to only store a count of skipped/processed elements.
failed_elements needs to remain a list for the moment, as it's used to
retry a failed element job.
-rw-r--r-- | src/buildstream/_frontend/status.py | 4 | ||||
-rw-r--r-- | src/buildstream/_frontend/widget.py | 8 | ||||
-rw-r--r-- | src/buildstream/_scheduler/queues/queue.py | 18 |
3 files changed, 15 insertions, 15 deletions
diff --git a/src/buildstream/_frontend/status.py b/src/buildstream/_frontend/status.py index 91f47221a..8a3de75f3 100644 --- a/src/buildstream/_frontend/status.py +++ b/src/buildstream/_frontend/status.py @@ -429,8 +429,8 @@ class _StatusHeader(): # Private Methods # ################################################### def _render_queue(self, queue): - processed = str(len(queue.processed_elements)) - skipped = str(len(queue.skipped_elements)) + processed = str(queue.processed_elements_count) + skipped = str(queue.skipped_elements_count) failed = str(len(queue.failed_elements)) size = 5 # Space for the formatting '[', ':', ' ', ' ' and ']' diff --git a/src/buildstream/_frontend/widget.py b/src/buildstream/_frontend/widget.py index dce63e14f..20ea80d0f 100644 --- a/src/buildstream/_frontend/widget.py +++ b/src/buildstream/_frontend/widget.py @@ -583,13 +583,13 @@ class LogLine(Widget): skipped_maxlen = 1 failed_maxlen = 1 for queue in stream.queues: - processed_maxlen = max(len(str(len(queue.processed_elements))), processed_maxlen) - skipped_maxlen = max(len(str(len(queue.skipped_elements))), skipped_maxlen) + processed_maxlen = max(len(str(queue.processed_elements_count)), processed_maxlen) + skipped_maxlen = max(len(str(queue.skipped_elements_count)), skipped_maxlen) failed_maxlen = max(len(str(len(queue.failed_elements))), failed_maxlen) for queue in stream.queues: - processed = str(len(queue.processed_elements)) - skipped = str(len(queue.skipped_elements)) + processed = str(queue.processed_elements_count) + skipped = str(queue.skipped_elements_count) failed = str(len(queue.failed_elements)) processed_align = ' ' * (processed_maxlen - len(processed)) diff --git a/src/buildstream/_scheduler/queues/queue.py b/src/buildstream/_scheduler/queues/queue.py index 49a5381c1..adc1cd467 100644 --- a/src/buildstream/_scheduler/queues/queue.py +++ b/src/buildstream/_scheduler/queues/queue.py @@ -65,9 +65,9 @@ class Queue(): # # Public members # - self.failed_elements = [] # List of failed elements, for the frontend - self.processed_elements = [] # List of processed elements, for the frontend - self.skipped_elements = [] # List of skipped elements, for the frontend + self.failed_elements = [] # List of failed elements, for the frontend + self.processed_elements_count = 0 # Number of processed elements, for the frontend + self.skipped_elements_count = 0 # Number of skipped elements, for the frontend # # Private members @@ -320,10 +320,10 @@ class Queue(): self._done_queue.append(element) # These lists are for bookkeeping purposes for the UI and logging. - if status is JobStatus.SKIPPED or job.get_terminated(): - self.skipped_elements.append(element) - elif status is JobStatus.OK: - self.processed_elements.append(element) + if status == JobStatus.SKIPPED or job.get_terminated(): + self.skipped_elements_count += 1 + elif status == JobStatus.OK: + self.processed_elements_count += 1 else: self.failed_elements.append(element) @@ -357,8 +357,8 @@ class Queue(): status = self.status(element) if status == QueueStatus.SKIP: # Place skipped elements into the done queue immediately - self.skipped_elements.append(element) # Public record of skipped elements - self._done_queue.append(element) # Elements to proceed to the next queue + self.skipped_elements_count += 1 # Public record of skipped elements + self._done_queue.append(element) # Elements to proceed to the next queue elif status == QueueStatus.READY: # Push elements which are ready to be processed immediately into the queue heapq.heappush(self._ready_queue, (element._depth, element)) |