Exemplo n.º 1
0
    def run_generation_techniques(self):
        tests_this_generation = 0
        self.plugin_proxy.before_techniques()
        self.root_technique.start_batch()
        if self.batch_composer:
            batch = self.batch_composer.compose_batch()
            batch_size = len(batch)
        else:
            batch_size = self.args.parallelism
        for z in xrange(batch_size):
            if self.batch_composer:
                dr = batch.pop(0)
            elif self.seed_cfgs:
                config = self.get_configuration(self.seed_cfgs.pop())
                dr = DesiredResult(configuration=config,
                                   requestor='seed',
                                   generation=self.generation,
                                   request_date=datetime.now(),
                                   tuning_run=self.tuning_run)
            else:
                dr = self.root_technique.desired_result()
            if dr is None or dr is False:
                log.debug("no desired result, skipping to testing phase")
                break
            self.session.flush()  # populate configuration_id
            duplicates = (self.session.query(DesiredResult).filter_by(
                tuning_run=self.tuning_run,
                configuration_id=dr.configuration_id).filter(
                    DesiredResult.id != dr.id).order_by(
                        DesiredResult.request_date).limit(1).all())
            self.session.add(dr)
            if len(duplicates):
                if not self.args.no_dups:
                    log.warning("duplicate configuration request #%d %s/%s %s",
                                self.test_count, dr.requestor,
                                duplicates[0].requestor,
                                'OLD' if duplicates[0].result else 'PENDING')
                self.session.flush()
                desired_result_id = dr.id

                def callback(result):
                    dr = self.session.query(DesiredResult).get(
                        desired_result_id)
                    dr.result = result
                    dr.state = 'COMPLETE'
                    dr.start_date = datetime.now()

                self.register_result_callback(duplicates[0], callback)
            else:
                log.debug("desired result id=%d, cfg=%d", dr.id,
                          dr.configuration_id)
                dr.state = 'REQUESTED'
            self.test_count += 1
            tests_this_generation += 1
        self.plugin_proxy.after_techniques()
        return tests_this_generation
Exemplo n.º 2
0
  def run_generation_techniques(self):
    tests_this_generation = 0
    self.plugin_proxy.before_techniques()
    for z in xrange(self.args.parallelism):
      if self.seed_cfgs:
        config = self.get_configuration(self.seed_cfgs.pop())
        dr = DesiredResult(configuration=config,
                           requestor='seed',
                           generation=self.generation,
                           request_date=datetime.now(),
                           tuning_run=self.tuning_run)
      else:
        dr = self.root_technique.desired_result()
      if dr is None:
        log.debug("no desired result, skipping to testing phase")
        break
      self.session.flush()  # populate configuration_id
      duplicates = (self.session.query(DesiredResult)
                    .filter_by(tuning_run=self.tuning_run,
                               configuration_id=dr.configuration_id)
                    .filter(DesiredResult.id != dr.id)
                    .order_by(DesiredResult.request_date)
                    .limit(1).all())
      self.session.add(dr)
      if len(duplicates):
        if not self.args.no_dups:
          log.warning("duplicate configuration request #%d %s/%s %s",
                      self.test_count,
                      dr.requestor,
                      duplicates[0].requestor,
                      'OLD' if duplicates[0].result else 'PENDING')
        self.session.flush()
        desired_result_id = dr.id

        def callback(result):
          dr = self.session.query(DesiredResult).get(desired_result_id)
          dr.result = result
          dr.state = 'COMPLETE'
          dr.start_date = datetime.now()

        self.register_result_callback(duplicates[0], callback)
      else:
        log.debug("desired result id=%d, cfg=%d", dr.id, dr.configuration_id)
        dr.state = 'REQUESTED'
      self.test_count += 1
      tests_this_generation += 1
    self.plugin_proxy.after_techniques()
    return tests_this_generation