summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Maw <jonathan.maw@codethink.co.uk>2019-06-10 14:22:23 +0100
committerbst-marge-bot <marge-bot@buildstream.build>2019-07-09 16:54:37 +0000
commitbd0dada6189934b6f11fdc0cadfe9f36b67af077 (patch)
tree931ff6429b94efe0c71e206e7f632b5c6a7e6e10
parent1e11d190562e641d10e2e435a8411c802eaedc81 (diff)
downloadbuildstream-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.py4
-rw-r--r--src/buildstream/_frontend/widget.py8
-rw-r--r--src/buildstream/_scheduler/queues/queue.py18
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))