1. 13 10月, 2011 10 次提交
    • P
      example: Support debug output and loop switch · f319b553
      Philipp Hahn 提交于
      Add support for enabling debug output via command line option.
      Allow to toggle the loop implementation between pure-Python and
      native-C.
      Signed-off-by: NPhilipp Hahn <hahn@univention.de>
      f319b553
    • P
      example: Redirect --help output to stdout/stderr · 78adf509
      Philipp Hahn 提交于
      When --help is requested, print usage() to stdout.
      When an illegal option is passed, print usage to stderr.
      Signed-off-by: NPhilipp Hahn <hahn@univention.de>
      78adf509
    • P
      example: Fix argument handling · 08d56e24
      Philipp Hahn 提交于
      sys.argv contains the original command line arguments, while args only
      contains the arguments not handled by getopt(). Currently this is no
      problem since --help is the only command line option passable, which
      terminates the process, so the code is never reached. Any option added
      in the future will reveal the bug.
      Signed-off-by: NPhilipp Hahn <hahn@univention.de>
      08d56e24
    • E
      snapshot: implement LIST_LEAVES flag in qemu · 5cf56c4b
      Eric Blake 提交于
      With the recent refactoring of qemu snapshot relationships, it
      is now trivial to filter on leaves.
      
      * src/conf/domain_conf.c (virDomainSnapshotObjListCount)
      (virDomainSnapshotObjListCopyNames): Handle new flag.
      * src/qemu/qemu_driver.c (qemuDomainSnapshotListNames)
      (qemuDomainSnapshotNum, qemuDomainSnapshotListChildrenNames)
      (qemuDomainSnapshotNumChildren): Pass new flag through.
      5cf56c4b
    • E
      snapshot: add API for filtering by leaves · 8b6d1a20
      Eric Blake 提交于
      Counterpart to --roots.
      
      * include/libvirt/libvirt.h.in (VIR_DOMAIN_SNAPSHOT_LIST_LEAVES):
      New flag.
      * src/libvirt.c (virDomainSnapshotNum, virDomainSnapshotListNames)
      (virDomainSnapshotNumChildren)
      (virDomainSnapshotListChildrenNames): Document it.
      * tools/virsh.c (cmdSnapshotList): Expose it.
      * tools/virsh.pod (snapshot-list): Document --leaves.
      8b6d1a20
    • P
      xen: Return tap2 for tap2 disks · c490b469
      Philipp Hahn 提交于
      For some versions of Xen the difference between "tap" and "tap2" is
      important. When converting back from xen-sxpr to libvirt-xml, that
      information is lost, which breaks re-defining the domain using that
      data.
      
      Explicitly return "tap2" for disks defined as "device/tap2".
      Signed-off-by: NPhilipp Hahn <hahn@univention.de>
      c490b469
    • P
      xen: fix PyGrub boot device order · c2969ec7
      Philipp Hahn 提交于
      When PyGrub is used as the bootloader in Xen, it gets passed the first
      bootable disk. Xend supports a "bootable"-flag for this, which isn't
      explicitly supported by libvirt.
      When converting libvirt-xml to xen-sxpr the "bootable"-flag gets
      implicitly set by xen.xend.XenConfig.device_add() for the first disk
      (marked as "Compat hack -- mark first disk bootable").
      When converting back xen-sxpr to libvirt-xml, the disks are returned in
      the internal order used by Xend ignoring the "bootable"-flag, which
      loses the original order. When the domain is then re-defined, the order
      of disks is changed, which breaks PyGrub, since a different disk gets
      passed.
      
      When converting xen-sxpr to libvirt-xml, use the "bootable"-flag to
      determine the first disk.
      
      This isn't perfect, since several disks can be marked as bootable using
      the Xend-API, but that is not supported by libvirt. In all known cases
      relevant to libvirt exactly one disk is marked as bootable.
      Signed-off-by: NPhilipp Hahn <hahn@univention.de>
      c2969ec7
    • P
      tests: Add support for skipping tests · c58d778d
      Philipp Hahn 提交于
      AM_TESTS has support for skipping tests, while the C-implementation
      virtTestRun() does not support that feature.
      
      Print "_" or "SKIP" in verbose mode for tests returning EXIT_AM_SKIP=77.
      Signed-off-by: NPhilipp Hahn <hahn@univention.de>
      c58d778d
    • H
      Introduce <driver> under <filesystem> to support open-by-handle · da8127e6
      Harsh Prateek Bora 提交于
      VirtFS allows the user to choose between path/handle based fs driver.
      As of now, libvirt hardcoded path based driver only. This patch provides
      a solution to allow user to choose between path/handle based fs driver.
      
      Sample:
      
          <filesystem type='mount'>
            <driver type='handle'/>
            <source dir='/folder/to/share1'/>
            <target dir='mount_tag1'/>
          </filesystem>
      
          <filesystem type='mount'>
            <driver type='path'/>
            <source dir='/folder/to/share2'/>
            <target dir='mount_tag2'/>
          </filesystem>
      Signed-off-by: NHarsh Prateek Bora <harsh@linux.vnet.ibm.com>
      Signed-off-by: NEric Blake <eblake@redhat.com>
      da8127e6
    • S
      buf: implement generic virBufferEscape · 7f197559
      Sage Weil 提交于
      Implement a generic helper to escape a given set of characters with a
      leading '\'.  Generalizes virBufferEscapeSexpr().
      Signed-off-by: NSage Weil <sage@newdream.net>
      7f197559
  2. 12 10月, 2011 14 次提交
    • O
      daemon: Always advertise libvirtd service · 33b55fd8
      Osier Yang 提交于
      This is a regression introduced by new RPC codes, previously
      we advertise the service via ssh even if the daemon doesn't
      listen on TLS port (TCP is not choosed). Now the service is
      only advertised when it listens on TLS or TCP port. This breaks
      upper layer apps which intends to discover the service, such
      as virt-manager.
      33b55fd8
    • E
      snapshot: drop dead parameters · ebec21ee
      Eric Blake 提交于
      The previous optimizations lead to some follow-on cleanups.
      
      * src/conf/domain_conf.c (virDomainSnapshotForEachChild)
      (virDomainSnapshotForEachDescendant): Drop dead parameter.
      (virDomainSnapshotActOnDescendant)
      (virDomainSnapshotObjListNumFrom)
      (virDomainSnapshotObjListGetNamesFrom): Update callers.
      * src/qemu/qemu_driver.c (qemuDomainSnapshotNumChildren)
      (qemuDomainSnapshotListChildrenNames, qemuDomainSnapshotDelete):
      Likewise.
      * src/conf/domain_conf.h: Update prototypes.
      ebec21ee
    • E
      snapshot: take advantage of new relations · 35abced2
      Eric Blake 提交于
      Among other improvements, virDomainSnapshotForEachDescendant is
      changed from iterative O(n^2) to recursive O(n).  A bit better
      than the O(n^3) implementation in virsh snapshot-list!
      
      * src/conf/domain_conf.c (virDomainSnapshotObjListNum)
      (virDomainSnapshotObjListNumFrom)
      (virDomainSnapshotObjeListGetNames, virDomainSnapshotForEachChild)
      (virDomainSnapshotForEachDescendant): Optimize.
      (virDomainSnapshotActOnDescendant): Tweak.
      (virDomainSnapshotActOnChild, virDomainSnapshotMarkDescendant):
      Delete, now that they are unused.
      35abced2
    • E
      snapshot: track qemu snapshot relations · 9279bdf7
      Eric Blake 提交于
      Maintain the parent/child relationships of all qemu snapshots.
      
      * src/qemu/qemu_driver.c (qemuDomainSnapshotLoad): Populate
      relationships after loading.
      (qemuDomainSnapshotCreateXML): Set relations on creation; tweak
      redefinition to reuse existing object.
      (qemuDomainSnapshotReparentChildren, qemuDomainSnapshotDelete):
      Clear relations on delete.
      9279bdf7
    • E
      snapshot: framework for more efficient relation traversal · 7ec6f7bd
      Eric Blake 提交于
      No one was using virDomainSnapshotHasChildren, but that was an
      O(n) function.  Exposing and tracking a bit more metadata for each
      snapshot will allow the same query to be made with an O(1) query
      of the member field.  For single snapshot operations (create,
      delete), callers can be trusted to maintain the metadata themselves,
      but for reloading, we can't compute parents as we go since there
      is no guarantee that parents were parsed before children, so we also
      provide a function to refresh the relationships, and which can
      be used to detect if the user has ignored our warnings and been
      directly modifying files in /var/lib/libvirt/qemu/snapshot.  This
      patch only adds metadata; later patches will actually use it.
      
      This layout intentionally hardcodes the size of each snapshot struct,
      by tracking sibling pointers, rather than having to deal with the
      headache of yet more memory management by directly sticking a
      dynamically sized child[] on each parent.
      
      * src/conf/domain_conf.h (_virDomainSnapshotObj)
      (_virDomainSnapshotObjList): Add members.
      (virDomainSnapshotUpdateRelations, virDomainSnapshotDropParent):
      New prototypes.
      (virDomainSnapshotHasChildren): Delete.
      * src/conf/domain_conf.c (virDomainSnapshotSetRelations)
      (virDomainSnapshotUpdateRelations, virDomainSnapshotDropParent):
      New functions.
      (virDomainSnapshotHasChildren): Drop unused function.
      * src/libvirt_private.syms (domain_conf): Update exports.
      7ec6f7bd
    • E
      snapshot: use correct qmp monitor command · 59f179ce
      Eric Blake 提交于
      To date, JSON disk snapshots worked by accident, as they were always
      using hmp fallback due to a typo in commit e702b5ba not picking up
      on the (intentional) difference in command names between the two
      monitor protocols.
      
      * src/qemu/qemu_monitor_json.c (qemuMonitorJSONDiskSnapshot):
      Spell QMP command correctly.
      Reported by Luiz Capitulino.
      59f179ce
    • E
      snapshot: virsh shorthand for operating on current snap · b77b203c
      Eric Blake 提交于
      Rather than having to do:
      
      $ virsh snapshot-revert dom $(virsh snapshot-current dom --name)
      
      I thought it would be nice to do:
      
      $ virsh snapshot-revert dom --current
      
      I didn't add 'virsh snapshot-dumpxml --current' since we already have
      'virsh snapshot-current' for the same task.  snapshot-list accepted
      a name but did not require it, and that remains the case, with
      --current serving in place of that name.  For all other commands,
      name used to be required, and can now be replaced by --current;
      I intentionally made it so that omitting both --current and a name
      is an error (having the absence of a name imply --current seems
      just a bit too magic, so --current must be explicit).  I also had
      to keep snapshot-edit backwards-compatible, as the only command
      that already had a --current argument alongside a name, which still
      works to both edit a named snapshot and make it current.
      
      * tools/virsh.c (vshLookupSnapshot): New helper function.
      (cmdSnapshotEdit, cmdSnapshotList, cmdSnapshotParent)
      (cmdSnapshotDelete, cmdDomainSnapshotRevert): Use it, adding an
      option where needed.
      * tools/virsh.pod (snapshot-delete, snapshot-edit)
      (snapshot-list, snapshot-parent, snapshot-revert): Document
      use of --current.
      (snapshot-dumpxml): Mention alternative.
      b77b203c
    • E
      build: fix mingw build without sasl · 83ad88b7
      Eric Blake 提交于
      Detected by autogen.sh on a cross-mingw build:
      
      Creating library file: .libs/libvirt.dll.a
      Cannot export virNetSASLContextCheckIdentity: symbol not defined
      Cannot export virNetSASLContextNewServer: symbol not defined
      ...
      
      * src/libvirt_private.syms (virnetsaslcontext.h): Move symbols...
      * src/libvirt_sasl.syms: ...to new file.
      * src/Makefile.am (USED_SYM_FILES) [HAVE_SASL]: Use new file.
      (EXTRA_DIST): Ship it.
      83ad88b7
    • E
      build: fix 'make rpm' · bbbdc148
      Eric Blake 提交于
      Since commit ddf3bd32, 'make rpm' failed with:
      
      RPM build errors:
          File not found: /home/remote/eblake/rpmbuild/BUILDROOT/libvirt-0.9.6-1.fc14.eblake1318366440.x86_64/usr/share/systemtap/tapset/libvirtd.stp
      
      * libvirt.spec.in (with_dtrace): Match installed .stp files.
      bbbdc148
    • E
      build: fix 'make distcheck' · c654ba88
      Eric Blake 提交于
      I got these distcheck failures with sanlock enabled:
      
      ERROR: files left in build directory after distclean:
      ./tools/virt-sanlock-cleanup
      ./src/locking/qemu-sanlock.conf
      
      * src/Makefile.am (DISTCLEANFILES) [HAVE_SANLOCK]: Clean built
      file.
      * tools/Makefile.am (DISTCLEANFILES): Likewise.
      c654ba88
    • E
      build: ship helper scripts · e648aee0
      Eric Blake 提交于
      Otherwise, 'make rpm' fails with:
      
        GEN    libvirt_qemu.def
      make[2]: *** No rule to make target `dtrace2systemtap.pl', needed by `libvirt_probes.stp'.  Stop.
      
      * src/Makefile.am (EXTRA_DIST): Add recent script additions.
      e648aee0
    • D
      disable xenlight for non-Xen platforms · 099dc93b
      Dan Horák 提交于
      when building libvirt in Fedora/s390x I've found that xenlight needs to
      be explicitly disabled in the spec file. Configure properly sets the
      library as non-existent, but the %files section still wants to package
      the 3 /var/*/libvirt/libxl directories. See also
      https://bugzilla.redhat.com/show_bug.cgi?id=745020
      099dc93b
    • E
      build: fix 'make check' linkage with dtrace · b794d2a5
      Eric Blake 提交于
      Building on Linux with dtrace enabled was failing 'make check':
      
        CCLD   nodeinfotest
      ../src/.libs/libvirt_test.a(libvirt_net_rpc_client_la-virnetclient.o): In function `virNetClientNew':
      /home/remote/eblake/libvirt/src/rpc/virnetclient.c:162: undefined reference to `libvirt_rpc_client_new_semaphore'
      
      On looking further, I see some earlier warnings emitted from libtool:
      
      *** Warning: Linking the shared library libvirt.la against the non-libtool
      *** objects  probes.o is not portable!
      
      Since src/probes.o is only built on Linux, and even then, only when
      dtrace is enabled, this failure does not affect other platforms, and
      despite libtool warning that it is not generally portable, it is not
      a problem for our use-case in libvirt.la.  But it turns out that while
      libtool is willing to jam raw .o files into an installed shared
      library (libvirt.la becomes libvirt.so), it is NOT willing to jam
      the same .o file into the convenience library libvirt_test.la.
      Perhaps this is a bug in libtool, but even if we get libtool fixed,
      libvirt must continue to build on platforms with older libtool.  So,
      the fix is the same as we are already using for the libvirt_lxc
      executable - don't rely on the .o file being in the convenience
      library, but instead use LDADD to pull it in directly.
      
      * tests/Makefile.am (PROBES_O): New macro.
      (LDADDS): Use it to fix link errors.
      b794d2a5
    • J
      build: Fix VPATH build with new probes · 15d52307
      Jiri Denemark 提交于
      15d52307
  3. 11 10月, 2011 16 次提交
    • D
      ad2bb65c
    • D
      Update examples for probing with systemtap · 1223910b
      Daniel P. Berrange 提交于
      This removes the old example for legacy probes and adds two
      new scripts demonstrating many of the new probe point facilities.
      
      The rpc-monitor.stp script will print out friendly details of all
      RPC traffic between a libvirt client/server. This is incredibly
      useful in seeing what RPC calls are being made, and also debugging
      problems in the RPC protocol code
      
      The events.stp script will print out lots of info about the poll
      event loop, which is useful for debugging event handling problems
      
      * examples/systemtap/events.stp, examples/systemtap/rpc-monitor.stp:
        New examples
      * examples/systemtap/client.stp: Remove obsolete example
      1223910b
    • D
      Rewrite all the DTrace/SystemTAP probing · ddf3bd32
      Daniel P. Berrange 提交于
      The libvirtd daemon had a few crude system tap probes. Some of
      these were broken during the RPC rewrite. The new modular RPC
      code is structured in a way that allows much more effective
      tracing. Instead of trying to hook up the original probes,
      define a new set of probes for the RPC and event code.
      
      The master probes file is now src/probes.d.  This contains
      probes for virNetServerClientPtr, virNetClientPtr, virSocketPtr
      virNetTLSContextPtr and virNetTLSSessionPtr modules. Also add
      probes for the poll event loop.
      
      The src/dtrace2systemtap.pl script can convert the probes.d
      file into a libvirt_probes.stp file to make use from systemtap
      much simpler.
      
      The src/rpc/gensystemtap.pl script can generate a set of
      systemtap functions for translating RPC enum values into
      printable strings. This works for all RPC header enums (program,
      type, status, procedure) and also the authentication enum
      
      The PROBE macro will automatically generate a VIR_DEBUG
      statement, so any place with a PROBE can remove any existing
      manual DEBUG statements.
      
      * daemon/libvirtd.stp, daemon/probes.d: Remove obsolete probing
      * daemon/libvirtd.h: Remove probe macros
      * daemon/Makefile.am: Remove all probe buildings/install
      * daemon/remote.c: Update authentication probes
      * src/dtrace2systemtap.pl, src/rpc/gensystemtap.pl: Scripts
        to generate STP files
      * src/internal.h: Add probe macros
      * src/probes.d: Master list of probes
      * src/rpc/virnetclient.c, src/rpc/virnetserverclient.c,
        src/rpc/virnetsocket.c, src/rpc/virnettlscontext.c,
        src/util/event_poll.c: Insert probe points, removing any
        DEBUG statements that duplicate the info
      ddf3bd32
    • D
      Fix missing lock calls on virNetTLSContextRef · bc7b8c7e
      Daniel P. Berrange 提交于
      The virNetTLSContextRef API forgot to acquire/release the lock
      while changing ctxt->refs
      
      * src/rpc/virnettlscontext.c: Add lock calls
      bc7b8c7e
    • D
      Refactor TLS to facilitate dynamic probing · 5bcbb390
      Daniel P. Berrange 提交于
      Pull the call to gnutls_x509_crt_get_dn up into a higher function
      so that the 'dname' variable will be available for probe points
      
      * src/rpc/virnettlscontext.c: Pull gnutls_x509_crt_get_dn up
        one level
      5bcbb390
    • D
      Add virSocketRef API to facilitate dynamic probing · 6aebc194
      Daniel P. Berrange 提交于
      Instead of directly manipulating sock->refs, add a virSocketRef
      API
      
      * src/rpc/virnetsocket.c, src/rpc/virnetsocket.h: Add virSocketRef
      6aebc194
    • D
      If receiving a stream error, mark EOF on the stream · bc61aa12
      Daniel P. Berrange 提交于
      If we receive an error on the stream, set the EOF marker so
      that any further (bogus) incoming data is dropped.
      
      * src/rpc/virnetclientstream.c: Set EOF on stream
      bc61aa12
    • D
      Make libvirt.so include the RPC server code · 22af84dc
      Daniel P. Berrange 提交于
      To avoid static linking libvirtd to the RPC server code, which
      then prevents sane introduction of DTrace probes, put it all
      in the libvirt.so, and export it
      
      * daemon/Makefile.am: Don't link to RPC libraries
      * src/Makefile.am: Link all RPC libraries to libvirt.so
      * src/libvirt_private.syms: Export all RPC functions
      22af84dc
    • E
      snapshot: implement snapshot children listing in esx · 1c3e0eab
      Eric Blake 提交于
      It was fairly trivial to return snapshot listing based on a
      point in the hierarchy, rather than starting at all roots.
      
      * src/esx/esx_driver.c (esxDomainSnapshotNumChildren)
      (esxDomainSnapshotListChildrenNames): New functions.
      1c3e0eab
    • E
      snapshot: implement snapshot children listing in qemu · 59074037
      Eric Blake 提交于
      Not too hard to wire up.  The trickiest part is realizing that
      listing children of a snapshot cannot use SNAPSHOT_LIST_ROOTS,
      and that we overloaded that bit to also mean SNAPSHOT_LIST_DESCENDANTS;
      we use that bit to decide which iteration to use, but don't want
      the existing counting/listing functions to see that bit.
      
      * src/conf/domain_conf.h (virDomainSnapshotObjListNumFrom)
      (virDomainSnapshotObjListGetNamesFrom): New prototypes.
      * src/conf/domain_conf.c (virDomainSnapshotObjListNumFrom)
      (virDomainSnapshotObjListGetNamesFrom): New functions.
      * src/libvirt_private.syms (domain_conf.h): Export them.
      * src/qemu/qemu_driver.c (qemuDomainSnapshotNumChildren)
      (qemuDomainSnapshotListChildrenNames): New functions.
      59074037
    • E
      snapshot: remote protocol for snapshot children · db536236
      Eric Blake 提交于
      Very mechanical.  I'm so glad we've automated the generation of things,
      compared to what it was in 0.8.x days, where this would be much longer.
      
      * src/remote/remote_protocol.x
      (REMOTE_PROC_DOMAIN_SNAPSHOT_NUM_CHILDREN)
      (REMOTE_PROC_DOMAIN_SNAPSHOT_LIST_CHILDREN_NAMES): New rpcs.
      (remote_domain_snapshot_num_children_args)
      (remote_domain_snapshot_num_children_ret)
      (remote_domain_snapshot_list_children_names_args)
      (remote_domain_snapshot_list_children_names_ret): New structs.
      * src/remote/remote_driver.c (remote_driver): Use it.
      * src/remote_protocol-structs: Update.
      db536236
    • E
      snapshot: virsh fallback for snapshot-list --descendants --from · 521cc447
      Eric Blake 提交于
      Given a list of snapshots and their parents, finding all descendants
      requires a hairy traversal.  This code is O(n^3); it could maybe be
      made to scale O(n^2) with the use of a hash table, but that costs more
      memory.  Hopefully there aren't too many people with a hierarchy
      so large as to approach REMOTE_DOMAIN_SNAPSHOT_LIST_NAMES_MAX (1024).
      
      * tools/virsh.c (cmdSnapshotList): Add final fallback.
      521cc447
    • E
      snapshot: virsh fallback for snapshot-list --from children · 16d7b390
      Eric Blake 提交于
      Iterating over one level of children requires parsing all snapshots
      and their parents; a bit of code shuffling makes it pretty easy
      to do this as well.
      
      * tools/virsh.c (cmdSnapshotList): Add another fallback.
      16d7b390
    • E
      snapshot: virsh fallback for snapshot-list --tree --from · 51082301
      Eric Blake 提交于
      Emulating --from requires grabbing the entire list of snapshots
      and their parents, and recursively iterating over the list from
      the point of interest - but we already do that for --tree.  This
      turns on emulation for that situation.
      
      * tools/virsh.c (__vshControl): Rename member.
      (vshReconnect, cmdConnect, vshGetSnapshotParent): Update clients.
      (cmdSnapshotList): Add fallback.
      51082301
    • E
      snapshot: virsh snapshot-list and children · fe383bb5
      Eric Blake 提交于
      Sometimes, we only care about one branch of the snapshot hierarchy.
      Make it easier to list a single branch, by using the new APIs.
      
      Technically, I could emulate these new virsh options on old servers
      by doing a complete dump, then scraping xml to filter out just the
      snapshots that I care about, but I didn't want to do that in this patch.
      
      * tools/virsh.c (cmdSnapshotList): Add --from, --descendants.
      * tools/virsh.pod (snapshot-list): Document them.
      fe383bb5
    • E
      snapshot: new virDomainSnapshotListChildrenNames API · f2013c9d
      Eric Blake 提交于
      The previous API addition allowed traversal up the hierarchy;
      this one makes it easier to traverse down the hierarchy.
      
      In the python bindings, virDomainSnapshotNumChildren can be
      generated, but virDomainSnapshotListChildrenNames had to copy
      from the hand-written example of virDomainSnapshotListNames.
      
      * include/libvirt/libvirt.h.in (virDomainSnapshotNumChildren)
      (virDomainSnapshotListChildrenNames): New prototypes.
      (VIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS): New flag alias.
      * src/libvirt.c (virDomainSnapshotNumChildren)
      (virDomainSnapshotListChildrenNames): New functions.
      * src/libvirt_public.syms: Export them.
      * src/driver.h (virDrvDomainSnapshotNumChildren)
      (virDrvDomainSnapshotListChildrenNames): New callbacks.
      * python/generator.py (skip_impl, nameFixup): Update lists.
      * python/libvirt-override-api.xml: Likewise.
      * python/libvirt-override.c
      (libvirt_virDomainSnapshotListChildrenNames): New wrapper function.
      f2013c9d