1. 04 6月, 2014 3 次提交
    • M
      virnuma: Implement virNumaGetDistances stub for non-NUMA · 3289edd2
      Michal Privoznik 提交于
      In case the libvirt is built without numactl support, we're
      missing the virNumaGetDistances() stub so the linking fails:
      
        CCLD     libvirt_lxc
      libvirt_lxc-nodeinfo.o: In function `virNodeCapsGetSiblingInfo':
      /home/zippy/tmp/libvirt.git/src/nodeinfo.c:1763: undefined reference to `virNumaGetDistances'
      collect2: error: ld returned 1 exit status
      make[3]: *** [libvirt_lxc] Error 1
      
      The issue was introduced in 77c830d8.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      3289edd2
    • M
      virCaps: Expose distance between host NUMA nodes · 8ba0a58f
      Michal Privoznik 提交于
      If user or management application wants to create a guest,
      it may be useful to know the cost of internode latencies
      before the guest resources are pinned. For example:
      
      <capabilities>
      
        <host>
          ...
          <topology>
            <cells num='2'>
              <cell id='0'>
                <memory unit='KiB'>4004132</memory>
                <distances>
                  <sibling id='0' value='10'/>
                  <sibling id='1' value='20'/>
                </distances>
                <cpus num='2'>
                  <cpu id='0' socket_id='0' core_id='0' siblings='0'/>
                  <cpu id='2' socket_id='0' core_id='2' siblings='2'/>
                </cpus>
              </cell>
              <cell id='1'>
                <memory unit='KiB'>4030064</memory>
                <distances>
                  <sibling id='0' value='20'/>
                  <sibling id='1' value='10'/>
                </distances>
                <cpus num='2'>
                  <cpu id='1' socket_id='0' core_id='0' siblings='1'/>
                  <cpu id='3' socket_id='0' core_id='2' siblings='3'/>
                </cpus>
              </cell>
            </cells>
          </topology>
          ...
        </host>
        ...
      </capabilities>
      
      We can see the distance from node1 to node0 is 20 and within nodes 10.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      8ba0a58f
    • M
      virnuma: Introduce virNumaGetDistances · 77c830d8
      Michal Privoznik 提交于
      The API gets a NUMA node and find distances to other nodes.  The
      distances are returned in an array. If an item X within the array
      equals to value of zero, then there's no such node as X.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      77c830d8
  2. 03 6月, 2014 33 次提交
    • P
      tests: monitor: json: Fix error message when returning json in json · 9046f910
      Peter Krempa 提交于
      The qemu JSON monitor test allows to test also expected command
      arguments. As the error from the monitor simulator is returned as a
      simulated qemu error (in JSON) all other JSON contained in the error
      message needs to be escaped. This will happen if the monitor command
      under test receives a JSON array as an argument.
      
      This will improve the error message from:
      libvirt:  error : internal error: cannot parse json { "error":  { "desc":
      "Invalid value of argument 'keys' of command 'send-key': expected 'ble'
      got '[{"type":"number","data":43},{"type":"number","data":26},
      {"type":"number","data":46},{"type":"number","data":32}]'",
      "class": "UnexpectedCommand" } }: lexical error: invalid string in json text.
      
      To:
      libvirt: QEMU Driver error : internal error: unable to execute QEMU
      command 'send-key': Invalid value of argument 'keys' of command
      'send-key': expected 'ble' got '[{"type":"number","data":43},
      {"type":"number","data":26},{"type":"number","data":46},
      {"type":"number","data":32}]'
      
      This improvement will not have any effect on tests executing as
      expected, but it will help test development.
      9046f910
    • P
      network: bridge: Avoid memory leak from networkBuildDhcpDaemonCommandLine · 23c2763b
      Peter Krempa 提交于
      If the leasehelper_path couldn't be found the code would leak the
      freshly constructed command structure. Re-arrange code to avoid the
      problem.
      
      Found by coverity, broken by baafe668.
      23c2763b
    • P
      tests: Build virstoragetest only when storage driver is compiled too · 835dc013
      Peter Krempa 提交于
      virstoragetest now requires parts of the storage driver to be built.
      Without this change the test can't be compiled on platforms that don't
      build the storage driver (mingw).
      
      make[2]: *** No rule to make target `../src/libvirt_driver_storage_impl.la', needed by `virstoragetest.exe'.  Stop.
      
      Broken by commit 713cc3b0
      835dc013
    • P
      qemu: monitor: Fix type of holdtime argument in qemuMonitorJSONSendKey · ce2107a9
      Peter Krempa 提交于
      qemuMonitorJSONSendKey declares the "holdtime" argument as unsigned int
      while the command was constructed in qemuMonitorJSONMakeCommand using
      the "P" modifier which took a unsigned long from the variable
      arguments which then made it possible to access uninitialized memory.
      
      This broke the qemumonitorjsontest on 32bit fedora 20:
      64) qemuMonitorJSONSendKey
      ... libvirt: QEMU Driver error : internal error: unsupported data type 'W' for arg 'WVSƒì ‹D$0è‘wÿÿÃAå' FAILED
      
      Uncovered by upstream commit f744b831.
      
      Additionally add test for the hold-time option.
      ce2107a9
    • D
      libxl: Avoid possible use of uninitialized mem in libxlDomainStart · 10a99a6d
      Daniel P. Berrange 提交于
      The 'libxl_domain_config' object is stack allocated which means its
      memory contents are undefined. The libxl_domain_config_dispose() call
      is only safe if the memory is initialized to a defined state. Not all
      code paths which reach libxl_domain_config_dispose() will ensure that
      libxl_domain_config_init() is called. Move the libxl_domain_config_init()
      call earlier in the function to ensure all codepaths have defined
      memory state.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      10a99a6d
    • D
      libxl: Move virDomainXMLOptionNew into libxlCreateXMLConf · 3bab69c3
      Daniel P. Berrange 提交于
      To allow the test suite to creat the XML option object,
      move the virDomainXMLOptionNew call into a libxlCreateXMLConf
      method.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      3bab69c3
    • D
      libxl: Don't pass libxlDriverPrivatePtr into libxlBuildDomainConfig · a6abdbf6
      Daniel P. Berrange 提交于
      To make it easier to test, change libxlBuildDomainConfig so
      that it takes a virPortAllocatorPtr instead of the larger
      libxlDriverPrivatePtr object.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      a6abdbf6
    • D
      libxl: Don't pass virDomainObjPtr to libxlBuildDomainConfig · 5da28f24
      Daniel P. Berrange 提交于
      To make it easier to unit test, change libxlBuildDomainConfig
      so that it takes 'virDomainDefPtr' and 'libxl_ctx *' objects
      as separate parameters.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      5da28f24
    • J
      qemu: Return in from qemuDomainRemove*Device · 5bf67032
      Jiri Denemark 提交于
      Some of the APIs already return int since they can produce errors that
      need to be propagated. For consistency reasons, this patch changes the
      rest of the APIs to also return int even though they do not fail or
      report any errors.
      5bf67032
    • J
      qemu: Remove character device backend only after frontend is gone · 55b21f9b
      Jiri Denemark 提交于
      In general, we should only remove a backend after seeing DEVICE_DELETED
      event for a corresponding frontend.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      55b21f9b
    • J
      qemu: Remove disk backend only after frontend is gone · 0635785b
      Jiri Denemark 提交于
      In general, we should only remove a backend after seeing DEVICE_DELETED
      event for a corresponding frontend. This doesn't make any difference for
      disks attached using -drive or drive_add since QEMU automatically
      removes their backends but it's still better to make our code
      consistent. And it may start making difference in case we switch to
      attaching disks using -blockdev.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      0635785b
    • J
      qemu: Remove interface backend only after frontend is gone · 81f76598
      Jiri Denemark 提交于
      [1] reported that we are removing network's backend too early. I didn't
      really get the reproducer but libvirt behaves strangely when a guest
      does not confirm the removal, e.g., it does not support PCI hotplug. In
      such case, detaching a network device leaves its frontend in place but
      removes the backend, which makes the device unusable for the guest.
      Moreover attaching the same device again succeeds and both the guest and
      libvirt will see two network interfaces attached but only one of them is
      actually working.
      
      I checked with Paolo Bonzini and he confirmed we should only remove a
      backend after seeing DEVICE_DELETED event for a corresponding frontend.
      
      [1] https://www.redhat.com/archives/libvir-list/2014-March/msg01740.htmlSigned-off-by: NJiri Denemark <jdenemar@redhat.com>
      81f76598
    • P
      tests: storagetest: Unify and reformat storage chain format string · 8ed19d8c
      Peter Krempa 提交于
      All the fields crammed into two lines weren't easy to parse by human
      eyes. Split up the format string into lines and put it into a central
      variable so that changes in two places aren't necessary.
      8ed19d8c
    • P
      qemu: json: Add format strings for optional command arguments · f744b831
      Peter Krempa 提交于
      This patch adds option to specify that a json qemu command argument is
      optional without the need to use if's or ternary operators to pass the
      list. Additionally all the modifier characters are documented to avoid
      user confusion.
      f744b831
    • P
      util: string: Return element count from virStringSplit · 68226749
      Peter Krempa 提交于
      To allow using the array manipulation macros on the arrays returned by
      virStringSplit we need to know the count of the elements in the array.
      Modify virStringSplit to return this value, rename it and add a helper
      with the old name so that we don't need to update all the code.
      68226749
    • P
      storage: Traverse backing chains of network disks · 1423ae29
      Peter Krempa 提交于
      Now we don't need to skip backing chain detection for remote disks.
      1423ae29
    • P
      storage: Change to new backing store parser · b225444e
      Peter Krempa 提交于
      Use the new backing store parser in the backing chain crawler. This
      change needs one test change where information about the NBD image are
      now parsed differently.
      b225444e
    • P
      storage: Add infrastructure to parse remote network backing names · ed68eb86
      Peter Krempa 提交于
      Add parsers for relative and absolute backing names for local and remote
      storage files.
      
      This parser parses relative paths as relative to their parents and
      absolute paths according to the protocol or local access.
      
      For remote storage volumes, all URI based backing file names are
      supported and for the qemu colon syntax the NBD protocol is supported.
      ed68eb86
    • P
      storage: Switch metadata crawler to use storage driver file access check · 6cdff20c
      Peter Krempa 提交于
      Use virStorageFileAccess() to to check whether the file is accessible in
      the main part of the metadata crawler.
      6cdff20c
    • P
      storage: Switch metadata crawler to use storage driver to read headers · 2bdb8b96
      Peter Krempa 提交于
      Use virStorageFileReadHeader() to read headers of storage files possibly
      on remote storage to retrieve the image metadata.
      
      The backend information is now parsed by
      virStorageFileGetMetadataInternal which is now exported from the util
      source and virStorageFileGetMetadataFromFDInternal now doesn't need to
      be exported.
      2bdb8b96
    • P
      storage: Switch metadata crawler to use storage driver to get unique path · 395171f8
      Peter Krempa 提交于
      Use the virStorageFileGetUniqueIdentifier() function to get a unique
      identifier regardless of the target storage type instead of relying on
      canonicalize_path().
      
      A new function that checks whether we support a given image is
      introduced to avoid errors for unimplemented backends.
      395171f8
    • P
      storage: backend: Add possibility to suppress errors from backend lookup · edfd6127
      Peter Krempa 提交于
      Add a new function wrapper and tweak the storage file backend lookup
      function so that it can be used without reporting error. This will be
      useful in the metadata crawler code where we need silently break if
      metadata retrieval is not supported for the current storage type.
      edfd6127
    • P
      test: storage: Initialize storage source to correct type · 29aabe73
      Peter Krempa 提交于
      Stat the path of the storage file being tested to set the correct type
      into the virStorageSource. This will avoid breaking the test suite when
      inquiring metadata of directory paths in the next patches.
      29aabe73
    • P
      storage: Determine the local storage type right away · d4c0ceae
      Peter Krempa 提交于
      When walking the backing chain we previously set the storage type to
      _FILE and let the virStorageFileGetMetadataFromFDInternal update it to
      the correct type later on.
      
      This patch moves the actual storage type determination to the place
      where we parse the backing store name so that the code can later be
      switched to use virStorageFileReadHeader() directly.
      d4c0ceae
    • P
      storage: Move virStorageFileGetMetadata to the storage driver · 713cc3b0
      Peter Krempa 提交于
      My future work will modify the metadata crawler function to use the
      storage driver file APIs to access the files instead of accessing them
      directly so that we will be able to request the metadata for remote
      files too. To avoid linking the storage driver to every helper file
      using the utils code, the backing chain traversal function needs to be
      moved to the storage driver source.
      
      Additionally the virt-aa-helper and virstoragetest programs need to be
      linked with the storage driver as a result of this change.
      713cc3b0
    • P
      storage: Add API to check accessibility of storage volumes · 4cb25055
      Peter Krempa 提交于
      Add a storage driver API equivalent of the access() function.
      Implementations for the filesystem and gluster backends are provided.
      4cb25055
    • P
      storage: backend: Add unique id retrieval API · 684ec651
      Peter Krempa 提交于
      Different protocols have different means to uniquely identify a storage
      file. This patch implements a storage driver API to retrieve a unique
      string describing a volume. The current implementation works for local
      storage only and returns the canonical path of the volume.
      
      To add caching support the local filesystem driver now has a private
      structure holding the cached string, which is created only when it's
      initially accessed.
      
      This patch provides the implementation for local files only for start.
      684ec651
    • M
      xenapi_utils: Adapt to enum cleanups · b20060ba
      Michal Privoznik 提交于
      It was just very recently that we transfered from:
      
        enum virSomeEnumName{
            ...
        };
      
      to:
        typedef enum {
            ...
        } virSomeEnumName;
      
      This change requires some code adaptation, which wasn't done for
      xenapi driver. With this fix we are able to build again.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      b20060ba
    • M
      virnuma.c: Fix some comments · 3dd23b61
      Michal Privoznik 提交于
      In 9dd02965 the virNumaGetNodeMemory was introduced, however the
      comment describing the function mentions virNumaGetNodeMemorySize.
      And there's one typo in virNumaIsAvailable() description.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      3dd23b61
    • J
      conf: more enum cleanups in "src/conf/domain_conf.h" · 5a2bd4c9
      Julio Faracco 提交于
      In "src/conf/domain_conf.h" there are many enum declarations. The
      cleanup in this header filer was started, but it wasn't enough and
      there are many other files that has enum variables declared. So, the
      commit was starting to be big. This commit finish the cleanup in this
      header file and in other files that has enum variables, parameters,
      or functions declared.
      Signed-off-by: NJulio Faracco <jcfaracco@gmail.com>
      Signed-off-by: NEric Blake <eblake@redhat.com>
      5a2bd4c9
    • J
      conf: enum cleanups in "src/conf/domain_conf.h" · d4dad162
      Julio Faracco 提交于
      In "src/conf/domain_conf.h" there are many enumerations (enum)
      declarations to be converted as a typedef too. As mentioned before,
      it's better to use a typedef for variable types, function types and
      other usages. I think this file has most of those enum declarations
      at "src/conf/". So, me and Eric Blake plan to keep the cleanups all
      over the source code. This time, most of the files changed in this
      commit are related to part of one file: "src/conf/domain_conf.h".
      Signed-off-by: NJulio Faracco <jcfaracco@gmail.com>
      d4dad162
    • J
      cpu: use typedefs for enums in "src/cpu/cpu_map.h" · 5443b158
      Julio Faracco 提交于
      In "src/cpu/" there are some enumerations (enum) declarations.
      Similar to the recent cleanup to "src/util", "src/conf" and other
      directories, it's better to use a typedef for variable types,
      function types and other usages. Other enumeration and folders will
      be changed to typedef's in the future. Specially, in files that are
      in different places of "src/util" and "src/conf". Most of the files
      changed in this commit are related to CPU (cpu_map.h) enums.
      Signed-off-by: NJulio Faracco <jcfaracco@gmail.com>
      5443b158
    • M
      virsh-nodedev: Avoid spurious errors · 289a3163
      Michal Privoznik 提交于
      Our public free functions explicitly don't accept NULL pointers
      (sigh). Therefore, callers must do something like this:
      
          if (dev)
              virNodeDeviceFree(dev);
      
      And we are not doing that on two places I've found. This leads to
      dummy error message thrown by virsh:
      
          virsh # nodedev-dumpxml nonexistent-device
          error: Could not find matching device 'nonexistent-device'
          error: invalid node device pointer in virNodeDeviceFree
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      289a3163
  3. 02 6月, 2014 4 次提交
    • J
      Don't use AI_ADDRCONFIG when binding to wildcard addresses · 819ca36e
      Ján Tomko 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1098659
      
      With parallel boot, network addresses might not yet be assigned [1],
      but binding to wildcard addresses should work.
      
      For non-wildcard addresses, ADDRCONFIG is still used. Document this
      in libvirtd.conf.
      
      [1] http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
      819ca36e
    • J
      25a5df16
    • J
      qemu: Process DEVICE_DELETED event in a separate thread · 47f424c2
      Jiri Denemark 提交于
      Currently, we don not acquire any job when removing a device after
      DEVICE_DELETED event was received from QEMU. This means that if there is
      another API running at the time DEVICE_DELETED is delivered and the API
      acquired a job, we may happily change the definition of the domain the
      API is working with whenever it unlocks the domain object (e.g., to talk
      with its monitor). That said, we have to acquire a job before finishing
      device removal to make things safe. However, doing so in the main event
      loop would cause a deadlock so we need to move most of the event handler
      into a separate thread.
      
      Another good reason for both acquiring a job and handling the event in a
      separate thread is that we currently remove a device backend immediately
      after removing its frontend while we should only remove the backend once
      we already received DEVICE_DELETED event. That is, we will have to talk
      to QEMU monitor from the event handler.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      47f424c2
    • J
      qemu: Finish device removal in the original thread · 4670f1dd
      Jiri Denemark 提交于
      If QEMU supports DEVICE_DELETED event, we always call
      qemuDomainRemoveDevice from the event handler. However, we will need to
      push this call away from the main event loop and begin a job for it (see
      the following commit), we need to make sure the device is fully removed
      by the original thread (and within its existing job) in case the
      DEVICE_DELETED event arrives before qemuDomainWaitForDeviceRemoval times
      out.
      
      Without this patch, device removals would be guaranteed to never finish
      before the timeout because the could would be blocked by the original
      job being still active.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      4670f1dd