From 208c97776f3c47ded02550eb4cdf57b8d9535dbc Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Wed, 22 Oct 2014 15:20:53 -0400 Subject: [PATCH] Make sure builds are queued under a transaction. This should prevent a queue item from existing without its repository build object (or vice versa). --- endpoints/common.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/endpoints/common.py b/endpoints/common.py index d778e552e..bc7498738 100644 --- a/endpoints/common.py +++ b/endpoints/common.py @@ -10,6 +10,7 @@ from flask.ext.principal import identity_changed from random import SystemRandom from data import model +from data.database import db from app import app, login_manager, dockerfile_build_queue, notification_queue from auth.permissions import QuayDeferredPermissionUser from auth import scopes @@ -222,16 +223,17 @@ def start_build(repository, dockerfile_id, tags, build_name, subdir, manual, 'build_subdir': subdir } - build_request = model.create_repository_build(repository, token, job_config, - dockerfile_id, build_name, - trigger, pull_robot_name=pull_robot_name) + with app.config['DB_TRANSACTION_FACTORY'](db): + build_request = model.create_repository_build(repository, token, job_config, + dockerfile_id, build_name, + trigger, pull_robot_name=pull_robot_name) - dockerfile_build_queue.put([repository.namespace_user.username, repository.name], json.dumps({ - 'build_uuid': build_request.uuid, - 'namespace': repository.namespace_user.username, - 'repository': repository.name, - 'pull_credentials': model.get_pull_credentials(pull_robot_name) if pull_robot_name else None - }), retries_remaining=1) + dockerfile_build_queue.put([repository.namespace_user.username, repository.name], json.dumps({ + 'build_uuid': build_request.uuid, + 'namespace': repository.namespace_user.username, + 'repository': repository.name, + 'pull_credentials': model.get_pull_credentials(pull_robot_name) if pull_robot_name else None + }), retries_remaining=1) # Add the build to the repo's log. metadata = {