Merge "Fix deserializing change refs from cache"
This commit is contained in:
commit
ca2704be7b
|
@ -5537,8 +5537,9 @@ class ZuulTestCase(BaseTestCase):
|
|||
# Join ensures that the queue is empty _and_ events have been
|
||||
# processed
|
||||
self.__eventQueuesJoin(matcher)
|
||||
self.scheds.execute(
|
||||
lambda app: app.sched.run_handler_lock.acquire())
|
||||
for sched in map(lambda app: app.sched,
|
||||
self.scheds.filter(matcher)):
|
||||
sched.run_handler_lock.acquire()
|
||||
if (self.__areAllSchedulersPrimed(matcher) and
|
||||
self.__areAllMergeJobsWaiting(matcher) and
|
||||
self.__haveAllBuildsReported() and
|
||||
|
@ -5551,17 +5552,21 @@ class ZuulTestCase(BaseTestCase):
|
|||
# when locked the run handler and checked that the
|
||||
# components were stable, we don't erroneously
|
||||
# report that we are settled.
|
||||
self.scheds.execute(
|
||||
lambda app: app.sched.run_handler_lock.release())
|
||||
for sched in map(lambda app: app.sched,
|
||||
self.scheds.filter(matcher)):
|
||||
sched.run_handler_lock.release()
|
||||
self.executor_server.lock.release()
|
||||
self.log.debug("...settled after %.3f ms / %s loops (%s)",
|
||||
time.time() - start, i, msg)
|
||||
self.logState()
|
||||
return
|
||||
self.scheds.execute(
|
||||
lambda app: app.sched.run_handler_lock.release())
|
||||
for sched in map(lambda app: app.sched,
|
||||
self.scheds.filter(matcher)):
|
||||
sched.run_handler_lock.release()
|
||||
self.executor_server.lock.release()
|
||||
self.scheds.execute(lambda app: app.sched.wake_event.wait(0.1))
|
||||
for sched in map(lambda app: app.sched,
|
||||
self.scheds.filter(matcher)):
|
||||
sched.wake_event.wait(0.1)
|
||||
# Let other threads work
|
||||
time.sleep(0.1)
|
||||
|
||||
|
|
|
@ -102,3 +102,37 @@ class TestScaleOutScheduler(ZuulTestCase):
|
|||
if all(l == new for l in layout_states):
|
||||
break
|
||||
self.waitUntilSettled()
|
||||
|
||||
def test_change_cache(self):
|
||||
# Test re-using a change from the change cache.
|
||||
A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
|
||||
B = self.fake_gerrit.addFakeChange('org/project', 'master', 'B')
|
||||
|
||||
B.setDependsOn(A, 1)
|
||||
|
||||
self.fake_gerrit.addEvent(B.getPatchsetCreatedEvent(1))
|
||||
self.waitUntilSettled()
|
||||
# This has populated the change cache with our change.
|
||||
|
||||
app = self.create_scheduler()
|
||||
app.start()
|
||||
self.assertEqual(len(self.scheds), 2)
|
||||
|
||||
# Hold the lock on the first scheduler so that only the second
|
||||
# will act.
|
||||
with self.scheds.first.sched.run_handler_lock:
|
||||
# Enqueue the change again. The second scheduler will
|
||||
# load the change object from the cache.
|
||||
self.fake_gerrit.addEvent(B.getPatchsetCreatedEvent(1))
|
||||
|
||||
self.waitUntilSettled(matcher=[app])
|
||||
|
||||
# Each job should appear twice and contain both changes.
|
||||
self.assertHistory([
|
||||
dict(name='project-merge', result='SUCCESS', changes='1,1 2,1'),
|
||||
dict(name='project-test1', result='SUCCESS', changes='1,1 2,1'),
|
||||
dict(name='project-test2', result='SUCCESS', changes='1,1 2,1'),
|
||||
dict(name='project-merge', result='SUCCESS', changes='1,1 2,1'),
|
||||
dict(name='project-test1', result='SUCCESS', changes='1,1 2,1'),
|
||||
dict(name='project-test2', result='SUCCESS', changes='1,1 2,1'),
|
||||
], ordered=False)
|
||||
|
|
|
@ -3791,17 +3791,14 @@ class Change(Branch):
|
|||
self.url = data.get("url")
|
||||
self.uris = data.get("uris", [])
|
||||
self.patchset = data.get("patchset")
|
||||
self.git_needs_changes = [
|
||||
tuple(k) for k in data.get("git_needs_changes", [])]
|
||||
self.git_needed_by_changes = [
|
||||
tuple(k) for k in data.get("git_needed_by_changes", [])]
|
||||
self.compat_needs_changes = [
|
||||
tuple(k) for k in data.get("compat_needs_changes", [])]
|
||||
self.compat_needed_by_changes = [
|
||||
tuple(k) for k in data.get("compat_needed_by_changes", [])]
|
||||
self.git_needs_changes = data.get("git_needs_changes", [])
|
||||
self.git_needed_by_changes = data.get("git_needed_by_changes", [])
|
||||
self.compat_needs_changes = data.get("compat_needs_changes", [])
|
||||
self.compat_needed_by_changes = data.get(
|
||||
"compat_needed_by_changes", [])
|
||||
self.commit_needs_changes = (
|
||||
None if data.get("commit_needs_changes") is None
|
||||
else [tuple(k) for k in data.get("commit_needs_changes", [])]
|
||||
else data.get("commit_needs_changes", [])
|
||||
)
|
||||
self.is_current_patchset = data.get("is_current_patchset", True)
|
||||
self.can_merge = data.get("can_merge", False)
|
||||
|
|
Loading…
Reference in New Issue