diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py index 8d975aae3b..0b9e5a8a91 100755 --- a/tests/test_scheduler.py +++ b/tests/test_scheduler.py @@ -3153,11 +3153,22 @@ class TestScheduler(testtools.TestCase): self.waitUntilSettled() + items = self.sched.layout.pipelines['gate'].getAllItems() + enqueue_times = {} + for item in items: + enqueue_times[str(item.change)] = item.enqueue_time + client = zuul.rpcclient.RPCClient('127.0.0.1', self.gearman_server.port) r = client.promote(pipeline='gate', change_ids=['2,1', '3,1']) + # ensure that enqueue times are durable + items = self.sched.layout.pipelines['gate'].getAllItems() + for item in items: + self.assertEqual( + enqueue_times[str(item.change)], item.enqueue_time) + self.worker.release('.*-merge') self.waitUntilSettled() self.worker.release('.*-merge') diff --git a/zuul/scheduler.py b/zuul/scheduler.py index 61a786fc7c..5be01013b3 100644 --- a/zuul/scheduler.py +++ b/zuul/scheduler.py @@ -611,7 +611,10 @@ class Scheduler(threading.Thread): pipeline.manager.cancelJobs(item) pipeline.manager.dequeueItem(item) for item in items_to_enqueue: - pipeline.manager.addChange(item.change, quiet=True) + pipeline.manager.addChange( + item.change, + enqueue_time=item.enqueue_time, + quiet=True) while pipeline.manager.processQueue(): pass @@ -973,7 +976,7 @@ class BasePipelineManager(object): item.change.project) return False - def addChange(self, change, quiet=False): + def addChange(self, change, quiet=False, enqueue_time=None): self.log.debug("Considering adding change %s" % change) if self.isChangeAlreadyInQueue(change): self.log.debug("Change %s is already in queue, ignoring" % change) @@ -1000,6 +1003,8 @@ class BasePipelineManager(object): if len(self.pipeline.start_actions) > 0: self.reportStart(change) item = change_queue.enqueueChange(change) + if enqueue_time: + item.enqueue_time = enqueue_time self.reportStats(item) self.enqueueChangesBehind(change, quiet) else: