Fix out-of-memory caused by loading ModuleBuild for every ComponentBuild row from database. Now we lazyload it.

This commit is contained in:
Jan Kaluza
2016-11-03 10:15:07 +01:00
parent 6a0434d8b5
commit 8339e389be
2 changed files with 7 additions and 2 deletions

View File

@@ -36,6 +36,8 @@ import modulemd as _modulemd
from module_build_service import db, log
import module_build_service.messaging
from sqlalchemy.orm import lazyload
# Just like koji.BUILD_STATES, except our own codes for modules.
BUILD_STATES = {
@@ -273,7 +275,7 @@ class ModuleBuild(RidaBase):
tasks = dict()
if self.id and self.state != 'init':
for build in ComponentBuild.query.filter_by(module_id=self.id).all():
for build in ComponentBuild.query.filter_by(module_id=self.id).options(lazyload('module_build')).all():
tasks["%s/%s" % (build.format, build.package)] = "%s/%s" % (build.task_id, build.state)
return tasks

View File

@@ -46,6 +46,8 @@ import koji
from module_build_service import conf, models, log
from sqlalchemy.orm import lazyload
class STOP_WORK(object):
""" A sentinel value, indicating that work should be stopped. """
@@ -201,7 +203,7 @@ class Poller(threading.Thread):
koji_session = (
module_build_service.builder.KojiModuleBuilder.get_session(conf, None))
log.info("Querying tasks for statuses:")
res = models.ComponentBuild.query.filter_by(state=koji.BUILD_STATES['BUILDING']).all()
res = models.ComponentBuild.query.filter_by(state=koji.BUILD_STATES['BUILDING']).options(lazyload('module_build')).all()
log.info("Checking status for %d tasks." % len(res))
for component_build in res:
@@ -222,6 +224,7 @@ class Poller(threading.Thread):
msg = module_build_service.messaging.KojiBuildChange(
msg_id='a faked internal message',
build_id=component_build.task_id,
task_id=component_build.task_id,
build_name=component_build.package,
build_new_state=koji.BUILD_STATES['FAILED'],
build_release=None,