diff --git a/runbot/models/build_config.py b/runbot/models/build_config.py index 741ac437..d3d8799e 100644 --- a/runbot/models/build_config.py +++ b/runbot/models/build_config.py @@ -264,13 +264,16 @@ class ConfigStep(models.Model): run_method = getattr(self, '_run_%s' % self.job_type) docker_params = run_method(build, **kwargs) if docker_params: - return build._docker_run(self, **docker_params) + if 'cpu_limit' not in docker_params: + max_timeout = int(self.env['ir.config_parameter'].get_param('runbot.runbot_timeout', default=10000)) + docker_params['cpu_limit'] = min(self.cpu_limit, max_timeout) + container_cpus = float(self.container_cpus or self.env['ir.config_parameter'].sudo().get_param('runbot.runbot_containers_cpus', 0)) if 'cpus' not in docker_params and container_cpus: logical_cpu_count = psutil.cpu_count(logical=True) physical_cpu_count = psutil.cpu_count(logical=False) docker_params['cpus'] = float((logical_cpu_count / physical_cpu_count) * container_cpus) - build._docker_run(**docker_params) + return build._docker_run(self, **docker_params) return True def _run_create_build(self, build): @@ -391,7 +394,7 @@ class ConfigStep(models.Model): except Exception: _logger.exception('An error occured while reloading nginx') build._log('', "An error occured while reloading nginx, skipping") - return dict(cmd=cmd, container_name=docker_name, exposed_ports=[build_port, build_port + 1], ro_volumes=exports, env_variables=env_variables) + return dict(cmd=cmd, container_name=docker_name, exposed_ports=[build_port, build_port + 1], ro_volumes=exports, env_variables=env_variables, cpu_limit=None) def _run_install_odoo(self, build): exports = build._checkout() @@ -476,10 +479,8 @@ class ConfigStep(models.Model): if self.flamegraph: cmd.finals.append(['flamegraph.pl', '--title', 'Flamegraph %s for build %s' % (self.name, build.id), self._perfs_data_path(), '>', self._perfs_data_path(ext='svg')]) cmd.finals.append(['gzip', '-f', self._perfs_data_path()]) # keep data but gz them to save disc space - max_timeout = int(self.env['ir.config_parameter'].get_param('runbot.runbot_timeout', default=10000)) - timeout = min(self.cpu_limit, max_timeout) env_variables = self.additionnal_env.split(';') if self.additionnal_env else [] - return dict(cmd=cmd, container_name=build._get_docker_name(), cpu_limit=timeout, ro_volumes=exports, env_variables=env_variables) + return dict(cmd=cmd, container_name=build._get_docker_name(), ro_volumes=exports, env_variables=env_variables) def _upgrade_create_childs(self): pass @@ -715,7 +716,6 @@ class ConfigStep(models.Model): migrate_cmd += ['--upgrade-path', ','.join(upgrade_paths)] build._log('run', 'Start migration build %s' % build.dest) - timeout = self.cpu_limit migrate_cmd.finals.append(['psql', migrate_db_name, '-c', '"SELECT id, name, state FROM ir_module_module WHERE state NOT IN (\'installed\', \'uninstalled\', \'uninstallable\') AND name NOT LIKE \'test_%\' "', '>', '/data/build/logs/modules_states.txt']) @@ -723,7 +723,7 @@ class ConfigStep(models.Model): exception_env = self.env['runbot.upgrade.exception']._generate() if exception_env: env_variables.append(exception_env) - return dict(cmd=migrate_cmd, container_name=build._get_docker_name(), cpu_limit=timeout, ro_volumes=exports, env_variables=env_variables, image_tag=target.params_id.dockerfile_id.image_tag) + return dict(cmd=migrate_cmd, container_name=build._get_docker_name(), ro_volumes=exports, env_variables=env_variables, image_tag=target.params_id.dockerfile_id.image_tag) def _run_restore(self, build): # exports = build._checkout() @@ -783,7 +783,7 @@ class ConfigStep(models.Model): ]) - return dict(cmd=cmd, container_name=build._get_docker_name(), cpu_limit=self.cpu_limit) + return dict(cmd=cmd, container_name=build._get_docker_name()) def _reference_builds(self, bundle, trigger): upgrade_dumps_trigger_id = trigger.upgrade_dumps_trigger_id