diff --git a/zuul/driver/zuul/__init__.py b/zuul/driver/zuul/__init__.py index a5ca94f64c..070b2bbb4e 100644 --- a/zuul/driver/zuul/__init__.py +++ b/zuul/driver/zuul/__init__.py @@ -13,11 +13,12 @@ # under the License. import logging +from uuid import uuid4 from zuul.driver import Driver, TriggerInterface from zuul.driver.zuul.zuulmodel import ZuulTriggerEvent - from zuul.driver.zuul import zuultrigger +from zuul.lib.logutil import get_annotated_logger PARENT_CHANGE_ENQUEUED = 'parent-change-enqueued' PROJECT_CHANGE_MERGED = 'project-change-merged' @@ -58,17 +59,19 @@ class ZuulDriver(Driver, TriggerInterface): "Unable to create project-change-merged events for " "%s" % (change,)) - def onChangeEnqueued(self, tenant, change, pipeline): + def onChangeEnqueued(self, tenant, change, pipeline, event): + log = get_annotated_logger(self.log, event) + # Called each time a change is enqueued in a pipeline tenant_events = self.parent_change_enqueued_events.get( (tenant.name, pipeline.name)) - self.log.debug("onChangeEnqueued %s", tenant_events) + log.debug("onChangeEnqueued %s", tenant_events) if tenant_events: try: self._createParentChangeEnqueuedEvents( - change, pipeline, tenant) + change, pipeline, tenant, event) except Exception: - self.log.exception( + log.exception( "Unable to create parent-change-enqueued events for " "%s in %s" % (change, pipeline)) @@ -89,12 +92,16 @@ class ZuulDriver(Driver, TriggerInterface): event.change_url = change.url event.patch_number = change.patchset event.ref = change.ref + event.zuul_event_id = str(uuid4().hex) self.sched.addEvent(event) - def _createParentChangeEnqueuedEvents(self, change, pipeline, tenant): - self.log.debug("Checking for changes needing %s:" % change) + def _createParentChangeEnqueuedEvents(self, change, pipeline, tenant, + event): + log = get_annotated_logger(self.log, event) + + log.debug("Checking for changes needing %s:" % change) if not hasattr(change, 'needed_by_changes'): - self.log.debug(" %s does not support dependencies" % type(change)) + log.debug(" %s does not support dependencies" % type(change)) return # This is very inefficient, especially on systems with large @@ -102,10 +109,10 @@ class ZuulDriver(Driver, TriggerInterface): # with persistent storage of dependency information. needed_by_changes = set(change.needed_by_changes) for source in self.sched.connections.getSources(): - self.log.debug(" Checking source: %s", source) + log.debug(" Checking source: %s", source) needed_by_changes.update( source.getChangesDependingOn(change, None, tenant)) - self.log.debug(" Following changes: %s", needed_by_changes) + log.debug(" Following changes: %s", needed_by_changes) for needs in needed_by_changes: self._createParentChangeEnqueuedEvent(needs, pipeline) @@ -122,6 +129,7 @@ class ZuulDriver(Driver, TriggerInterface): event.change_url = change.url event.patch_number = change.patchset event.ref = change.ref + event.zuul_event_id = str(uuid4().hex) self.sched.addEvent(event) def getTrigger(self, connection_name, config=None): diff --git a/zuul/manager/__init__.py b/zuul/manager/__init__.py index fa9b4256e0..1193e872ec 100644 --- a/zuul/manager/__init__.py +++ b/zuul/manager/__init__.py @@ -331,7 +331,8 @@ class PipelineManager(object): ignore_requirements, change_queue) zuul_driver = self.sched.connections.drivers['zuul'] tenant = self.pipeline.tenant - zuul_driver.onChangeEnqueued(tenant, item.change, self.pipeline) + zuul_driver.onChangeEnqueued( + tenant, item.change, self.pipeline, event) return True def dequeueItem(self, item): diff --git a/zuul/trigger/__init__.py b/zuul/trigger/__init__.py index a67c99bf7c..b5d56e9415 100644 --- a/zuul/trigger/__init__.py +++ b/zuul/trigger/__init__.py @@ -36,5 +36,5 @@ class BaseTrigger(object, metaclass=abc.ABCMeta): def onChangeMerged(self, change, source): """Called when a change has been merged.""" - def onChangeEnqueued(self, change, pipeline): + def onChangeEnqueued(self, change, pipeline, event): """Called when a change has been enqueued."""