From bc72d348e4f3e0598de8f7d6fed2289193ac8266 Mon Sep 17 00:00:00 2001 From: Abderrahim Kitouni Date: Fri, 6 Feb 2026 12:10:15 +0000 Subject: [PATCH] Correctly track session elements in dynamic build plan When using a dynamic build plan, all elements are passed to the queue to be enqueued, but are only actually enqueued when they become required. This moves the tracking of session elements to the first queue rather than just take everything that we pass to the queue (which would be all elements). This is only used in the UI AFAICT, and doesn't actually affect the build. --- src/buildstream/_scheduler/queues/queue.py | 13 +++++++++++++ src/buildstream/_stream.py | 3 +-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/buildstream/_scheduler/queues/queue.py b/src/buildstream/_scheduler/queues/queue.py index badb5399d..b60625828 100644 --- a/src/buildstream/_scheduler/queues/queue.py +++ b/src/buildstream/_scheduler/queues/queue.py @@ -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): @@ -172,6 +173,15 @@ def register_pending_element(self, element): # Scheduler / Pipeline facing APIs # ##################################################### + # set_session_elements() + # + # Track elements enqueued + # + # Args: + # session_elements (list): a list to put session elements + def set_session_elements(self, session_elements): + self.session_elements = session_elements + # enqueue() # # Enqueues some elements @@ -381,6 +391,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.append(element) + status = self.status(element) if status == QueueStatus.SKIP: diff --git a/src/buildstream/_stream.py b/src/buildstream/_stream.py index a475bdb41..748f32ca8 100644 --- a/src/buildstream/_stream.py +++ b/src/buildstream/_stream.py @@ -1814,7 +1814,7 @@ def _add_queue(self, queue, *, track=False): if not track and not self.queues: # First non-track queue queue.set_required_element_check() - + queue.set_session_elements(self.session_elements) self.queues.append(queue) # _enqueue_plan() @@ -1828,7 +1828,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 # _run() #