Esempio n. 1
0
    def get_new_repo_id(self, collection):
        """
        Returns a latest repo id that is suitable for new repo resolution or None.

        :param: collection for which collection to query
        """
        latest_repo = koji_util.get_latest_repo(
            self.session.secondary_koji_for(collection),
            collection.build_tag,
        )

        if latest_repo and (not collection.latest_repo_id or
                            latest_repo.get('id', 0) > collection.latest_repo_id):
            if not collection.secondary_mode:
                return latest_repo['id']
            else:
                # in secondary mode, we want to only resolve the repo if it was
                # already regenerated on primary
                backend.refresh_repo_mappings(self.session)
                mapping = self.db.query(RepoMapping)\
                    .filter_by(secondary_id=latest_repo['id'])\
                    .first()
                if (
                        mapping and
                        mapping.primary_id and (
                            self.session.koji('primary')
                            .getTaskInfo(mapping.task_id)['state']
                        ) == koji.TASK_STATES['CLOSED']
                ):
                    return latest_repo['id']
Esempio n. 2
0
    def get_new_repo_id(self, collection):
        """
        Returns a latest repo id that is suitable for new repo resolution or None.

        :param: collection for which collection to query
        """
        latest_repo = koji_util.get_latest_repo(
            self.session.secondary_koji_for(collection),
            collection.build_tag,
        )

        if latest_repo and (not collection.latest_repo_id or
                            latest_repo.get('id', 0) > collection.latest_repo_id):
            if not collection.secondary_mode:
                return latest_repo['id']
            else:
                # in secondary mode, we want to only resolve the repo if it was
                # already regenerated on primary
                backend.refresh_repo_mappings(self.session)
                mapping = self.db.query(RepoMapping)\
                    .filter_by(secondary_id=latest_repo['id'])\
                    .first()
                if (
                        mapping and
                        mapping.primary_id and (
                            self.session.koji('primary')
                            .getTaskInfo(mapping.task_id)['state']
                        ) == koji.TASK_STATES['CLOSED']
                ):
                    return latest_repo['id']
Esempio n. 3
0
def poll_secondary_repo(backend):
    log.debug("Polling new external repo")
    db = backend.db
    primary = backend.koji_sessions['primary']
    secondary = backend.koji_sessions['secondary']
    for collection in db.query(Collection).all():
        remote_repo = koji_util.get_latest_repo(secondary, collection.build_tag)
        mapping = db.query(RepoMapping)\
            .filter_by(secondary_id=remote_repo['id'])\
            .first()
        if not mapping:
            log.info("Requesting new repo for %s", collection)
            try:
                repo_url = secondary.config['repo_url']\
                    .format(build_tag=collection.build_tag,
                            repo_id=remote_repo['id'],
                            arch="$arch")
                tag = collection.build_tag
                for repo in primary.getTagExternalRepos(tag):
                    primary.removeExternalRepoFromTag(tag, repo['external_repo_id'])
                name = '{}-{}'.format(collection.name, remote_repo['id'])
                repo = (primary.getExternalRepo(name) or
                        primary.createExternalRepo(name, repo_url))
                primary.addExternalRepoToTag(tag, repo['name'], 0)  # priority
                task_id = primary.newRepo(tag)
                db.add(RepoMapping(task_id=task_id,
                                   secondary_id=remote_repo['id']))
                db.commit()
            except koji.GenericError:
                log.exception("Requesting new repo failed")
Esempio n. 4
0
def poll_secondary_repo(session):
    log.info("Polling new external repo")
    db = session.db
    primary = session.koji('primary')
    secondary = session.koji('secondary')
    for collection in db.query(Collection).filter_by(secondary_mode=True):
        ensure_tag(primary, collection.dest_tag)
        ensure_tag(primary, collection.build_tag)
        target = primary.getBuildTarget(collection.target)
        if not target:
            log.info("Creating new secondary build target")
            primary.createBuildTarget(collection.target, collection.build_tag,
                                      collection.dest_tag)
            groups = secondary.getTagGroups(collection.build_tag)
            primary.multicall = True
            for group in groups:
                primary.groupListAdd(collection.build_tag, group['name'])
                for pkg in group['packagelist']:
                    primary.groupPackageListAdd(
                        collection.build_tag,
                        group['name'],
                        pkg['package'],
                        type=pkg['type'],
                        blocked=pkg['blocked'],
                    )
            primary.multiCall()

        remote_repo = koji_util.get_latest_repo(secondary,
                                                collection.build_tag)
        mapping = db.query(RepoMapping)\
            .filter_by(secondary_id=remote_repo['id'])\
            .first()
        if not mapping:
            log.info("Requesting new repo for %s", collection)
            try:
                repo_url = secondary.config['repo_url']\
                    .format(build_tag=collection.build_tag,
                            repo_id=remote_repo['id'],
                            arch="$arch")
                tag = collection.build_tag
                for repo in primary.getTagExternalRepos(tag):
                    primary.removeExternalRepoFromTag(tag,
                                                      repo['external_repo_id'])
                name = '{}-{}'.format(collection.name, remote_repo['id'])
                repo = (primary.getExternalRepo(name)
                        or primary.createExternalRepo(name, repo_url))
                primary.addExternalRepoToTag(tag, repo['name'], 0)  # priority
                task_id = primary.newRepo(tag)
                db.add(
                    RepoMapping(task_id=task_id,
                                secondary_id=remote_repo['id']))
                db.commit()
            except koji.GenericError:
                log.exception("Requesting new repo failed")
