koji_hub / kojira: rebase kojira for new koji release

One of the 2 patches we were carrying for kojira was merged upstream in
1.22. The other wasn't yet, so we need to keep it around for now.
But we need to merge in the other 1.22 changes or auth fails.
Hopefully this rebases to 1.22

Signed-off-by: Kevin Fenzi <kevin@scrye.com>
This commit is contained in:
Kevin Fenzi 2020-08-07 13:42:28 -07:00
parent 0f59c04d7f
commit 4dc3a0029d
2 changed files with 23 additions and 23 deletions

View file

@ -64,7 +64,7 @@ def getTag(session, tag, event=None):
class ManagedRepo(object):
def __init__(self, manager, data):
def __init__(self, manager, data, repodata=None):
self.manager = manager
self.session = manager.session
self.options = manager.options
@ -81,7 +81,7 @@ class ManagedRepo(object):
self.expire_ts = None
if koji.REPO_STATES[self.state] in ['EXPIRED', 'DELETED', 'PROBLEM']:
self.current = False
self.expire_ts = time.time()
self._find_expire_time(repodata)
# TODO use hub data to find the actual expiration time
self.first_seen = time.time()
if self.current:
@ -92,6 +92,17 @@ class ManagedRepo(object):
tags[x['parent_id']] = 1
self.taglist = to_list(tags.keys())
def _find_expire_time(self, repodata):
# find all newer repos for same tag and set oldest as expire_ts for our repo
if repodata:
repos = [r for r in repodata if
r['tag_id'] == self.tag_id and r['create_event'] > self.event_id]
if repos:
invalidated_by = sorted(repos, key=lambda x: x['create_event'])
self.expire_ts = invalidated_by[0]['create_ts']
if not self.expire_ts:
self.expire_ts = time.time()
@property
def dist(self):
# TODO: remove this indirection once we can rely on the hub to return
@ -209,10 +220,6 @@ class ManagedRepo(object):
times = [ts for ts in times if ts is not None]
age = time.time() - max(times)
logger.debug("Repo %s (%s) age: %i sec", self.repo_id, path, age)
logger.debug("Repo %s (%s) mtime: %i sec", self.repo_id, path, mtime)
logger.debug("Repo %s (%s) self.event_ts: %i sec", self.repo_id, path, self.event_ts)
logger.debug("Repo %s (%s) self.expire_ts: %i sec", self.repo_id, path, self.expire_ts)
logger.debug("Repo %s (%s) max: %i sec", self.repo_id, path, max(times))
if age < lifetime:
return False
logger.debug("Attempting to delete repo %s.." % self.repo_id)
@ -378,7 +385,7 @@ class RepoManager(object):
else:
self.logger.info('Found repo %s, state=%s'
% (repo_id, koji.REPO_STATES[data['state']]))
repo = ManagedRepo(self, data)
repo = ManagedRepo(self, data, repodata)
self.repos[repo_id] = repo
if not getTag(self.session, repo.tag_id) and not repo.expired():
self.logger.info('Tag %d for repo %d disappeared, expiring.', repo.tag_id, repo_id)
@ -1076,10 +1083,6 @@ def get_options():
'principal': None,
'keytab': '/etc/kojira/kojira.keytab',
'ccache': '/var/tmp/kojira.ccache',
'krbservice': 'host',
'krb_rdns': True,
'krb_canon_host': False,
'krb_server_realm': None,
'retry_interval': 60,
'max_retries': 120,
'offline_retry': True,
@ -1089,7 +1092,6 @@ def get_options():
'max_repo_tasks': 4,
'max_repo_tasks_maven': 2,
'repo_tasks_limit': 10,
'delete_batch_size': 3,
'deleted_repo_lifetime': 7 * 24 * 3600,
# XXX should really be called expired_repo_lifetime
'dist_repo_lifetime': 7 * 24 * 3600,
@ -1104,15 +1106,14 @@ def get_options():
if config.has_section(section):
int_opts = ('deleted_repo_lifetime', 'max_repo_tasks', 'repo_tasks_limit',
'retry_interval', 'max_retries', 'offline_retry_interval',
'max_delete_processes', 'max_repo_tasks_maven',
'delete_batch_size', 'dist_repo_lifetime', 'sleeptime',
'recent_tasks_lifetime')
'max_delete_processes', 'max_repo_tasks_maven', 'dist_repo_lifetime',
'sleeptime', 'recent_tasks_lifetime')
str_opts = ('topdir', 'server', 'user', 'password', 'logfile', 'principal', 'keytab',
'krbservice', 'cert', 'ca', 'serverca', 'debuginfo_tags', 'queue_file',
'cert', 'ca', 'serverca', 'debuginfo_tags', 'queue_file',
'source_tags', 'separate_source_tags', 'ignore_tags') # FIXME: remove ca here
bool_opts = ('verbose', 'debug', 'ignore_stray_repos', 'offline_retry',
'krb_rdns', 'krb_canon_host', 'no_ssl_verify', 'check_external_repos')
legacy_opts = ('with_src')
'no_ssl_verify', 'check_external_repos')
legacy_opts = ('with_src', 'delete_batch_size')
for name in config.options(section):
if name in int_opts:
defaults[name] = config.getint(section, name)
@ -1189,8 +1190,8 @@ if __name__ == "__main__":
elif options.user:
# authenticate using user/password
session.login()
elif (koji.krbV or koji.requests_kerberos) and options.principal and options.keytab:
session.krb_login(options.principal, options.keytab, options.ccache)
elif koji.reqgssapi and options.principal and options.keytab:
session.gssapi_login(options.principal, options.keytab, options.ccache)
else:
quit("No username/password/certificate supplied and Kerberos missing or not configured")
# get an exclusive session

View file

@ -465,11 +465,10 @@
- koji_hub
# for now we have a patched version of kojira
# Based on the 1.21.1 version
# Based on the 1.22.0 version
# With:
# https://pagure.io/koji/pull-request/2140.patch
# https://pagure.io/koji/pull-request/2340.patch
# Hopefully all merged in 1.22.
# Hopefully all merged in 1.23.
#
- name: copy in patched kojira
copy: src=kojira dest=/usr/sbin/kojira