From b7db1dd59d8654a2640334e5b08e71c14930e28c Mon Sep 17 00:00:00 2001 From: tazend <75485188+tazend@users.noreply.github.com> Date: Sun, 26 Jan 2025 14:13:50 +0100 Subject: [PATCH] slurmctld.Config: defer cgroup,mpi and accounting gather config parsing (#372) Also fix cgroup_config.systemd_timeout parsing (cherry picked from commit e4684e0a421c5b241dcf9ff92fd46cf53c90402d) --- pyslurm/core/slurmctld/config.pxd | 11 +++++------ pyslurm/core/slurmctld/config.pyx | 30 +++++++++++++++++++++++------- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/pyslurm/core/slurmctld/config.pxd b/pyslurm/core/slurmctld/config.pxd index 72443d52..62cbf343 100644 --- a/pyslurm/core/slurmctld/config.pxd +++ b/pyslurm/core/slurmctld/config.pxd @@ -1058,12 +1058,11 @@ cdef class Config: {slurm.conf#OPT_X11Parameters} """ - cdef slurm_conf_t *ptr - - cdef public: - CgroupConfig cgroup_config - AccountingGatherConfig accounting_gather_config - MPIConfig mpi_config + cdef: + slurm_conf_t *ptr + CgroupConfig _cgroup_config + AccountingGatherConfig _accounting_gather_config + MPIConfig _mpi_config # Documentation for the attributes in the MPIConfig class have diff --git a/pyslurm/core/slurmctld/config.pyx b/pyslurm/core/slurmctld/config.pyx index ebbba8b3..5bc9e76e 100644 --- a/pyslurm/core/slurmctld/config.pyx +++ b/pyslurm/core/slurmctld/config.pyx @@ -109,7 +109,10 @@ cdef class CgroupConfig: out.mountpoint = conf.get("CgroupMountpoint", "/sys/fs/cgroup") out.plugin = conf.get("CgroupPlugin", "autodetect") - out.systemd_timeout = int(conf.get("SystemdTimeout", 1000)) + + systemd_timeout = conf.get("SystemdTimeout", "1000") + out.systemd_timeout = int(systemd_timeout.split(" ")[0]) + out.ignore_systemd = _yesno_to_bool(conf.get("IgnoreSystemd")) out.ignore_systemd_on_failure = _yesno_to_bool(conf.get("IgnoreSystemdOnFailure")) out.enable_controllers = _yesno_to_bool(conf.get("EnableControllers")) @@ -205,13 +208,7 @@ cdef class Config: """ cdef Config conf = Config.__new__(Config) verify_rpc(slurm_load_ctl_conf(0, &conf.ptr)) - - conf.cgroup_config = CgroupConfig.from_ptr(conf.ptr.cgroup_conf) - conf.accounting_gather_config = AccountingGatherConfig.from_ptr( - conf.ptr.acct_gather_conf) - conf.mpi_config = MPIConfig.from_ptr(conf.ptr.mpi_conf) # TODO: node_features_conf - return conf def to_dict(self): @@ -231,6 +228,25 @@ cdef class Config: out["mpi_config"] = self.mpi_config.to_dict() return out + @property + def cgroup_config(self): + if not self._cgroup_config: + self._cgroup_config = CgroupConfig.from_ptr(self.ptr.cgroup_conf) + return self._cgroup_config + + @property + def accounting_gather_config(self): + if not self._accounting_gather_config: + self._accounting_gather_config = AccountingGatherConfig.from_ptr( + self.ptr.acct_gather_conf) + return self._accounting_gather_config + + @property + def mpi_config(self): + if not self._mpi_config: + self._mpi_config = MPIConfig.from_ptr(self.ptr.mpi_conf) + return self._mpi_config + @property def accounting_storage_enforce(self): cdef char tmp[128]