kojira: prioritize awaited repos

Related: https://pagure.io/koji/issue/3757
This commit is contained in:
Tomas Kopecek 2023-03-30 15:51:01 +02:00 committed by Mike McLean
parent 11c3fe516a
commit 1c7e9a1a99

View file

@ -795,14 +795,24 @@ class RepoManager(object):
if age < 0:
self.logger.warning("Needed tag has future expire_ts: %r", entry)
age = 0
entry['score'] = age * adj
entry['score'] = age * adj * entry['score_adjust']
self.logger.debug("Needed tag %s got score %.2f",
entry['taginfo']['name'], entry['score'])
# so a day old unused repo gets about the regen same score as a
# 2.4-hour-old, very popular repo
def updateTagScores(self):
for entry in list(self.needed_tags.values()):
# call listTasks waitrepo
awaited = self.session.listTasks(opts={'method': ['waitrepo'],
'state': [koji.TASK_STATES['FREE'],
koji.TASK_STATES['ASSIGNED'],
koji.TASK_STATES['OPEN']]})
awaited = {koji.parse_task_params('waitrepo', task['request'])['tag'] for task in awaited}
for tag_id, entry in self.needed_tags.items():
if tag_id in awaited:
# score multiplication factor, prioritize tags which are being awaited for
# not needed on every setTagScore call (initial point will not account it for)
entry['score_adjust'] = 1.5
self.setTagScore(entry)
def _delete_needed_tag(self, tag_id):
@ -938,6 +948,7 @@ class RepoManager(object):
'taginfo': taginfo,
'expire_ts': ts,
'needed_since': time.time(),
'score_adjust': 1.0, # modifier, updated in updateTagScores
}
self.setTagScore(entry)
self.needed_tags[tag_id] = entry