1. 27 3月, 2012 1 次提交
    • M
      Cleanup for a return statement in source files · 9943276f
      Martin Kletzander 提交于
      Return statements with parameter enclosed in parentheses were modified
      and parentheses were removed. The whole change was scripted, here is how:
      
      List of files was obtained using this command:
      git grep -l -e '\<return\s*([^()]*\(([^()]*)[^()]*\)*)\s*;' |             \
      grep -e '\.[ch]$' -e '\.py$'
      
      Found files were modified with this command:
      sed -i -e                                                                 \
      's_^\(.*\<return\)\s*(\(\([^()]*([^()]*)[^()]*\)*\))\s*\(;.*$\)_\1 \2\4_' \
      -e 's_^\(.*\<return\)\s*(\([^()]*\))\s*\(;.*$\)_\1 \2\3_'
      
      Then checked for nonsense.
      
      The whole command looks like this:
      git grep -l -e '\<return\s*([^()]*\(([^()]*)[^()]*\)*)\s*;' |             \
      grep -e '\.[ch]$' -e '\.py$' | xargs sed -i -e                            \
      's_^\(.*\<return\)\s*(\(\([^()]*([^()]*)[^()]*\)*\))\s*\(;.*$\)_\1 \2\4_' \
      -e 's_^\(.*\<return\)\s*(\([^()]*\))\s*\(;.*$\)_\1 \2\3_'
      9943276f
  2. 26 3月, 2012 1 次提交
    • E
      Fix and test round-trip of query parameters · 70c07e01
      Eric Blake 提交于
      When qparams support was dropped in commit bc1ff160, we forgot
      to add tests to ensure that viruri can do the same round trip
      handling of a URI. This round trip was broken, due to use
      of the old 'query' field of xmlUriPtr, instead of the new
      'query_raw'
      
      Also, we forgot to report an OOM error.
      
      * tests/viruritest.c (mymain): Add tests based on just-deleted
      qparamtest.
      (testURIParse): Allow difference in input and expected output.
      * src/util/viruri.c (virURIFormat): Add missing error. Use
        query_raw, instead of query for xmlUriPtr object.
      70c07e01
  3. 24 3月, 2012 9 次提交
    • O
      spec: Add missed dependancy for numad · beb76e37
      Osier Yang 提交于
      numad is available since Fedora 17 and RHEL6.X. And it's not supported
      on s390[x] and ARM.
      beb76e37
    • E
      snapshot: improve qemu handling of reused snapshot targets · d42a2ffc
      Eric Blake 提交于
      The oVirt developers have stated that the real reasons they want
      to have qemu reuse existing volumes when creating a snapshot are:
      1. the management framework is set up so that creation has to be
      done from a central node for proper resource tracking, and having
      libvirt and/or qemu create things violates the framework, and
      2. qemu defaults to creating snapshots with an absolute path to
      the backing file, but oVirt wants to manage a backing chain that
      uses just relative names, to allow for easier migration of a chain
      across storage locations.
      
      When 0.9.10 added VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT (commit
      4e9953a4), it only addressed point 1, but libvirt was still using
      O_TRUNC which violates point 2.  Meanwhile, the new qemu
      'transaction' monitor command includes a new optional mode argument
      that will force qemu to reuse the metadata of the file it just
      opened (with the burden on the caller to have valid metadata there
      in the first place).  So, this tweaks the meaning of the flag to
      cover both points as intended for use by oVirt.  It is not strictly
      backward-compatible to 0.9.10 behavior, but it can be argued that
      the O_TRUNC of 0.9.10 was a bug.
      
      Note that this flag is all-or-nothing, and only selects between
      'existing' and the default 'absolute-paths'.  A more flexible
      approach that would allow per-disk selections, as well as adding
      support for the 'no-backing-file' mode, would be possible by
      extending the <domainsnapshot> xml to have a per-disk mode, but
      until we have a management application expressing a need for that
      additional complexity, it is not worth doing.
      
      * src/libvirt.c (virDomainSnapshotCreateXML): Tweak documentation.
      * src/qemu/qemu_monitor.h (qemuMonitorDiskSnapshot): Add
      parameters.
      * src/qemu/qemu_monitor_json.h (qemuMonitorJSONDiskSnapshot):
      Likewise.
      * src/qemu/qemu_monitor.c (qemuMonitorDiskSnapshot): Pass them
      through.
      * src/qemu/qemu_monitor_json.c (qemuMonitorJSONDiskSnapshot): Use
      new monitor command arguments.
      * src/qemu/qemu_driver.c (qemuDomainSnapshotCreateDiskActive)
      (qemuDomainSnapshotCreateSingleDiskActive): Adjust callers.
      (qemuDomainSnapshotDiskPrepare): Allow qed, modify rules on reuse.
      d42a2ffc
    • E
      snapshot: wire up qemu transaction command · 0436d328
      Eric Blake 提交于
      The hardest part about adding transactions is not using the new
      monitor command, but undoing the partial changes we made prior
      to a failed transaction.
      
      * src/qemu/qemu_driver.c (qemuDomainSnapshotCreateDiskActive): Use
      transaction when available.
      (qemuDomainSnapshotUndoSingleDiskActive): New function.
      (qemuDomainSnapshotCreateSingleDiskActive): Pass through actions.
      (qemuDomainSnapshotCreateXML): Adjust caller.
      0436d328
    • E
      snapshot: add support for qemu transaction command · 64d5e815
      Eric Blake 提交于
      QEmu 1.1 is adding a 'transaction' command to the JSON monitor.
      Each element of a transaction corresponds to a top-level command,
      with the additional guarantee that the transaction flushes all
      pending I/O, then guarantees that all actions will be successful
      as a group or that failure will roll back the state to what it
      was before the monitor command.  The difference between a
      top-level command:
      
      { "execute": "blockdev-snapshot-sync", "arguments":
        { "device": "virtio0", ... } }
      
      and a transaction:
      
      { "execute": "transaction", "arguments":
        { "actions": [
          { "type": "blockdev-snapshot-sync", "data":
            { "device": "virtio0", ... } } ] } }
      
      is just a couple of changed key names and nesting the shorter
      command inside a JSON array to the longer command.  This patch
      just adds the framework; the next patch will actually use a
      transaction.
      
      * src/qemu/qemu_monitor_json.c (qemuMonitorJSONMakeCommand): Move
      guts...
      (qemuMonitorJSONMakeCommandRaw): ...into new helper.  Add support
      for array element.
      (qemuMonitorJSONTransaction): New command.
      (qemuMonitorJSONDiskSnapshot): Support use in a transaction.
      * src/qemu/qemu_monitor_json.h (qemuMonitorJSONDiskSnapshot): Add
      argument.
      (qemuMonitorJSONTransaction): New declaration.
      * src/qemu/qemu_monitor.h (qemuMonitorTransaction): Likewise.
      (qemuMonitorDiskSnapshot): Add argument.
      * src/qemu/qemu_monitor.c (qemuMonitorTransaction): New wrapper.
      (qemuMonitorDiskSnapshot): Pass argument on.
      * src/qemu/qemu_driver.c
      (qemuDomainSnapshotCreateSingleDiskActive): Update caller.
      64d5e815
    • E
      snapshot: rudimentary qemu support for atomic disk snapshot · 4c4cc1b9
      Eric Blake 提交于
      Taking an external snapshot of just one disk is atomic, without having
      to pause and resume the VM.  This also paves the way for later patches
      to interact with the new qemu 'transaction' monitor command.
      
      The various scenarios when requesting atomic are:
      online, 1 disk, old qemu - safe, allowed by this patch
      online, more than 1 disk, old qemu - failure, this patch
      offline snapshot - safe, once a future patch implements offline disk snapshot
      online, 1 or more disks, new qemu - safe, once future patch uses transaction
      
      Taking an online system checkpoint snapshot is atomic, since it is
      done via a single 'savevm' monitor command.  Taking an offline system
      checkpoint snapshot is atomic, thanks to the previous patch.
      
      * src/qemu/qemu_driver.c (qemuDomainSnapshotCreateXML): Support
      new flag for single-disk setups.
      (qemuDomainSnapshotDiskPrepare): Check for atomic here.
      (qemuDomainSnapshotCreateDiskActive): Skip pausing the VM when
      atomic supported.
      (qemuDomainSnapshotIsAllowed): Use bool instead of int.
      4c4cc1b9
    • E
      snapshot: make offline qemu snapshots atomic · 922d498e
      Eric Blake 提交于
      Offline internal snapshots can be rolled back with just a little
      bit of refactoring, meaning that we are now automatically atomic.
      
      * src/qemu/qemu_domain.c (qemuDomainSnapshotForEachQcow2): Move
      guts...
      (qemuDomainSnapshotForEachQcow2Raw): ...to new helper, to allow
      rollbacks.
      922d498e
    • E
      snapshot: add atomic create flag · 4d5533ca
      Eric Blake 提交于
      Right now, it is appallingly easy to cause qemu disk snapshots
      to alter a domain then fail; for example, by requesting a two-disk
      snapshot where the second disk name resides on read-only storage.
      In this failure scenario, libvirt reports failure, but modifies
      the live domain XML in-place to record that the first disk snapshot
      was taken; and places a difficult burden on the management app
      to grab the XML and reparse it to see which disks, if any, were
      altered by the partial snapshot.
      
      This patch adds a new flag where implementations can request that
      the hypervisor make snapshots atomically; either no changes to
      XML occur, or all disks were altered as a group.  If you request
      the flag, you either get outright failure up front, or you take
      advantage of hypervisor abilities to make an atomic snapshot. Of
      course, drivers should prefer the atomic means even without the
      flag explicitly requested.
      
      There's no way to make snapshots 100% bulletproof - even if the
      hypervisor does it perfectly atomic, we could run out of memory
      during the followup tasks of updating our in-memory XML, and report
      a failure.  However, these sorts of catastrophic failures are rare
      and unlikely, and it is still nicer to know that either all
      snapshots happened or none of them, as that is an easier state to
      recover from.
      
      * include/libvirt/libvirt.h.in
      (VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC): New flag.
      * src/libvirt.c (virDomainSnapshotCreateXML): Document it.
      * tools/virsh.c (cmdSnapshotCreate, cmdSnapshotCreateAs): Expose it.
      * tools/virsh.pod (snapshot-create, snapshot-create-as): Document
      it.
      4d5533ca
    • E
      snapshot: add qemu capability for 'transaction' command · 311357d9
      Eric Blake 提交于
      We need a capability bit to gracefully error out if some of the
      additions in future patches can't be implemented by the running qemu.
      
      * src/qemu/qemu_capabilities.h (QEMU_CAPS_TRANSACTION): New cap.
      * src/qemu/qemu_capabilities.c (qemuCaps): Name it.
      * src/qemu/qemu_monitor_json.c (qemuMonitorJSONCheckCommands): Set
      it.
      311357d9
    • E
      build: fix incorrect enum declaration · 9b6860f5
      Eric Blake 提交于
      Recent changes have caused build failures on systems where pdwtags works:
      commit a26a1969 mistakenly exported a public variable
      commits a26a1969, 57ddcc23, 487c0633 all had copy-paste bugs in
      hand-updating the golden API rather than rerunning pdwtags
      
      * include/libvirt/libvirt.h.in (virDomainEventTrayChangeReason):
      Make this a typedef, not external storage.
      * src/remote_protocol-structs (remote_procedure): Fix spelling.
      9b6860f5
  4. 23 3月, 2012 24 次提交
  5. 22 3月, 2012 5 次提交
    • J
      qemu: Avoid dangling migration-out job when client dies · 1fdc53c3
      Jiri Denemark 提交于
      When a client which started non-p2p migration dies in a bad time, the
      source libvirtd never clears the migration job and almost nothing can be
      done with the domain without restarting the daemon. This patch makes use
      of connection close callbacks and ensures that migration job is properly
      discarded when the client disconnects.
      1fdc53c3
    • J
      527d867a
    • J
      qemu: Add connection close callbacks · 79127360
      Jiri Denemark 提交于
      Add support for registering arbitrary callback to be called for a domain
      when a connection gets closed.
      79127360
    • J
      qemu: Avoid dangling migration-in job on shutoff domains · 4f061ea6
      Jiri Denemark 提交于
      Destination daemon should not rely on the client or source daemon
      (depending on the type of migration) to call Finish when migration
      fails, because the client may crash before it can do so. The domain
      prepared for incoming migration is set to be destroyed (and migration
      job cleaned up) when connection with the client closes but this is not
      enough. If the associated qemu process crashes after Prepare step and
      the domain is cleaned up before the connection gets closed, autodestroy
      is not called for the domain and migration jobs remains set. In case the
      domain is defined on destination host (i.e., it is not completely
      removed once destroyed) we keep the job set for ever. To fix this, we
      register a cleanup callback which is responsible to clean migration-in
      job when a domain dies anywhere between Prepare and Finish steps. Note
      that we can't blindly clean any job when spotting EOF on monitor since
      normally an API is running at that time.
      4f061ea6
    • J
      qemu: Add support for domain cleanup callbacks · bf9f0a97
      Jiri Denemark 提交于
      Add support for registering cleanup callbacks to be run when a domain
      transitions to shutoff state.
      bf9f0a97