LGTM, thanks

On Wed, Aug 27, 2014 at 10:17 PM, Yuto KAWAMURA(kawamuray) <
[email protected]> wrote:

> Read the cputime(usage) of the LXC instance from the cpuacct.usage
> cgroup parameter and include it as the "time" field of the return value
> of GetInstanceInfo.
> This commit also discards the TODO comment about something which is
> already not accurate.
>
> Signed-off-by: Yuto KAWAMURA(kawamuray) <[email protected]>
> ---
>  lib/hypervisor/hv_lxc.py                     | 19 ++++++++++++++++---
>  test/py/ganeti.hypervisor.hv_lxc_unittest.py |  3 ++-
>  2 files changed, 18 insertions(+), 4 deletions(-)
>
> diff --git a/lib/hypervisor/hv_lxc.py b/lib/hypervisor/hv_lxc.py
> index 58acfac..332c3dd 100644
> --- a/lib/hypervisor/hv_lxc.py
> +++ b/lib/hypervisor/hv_lxc.py
> @@ -89,6 +89,7 @@ class LXCHypervisor(hv_base.BaseHypervisor):
>      "cpuset",
>      "memory",
>      "devices",
> +    "cpuacct",
>      ]
>
>    def __init__(self):
> @@ -364,6 +365,19 @@ class LXCHypervisor(hv_base.BaseHypervisor):
>      return utils.ParseCpuMask(cpumask)
>
>    @classmethod
> +  def _GetCgroupCpuUsage(cls, instance_name):
> +    """Return the CPU usage of an instance.
> +
> +    """
> +    try:
> +      cputime_ns = cls._GetCgroupInstanceValue(instance_name,
> "cpuacct.usage")
> +    except EnvironmentError, err:
> +      raise HypervisorError("Failed to get the cpu usage of %s: %s" %
> +                            (instance_name, err))
> +
> +    return float(cputime_ns) / 10 ** 9 # nano secs to float secs
> +
> +  @classmethod
>    def _GetCgroupMemoryLimit(cls, instance_name):
>      """Return the memory limit for an instance
>
> @@ -407,15 +421,14 @@ class LXCHypervisor(hv_base.BaseHypervisor):
>      @return: (name, id, memory, vcpus, stat, times)
>
>      """
> -    # TODO: read container info from the cgroup mountpoint
> -
>      if not self._IsInstanceAlive(instance_name):
>        return None
>
>      cpu_list = self._GetCgroupCpuList(instance_name)
>      memory = self._GetCgroupMemoryLimit(instance_name) / (1024 ** 2)
> +    cputime = self._GetCgroupCpuUsage(instance_name)
>      return (instance_name, 0, memory, len(cpu_list),
> -            hv_base.HvInstanceState.RUNNING, 0)
> +            hv_base.HvInstanceState.RUNNING, cputime)
>
>    def GetAllInstancesInfo(self, hvparams=None):
>      """Get properties of all instances.
> diff --git a/test/py/ganeti.hypervisor.hv_lxc_unittest.py b/test/py/
> ganeti.hypervisor.hv_lxc_unittest.py
> index df7309d..2559d58 100755
> --- a/test/py/ganeti.hypervisor.hv_lxc_unittest.py
> +++ b/test/py/ganeti.hypervisor.hv_lxc_unittest.py
> @@ -103,12 +103,13 @@ class
> TestLXCHypervisorGetInstanceInfo(LXCHypervisorTestCase):
>      super(TestLXCHypervisorGetInstanceInfo, self).setUp()
>      self.hv._GetCgroupCpuList = mock.Mock(return_value=[1, 3])
>      self.hv._GetCgroupMemoryLimit = mock.Mock(return_value=128*(1024**2))
> +    self.hv._GetCgroupCpuUsage = mock.Mock(return_value=5.01)
>
>    @patch_object(LXCHypervisor, "_IsInstanceAlive")
>    def testRunningInstance(self, isalive_mock):
>      isalive_mock.return_value = True
>      self.assertEqual(self.hv.GetInstanceInfo("inst1"),
> -                     ("inst1", 0, 128, 2,
> hv_base.HvInstanceState.RUNNING, 0))
> +                     ("inst1", 0, 128, 2,
> hv_base.HvInstanceState.RUNNING, 5.01))
>
>    @patch_object(LXCHypervisor, "_IsInstanceAlive")
>    def testInactiveOrNonexistentInstance(self, isalive_mock):
> --
> 2.0.4
>
>


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