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

Reply via email to