1. 12 4月, 2014 8 次提交
    • E
      conf: tweak chain lookup internals · d193b34d
      Eric Blake 提交于
      Thanks to the testsuite, I feel quite confident that this rewrite
      is correct; it gives the same results for all cases except for one.
      I can make the argument that _that_ case was a pre-existing bug:
      when looking up relative names, the lookup is supposed to be
      pegged to the directory that contains the parent qcow2 file.  Thus,
      this resolves the fixme first mentioned in commit 367cd69d (even
      though I accidentally removed the fixme comment early in 74430fe3).
      
      * src/util/virstoragefile.c (virStorageFileChainLookup): Depend on
      new rather than old fields.
      * tests/virstoragetest.c (mymain): Adjust test to match fix.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      d193b34d
    • E
      conf: drop redundant parameter to chain lookup · 74430fe3
      Eric Blake 提交于
      The original chain lookup code had to pass in the starting name,
      because it was not available in the chain.  But now that we have
      added fields to the struct, this parameter is redundant.
      
      * src/util/virstoragefile.h (virStorageFileChainLookup): Alter
      signature.
      * src/util/virstoragefile.c (virStorageFileChainLookup): Adjust
      handling of top of chain.
      * src/qemu/qemu_driver.c (qemuDomainBlockCommit): Adjust caller.
      * tests/virstoragetest.c (testStorageLookup, mymain): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      74430fe3
    • E
      conf: report error on chain lookup failure · 6752bc2a
      Eric Blake 提交于
      The chain lookup function was inconsistent on whether it left
      a message in the log when looking up a name that is not found
      on the chain (leaving a message for OOM or if name was
      relative but not part of the chain), and could litter the log
      even when successful (when name was relative but deep in the
      chain, use of virFindBackingFile early in the chain would complain
      about a file not found).  It's easier to make the function
      consistently emit a message exactly once on failure, and to let
      all callers rely on the clean semantics.
      
      * src/util/virstoragefile.c (virStorageFileChainLookup): Always
      report error on failure.  Simplify relative lookups.
      * src/qemu/qemu_driver.c (qemuDomainBlockCommit): Avoid
      overwriting error.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      6752bc2a
    • E
      util: new virFileRelLinkPointsTo function · 91f349d8
      Eric Blake 提交于
      When checking if two filenames point to the same inode (whether
      by hardlink or symlink), sometimes one of the names might be
      relative.  This convenience function makes it easier to check.
      
      * src/util/virfile.h (virFileRelLinkPointsTo): New prototype.
      * src/util/virfile.c (virFileRelLinkPointsTo): New function.
      * src/libvirt_private.syms (virfile.h): Export it.
      * src/xen/xm_internal.c (xenXMDomainGetAutostart): Use it.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      91f349d8
    • E
      conf: test backing chain lookup · 367cd69d
      Eric Blake 提交于
      I realized that we had no good test coverage of looking up a
      name from within a backing chain, even though code like
      block-commit is relying on it.
      
      * tests/virstoragetest.c (testStorageLookup): New function.
      (mymain): New tests.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      367cd69d
    • C
      Introduce --without-pm-utils to get rid of pm-is-supported dependency · ec70f369
      Cédric Bosdonnat 提交于
      This uses the dbus api of systemd to check the power management
      capabilities of the node.
      ec70f369
    • E
      tests: drop dead code from argv2xml and xml2xml · c839017a
      Eric Blake 提交于
      Noticed while tweaking the RelaxNG grammar for <disk> elements.
      
      * tests/qemuxml2xmloutdata/qemuxml2xmlout-numad-static-vcpu-no-numatune.xml:
      * tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-cdrom-empty.xml:
      Drop unused files.
      * tests/qemuargv2xmltest.c (testInfo, DO_TEST_FULL): Drop unused
      field.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      c839017a
    • W
      bhyve: fix domain management · 1ee866cf
      Wojciech Macek 提交于
      When domain is not persistent, it should be forgotten upon destroying.
      1ee866cf
  2. 11 4月, 2014 9 次提交
    • E
      conf: delete useless backingStoreFormat field · 86cfa1f6
      Eric Blake 提交于
      Drop another redundant field from virStorageFileMetadata.
      
      * src/util/virstoragefile.h (_virStorageFileMetadata): Drop
      field.
      * src/util/virstoragefile.c
      (virStorageFileGetMetadataFromFDInternal)
      (virStorageFileGetMetadataFromFD)
      (virStorageFileGetMetadataRecurse): Adjust callers.
      * tests/virstoragetest.c (_testFileData, testStorageChain)
      (mymain): Simplify test.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      86cfa1f6
    • E
      conf: return backing information separately from metadata · a4dfc8d3
      Eric Blake 提交于
      A couple pieces of virStorageFileMetadata are used only while
      collecting information about the chain, and don't need to
      live permanently in the struct.  This patch refactors external
      callers to collect the information separately, so that the
      next patch can remove the fields.
      
      * src/util/virstoragefile.h (virStorageFileGetMetadataFromBuf):
      Alter signature.
      * src/util/virstoragefile.c (virStorageFileGetMetadataInternal):
      Likewise.
      (virStorageFileGetMetadataFromFDInternal): Adjust callers.
      * src/storage/storage_backend_fs.c (virStorageBackendProbeTarget):
      Likewise.
      * src/storage/storage_backend_gluster.c
      (virStorageBackendGlusterRefreshVol): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      a4dfc8d3
    • E
      conf: delete useless backingStoreIsFile field · c919ed7e
      Eric Blake 提交于
      Finally starting to prune away some of the old fields that have
      been made redundant by the new fields, on my way towards directly
      reusing virStorageSource.
      
      * src/util/virstoragefile.h (_virStorageFileMetadata): Drop
      field.
      * src/util/virstoragefile.c (virStorageFileGetMetadataInternal)
      (virStorageFileChainLookup): Adjust callers.
      * tests/virstoragetest.c (_testFileData, testStorageChain)
      (mymain): Simplify test.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      c919ed7e
    • E
      conf: expose probe for non-local storage · 86f71e0a
      Eric Blake 提交于
      Deciding if a user string represents a local file instead of a
      network path is an operation worth exposing directly, particularly
      since the next patch will be removing a redundant variable that
      was caching the information.
      
      * src/util/virstoragefile.h (virStorageIsFile): New declaration.
      * src/util/virstoragefile.c (virBackingStoreIsFile): Rename...
      (virStorageIsFile): ...export, and allow NULL input.
      (virStorageFileGetMetadataInternal)
      (virStorageFileGetMetadataRecurse, virStorageFileGetMetadata):
      Update callers.
      * src/conf/domain_conf.c (virDomainDiskDefForeachPath): Use it.
      * src/storage/storage_backend_fs.c (virStorageBackendProbeTarget):
      Likewise.
      * src/libvirt_private.syms (virstoragefile.h): Export function.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      86f71e0a
    • E
      conf: provide details on network backing store · 7010768c
      Eric Blake 提交于
      So far, my work has been merely preserving the status quo of
      backing file analysis.  But this patch starts to tread in the
      territory of making the backing chain code more powerful - we
      will eventually support network storage containing non-raw
      formats.  Here, we expose metadata information about a network
      backing store, even if that information is still hardcoded to
      a raw format for now.
      
      * src/util/virstoragefile.c (virStorageFileGetMetadataRecurse):
      Also populate struct for non-file backing.
      (virStorageFileGetMetadata, virStorageFileGetMetadatainternal):
      Recognize non-file top image.
      (virFindBackingFile): Add comment.
      (virStorageFileChainGetBroken): Adjust comment, ensure output
      is set.
      * tests/virstoragetest.c (mymain): Update test to reflect it.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      7010768c
    • E
      conf: make virstoragetest debug easier · aa506b46
      Eric Blake 提交于
      I'm tired of alternating between test failures due to bugs in
      my refactoring work, vs. test failures due to leftovers in
      the file system from the previous test.  This patch has no
      impact when the testsuite is successful, but doeesn't hurt either.
      
      * tests/virstoragetest.c (testPrepImages): Clean up from prior
      failed test.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      aa506b46
    • J
      cpu: Properly check input parameters · 7eca4a5b
      Jiri Denemark 提交于
      Most of the APIs in CPU driver do not expect to get NULL for input
      parameters. Let's mark them with ATTRIBUTE_NONNULL and also check for
      some members of virCPUDef when the APIs expect them have some specific
      values.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      7eca4a5b
    • J
      cpu: Add documentation for CPU driver APIs · a1b1fcdc
      Jiri Denemark 提交于
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      a1b1fcdc
    • J
      tests: Fix systemd test with --without-driver-modules · 844a5c1e
      Jiri Denemark 提交于
      Every test that makes use of virmock.h (only virsystemdtest as of now)
      needs to be linked with -export-dynamic to make sure the LD_PRELOADed
      mock library can access its wrap_* symbols. Normally,
      DRIVER_MODULE_LDFLAGS variable contains -export-dynamic but when
      --without-driver-modules configure option is used, DRIVER_MODULE_LDFLAGS
      is empty.
      
      This patch turns on -export-dynamic for all tests unconditionally
      regardless on --without-driver-modules. This fixes virsystemdtest and
      all future users of virmock.h.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      844a5c1e
  3. 09 4月, 2014 23 次提交
    • J
      Fix build on mingw32 · 5dfcd6fb
      Ján Tomko 提交于
      My commit 897808e7 added a parameter to virCgroupGetPercpuStats,
      but didn't change the stub for systems where cgroups are not supported.
      5dfcd6fb
    • L
      virsh: Fix comment of vshCmdInfo · 00b1cce0
      Li Yang 提交于
      The original comment of vshCmdInfo:
      "name" - command name
      
      Actually it's 'help' and the short description
      of command, not the command name.
      Signed-off-by: NLi Yang <liyang.fnst@cn.fujitsu.com>
      00b1cce0
    • J
      Clean up virCgroupGetPercpuStats · 2adf59eb
      Ján Tomko 提交于
      The iterator is checked for being less than or equal to need_cpus.
      The 'n' variable is incremented need_cpus + 1 times.
      
      Simplify the computation of need_cpus and make its value one larger,
      to let it be used instead of 'n' and compared without the equal sign
      in loop conditions.
      
      Just index the sum_cpu_time array instead of using a helper variable.
      
      Start the loop at start_cpu instead of continuing for all lower values.
      2adf59eb
    • J
      Check maximum startcpu value correctly · 9fe5267a
      Ján Tomko 提交于
      The cpus are indexed from 0, so a startcpu value equal
      to the number of CPUs is invalid.
      
      https://bugzilla.redhat.com/show_bug.cgi?id=1070680
      9fe5267a
    • J
      Rename id, max_id to need_cpus, total_cpus · dd74ab4e
      Ján Tomko 提交于
      total_cpus is the total number of CPUs on the host
      need_cpus is the number of CPUs we need to look at
      
      (need_cpus can be larger than ncpus, because we need to look
       at CPUs before the startcpu too, even if we aren't reporting
       their stats)
      dd74ab4e
    • 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: test for more fields · 63fb7863
      Eric Blake 提交于
      Validate that all the new fields are getting set to desired values.
      
      * tests/virstoragetest.c (_testFileData, testStorageChain): Check
      for more fields.
      (mymain): Populate additional fields.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      63fb7863
    • E
      conf: start testing contents of the new backing chain fields · 6d698220
      Eric Blake 提交于
      The testsuite is absolutely essential to feeling comfortable
      about swapping the backing chain structure over to a new format.
      This patch tests the path settings, and demonstrates that the
      correct short name is being passed to the child.
      
      * tests/virstoragetest.c (testStorageChain): Test path.
      (mymain): Update expected data.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      6d698220
    • 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: rename some test fields · 4a349efc
      Eric Blake 提交于
      A later patch will be adding some new fields to
      virStorageFileMetadata; to minimize confusion, renaming the
      test fields now will make it more obvious which fields are
      being tested later.
      
      * tests/virstoragetest.c (_testFileData): Alter names.
      (testStorageChain, mymain): Adjust clients.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      4a349efc
    • 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
    • J
      build: avoid compiler warning on shadowed name · a18c7130
      Jean-Baptiste Rouault 提交于
      Introduced in commit d1e55de3.
      virstoragetest.c: In function ‘testStorageChain’:
      virstoragetest.c:249:10: warning: declaration of ‘abs’ shadows a global
      declaration [-Wshadow]
      a18c7130
    • R
      tests: use virBhyveCapsBuild in bhyvexml2argv test · 548f21d0
      Roman Bogorodskiy 提交于
      As we can use virBhyveCapsBuild() now, replace
      testBhyveBuildCapabilities() with it.
      548f21d0
    • E
      conf: another refactor of virstoragetest · d1e55de3
      Eric Blake 提交于
      Another reduction in the number of structs I have to modify
      when I start tracking new fields in virStorageFileMetadata.
      
      * tests/virstoragetest.c (_testFileData): Add fields.
      (testStorageChain): Select between fields based on flag.
      (mymain): Record both absolute and relative expectations in one
      struct.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      d1e55de3