Merge pull request #2204 from jzelinskie/429builds

add rate limiting to build queues
This commit is contained in:
Jimmy Zelinskie 2016-12-07 15:03:31 -05:00 committed by GitHub
commit 00eafff747
7 changed files with 78 additions and 9 deletions

View file

@ -14,9 +14,9 @@ from buildtrigger.basehandler import BuildTriggerHandler
from endpoints.api import (RepositoryParamResource, parse_args, query_param, nickname, resource,
require_repo_read, require_repo_write, validate_json_request,
ApiResource, internal_only, format_date, api, path_param,
require_repo_admin)
require_repo_admin, abort)
from endpoints.exception import Unauthorized, NotFound, InvalidRequest
from endpoints.building import start_build, PreparedBuild
from endpoints.building import start_build, PreparedBuild, MaximumBuildsQueuedException
from data import database
from data import model
from auth.permissions import (ReadRepositoryPermission, ModifyRepositoryPermission,
@ -287,7 +287,11 @@ class RepositoryBuildList(RepositoryParamResource):
prepared.is_manual = True
prepared.metadata = {}
build_request = start_build(repo, prepared, pull_robot_name=pull_robot_name)
try:
build_request = start_build(repo, prepared, pull_robot_name=pull_robot_name)
except MaximumBuildsQueuedException:
abort(429, message='Maximum queued build rate exceeded.')
resp = build_status_view(build_request)
repo_string = '%s/%s' % (namespace, repository)
headers = {

View file

@ -15,10 +15,10 @@ from buildtrigger.triggerutil import (TriggerDeactivationException,
RepositoryReadException, TriggerStartException)
from endpoints.api import (RepositoryParamResource, nickname, resource, require_repo_admin,
log_action, request_error, query_param, parse_args, internal_only,
validate_json_request, api, path_param)
validate_json_request, api, path_param, abort)
from endpoints.exception import NotFound, Unauthorized, InvalidRequest
from endpoints.api.build import build_status_view, trigger_view, RepositoryBuildStatus
from endpoints.building import start_build
from endpoints.building import start_build, MaximumBuildsQueuedException
from data import model
from auth.permissions import (UserAdminPermission, AdministerOrganizationPermission,
ReadRepositoryPermission, AdministerRepositoryPermission)
@ -436,6 +436,8 @@ class ActivateBuildTrigger(RepositoryParamResource):
build_request = start_build(repo, prepared, pull_robot_name=pull_robot_name)
except TriggerStartException as tse:
raise InvalidRequest(tse.message)
except MaximumBuildsQueuedException:
abort(429, message='Maximum queued build rate exceeded.')
resp = build_status_view(build_request)
repo_string = '%s/%s' % (namespace_name, repo_name)