diff options
| -rw-r--r-- | bitbake/lib/bb/runqueue.py | 30 | 
1 files changed, 23 insertions, 7 deletions
| diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 6d9f6dc8d4..a1f79e9f03 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py @@ -177,6 +177,25 @@ class RunQueueData:          self.stampwhitelist = bb.data.getVar("BB_STAMP_WHITELIST", cfgData, 1) or ""          self.multi_provider_whitelist = (bb.data.getVar("MULTI_PROVIDER_WHITELIST", cfgData, 1) or "").split() +        self.schedulers = set(obj for obj in globals().itervalues() +                              if type(obj) is type and issubclass(obj, RunQueueScheduler)) + +        user_schedulers = bb.data.getVar("BB_SCHEDULERS", cfgData, True) +        if user_schedulers: +            for sched in user_schedulers.split(): +                if not "." in sched: +                    bb.note("Ignoring scheduler '%s' from BB_SCHEDULERS: not an import" % sched) +                    continue + +                modname, name = sched.rsplit(".", 1) +                try: +                    module = __import__(modname, fromlist=(name,)) +                except ImportError, exc: +                    logger.critical("Unable to import scheduler '%s' from '%s': %s" % (name, modname, exc)) +                    raise SystemExit(1) +                else: +                    self.schedulers.add(getattr(module, name)) +          self.reset()      def reset(self): @@ -1183,17 +1202,14 @@ class RunQueueExecuteTasks(RunQueueExecute):          event.fire(bb.event.StampUpdate(self.rqdata.target_pairs, self.rqdata.dataCache.stamp), self.cfgData) -        schedulers = [obj for obj in globals().itervalues() -                      if type(obj) is type and issubclass(obj, RunQueueScheduler)] -        for scheduler in schedulers: +        for scheduler in self.rqdata.schedulers:              if self.scheduler == scheduler.name:                  self.sched = scheduler(self, self.rqdata) +                bb.msg.debug(1, bb.msg.domain.RunQueue, "Using runqueue scheduler '%s'" % scheduler.name)                  break          else: -            bb.error("Invalid scheduler '%s', using default 'speed' scheduler" % self.scheduler) -            bb.error("Available schedulers: %s" % ", ".join(obj.name for obj in schedulers)) -            self.sched = RunQueueSchedulerSpeed(self, self.rqdata) - +            bb.fatal("Invalid scheduler '%s'. Available schedulers: %s" % +                     (self.scheduler, ", ".join(obj.name for obj in self.rqdata.schedulers)))      def task_completeoutright(self, task):          """ | 
