Merge "Log more information about what events trigger a reconfig"

This commit is contained in:
Zuul 2018-06-22 16:56:53 +00:00 committed by Gerrit Code Review
commit b4a4718b4f
5 changed files with 34 additions and 10 deletions

View File

@ -2809,10 +2809,10 @@ class TestScheduler(ZuulTestCase):
self.sched.run_handler_lock.acquire()
self.assertEqual(self.sched.management_event_queue.qsize(), 0)
self.sched.reconfigureTenant(tenant, project)
self.sched.reconfigureTenant(tenant, project, None)
self.assertEqual(self.sched.management_event_queue.qsize(), 1)
self.sched.reconfigureTenant(tenant, project)
self.sched.reconfigureTenant(tenant, project, None)
# The second event should have been combined with the first
# so we should still only have one entry.
self.assertEqual(self.sched.management_event_queue.qsize(), 1)
@ -4853,7 +4853,7 @@ For CI problems and help debugging, contact ci@example.org"""
self.waitUntilSettled()
# Reconfigure while we still have an outstanding merge job
self.sched.reconfigureTenant(self.sched.abide.tenants['tenant-one'],
None)
None, None)
self.waitUntilSettled()
# Verify the merge job is still running and that the item is
# in the pipeline

View File

@ -133,8 +133,9 @@ class GithubGearmanWorker(object):
self.log.debug("Request headers missing the X-Github-Event.")
raise Exception('Please specify a X-Github-Event header.')
delivery = headers.get('x-github-delivery')
try:
self.connection.addEvent(body, event)
self.connection.addEvent(body, event, delivery)
except Exception:
message = 'Exception deserializing JSON body'
self.log.exception(message)
@ -183,7 +184,7 @@ class GithubEventConnector(threading.Thread):
self.connection.addEvent(None)
def _handleEvent(self):
ts, json_body, event_type = self.connection.getEvent()
ts, json_body, event_type, delivery = self.connection.getEvent()
if self._stopped:
return
@ -218,6 +219,7 @@ class GithubEventConnector(threading.Thread):
event = None
if event:
event.delivery = delivery
if event.change_number:
project = self.connection.source.getProject(event.project_name)
self.connection._getChange(project,
@ -671,8 +673,8 @@ class GithubConnection(BaseConnection):
# check if we need to do further paged calls
url = response.links.get('next', {}).get('url')
def addEvent(self, data, event=None):
return self.event_queue.put((time.time(), data, event))
def addEvent(self, data, event=None, delivery=None):
return self.event_queue.put((time.time(), data, event, delivery))
def getEvent(self):
return self.event_queue.get()

View File

@ -53,6 +53,7 @@ class GithubTriggerEvent(TriggerEvent):
self.title = None
self.label = None
self.unlabel = None
self.delivery = None
def isPatchsetCreated(self):
if self.type == 'pull_request':
@ -64,6 +65,12 @@ class GithubTriggerEvent(TriggerEvent):
return 'closed' == self.action
return False
def _repr(self):
r = [super(GithubTriggerEvent, self)._repr()]
if self.delivery:
r.append('delivery: %s' % self.delivery)
return ' '.join(r)
class GithubCommonFilter(object):
def __init__(self, required_reviews=[], required_statuses=[],

View File

@ -2463,6 +2463,20 @@ class TriggerEvent(object):
def isChangeAbandoned(self):
return False
def _repr(self):
flags = [str(self.type)]
if self.branch_updated:
flags.append('branch_updated')
if self.branch_created:
flags.append('branch_created')
if self.branch_deleted:
flags.append('branch_deleted')
return ' '.join(flags)
def __repr__(self):
return '<%s 0x%x %s>' % (self.__class__.__name__,
id(self), self._repr())
class BaseFilter(ConfigObject):
"""Base Class for filtering which Changes and Events to process."""

View File

@ -425,9 +425,10 @@ class Scheduler(threading.Thread):
self.result_event_queue.put(event)
self.wake_event.set()
def reconfigureTenant(self, tenant, project):
def reconfigureTenant(self, tenant, project, event):
self.log.debug("Submitting tenant reconfiguration event for "
"%s due to project %s", tenant.name, project)
"%s due to event %s in project %s",
tenant.name, event, project)
event = TenantReconfigureEvent(tenant, project)
self.management_event_queue.put(event)
self.wake_event.set()
@ -943,7 +944,7 @@ class Scheduler(threading.Thread):
# or a branch was just created or deleted. Clear
# out cached data for this project and perform a
# reconfiguration.
self.reconfigureTenant(tenant, change.project)
self.reconfigureTenant(tenant, change.project, event)
for pipeline in tenant.layout.pipelines.values():
if event.isPatchsetCreated():
pipeline.manager.removeOldVersionsOfChange(change)