Do not start new batch in poller when new_repo is running

This commit is contained in:
Jan Kaluza
2017-04-11 19:51:55 +02:00
parent 0338e12699
commit 9a193c36af
2 changed files with 47 additions and 2 deletions

View File

@@ -191,8 +191,11 @@ class MBSProducer(PollingProducer):
for module_build in session.query(models.ModuleBuild).filter_by(
state=models.BUILD_STATES['build']).all():
# If there are no components in the build state on the module build,
# then no possible event will start off new component builds
if not module_build.current_batch(koji.BUILD_STATES['BUILDING']):
# then no possible event will start off new component builds.
# But do not try to start new builds when we are waiting for the
# repo-regen.
if (not module_build.current_batch(koji.BUILD_STATES['BUILDING'])
and not module_build.new_repo_task_id):
# Initialize the builder...
builder = GenericBuilder.create_from_module(
session, module_build, config)
@@ -232,5 +235,7 @@ class MBSProducer(PollingProducer):
str(module_build.new_repo_task_id), module_build)
taginfo = koji_session.getTag(module_build.koji_tag + "-build")
module_build.new_repo_task_id = koji_session.newRepo(taginfo["name"])
else:
module_build.new_repo_task_id = 0
session.commit()

View File

@@ -155,6 +155,46 @@ class TestPoller(unittest.TestCase):
poller = MBSProducer(hub)
poller.poll()
# Refresh our module_build object.
db.session.expunge(module_build)
module_build = models.ModuleBuild.query.filter_by(id=2).one()
self.assertTrue(not koji_session.newRepo.called)
self.assertEqual(module_build.new_repo_task_id, 0)
def test_process_paused_module_builds_waiting_for_repo(
self, crete_builder, koji_get_session, global_consumer, dbg):
"""
Tests that process_paused_module_builds does not start new batch
when we are waiting for repo.
"""
consumer = mock.MagicMock()
consumer.incoming = queue.Queue()
global_consumer.return_value = consumer
koji_session = mock.MagicMock()
koji_get_session.return_value = koji_session
builder = mock.MagicMock()
crete_builder.return_value = builder
# Change the batch to 2, so the module build is in state where
# it is not building anything, but the state is "build".
module_build = models.ModuleBuild.query.filter_by(id=2).one()
module_build.batch = 2
module_build.new_repo_task_id = 123456
db.session.commit()
# Poll :)
hub = mock.MagicMock()
poller = MBSProducer(hub)
poller.poll()
# Refresh our module_build object.
db.session.expunge(module_build)
module_build = models.ModuleBuild.query.filter_by(id=2).one()
# Components should not be in building state
components = module_build.current_batch()
for component in components:
self.assertEqual(component.state, None)