summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2019-05-08 15:30:42 +0900
committerTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2019-05-08 15:30:42 +0900
commitbb61746f6aed1c53d451b47f11e5a97e157ccfd5 (patch)
tree7caf0afdb4ad2c927dcf805250e0eb748f4b123e
parent879dca35de4c09a3c05f671ba8cca1aeeb958996 (diff)
downloadbuildstream-bb61746f6aed1c53d451b47f11e5a97e157ccfd5.tar.gz
Adding trace printing
-rw-r--r--buildstream/_scheduler/queues/pullqueue.py13
-rw-r--r--buildstream/_scheduler/queues/queue.py16
-rw-r--r--buildstream/element.py4
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