Switch build queue limiter query to use total number of alive jobs

This is slightly more accurate and, not being based on time, will work better under MySQL
This commit is contained in:
Joseph Schorr 2018-02-21 14:04:40 -05:00
parent d77aa9228f
commit e446eb5757
2 changed files with 10 additions and 8 deletions

View file

@ -74,18 +74,20 @@ class WorkQueue(object):
._available_jobs(now, name_match_query)
.where(~(QueueItem.queue_name << running_query)))
def num_available_jobs(self, canonical_name_list):
def num_alive_jobs(self, canonical_name_list):
"""
Returns the number of available queue items with a given prefix.
Returns the number of alive queue items with a given prefix.
"""
def strip_slash(name):
return name.lstrip('/')
canonical_name_list = map(strip_slash, canonical_name_list)
canonical_name_query = '/'.join([self._queue_name] + canonical_name_list) + '%'
available = self._available_jobs(datetime.utcnow(),
'/'.join([self._queue_name] + canonical_name_list) + '%')
return available.count()
return (QueueItem
.select()
.where(QueueItem.queue_name ** canonical_name_query)
.where(QueueItem.retries_remaining > 0)
.count())
def num_available_jobs_between(self, available_min_time, available_max_time, canonical_name_list):
"""