Merge branch 'stable-2.11' into stable-2.12
authorKlaus Aehlig <aehlig@google.com>
Fri, 9 May 2014 11:39:13 +0000 (13:39 +0200)
committerKlaus Aehlig <aehlig@google.com>
Fri, 9 May 2014 12:05:32 +0000 (14:05 +0200)
* stable-2.11
  Add hsqueeze to NEWS
  kvm: use a dedicated QMP socket for kvmd
  Add design-node-security.rst to docinput

* stable-2.10
  Test parallel instance ops and plain instances
  Test parallel creation of DRBD instances
  Test parallel job submission performance
  Test parallel instance query operations
  Test parallel instance operations
  Test parallel instance modification
  Test parallel node-count instance creation
  Test parallel instance creation and removal
  Fail in replace-disks if attaching disks fails
  Add a basic test for --restricted-migration
  Describe the --restricted-migration option
  Support restricted migration
  Add an option for restricted migration
  Add an example for node evacuation
  Add a test for parsing version strings
  Set correct Ganeti version on setup commands
  Add a utility to combine shell commands
  Add design doc for performance tests

* stable-2.9
  KVM: set IFF_ONE_QUEUE on created tap interfaces
  Add configure option to pass GHC flags

Conflicts:
doc/design-draft.rst
lib/hypervisor/hv_kvm/__init__.py
qa/qa_job_utils.py
Resolution:
trivial, following code moves

Signed-off-by: Klaus Aehlig <aehlig@google.com>
Reviewed-by: Petr Pudlak <pudlak@google.com>

13 files changed:
1  2 
Makefile.am
NEWS
configure.ac
doc/design-draft.rst
lib/bootstrap.py
lib/cmdlib/instance_storage.py
lib/hypervisor/hv_kvm/__init__.py
lib/hypervisor/hv_kvm/netdev.py
lib/utils/text.py
qa/ganeti-qa.py
qa/qa_job_utils.py
qa/qa_utils.py
src/Ganeti/HTools/Cluster.hs

diff --cc Makefile.am
@@@ -1377,8 -1280,8 +1382,9 @@@ TEST_FILES = 
        test/data/htools/hail-invalid-reloc.json \
        test/data/htools/hail-node-evac.json \
        test/data/htools/hail-reloc-drbd.json \
 +      test/data/htools/hbal-cpu-speed.data \
        test/data/htools/hbal-dyn.data \
+       test/data/htools/hbal-evac.data \
        test/data/htools/hbal-excl-tags.data \
        test/data/htools/hbal-split-insts.data \
        test/data/htools/hspace-tiered-dualspec-exclusive.data \
diff --cc NEWS
Simple merge
diff --cc configure.ac
Simple merge
@@@ -19,10 -19,8 +19,11 @@@ Design document draft
     design-daemons.rst
     design-hsqueeze.rst
     design-os.rst
 +   design-move-instance-improvements.rst
     design-node-security.rst
 +   design-systemd.rst
 +   design-cpu-speed.rst
+    design-performance-tests.rst
  
  .. vim: set textwidth=72 :
  .. Local Variables:
Simple merge
Simple merge
Simple merge
index dbbd6ce,0000000..a4f2b5d
mode 100644,000000..100644
--- /dev/null
@@@ -1,131 -1,0 +1,132 @@@
 +#
 +#
 +
 +# Copyright (C) 2014 Google Inc.
 +#
 +# This program is free software; you can redistribute it and/or modify
 +# it under the terms of the GNU General Public License as published by
 +# the Free Software Foundation; either version 2 of the License, or
 +# (at your option) any later version.
 +#
 +# This program is distributed in the hope that it will be useful, but
 +# WITHOUT ANY WARRANTY; without even the implied warranty of
 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 +# General Public License for more details.
 +#
 +# You should have received a copy of the GNU General Public License
 +# along with this program; if not, write to the Free Software
 +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 +# 02110-1301, USA.
 +
 +
 +"""KVM hypervisor tap device helpers
 +
 +"""
 +
 +import os
 +import logging
 +import struct
 +import fcntl
 +
 +from ganeti import errors
 +
 +
 +# TUN/TAP driver constants, taken from <linux/if_tun.h>
 +# They are architecture-independent and already hardcoded in qemu-kvm source,
 +# so we can safely include them here.
 +TUNSETIFF = 0x400454ca
 +TUNGETIFF = 0x800454d2
 +TUNGETFEATURES = 0x800454cf
 +IFF_TAP = 0x0002
 +IFF_NO_PI = 0x1000
