summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Westphahl <simon.westphahl@bmw.de>2022-09-16 13:00:40 +0200
committerSimon Westphahl <simon.westphahl@bmw.de>2022-09-19 11:25:49 +0200
commit937e25432fa19eff4c2728133568a6831dd7927e (patch)
tree995e73656b0dec4133ab7fb91c9b380bbf46e198
parentf1e3d67608e6b1f8850e6b0e8e5f28cfd3c73409 (diff)
downloadzuul-937e25432fa19eff4c2728133568a6831dd7927e.tar.gz
Trace node request phase
Since we are mainly interested in the time taken until the request is failed or fulfilled we won't create a span for full the lifetime of the node request. Change-Id: Ia8d9aaaac3ab4a4791eace2024c1ecb1b9c7a6bd
-rw-r--r--zuul/manager/__init__.py7
-rw-r--r--zuul/model.py5
-rw-r--r--zuul/nodepool.py5
-rw-r--r--zuul/zk/nodepool.py3
4 files changed, 17 insertions, 3 deletions
diff --git a/zuul/manager/__init__.py b/zuul/manager/__init__.py
index cd9b2381d..cc7735728 100644
--- a/zuul/manager/__init__.py
+++ b/zuul/manager/__init__.py
@@ -879,8 +879,11 @@ class PipelineManager(metaclass=ABCMeta):
relative_priority = item.getNodePriority()
else:
relative_priority = 0
- for job in jobs:
- self._makeNodepoolRequest(log, build_set, job, relative_priority)
+ parent_span = tracing.restoreSpan(build_set.span_info)
+ with trace.use_span(parent_span):
+ for job in jobs:
+ self._makeNodepoolRequest(
+ log, build_set, job, relative_priority)
return True
def _makeNodepoolRequest(self, log, build_set, job, relative_priority,
diff --git a/zuul/model.py b/zuul/model.py
index 5abb7fc5a..c0d5e4e0c 100644
--- a/zuul/model.py
+++ b/zuul/model.py
@@ -1512,7 +1512,7 @@ class NodeRequest(object):
def __init__(self, requestor, build_set_uuid, tenant_name, pipeline_name,
job_name, labels, provider, relative_priority,
- event_id=None):
+ event_id=None, span_info=None):
self.requestor = requestor
self.build_set_uuid = build_set_uuid
self.tenant_name = tenant_name
@@ -1530,6 +1530,7 @@ class NodeRequest(object):
self.id = None
self._zk_data = {} # Data that we read back from ZK
self.event_id = event_id
+ self.span_info = span_info
# Zuul internal flags (not stored in ZK so they are not
# overwritten).
self.failed = False
@@ -1580,6 +1581,7 @@ class NodeRequest(object):
"tenant_name": self.tenant_name,
"pipeline_name": self.pipeline_name,
"job_name": self.job_name,
+ "span_info": self.span_info,
}
d.setdefault('node_types', self.labels)
d.setdefault('requestor', self.requestor)
@@ -1628,6 +1630,7 @@ class NodeRequest(object):
labels=data["node_types"],
provider=data["provider"],
relative_priority=data.get("relative_priority", 0),
+ span_info=requestor_data.get("span_info"),
)
request.updateFromDict(data)
diff --git a/zuul/nodepool.py b/zuul/nodepool.py
index 61b0417c8..1118fe0c2 100644
--- a/zuul/nodepool.py
+++ b/zuul/nodepool.py
@@ -16,6 +16,7 @@ import time
from collections import defaultdict
from zuul import model
+from zuul.lib import tracing
from zuul.lib.logutil import get_annotated_logger
from zuul.zk.event_queues import (
PipelineResultEventQueue,
@@ -100,6 +101,10 @@ class Nodepool(object):
continue
if (request.state in {model.STATE_FULFILLED,
model.STATE_FAILED}):
+ tracing.endSavedSpan(request.span_info, attributes={
+ "request_id": request.id,
+ "state": request.state,
+ })
self._sendNodesProvisionedEvent(request)
# Now resume normal event processing.
self.stop_watcher_event.wait()
diff --git a/zuul/zk/nodepool.py b/zuul/zk/nodepool.py
index 1be4dc2b5..6675ff3be 100644
--- a/zuul/zk/nodepool.py
+++ b/zuul/zk/nodepool.py
@@ -23,6 +23,7 @@ from kazoo.recipe.cache import TreeCache, TreeEvent
from kazoo.recipe.lock import Lock
import zuul.model
+from zuul.lib import tracing
from zuul.lib.jsonutil import json_dumps
from zuul.model import HoldRequest, NodeRequest, Node
from zuul.zk import ZooKeeperBase
@@ -456,6 +457,8 @@ class ZooKeeperNodepool(ZooKeeperBase):
contents of the request.
"""
node_request.created_time = time.time()
+ node_request.span_info = tracing.startSavedSpan(
+ "RequestNodes", start_time=node_request.created_time)
data = node_request.toDict()
path = '{}/{:0>3}-'.format(self.REQUEST_ROOT, priority)