Esempio n. 5
0
def poll_secondary_repo(session):
    log.info("Polling new external repo")
    db = session.db
    primary = session.koji('primary')
    secondary = session.koji('secondary')
    for collection in db.query(Collection).filter_by(secondary_mode=True):
        ensure_tag(primary, collection.dest_tag)
        ensure_tag(primary, collection.build_tag)
        target = primary.getBuildTarget(collection.target)
        if not target:
            log.info("Creating new secondary build target")
            primary.createBuildTarget(collection.target, collection.build_tag,
                                      collection.dest_tag)
            groups = secondary.getTagGroups(collection.build_tag)
            primary.multicall = True
            for group in groups:
                primary.groupListAdd(collection.build_tag, group['name'])
                for pkg in group['packagelist']:
                    primary.groupPackageListAdd(
                        collection.build_tag,
                        group['name'],
                        pkg['package'],
                        type=pkg['type'],
                        blocked=pkg['blocked'],
                    )
            primary.multiCall()

        remote_repo = koji_util.get_latest_repo(secondary, collection.build_tag)
        mapping = db.query(RepoMapping)\
            .filter_by(secondary_id=remote_repo['id'])\
            .first()
        if not mapping:
            log.info("Requesting new repo for %s", collection)
            try:
                repo_url = secondary.config['repo_url']\
                    .format(build_tag=collection.build_tag,
                            repo_id=remote_repo['id'],
                            arch="$arch")
                tag = collection.build_tag
                for repo in primary.getTagExternalRepos(tag):
                    primary.removeExternalRepoFromTag(tag, repo['external_repo_id'])
                name = '{}-{}'.format(collection.name, remote_repo['id'])
                repo = (primary.getExternalRepo(name) or
                        primary.createExternalRepo(name, repo_url))
                primary.addExternalRepoToTag(tag, repo['name'], 0)  # priority
                task_id = primary.newRepo(tag)
                db.add(RepoMapping(task_id=task_id,
                                   secondary_id=remote_repo['id']))
                db.commit()
            except koji.GenericError:
                log.exception("Requesting new repo failed")
Esempio n. 6
0
 def main(self):
     self.process_builds()
     for collection in self.db.query(Collection).all():
         curr_repo = koji_util.get_latest_repo(
             self.koji_sessions['secondary'], collection.build_tag)
         if curr_repo and get_config('secondary_mode'):
             self.backend.refresh_repo_mappings()
             mapping = self.db.query(RepoMapping)\
                 .filter_by(secondary_id=curr_repo['id'])\
                 .first()
             # don't resolve it if we don't have it on primary yet
             if not mapping or not mapping.primary_id:
                 continue
         if curr_repo and curr_repo['id'] > collection.latest_repo_id:
             self.generate_repo(collection, curr_repo['id'])
Esempio n. 7
0
 def main(self):
     self.process_builds()
     for collection in self.db.query(Collection).all():
         curr_repo = koji_util.get_latest_repo(self.koji_sessions['secondary'],
                                               collection.build_tag)
         if curr_repo and get_config('secondary_mode'):
             self.backend.refresh_repo_mappings()
             mapping = self.db.query(RepoMapping)\
                 .filter_by(secondary_id=curr_repo['id'])\
                 .first()
             # don't resolve it if we don't have it on primary yet
             if not mapping or not mapping.primary_id:
                 continue
         if curr_repo and curr_repo['id'] > collection.latest_repo_id:
             self.generate_repo(collection, curr_repo['id'])