++IFF_ONE_QUEUE = 0x2000
 +IFF_VNET_HDR = 0x4000
 +
 +
 +def _GetTunFeatures(fd, _ioctl=fcntl.ioctl):
 +  """Retrieves supported TUN features from file descriptor.
 +
 +  @see: L{_ProbeTapVnetHdr}
 +
 +  """
 +  req = struct.pack("I", 0)
 +  try:
 +    buf = _ioctl(fd, TUNGETFEATURES, req)
 +  except EnvironmentError, err:
 +    logging.warning("ioctl(TUNGETFEATURES) failed: %s", err)
 +    return None
 +  else:
 +    (flags, ) = struct.unpack("I", buf)
 +    return flags
 +
 +
 +def _ProbeTapVnetHdr(fd, _features_fn=_GetTunFeatures):
 +  """Check whether to enable the IFF_VNET_HDR flag.
 +
 +  To do this, _all_ of the following conditions must be met:
 +   1. TUNGETFEATURES ioctl() *must* be implemented
 +   2. TUNGETFEATURES ioctl() result *must* contain the IFF_VNET_HDR flag
 +   3. TUNGETIFF ioctl() *must* be implemented; reading the kernel code in
 +      drivers/net/tun.c there is no way to test this until after the tap device
 +      has been created using TUNSETIFF, and there is no way to change the
 +      IFF_VNET_HDR flag after creating the interface, catch-22! However both
 +      TUNGETIFF and TUNGETFEATURES were introduced in kernel version 2.6.27,
 +      thus we can expect TUNGETIFF to be present if TUNGETFEATURES is.
 +
 +   @type fd: int
 +   @param fd: the file descriptor of /dev/net/tun
 +
 +  """
 +  flags = _features_fn(fd)
 +
 +  if flags is None:
 +    # Not supported
 +    return False
 +
 +  result = bool(flags & IFF_VNET_HDR)
 +
 +  if not result:
 +    logging.warning("Kernel does not support IFF_VNET_HDR, not enabling")
 +
 +  return result
 +
 +
 +def OpenTap(vnet_hdr=True, name=""):
 +  """Open a new tap device and return its file descriptor.
 +
 +  This is intended to be used by a qemu-type hypervisor together with the -net
 +  tap,fd=<fd> command line parameter.
 +
 +  @type vnet_hdr: boolean
 +  @param vnet_hdr: Enable the VNET Header
 +
 +  @type name: string
 +  @param name: name for the TAP interface being created; if an empty
 +               string is passed, the OS will generate a unique name
 +
 +  @return: (ifname, tapfd)
 +  @rtype: tuple
 +
 +  """
 +  try:
 +    tapfd = os.open("/dev/net/tun", os.O_RDWR)
 +  except EnvironmentError:
 +    raise errors.HypervisorError("Failed to open /dev/net/tun")
 +
-   flags = IFF_TAP | IFF_NO_PI
++  flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE
 +
 +  if vnet_hdr and _ProbeTapVnetHdr(tapfd):
 +    flags |= IFF_VNET_HDR
 +
 +  # The struct ifreq ioctl request (see netdevice(7))
 +  ifr = struct.pack("16sh", name, flags)
 +
 +  try:
 +    res = fcntl.ioctl(tapfd, TUNSETIFF, ifr)
 +  except EnvironmentError, err:
 +    raise errors.HypervisorError("Failed to allocate a new TAP device: %s" %
 +                                 err)
 +
 +  # Get the interface name from the ioctl
 +  ifname = struct.unpack("16sh", res)[0].strip("\x00")
 +  return (ifname, tapfd)
Simple merge
diff --cc qa/ganeti-qa.py
Simple merge
Simple merge
diff --cc qa/qa_utils.py
Simple merge
Simple merge