limit non-waiting newRepo tasks

This commit is contained in:
Mike McLean 2011-08-26 14:51:52 -04:00
parent daea405295
commit 84eaf7f06e

View file

@ -349,15 +349,22 @@ class RepoManager(object):
def updateRepos(self):
#check on tasks
running_tasks = 0
for tag_id, task_id in self.tasks.items():
tinfo = self.session.getTaskInfo(task_id)
tstate = koji.TASK_STATES[tinfo['state']]
if tstate == 'CLOSED':
self.logger.info("Finished: newRepo task %s for tag %s" % (task_id, tag_id))
del self.tasks[tag_id]
continue
elif tstate in ('CANCELED', 'FAILED'):
self.logger.info("Problem: newRepo task %s for tag %s is %s" % (task_id, tag_id, tstate))
del self.tasks[tag_id]
continue
if not tinfo['waiting']:
#the largest hub impact is from the first part of the newRepo task
#once it is waiting on subtasks, that part is over
running_tasks += 1
#TODO [?] - implement a timeout for active tasks?
self.logger.debug("Current tasks: %r" % self.tasks)
self.logger.debug("Updating repos")
@ -411,8 +418,11 @@ class RepoManager(object):
self.logger.debug("order: %s", regen)
# i.e. tags with oldest (or no) repos get precedence
for ts, tag_id in regen:
if len(self.tasks) >= self.options.max_repo_tasks:
self.logger.info("Maximum number of repo tasks reached.")
if running_tasks >= self.options.max_repo_tasks:
self.logger.info("Maximum number of repo tasks reached")
break
elif len(self.tasks) >= self.options.repo_tasks_limit:
self.logger.info("Repo task limit reached")
break
tagname = tags[tag_id]
taskopts = {}
@ -425,6 +435,7 @@ class RepoManager(object):
taskopts['src'] = True
break
task_id = self.session.newRepo(tagname, **taskopts)
running_tasks += 1
self.logger.info("Created newRepo task %s for tag %s (%s)" % (task_id, tag_id, tags[tag_id]))
self.tasks[tag_id] = task_id
#some cleanup
@ -538,7 +549,8 @@ def get_options():
'offline_retry_interval': 120,
'prune_batch_size': 4,
'delete_batch_size': 3,
'max_repo_tasks' : 10,
'max_repo_tasks' : 2,
'repo_tasks_limit' : 10,
'deleted_repo_lifetime': 7*24*3600,
#XXX should really be called expired_repo_lifetime
'cert': '/etc/kojira/client.crt',
@ -546,7 +558,7 @@ def get_options():
'serverca': '/etc/kojira/serverca.crt'
}
if config.has_section(section):
int_opts = ('prune_batch_size', 'deleted_repo_lifetime', 'max_repo_tasks',
int_opts = ('prune_batch_size', 'deleted_repo_lifetime', 'max_repo_tasks', 'repo_tasks_limit',
'delete_batch_size', 'retry_interval', 'max_retries', 'offline_retry_interval')
str_opts = ('topdir', 'server', 'user', 'password', 'logfile', 'principal', 'keytab', 'krbservice',
'cert', 'ca', 'serverca', 'debuginfo_tags', 'source_tags')