diff options
author | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2019-05-08 15:30:42 +0900 |
---|---|---|
committer | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2019-05-08 15:30:42 +0900 |
commit | bb61746f6aed1c53d451b47f11e5a97e157ccfd5 (patch) | |
tree | 7caf0afdb4ad2c927dcf805250e0eb748f4b123e | |
parent | 879dca35de4c09a3c05f671ba8cca1aeeb958996 (diff) | |
download | buildstream-bb61746f6aed1c53d451b47f11e5a97e157ccfd5.tar.gz |
Adding trace printing
-rw-r--r-- | buildstream/_scheduler/queues/pullqueue.py | 13 | ||||
-rw-r--r-- | buildstream/_scheduler/queues/queue.py | 16 | ||||
-rw-r--r-- | buildstream/element.py | 4 |
3 files changed, 32 insertions, 1 deletions
diff --git a/buildstream/_scheduler/queues/pullqueue.py b/buildstream/_scheduler/queues/pullqueue.py index 333e92b2b..b3854d767 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 ec1e81350..9d6a877a6 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 b98675720..ba5284c98 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 |