示例#1
0
文件: scheduler.py 项目: W3SS/koschei
    def main(self):
        prioritized = self.get_priorities()
        self.db.rollback()  # no-op, ends the transaction
        if (time.time() - self.calculation_timestamp
                > get_config('priorities.calculation_interval')):
            self.persist_priorities(prioritized)
        incomplete_builds = self.get_incomplete_builds_query().count()
        if incomplete_builds >= get_config('koji_config.max_builds'):
            self.log.debug("Not scheduling: {} incomplete builds"
                           .format(incomplete_builds))
            return
        koji_load = koji_util.get_koji_load(self.koji_sessions['primary'])
        if koji_load > get_config('koji_config.load_threshold'):
            self.log.debug("Not scheduling: {} koji load"
                           .format(koji_load))
            return

        for package_id, priority in prioritized:
            if priority < get_config('priorities.build_threshold'):
                self.log.debug("Not scheduling: no package above threshold")
                return
            package = self.db.query(Package).get(package_id)
            if package.collection.is_buildroot_broken():
                self.log.debug("Skipping {}: {} buildroot broken"
                               .format(package, package.collection))
                continue
            newer_build = self.backend.get_newer_build_if_exists(package)
            if newer_build:
                self.log.debug("Skipping {} due to real build"
                               .format(package))
                continue

            # a package was chosen
            self.log.info('Scheduling build for {}, priority {}'
                          .format(package.name, priority))
            build = self.backend.submit_build(package)
            package.current_priority = None
            package.scheduler_skip_reason = None
            package.manual_priority = 0

            if not build:
                self.log.debug("No SRPM found for {}".format(package.name))
                package.scheduler_skip_reason = Package.SKIPPED_NO_SRPM
                self.db.commit()
                continue

            self.db.commit()
            break
示例#2
0
文件: scheduler.py 项目: W3SS/koschei
    def main(self):
        prioritized = self.get_priorities()
        self.db.rollback()  # no-op, ends the transaction
        if (time.time() - self.calculation_timestamp >
                get_config('priorities.calculation_interval')):
            self.persist_priorities(prioritized)
        incomplete_builds = self.get_incomplete_builds_query().count()
        if incomplete_builds >= get_config('koji_config.max_builds'):
            self.log.debug("Not scheduling: {} incomplete builds".format(
                incomplete_builds))
            return
        koji_load = koji_util.get_koji_load(self.koji_sessions['primary'])
        if koji_load > get_config('koji_config.load_threshold'):
            self.log.debug("Not scheduling: {} koji load".format(koji_load))
            return

        for package_id, priority in prioritized:
            if priority < get_config('priorities.build_threshold'):
                self.log.debug("Not scheduling: no package above threshold")
                return
            package = self.db.query(Package).get(package_id)
            if package.collection.is_buildroot_broken():
                self.log.debug("Skipping {}: {} buildroot broken".format(
                    package, package.collection))
                continue
            newer_build = self.backend.get_newer_build_if_exists(package)
            if newer_build:
                self.log.debug("Skipping {} due to real build".format(package))
                continue

            # a package was chosen
            self.log.info('Scheduling build for {}, priority {}'.format(
                package.name, priority))
            build = self.backend.submit_build(package)
            package.current_priority = None
            package.scheduler_skip_reason = None
            package.manual_priority = 0

            if not build:
                self.log.debug("No SRPM found for {}".format(package.name))
                package.scheduler_skip_reason = Package.SKIPPED_NO_SRPM
                self.db.commit()
                continue

            self.db.commit()
            break
示例#3
0
    def main(self):
        incomplete_builds_count = self.db.query(Build)\
            .filter(Build.state == Build.RUNNING)\
            .count()
        if incomplete_builds_count >= get_config('koji_config.max_builds'):
            self.log.debug("Not scheduling: {} incomplete builds"
                           .format(incomplete_builds_count))
            return

        for package_id, priority in self.get_priorities():
            if priority < get_config('priorities.build_threshold'):
                self.log.info("Not scheduling: no package above threshold")
                return
            package = self.db.query(Package).get(package_id)

            koji_session = self.session.koji('primary')
            all_arches = koji_util.get_koji_arches_cached(
                self.session,
                koji_session,
                package.collection.build_tag,
            )
            arches = koji_util.get_srpm_arches(
                koji_session=self.session.secondary_koji_for(package.collection),
                all_arches=all_arches,
                nvra=package.srpm_nvra,
                arch_override=package.arch_override,
            )
            if arches is None:
                self.skip_no_srpm(package)
                continue
            if not arches:
                self.log.info("Skipping {}: no allowed arch".format(package.name))
                package.scheduler_skip_reason = Package.SKIPPED_NO_ARCH
                # FIXME we don't have a better way how to get package out of
                # scheduler's way
                package.manual_priority -= 1000
                continue
            koji_load_threshold = get_config('koji_config.load_threshold')
            if koji_load_threshold < 1:
                koji_load = koji_util.get_koji_load(
                    koji_session=koji_session,
                    all_arches=all_arches,
                    arches=arches,
                )
                if koji_load > koji_load_threshold:
                    self.log.debug("Not scheduling {}: {} koji load"
                                   .format(package, koji_load))
                    return

            self.log.info('Scheduling build for {} in {}, priority {}'
                          .format(package.name, package.collection.name, priority))
            build = backend.submit_build(
                self.session,
                package,
                arch_override=None if 'noarch' in arches else arches,
            )
            package.current_priority = None
            package.scheduler_skip_reason = None
            package.manual_priority = 0

            if not build:
                self.skip_no_srpm(package)
                continue

            self.db.commit()
            break
示例#4
0
 def test_koji_load_arm(self):
     load = koji_util.get_koji_load(self.session, self.all_arches,
                                    ['armv7hl'])
     self.assertAlmostEqual(0.8958, load, 4)
示例#5
0
 def test_koji_load_intel(self):
     load = koji_util.get_koji_load(self.session, self.all_arches,
                                    ['i686', 'x86_64'])
     self.assertAlmostEqual(0.5119, load, 4)
示例#6
0
 def test_koji_load_noarch(self):
     load = koji_util.get_koji_load(self.session, self.all_arches,
                                    ['noarch'])
     self.assertAlmostEqual(0.4305, load, 4)
示例#7
0
 def test_koji_load_arm(self):
     load = koji_util.get_koji_load(self.session, self.all_arches, ['armv7hl'])
     self.assertAlmostEqual(0.8958, load, 4)
示例#8
0
 def test_koji_load_intel(self):
     load = koji_util.get_koji_load(self.session, self.all_arches, ['i686', 'x86_64'])
     self.assertAlmostEqual(0.5119, load, 4)
示例#9
0
 def test_koji_load_noarch(self):
     load = koji_util.get_koji_load(self.session, self.all_arches, ['noarch'])
     self.assertAlmostEqual(0.4305, load, 4)