This is an automated email from the ASF dual-hosted git repository.

akitouni pushed a commit to branch abderrahim/dynamic-session-elements
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit bc72d348e4f3e0598de8f7d6fed2289193ac8266
Author: Abderrahim Kitouni <[email protected]>
AuthorDate: Fri Feb 6 12:10:15 2026 +0000

    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 @@ class Queue:
     #          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 @@ class Queue:
     #    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 @@ class Stream:
         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 @@ class Stream:
     def _enqueue_plan(self, plan, *, queue=None):
         queue = queue or self.queues[0]
         queue.enqueue(plan)
-        self.session_elements += plan
 
     # _run()
     #

Reply via email to