[REF] runbot: centralize cpu_limit in _run_step

In order to keep it coherent, the cpu_limit computation can be done in
one place instead of defining it in all _run* methods.

In python steps, it can still be overridden when returning
docker_params.
This commit is contained in:
Christophe Monniez 2022-12-08 14:19:59 +01:00 committed by xdo
parent d0a96faf84
commit 412baa3fad

View File

@ -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