Add the _GetCgroupInstanceParamPath function which returns the path of the specified cgroup parameter file and change the _GetCgroupInstanceValue to use this function. By this patch, "subsystem" argument for this function was reduced because it can be determined by the param_name argument.
Signed-off-by: Yuto KAWAMURA(kawamuray) <[email protected]> --- lib/hypervisor/hv_lxc.py | 33 ++++++++++++++++++---------- test/py/ganeti.hypervisor.hv_lxc_unittest.py | 4 ++-- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/lib/hypervisor/hv_lxc.py b/lib/hypervisor/hv_lxc.py index 6ddf08e..2eb9c95 100644 --- a/lib/hypervisor/hv_lxc.py +++ b/lib/hypervisor/hv_lxc.py @@ -298,22 +298,35 @@ class LXCHypervisor(hv_base.BaseHypervisor): return utils.PathJoin(subsys_dir, base_group, "lxc", instance_name) @classmethod - def _GetCgroupInstanceValue(cls, instance_name, subsystem, param): + def _GetCgroupInstanceParamPath(cls, instance_name, param_name): + """Return the path of the specified cgroup parameter file. + + @type instance_name: string + @param instance_name: instance name + @type param_name: string + @param param_name: cgroup subsystem parameter name + @rtype string + @return path of the cgroup subsystem parameter file + + """ + subsystem = param_name.split('.', 1)[0] + subsys_dir = cls._GetCgroupInstanceSubsysDir(instance_name, subsystem) + return utils.PathJoin(subsys_dir, param_name) + + @classmethod + def _GetCgroupInstanceValue(cls, instance_name, param_name): """Return the value of the specified cgroup parameter. @type instance_name: string @param instance_name: instance name - @type subsystem: string - @param subsystem: cgroup subsystem name - @type param: string - @param param: cgroup subsystem parameter name + @type param_name: string + @param param_name: cgroup subsystem parameter name @rtype string @return value read from cgroup subsystem fs """ - subsys_dir = cls._GetCgroupInstanceSubsysDir(instance_name, subsystem) - param_file = utils.PathJoin(subsys_dir, param) - return utils.ReadFile(param_file).rstrip("\n") + param_path = cls._GetCgroupInstanceParamPath(instance_name, param_name) + return utils.ReadFile(param_path).rstrip("\n") @classmethod def _GetCgroupCpuList(cls, instance_name): @@ -321,8 +334,7 @@ class LXCHypervisor(hv_base.BaseHypervisor): """ try: - cpumask = cls._GetCgroupInstanceValue(instance_name, - "cpuset", "cpuset.cpus") + cpumask = cls._GetCgroupInstanceValue(instance_name, "cpuset.cpus") except EnvironmentError, err: raise errors.HypervisorError("Getting CPU list for instance" " %s failed: %s" % (instance_name, err)) @@ -336,7 +348,6 @@ class LXCHypervisor(hv_base.BaseHypervisor): """ try: mem_limit = cls._GetCgroupInstanceValue(instance_name, - "memory", "memory.limit_in_bytes") mem_limit = int(mem_limit) except EnvironmentError: diff --git a/test/py/ganeti.hypervisor.hv_lxc_unittest.py b/test/py/ganeti.hypervisor.hv_lxc_unittest.py index 2285046..df7309d 100755 --- a/test/py/ganeti.hypervisor.hv_lxc_unittest.py +++ b/test/py/ganeti.hypervisor.hv_lxc_unittest.py @@ -171,12 +171,12 @@ class TestCgroupReadData(LXCHypervisorTestCase): def testGetCgroupInstanceValue(self, getdir_mock): getdir_mock.return_value = utils.PathJoin(self.cgroot, "memory", "lxc", "instance1") - self.assertEqual(self.hv._GetCgroupInstanceValue("instance1", "memory", + self.assertEqual(self.hv._GetCgroupInstanceValue("instance1", "memory.limit_in_bytes"), "128") getdir_mock.return_value = utils.PathJoin(self.cgroot, "cpuset", "some_group", "lxc", "instance1") - self.assertEqual(self.hv._GetCgroupInstanceValue("instance1", "cpuset", + self.assertEqual(self.hv._GetCgroupInstanceValue("instance1", "cpuset.cpus"), "0-1") -- 2.0.4
