LGTM, thanks
On Wed, Jul 30, 2014 at 6:36 PM, Yuto KAWAMURA(kawamuray) < [email protected]> wrote: > - Add the _GetCurrentCgroupSubsysGroups to read the current cgroup > subsystem hierarchies from /proc/self/cgroup. > - Add the _GetCgroupInstanceSubsysDir to return the path of instance > cgroup subsystem directory. > > Signed-off-by: Yuto KAWAMURA(kawamuray) <[email protected]> > --- > lib/hypervisor/hv_lxc.py | 46 > ++++++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 44 insertions(+), 2 deletions(-) > > diff --git a/lib/hypervisor/hv_lxc.py b/lib/hypervisor/hv_lxc.py > index 38dee2a..b63342a 100644 > --- a/lib/hypervisor/hv_lxc.py > +++ b/lib/hypervisor/hv_lxc.py > @@ -55,6 +55,8 @@ class LXCHypervisor(hv_base.BaseHypervisor): > """ > _ROOT_DIR = pathutils.RUN_DIR + "/lxc" > _CGROUP_ROOT_DIR = _ROOT_DIR + "/cgroup" > + _PROC_CGROUP_FILE = "/proc/self/cgroup" > + > _DEVS = [ > "c 1:3", # /dev/null > "c 1:5", # /dev/zero > @@ -234,6 +236,46 @@ class LXCHypervisor(hv_base.BaseHypervisor): > return cls._MountCgroupSubsystem(subsystem) > > @classmethod > + def _GetCurrentCgroupSubsysGroups(cls): > + """Return the dict of cgroup subsystem hierarchies this process > belongs to. > + > + The dictionary has the cgroup subsystem as a key and its hierarchy as > a > + value. > + Information is read from /proc/self/cgroup. > + > + """ > + try: > + cgroup_list = utils.ReadFile(cls._PROC_CGROUP_FILE) > + except EnvironmentError, err: > + raise HypervisorError("Failed to read %s : %s" % > + (cls._PROC_CGROUP_FILE, err)) > + > + cgroups = {} > + for line in filter(None, cgroup_list.split("\n")): > + _, subsystems, hierarchy = line.split(":") > + for subsys in subsystems.split(","): > + cgroups[subsys] = hierarchy[1:] # discard first '/' > + > + return cgroups > + > + @classmethod > + def _GetCgroupInstanceSubsysDir(cls, instance_name, subsystem): > + """Return the directory of the cgroup subsystem for the instance. > + > + @type instance_name: string > + @param instance_name: instance name > + @type subsystem: string > + @param subsystem: cgroup subsystem name > + @rtype string > + @return path of the instance hierarchy directory for the subsystem > + > + """ > + subsys_dir = cls._GetOrPrepareCgroupSubsysMountPoint(subsystem) > + base_group = cls._GetCurrentCgroupSubsysGroups().get(subsystem, "") > + > + return utils.PathJoin(subsys_dir, base_group, "lxc", instance_name) > + > + @classmethod > def _GetCgroupInstanceValue(cls, instance_name, subsystem, param): > """Return the value of the specified cgroup parameter. > > @@ -247,8 +289,8 @@ class LXCHypervisor(hv_base.BaseHypervisor): > @return value read from cgroup subsystem fs > > """ > - subsys_dir = cls._GetOrPrepareCgroupSubsysMountPoint(subsystem) > - param_file = utils.PathJoin(subsys_dir, "lxc", instance_name, param) > + subsys_dir = cls._GetCgroupInstanceSubsysDir(instance_name, subsystem) > + param_file = utils.PathJoin(subsys_dir, param) > return utils.ReadFile(param_file).rstrip("\n") > > @classmethod > -- > 1.8.5.5 > > Hrvoje Ribicic Ganeti Engineering Google Germany GmbH Dienerstr. 12, 80331, München Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg Geschäftsführer: Graham Law, Christine Elizabeth Flores Steuernummer: 48/725/00206 Umsatzsteueridentifikationsnummer: DE813741370
