You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by ro...@apache.org on 2020/12/29 13:48:23 UTC

[buildstream] 01/02: Adding trace printing

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

root pushed a commit to branch tristan/debugging-build-track-all-1.2
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit bb61746f6aed1c53d451b47f11e5a97e157ccfd5
Author: Tristan Van Berkom <tr...@codethink.co.uk>
AuthorDate: Wed May 8 15:30:42 2019 +0900

    Adding trace printing
---
 buildstream/_scheduler/queues/pullqueue.py | 13 +++++++++++++
 buildstream/_scheduler/queues/queue.py     | 16 +++++++++++++++-
 buildstream/element.py                     |  4 ++++
 3 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/buildstream/_scheduler/queues/pullqueue.py b/buildstream/_scheduler/queues/pullqueue.py
index 333e92b..b3854d7 100644
--- a/buildstream/_scheduler/queues/pullqueue.py
+++ b/buildstream/_scheduler/queues/pullqueue.py
@@ -23,6 +23,7 @@ from . import Queue, QueueStatus
 from ..resources import ResourceType
 from ..jobs import JobStatus
 from ..._exceptions import SkipJob
+from ..._message import MessageType
 
 
 # A queue which pulls element artifacts
@@ -42,14 +43,26 @@ class PullQueue(Queue):
         if not element._is_required():
             # Artifact is not currently required but it may be requested later.
             # Keep it in the queue.
+            self._message(element, MessageType.INFO,
+                          "{} queue holding element, it is not required".format(self.action_name))
+
             return QueueStatus.WAIT
 
         if not element._can_query_cache():
+            self._message(element, MessageType.INFO,
+                          "{} queue holding element, cannot query cache".format(self.action_name),
+                          detail="Assemble scheduled: {}, Strict cache key: {}"
+                          .format(element._Element__assemble_scheduled,
+                                  element._Element__strict_cache_key))
             return QueueStatus.WAIT
 
         if element._pull_pending():
+            self._message(element, MessageType.INFO,
+                          "{} queue element ready, pull is pending".format(self.action_name))
             return QueueStatus.READY
         else:
+            self._message(element, MessageType.INFO,
+                          "{} queue skipping element, pull is not pending".format(self.action_name))
             return QueueStatus.SKIP
 
     def done(self, _, element, result, status):
diff --git a/buildstream/_scheduler/queues/queue.py b/buildstream/_scheduler/queues/queue.py
index ec1e813..9d6a877 100644
--- a/buildstream/_scheduler/queues/queue.py
+++ b/buildstream/_scheduler/queues/queue.py
@@ -144,6 +144,10 @@ class Queue():
         if not elts:
             return
 
+        for e in elts:
+            self._message(e, MessageType.STATUS,
+                          "{} queue enqueue element".format(self.action_name))
+
         # Place skipped elements on the done queue right away.
         #
         # The remaining ready and waiting elements must remain in the
@@ -153,6 +157,10 @@ class Queue():
         skip = [elt for elt in elts if self.status(elt) == QueueStatus.SKIP]
         wait = [elt for elt in elts if elt not in skip]
 
+        for e in skip:
+            self._message(e, MessageType.INFO,
+                          "{} queue skipping at enqueue time".format(self.action_name))
+
         self.skipped_elements.extend(skip)  # Public record of skipped elements
         self._done_queue.extend(skip)       # Elements to be processed
         self._wait_queue.extend(wait)       # Elements eligible to be dequeued
@@ -167,7 +175,10 @@ class Queue():
     #
     def dequeue(self):
         while self._done_queue:
-            yield self._done_queue.popleft()
+            e = self._done_queue.popleft()
+            self._message(e, MessageType.STATUS,
+                          "{} queue dequeue element".format(self.action_name))
+            yield e
 
     # dequeue_ready()
     #
@@ -204,6 +215,9 @@ class Queue():
             elif status == QueueStatus.SKIP:
                 self._done_queue.append(element)
                 self.skipped_elements.append(element)
+
+                self._message(element, MessageType.INFO,
+                              "{} queue reported skip".format(self.action_name))
             else:
                 reserved = self._resources.reserve(self.resources)
                 assert reserved
diff --git a/buildstream/element.py b/buildstream/element.py
index b986757..ba5284c 100644
--- a/buildstream/element.py
+++ b/buildstream/element.py
@@ -1054,6 +1054,10 @@ class Element(Plugin):
         # is not available yet.
         # This special case is required for workspaced elements to prevent
         # them from getting blocked in the pull queue.
+
+        #
+        # XXX I think this special case is flatly wrong
+        #
         if self.__assemble_scheduled:
             return True