Add configurable limits for number of builds allowed under a namespace
We also support that limit being increased automatically once a successful billing charge has gone through
This commit is contained in:
parent
62971b7f20
commit
9a452ace11
10 changed files with 125 additions and 33 deletions
|
@ -16,9 +16,6 @@ from util.morecollections import AttrDict
|
|||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
MAX_BUILD_QUEUE_RATE_ITEMS = app.config.get('MAX_BUILD_QUEUE_RATE_ITEMS', -1)
|
||||
MAX_BUILD_QUEUE_RATE_SECS = app.config.get('MAX_BUILD_QUEUE_RATE_SECS', -1)
|
||||
|
||||
|
||||
class MaximumBuildsQueuedException(Exception):
|
||||
"""
|
||||
|
@ -32,15 +29,14 @@ def start_build(repository, prepared_build, pull_robot_name=None):
|
|||
if repository.kind.name != 'image':
|
||||
raise Exception('Attempt to start a build for application repository %s' % repository.id)
|
||||
|
||||
if MAX_BUILD_QUEUE_RATE_ITEMS > 0 and MAX_BUILD_QUEUE_RATE_SECS > 0:
|
||||
queue_item_canonical_name = [repository.namespace_user.username, repository.name]
|
||||
now = datetime.utcnow()
|
||||
available_min = now - timedelta(seconds=MAX_BUILD_QUEUE_RATE_SECS)
|
||||
available_builds = dockerfile_build_queue.num_available_jobs_between(available_min,
|
||||
now,
|
||||
queue_item_canonical_name)
|
||||
if available_builds >= MAX_BUILD_QUEUE_RATE_ITEMS:
|
||||
raise MaximumBuildsQueuedException()
|
||||
if repository.namespace_user.maximum_queued_builds_count is not None:
|
||||
queue_item_canonical_name = [repository.namespace_user.username]
|
||||
available_builds = dockerfile_build_queue.num_available_jobs(queue_item_canonical_name)
|
||||
if available_builds >= repository.namespace_user.maximum_queued_builds_count:
|
||||
logger.debug('Prevented queueing of build under namespace %s due to reaching max: %s',
|
||||
repository.namespace_user.username,
|
||||
repository.namespace_user.maximum_queued_builds_count)
|
||||
raise MaximumBuildsQueuedException()
|
||||
|
||||
host = app.config['SERVER_HOSTNAME']
|
||||
repo_path = '%s/%s/%s' % (host, repository.namespace_user.username, repository.name)
|
||||
|
|
Reference in a new issue