1. 09 4月, 2014 16 次提交
    • J
      Extend virCgroupGetPercpuStats to fill in vcputime too · 897808e7
      Ján Tomko 提交于
      Currently, virCgroupGetPercpuStats is only used by the LXC driver,
      filling out the CPUTIME stats. qemuDomainGetPercpuStats does this
      and also filles out VCPUTIME stats.
      
      Extend virCgroupGetPercpuStats to also report VCPUTIME stats if
      nvcpupids is non-zero. In the LXC driver, we don't have cpupids.
      In the QEMU driver, there is at least one cpupid for a running domain,
      so the behavior shouldn't change for QEMU either.
      
      Also rename getSumVcpuPercpuStats to virCgroupGetPercpuVcpuSum.
      897808e7
    • J
      Fix return value of virCgroupGetPercpuStats · 23d2d863
      Ján Tomko 提交于
      We need to return the number of successfully populated stats,
      not the nparams supplied by the user.
      23d2d863
    • J
      Don't require domain obj in qemuDomainGetPercpuStats · 3e7e6ad6
      Ján Tomko 提交于
      All we need is the virCgroupPtr and number of vcpupids.
      This will allow the function to be moved to util/vircgroup.c.
      3e7e6ad6
    • E
      conf: track more fields in backing chain metadata · 5976a9ac
      Eric Blake 提交于
      The current use of virStorageFileMetadata is awkward; to learn
      some of the information about a child node, you have to read
      fields in the parent node.  This does not lend itself well to
      modifying backing chains (whether inserting a new node in the
      chain, or consolidating existing nodes); better would be to
      learn about a child node directly in that node.  This patch
      sets up some new fields which contain redundant information,
      although not necessarily in the final desired state for the
      new fields (see the next patch for actual tests of what is there
      now).  Then later patches will do any refactoring necessary to
      get the fields to their desired states, and update clients to
      get the information from the new fields, so we can finally
      delete the fields that are tracking information about the wrong
      node.
      
      More concretely, compare these three example backing chains:
      
      good <- one
      missing <- two
      gluster://server/vol/img <- three
      
      Pre-patch, querying the chains gives:
      { .backingStore = "/path/to/good",
        .backingStoreRaw = "good",
        .backingStoreIsFile = true,
        .backingStoreFormat = VIR_STORAGE_FILE_RAW,
        .backingMeta = {
          .backingStore = NULL,
          .backingStoreRaw = NULL,
          .backingStoreIsFile = false,
          .backingMeta = NULL,
        }
      }
      { .backingStore = NULL,
        .backingStoreRaw = "missing",
        .backingStoreIsFile = false,
        .backingStoreFormat = VIR_STORAGE_FILE_NONE,
        .backingMeta = NULL,
      }
      { .backingStore = "gluster://server/vol/img",
        .backingStoreRaw = NULL,
        .backingStoreIsFile = false,
        .backingStoreFormat = VIR_STORAGE_FILE_RAW,
        .backingMeta = NULL,
      }
      
      Deciding whether to ignore a missing backing file (as in virsh
      vol-dumpxml) or report an error (as in security manager sVirt
      labeling) requires reading multiple fields.  Plus, the format
      is hard-coded to treat all network protocols as end-of-the-chain,
      as if they were raw.  By the end of this patch series, the goal
      is to instead represent these three situations as:
      
      { .path = "one",
        .canonPath = "/path/to/one",
        .type = VIR_STORAGE_TYPE_FILE,
        .format = VIR_STORAGE_FILE_QCOW2,
        .backingStoreRaw = "good",
        .backingMeta = {
          .path = "good",
          .canonPath = "/path/to/good",
          .type = VIR_STORAGE_TYPE_FILE,
          .format = VIR_STORAGE_FILE_RAW,
          .backingStoreRaw = NULL,
          .backingMeta = NULL,
        }
      }
      { .path = "two",
        .canonPath = "/path/to/two",
        .type = VIR_STORAGE_TYPE_FILE,
        .format = VIR_STORAGE_FILE_QCOW2,
        .backingStoreRaw = "missing",
        .backingMeta = NULL,
      }
      { .path = "three",
        .canonPath = "/path/to/three",
        .type = VIR_STORAGE_TYPE_FILE,
        .format = VIR_STORAGE_FILE_QCOW2,
        .backingStoreRaw = "gluster://server/vol/img",
        .backingMeta = {
          .path = "gluster://server/vol/img",
          .canonPath = "gluster://server/vol/img",
          .type = VIR_STORAGE_TYPE_NETWORK,
          .format = VIR_STORAGE_FILE_RAW,
          .backingStoreRaw = NULL,
          .backingMeta = NULL,
        }
      }
      
      or, for the second file, maybe also allowing:
      { .path = "two",
        .canonPath = "/path/to/two",
        .type = VIR_STORAGE_TYPE_FILE,
        .format = VIR_STORAGE_FILE_QCOW2,
        .backingStoreRaw = "missing",
        .backingMeta = {
          .path = "missing",
          .canonPath = NULL,
          .type = VIR_STORAGE_TYPE_NONE,
          .format = VIR_STORAGE_FILE_NONE,
          .backingStoreRaw = NULL,
          .backingMeta = NULL,
        }
      }
      
      * src/util/virstoragefile.h (_virStorageFileMetadata): Add
      path, canonPath, relDir, type, and format fields.  Reorder
      existing fields, and add lots of comments.
      * src/util/virstoragefile.c (virStorageFileFreeMetadata): Clean
      new fields.
      (virStorageFileGetMetadataInternal)
      (virStorageFileGetMetadataFromFDInternal): Start populating new
      fields.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      5976a9ac
    • E
      conf: earlier allocation during backing chain crawl · 43f85b99
      Eric Blake 提交于
      Right now, we are allocating virStorageFileMetadata near the bottom
      of the callchain, only after we have identified that we are visiting
      a file (and not a network resource).  I'm hoping to eventually
      support parsing the backing chain from XML, where the backing chain
      crawl then validates what was parsed rather than allocating a fresh
      structure.  Likewise, I'm working towards a setup where we have a
      backing element even for networks.  Both of these use cases are
      easier to code if the allocation is hoisted earlier.
      
      * src/util/virstoragefile.c (virStorageFileGetMetadataInternal)
      (virStorageFileGetMetadataFromFDInternal): Change signature.
      (virStorageFileGetMetadataFromBuf)
      (virStorageFileGetMetadataRecurse, virStorageFileGetMetadata):
      Update callers.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      43f85b99
    • E
      conf: track user vs. canonical name through full chain lookup · 79f11b35
      Eric Blake 提交于
      The previous patch started a separation of error messages
      reported against the user-specified name, vs. tracking the
      canonical path that was actually opened.  This patch extends
      that notion, by hoisting directory detection up front, passing
      the canonical path through the entire call chain, and
      simplifying lower-level functions that can now assume that
      a canonical path and directory have been supplied.
      
      * src/util/virstoragefile.c
      (virStorageFileGetMetadataFromFDInternal)
      (virStorageFileGetMetadataInternal): Add parameter, require
      directory.
      (virFindBackingFile): Require directory.
      (virStorageFileGetMetadataFromFD): Pass canonical path.
      (virStorageFileGetMetadataFromBuf): Likewise.
      (virStorageFileGetMetadata): Determine initial directory.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      79f11b35
    • P
      qemu: Unexport qemuBuildNetworkDriveURI() · 90dbdff2
      Peter Krempa 提交于
      The function isn't used in any other file. Convert it to static.
      90dbdff2
    • P
      qemu: Refactor qemuGetDriveSourceString to take virStorageSourcePtr · 816f0f93
      Peter Krempa 提交于
      Refactor the function to avoid multiple wrappers splitting identical
      fields from the now common metadata struct.
      
      The refactor is done by folding in the wrapper used for disk sources
      which allows us to lookup secrets via the secret driver. This may allow
      using stored secrets for snapshot disk images too in the future.
      816f0f93
    • P
      storage: Refactor location of metadata for storage drive access to files · cecd6566
      Peter Krempa 提交于
      Now that we store all metadata about a storage image in a
      virStorageSource struct let's use it also to store information needed by
      the storage driver to access and do operations on the files.
      cecd6566
    • P
      storage: Refactor storage file initialization to use virStorageSourcePtr · 9689dfaa
      Peter Krempa 提交于
      Now that storage source metadata is stored in a single struct we don't
      need two initialization functions for different structs.
      9689dfaa
    • P
      conf: Refactor helpers to retrieve actual storage type · 93c1f2cd
      Peter Krempa 提交于
      Now that the storage source definition is uniform convert the helpers to
      retrieve the actual storage type to a single one.
      93c1f2cd
    • J
      storage: Don't update pool available/allocation if buildVol fails · 0c2305b3
      John Ferlan 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1024159
      
      If adding a volume to a storage pool fails during the CreateXML or
      CreateXMLFrom API's, we don't want to adjust the available and
      allocation values for the storage pool during storageVolDelete
      since we haven't adjusted the values for the create.
      
      Refactor storageVolDelete() a bit to create a storageVolDeleteInternal()
      which will handle the primary deletion activities.  Add a parameter
      updateMeta which will signify whether to update the values or not.
      
      Adjust the calls from CreateXML and CreateXMLFrom to directly call the
      DeleteInternal with the pool lock held.  This does bypass the call
      to virStorageVolDeleteEnsureACL().
      0c2305b3
    • E
      conf: fix detection of infinite backing loop · af095bfa
      Eric Blake 提交于
      While trying to refactor the backing file chain, I noticed that
      if you have a self-referential qcow2 file via a relative name:
      
      qemu-img create -f qcow2 loop 10M
      qemu-img rebase -u -f qcow2 -F qcow2 -b loop loop
      
      then libvirt was creating a chain 2 deep before realizing it
      had hit a loop; furthermore, virStorageFileChainCheckBroken
      was not identifying the chain as broken.  With this patch,
      the loop is detected when the chain is only 1 deep; still
      enough for storage volume XML to display the file, but now
      with a proper error report about where the loop was found.
      
      This patch adds a parameter to virStorageFileGetMetadataRecurse,
      so that errors at the top of the chain remain unchanged; messages
      issued for backing files now use the name provided by the user
      instead of the canonical name (for VDSM, which uses relative
      symlinks to device mapper block devices, this is actually more
      useful).
      
      * src/util/virstoragefile.c (virStorageFileGetMetadataRecurse):
      Add parameter, require canonical path up front.  Mark chain
      broken on OOM or loop detection.
      (virStorageFileGetMetadata): Pass in canonical name.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      af095bfa
    • J
      vmware: set the driver version · 2fe658ad
      Jean-Baptiste Rouault 提交于
      Since commit 7457cbe8 the vmware driver version isn't set anymore.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      2fe658ad
    • R
      bhyve: add domain metadata support · b291cb5e
      Roman Bogorodskiy 提交于
      Implement domainSetMetadata and domainGetMetadata driver calls.
      b291cb5e
    • R
      bhyve: fix ATTRIBUTE_NONNULL usage · 986a07c7
      Roman Bogorodskiy 提交于
      Fix incorrect ATTRIBUTE_NONNULL usage introduced in 17b17565
      which caused build failure:
      
      bhyve/bhyve_driver.c:127:48: error: expected ')'
      bhyveDriverGetCapabilities(bhyveConnPtr driver ATTRIBUTE_NONNULL)
                                                     ^
      bhyve/bhyve_driver.c:127:27: note: to match this '('
      bhyveDriverGetCapabilities(bhyveConnPtr driver ATTRIBUTE_NONNULL)
      
      Pushed under the build breaker rule.
      986a07c7
  2. 08 4月, 2014 12 次提交
  3. 07 4月, 2014 6 次提交
    • W
      bhyve: connectCompareCPU support · 627d1439
      Wojciech Macek 提交于
      Implement support for connectCompareCPU.
      627d1439
    • W
      bhyve: create capabilities submodule · b15a2bbd
      Wojciech Macek 提交于
      - Move all capabilities functions to separate file
      - Add initCPU
      b15a2bbd
    • W
      bhyve: support for connectBaselineCPU · 36cf8174
      Wojciech Macek 提交于
      Implement bhyveConnectBaselineCPU to support OpenStack/Nova
      36cf8174
    • L
      interface: dump inactive xml when interface isn't active · 7284c499
      Laine Stump 提交于
      Other drivers in libvirt (e.g. network, qemu) will automatically
      return the "inactive" (persistent configuration) XML of an object when
      that object is inactive. The netcf backend of the interface driver
      would always try to return the live status XML of the interface, even
      when it was down. Although netcf does return valid XML in that case,
      for bond interfaces it is missing almost all of its content, including
      the <bond> subelement itself, leading to this error message from
      "virsh iface-dumpxml" of a bond interface that is inactive:
      
        error: XML error: bond interface misses the bond element
      
      (this is because libvirt's validation of the XML returned by netcf
      always requires a <bond> element be present).
      
      This patch modifies the interface driver netcf backend to check if the
      interface is inactive, and in that case always return the inactive XML
      (which will always have a <bond> element, thus eliminating the error
      message, as well as making operation more in line with other drivers.
      
      This fixes the following bug:
      
        https://bugzilla.redhat.com/show_bug.cgi?id=878394
      7284c499
    • E
      hash: add common utility functions · 09567144
      Eric Blake 提交于
      I almost wrote a hash value free function that just called
      VIR_FREE, then realized I couldn't be the first person to
      do that.  Sure enough, it was worth factoring into a common
      helper routine.
      
      * src/util/virhash.h (virHashValueFree): New function.
      * src/util/virhash.c (virHashValueFree): Implement it.
      * src/util/virobject.h (virObjectFreeHashData): New function.
      * src/libvirt_private.syms (virhash.h, virobject.h): Export them.
      * src/nwfilter/nwfilter_learnipaddr.c (virNWFilterLearnInit): Use
      common function.
      * src/qemu/qemu_capabilities.c (virQEMUCapsCacheNew): Likewise.
      * src/qemu/qemu_command.c (qemuDomainCCWAddressSetCreate):
      Likewise.
      * src/qemu/qemu_monitor.c (qemuMonitorGetBlockInfo): Likewise.
      * src/qemu/qemu_process.c (qemuProcessWaitForMonitor): Likewise.
      * src/util/virclosecallbacks.c (virCloseCallbacksNew): Likewise.
      * src/util/virkeyfile.c (virKeyFileParseGroup): Likewise.
      * tests/qemumonitorjsontest.c
      (testQemuMonitorJSONqemuMonitorJSONGetBlockInfo): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      09567144
    • A
      QoS: make tc filters match all traffic · d9de1443
      Antoni S. Puimedon 提交于
      Up until now the traffic control filters for the vNIC QoS were
      matching only ip traffic. For egress traffic that was unnoticed
      because the unmatched traffic would just go to the default htb class
      and be shaped anyway. For ingress, though, since the policing of the
      rate is done by the filter itself.
      
      The problem is solved by changing protocol to all and making anything
      match the filter.
      
      Bug-Url: https://bugzilla.redhat.com/1084444Signed-off-by: NAntoni S. Puimedon <asegurap@redhat.com>
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      d9de1443
  4. 05 4月, 2014 3 次提交
    • R
      bhyve: add console support through nmdm device · 6c91134d
      Roman Bogorodskiy 提交于
      nmdm is a FreeBSD driver which allows to create a pair of tty
      devices one of which is passed to the guest and second is used
      by the client.
      
      This patch adds new 'nmdm' character device type. Its definition
      looks this way:
      
      <serial type='nmdm'>
        <source master='/dev/nmdm0A' slave='/dev/nmdm0B'/>
      </serial>
      
      Master is passed to the hypervisior and slave is used for client
      connection.
      
      Also implement domainOpenConsole() for bhyve driver based on that.
      6c91134d
    • D
      bhyve: domain autostart support · 6318a801
      David Shane Holden 提交于
      Signed-off-by: NRoman Bogorodskiy <bogorodskiy@gmail.com>
      6318a801
    • E
      conf: track when storage type is still undetermined · 9673418c
      Eric Blake 提交于
      Right now, virStorageFileMetadata tracks bool backingStoreIsFile
      for whether the backing string specified in metadata can be
      resolved as a file (covering both block and regular file
      resources) or is treated as a network protocol.  But when
      merging this struct with virStorageSource, it will be easier
      to just actually track which type of resource it is, as well
      as have a reserved value for the case where the resource type
      is unknown (or had an error during probing).
      
      * src/util/virstoragefile.h (virStorageType): Add a placeholder
      value, swap order to match similar public enum.
      * src/util/virstoragefile.c (virStorage): Update string mapping.
      * src/conf/domain_conf.c (virDomainDiskSourceParse)
      (virDomainDiskDefParseXML, virDomainDiskDefFormat)
      (virDomainDiskSourceFormat): Adjust clients.
      * src/conf/snapshot_conf.c (virDomainSnapshotDiskDefParseXML):
      Likewise.
      * src/qemu/qemu_driver.c
      (qemuDomainSnapshotPrepareDiskExternalBackingInactive)
      (qemuDomainSnapshotPrepareDiskExternalOverlayActive)
      (qemuDomainSnapshotPrepareDiskExternalOverlayInactive)
      (qemuDomainSnapshotPrepareDiskInternal)
      (qemuDomainSnapshotCreateSingleDiskActive): Likewise.
      * src/qemu/qemu_command.c (qemuGetDriveSourceString): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      9673418c
  5. 04 4月, 2014 2 次提交
  6. 03 4月, 2014 1 次提交
    • S
      libxl: Set disk format for empty cdrom device · 7a1452f5
      Stefan Bader 提交于
      The XML config for a CDROM device can be without a source path,
      indicating that there is no media present. Without this change
      the libxl driver fails to start a guest in that case because
      the libxl library checks for the LIBXL_DISK_FORMAT_EMPTY format
      type and tries to stat the NULL pointer that gets passed on.
      
      > libxl: error: libxl_device.c:265:libxl__device_disk_set_backend:
      > Disk vdev=hdc failed to stat: (null): Bad address
      Signed-off-by: NStefan Bader <stefan.bader@canonical.com>
      7a1452f5