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