Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions src/buildstream/_scheduler/queues/queue.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ class Queue:
# Resources this queues' jobs want
resources = [] # type: List[int]
log_to_file = True
session_elements = None

def __init__(self, scheduler, *, imperative=False):

Expand Down Expand Up @@ -256,6 +257,17 @@ def harvest_jobs(self):
def set_required_element_check(self):
self._required_element_check = True

# set_session_elements()
#
# This passes a reference to a set used to keep track of the
# elements enqued. This is used in the first queue to determine
# which elements are actually considered in the current session.
#
# Args:
# session_elements (set): a set to put session elements
def set_session_elements(self, session_elements):
self.session_elements = session_elements

# any_failed_elements()
#
# Returns whether any elements in this queue have failed their jobs
Expand Down Expand Up @@ -381,6 +393,9 @@ def _element_log_path(self, element):
# element (Element): The Element to enqueue
#
def _enqueue_element(self, element):
if self.session_elements is not None:
self.session_elements.add(element)

status = self.status(element)

if status == QueueStatus.SKIP:
Expand Down
8 changes: 5 additions & 3 deletions src/buildstream/_stream.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ def __init__(
# Public members
#
self.targets = [] # Resolved target elements
self.session_elements = [] # List of elements being processed this session
self.session_elements = set() # Set of elements being processed this session
self.total_elements = [] # Total list of elements based on targets
self.queues = [] # Queue objects

Expand Down Expand Up @@ -1802,7 +1802,7 @@ def _load(
#
def _reset(self):
self._scheduler.clear_queues()
self.session_elements = []
self.session_elements = set()
self.total_elements = []

# _add_queue()
Expand All @@ -1817,6 +1817,9 @@ def _add_queue(self, queue, *, track=False):
# First non-track queue
queue.set_required_element_check()

if not self.queues:
queue.set_session_elements(self.session_elements)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is never executed for bst source track, resulting in the frontend indicating 0 session elements.

query_cache marks the CacheQueryQueue (with storage-service) also as track=True. Need to make sure that fixing bst source track won't make the counter wrong in sessions with a CacheQueryQueue.


self.queues.append(queue)

# _enqueue_plan()
Expand All @@ -1830,7 +1833,6 @@ def _add_queue(self, queue, *, track=False):
def _enqueue_plan(self, plan, *, queue=None):
queue = queue or self.queues[0]
queue.enqueue(plan)
self.session_elements += plan
Comment thread
juergbi marked this conversation as resolved.

# _run()
#
Expand Down
Loading