diff options
author | Zuul <zuul@review.opendev.org> | 2022-10-04 03:33:20 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2022-10-04 03:33:20 +0000 |
commit | 08cf7c5f2b65310cb05716c8162d5d5d3153f822 (patch) | |
tree | 14bab70597cd4516b9de5d404d0012bb6786ee53 /zuul | |
parent | 81178dcfc82afff9b41db336529c768218728c7e (diff) | |
parent | aa30ed7b5c0f9762f26e42e9bb3d136b5b08fe65 (diff) | |
download | zuul-08cf7c5f2b65310cb05716c8162d5d5d3153f822.tar.gz |
Merge "Link span of queue item to trigger event span"
Diffstat (limited to 'zuul')
-rw-r--r-- | zuul/manager/__init__.py | 8 | ||||
-rw-r--r-- | zuul/model.py | 8 | ||||
-rw-r--r-- | zuul/scheduler.py | 17 |
3 files changed, 31 insertions, 2 deletions
diff --git a/zuul/manager/__init__.py b/zuul/manager/__init__.py index 8ba3cef14..aad112af8 100644 --- a/zuul/manager/__init__.py +++ b/zuul/manager/__init__.py @@ -584,8 +584,14 @@ class PipelineManager(metaclass=ABCMeta): (change, change_queue, self.pipeline)) if enqueue_time is None: enqueue_time = time.time() + + event_span = tracing.restoreSpanContext(event.span_context) + link_attributes = {"rel": type(event).__name__} + link = trace.Link(event_span.get_span_context(), + attributes=link_attributes) span_info = tracing.startSavedSpan( - 'QueueItem', start_time=enqueue_time) + 'QueueItem', start_time=enqueue_time, links=[link]) + item = change_queue.enqueueChange(change, event, span_info=span_info, enqueue_time=enqueue_time) diff --git a/zuul/model.py b/zuul/model.py index 32b1cfadf..67b5e0117 100644 --- a/zuul/model.py +++ b/zuul/model.py @@ -6260,6 +6260,8 @@ class ChangeManagementEvent(ManagementEvent): self.oldrev = oldrev or '0000000000000000000000000000000000000000' self.newrev = newrev or '0000000000000000000000000000000000000000' self.timestamp = time.time() + span = trace.get_current_span() + self.span_context = tracing.getSpanContext(span) def toDict(self): d = super().toDict() @@ -6273,12 +6275,14 @@ class ChangeManagementEvent(ManagementEvent): d["oldrev"] = self.oldrev d["newrev"] = self.newrev d["timestamp"] = self.timestamp + d["span_context"] = self.span_context return d def updateFromDict(self, d): super().updateFromDict(d) self.type = d.get("type") self.timestamp = d.get("timestamp") + self.span_context = d.get("span_context") @classmethod def fromDict(cls, data): @@ -6565,6 +6569,8 @@ class TriggerEvent(AbstractEvent): self.arrived_at_scheduler_timestamp = None self.driver_name = None self.branch_cache_ltime = -1 + span = trace.get_current_span() + self.span_context = tracing.getSpanContext(span) def toDict(self): return { @@ -6599,6 +6605,7 @@ class TriggerEvent(AbstractEvent): ), "driver_name": self.driver_name, "branch_cache_ltime": self.branch_cache_ltime, + "span_context": self.span_context, } def updateFromDict(self, d): @@ -6633,6 +6640,7 @@ class TriggerEvent(AbstractEvent): ) self.driver_name = d["driver_name"] self.branch_cache_ltime = d.get("branch_cache_ltime", -1) + self.span_context = d.get("span_context") @property def canonical_project_name(self): diff --git a/zuul/scheduler.py b/zuul/scheduler.py index 9548cb6d2..d37ef9539 100644 --- a/zuul/scheduler.py +++ b/zuul/scheduler.py @@ -31,6 +31,7 @@ from collections import defaultdict, OrderedDict from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.triggers.interval import IntervalTrigger from kazoo.exceptions import NotEmptyError +from opentelemetry import trace from zuul import configloader, exceptions from zuul.lib import commandsocket @@ -176,6 +177,8 @@ class Scheduler(threading.Thread): """ log = logging.getLogger("zuul.Scheduler") + tracer = trace.get_tracer("zuul") + _stats_interval = 30 _semaphore_cleanup_interval = IntervalTrigger(minutes=60, jitter=60) _general_cleanup_interval = IntervalTrigger(minutes=60, jitter=60) @@ -2217,7 +2220,14 @@ class Scheduler(threading.Thread): log = get_annotated_logger(self.log, event.zuul_event_id) log.debug("Forwarding trigger event %s", event) try: - self._forward_trigger_event(event, tenant) + trigger_span = tracing.restoreSpanContext( + event.span_context) + with self.tracer.start_as_current_span( + "TenantTriggerEventProcessing", + links=[ + trace.Link(trigger_span.get_span_context()) + ]): + self._forward_trigger_event(event, tenant) except Exception: log.exception("Unable to forward event %s " "to tenant %s", event, tenant.name) @@ -2310,6 +2320,11 @@ class Scheduler(threading.Thread): event.min_reconfigure_ltime = self.trigger_events[ tenant.name].last_reconfigure_event_ltime + + span = trace.get_current_span() + span.set_attribute("reconfigure_tenant", reconfigure_tenant) + event.span_context = tracing.getSpanContext(span) + for pipeline in tenant.layout.pipelines.values(): if ( pipeline.manager.eventMatches(event, change) |