1. 17 2月, 2016 1 次提交
    • P
      qemu: migration: Refactor code now that we assume support for fd migration · 23087cfd
      Peter Krempa 提交于
      After removing capability check for fd migration the code that was left
      behind didn't make quite sense. The old exec migration would be used in
      case when pipe() failed. Remove the old code and make failure of pipe()
      a hard error.
      
      This additionally removes usage of virCgroupAllowDevicePath outside of
      qemu_cgroup.c.
      23087cfd
  2. 19 11月, 2015 2 次提交
    • J
      qemu: Use -incoming defer for migrations · 2c4ba8b4
      Jiri Denemark 提交于
      Traditionally, we pass incoming migration URI on QEMU command line,
      which has some drawbacks. Depending on the URI QEMU may initialize its
      migration state immediately without giving us a chance to set any
      additional migration parameters (this applies mainly for fd: URIs). For
      some URIs the monitor may be completely blocked from the beginning until
      migration is finished, which means we may be stuck in qmp_capabilities
      command without being able to send any QMP commands.
      
      QEMU solved this by introducing "defer" parameter for -incoming command
      line option. This will tell QEMU to prepare for an incoming migration
      while the actual incoming URI is sent using migrate-incoming QMP
      command. Before calling this command we can normally talk to the
      monitor and even set any migration parameters which will be honored by
      the incoming migration.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      2c4ba8b4
    • J
      qemu: Move incoming URI code to qemu_migration · 34b9fe61
      Jiri Denemark 提交于
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      34b9fe61
  3. 07 10月, 2015 2 次提交
  4. 10 7月, 2015 1 次提交
  5. 19 6月, 2015 2 次提交
    • J
      qemu: Refactor qemuMigrationUpdateJobStatus · c1a7f199
      Jiri Denemark 提交于
      Once we start waiting for migration events instead of polling
      query-migrate, priv->job.current will not be regularly updated anymore
      because we will get the current status directly from the events. Thus
      virDomainGetJob{Info,Stats} will have to query QEMU, but they can't just
      blindly update priv->job.current structure. This patch introduces
      qemuMigrationFetchJobStatus which just fills in a caller supplied
      structure and makes qemuMigrationUpdateJobStatus a tiny wrapper around
      it.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      c1a7f199
    • J
      qemu: Cancel disk mirrors after libvirtd restart · e8f263e0
      Jiri Denemark 提交于
      When libvirtd is restarted during migration, we properly cancel the
      ongoing migration (unless it managed to almost finished before the
      restart). But if we were also migrating storage using NBD, we would
      completely forget about the running disk mirrors.
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      e8f263e0
  6. 18 6月, 2015 1 次提交
  7. 21 12月, 2014 1 次提交
    • M
      qemu: completely rework reference counting · 540c339a
      Martin Kletzander 提交于
      There is one problem that causes various errors in the daemon.  When
      domain is waiting for a job, it is unlocked while waiting on the
      condition.  However, if that domain is for example transient and being
      removed in another API (e.g. cancelling incoming migration), it get's
      unref'd.  If the first call, that was waiting, fails to get the job, it
      unref's the domain object, and because it was the last reference, it
      causes clearing of the whole domain object.  However, when finishing the
      call, the domain must be unlocked, but there is no way for the API to
      know whether it was cleaned or not (unless there is some ugly temporary
      variable, but let's scratch that).
      
      The root cause is that our APIs don't ref the objects they are using and
      all use the implicit reference that the object has when it is in the
      domain list.  That reference can be removed when the API is waiting for
      a job.  And because each domain doesn't do its ref'ing, it results in
      the ugly checking of the return value of virObjectUnref() that we have
      everywhere.
      
      This patch changes qemuDomObjFromDomain() to ref the domain (using
      virDomainObjListFindByUUIDRef()) and adds qemuDomObjEndAPI() which
      should be the only function in which the return value of
      virObjectUnref() is checked.  This makes all reference counting
      deterministic and makes the code a bit clearer.
      Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
      540c339a
  8. 23 9月, 2014 1 次提交
  9. 25 6月, 2014 1 次提交
    • J
      qemu: enum cleanups in "src/qemu/*" · aa990efe
      Julio Faracco 提交于
      As we are doing with the enum structures, a cleanup in "src/qemu/"
      directory was done now. All the enums that were defined in the
      header files were converted to typedefs in this directory. This
      patch includes all the adjustments to remove conflicts when you do
      this kind of change. "Enum-to-typedef"'s conversions were made in
      "src/qemu/qemu_{capabilities, domain, migration, hotplug}.h".
      Signed-off-by: NJulio Faracco <jcfaracco@gmail.com>
      aa990efe
  10. 21 3月, 2014 1 次提交
    • C
      libvirt support to force convergence of live guest migration · 05e1b06a
      Chegu Vinod 提交于
      Busy enterprise workloads hosted on large sized VM's tend to dirty
      memory faster than the transfer rate achieved via live guest migration.
      Despite some good recent improvements (& using dedicated 10Gig NICs
      between hosts) the live migration may NOT converge.
      
      Recently support was added in qemu (version 1.6) to allow a user to
      choose if they wish to force convergence of their migration via a
      new migration capability : "auto-converge". This feature allows for qemu
      to auto-detect lack of convergence and trigger a throttle-down of the
      VCPUs.
      
      This patch includes the libvirt support needed to trigger this
      feature. (Testing is in progress)
      Signed-off-by: NChegu Vinod <chegu_vinod@hp.com>
      Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
      05e1b06a
  11. 11 10月, 2013 1 次提交
  12. 04 9月, 2013 1 次提交
  13. 18 7月, 2013 1 次提交
  14. 25 6月, 2013 5 次提交
  15. 18 6月, 2013 1 次提交
    • P
      migration: Make erroring out on I/O error controllable by flag · cf6d56ac
      Peter Krempa 提交于
      Paolo Bonzini pointed out that it's actually possible to migrate a qemu
      instance that was paused due to I/O error and it will be able to work on
      the destination if the storage is accessible.
      
      This patch introduces flag VIR_MIGRATE_ABORT_ON_ERROR that cancels the
      migration in case an I/O error happens while it's being performed and
      allows migration without this flag. This flag can be possibly used for
      other error reasons that may be introduced in the future.
      cf6d56ac
  16. 11 6月, 2013 1 次提交
  17. 08 5月, 2013 1 次提交
    • D
      Pull parsing of migration xml up into QEMU driver APIs · 449e6b1b
      Daniel P. Berrange 提交于
      Currently the parsing of XML is pushed down into the various
      migration helper APIs. This makes it difficult to insert the
      correct access control checks, since one helper API services
      many public APIs. Pull the parsing of XML up to the top level
      of the QEMU driver APIs
      449e6b1b
  18. 23 2月, 2013 1 次提交
  19. 12 12月, 2012 1 次提交
    • P
      qemu: Make qemuMigrationIsAllowed more reusable · e5d3ab5e
      Peter Krempa 提交于
      This patch exports qemuMigrationIsAllowed and adds a new parameter to it
      to denote if it's a remote migration or a local migration. Local
      migrations are used in snapshots and saving of the machine state and
      have fewer restrictions. This patch also adjusts callers of the function
      and tweaks some error messages to be more universal.
      e5d3ab5e
  20. 11 12月, 2012 1 次提交
    • L
      Add support for offline migration · 8b9bf787
      liguang 提交于
      Offline migration transfers inactive definition of a domain (which may
      or may not be active). After successful completion, the domain remains
      in its current state on source host and is defined but inactive on
      destination host. It's a bit more clever than virDomainGetXMLDesc() on
      source host followed by virDomainDefineXML() on destination host, as
      offline migration will run pre-migration hook to update the domain XML
      on destination host. Currently, copying non-shared storage is not
      supported during offline migration.
      
      Offline migration can be requested with a new migration flag called
      VIR_MIGRATE_OFFLINE (which has to be combined with
      VIR_MIGRATE_PERSIST_DEST flag).
      8b9bf787
  21. 29 11月, 2012 1 次提交
  22. 21 9月, 2012 1 次提交
  23. 07 8月, 2012 1 次提交
  24. 23 7月, 2012 1 次提交
    • O
      Desert the FSF address in copyright · f9ce7dad
      Osier Yang 提交于
      Per the FSF address could be changed from time to time, and GNU
      recommends the following now: (http://www.gnu.org/licenses/gpl-howto.html)
      
        You should have received a copy of the GNU General Public License
        along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
      
      This patch removes the explicit FSF address, and uses above instead
      (of course, with inserting 'Lesser' before 'General').
      
      Except a bunch of files for security driver, all others are changed
      automatically, the copyright for securify files are not complete,
      that's why to do it manually:
      
        src/security/security_selinux.h
        src/security/security_driver.h
        src/security/security_selinux.c
        src/security/security_apparmor.h
        src/security/security_apparmor.c
        src/security/security_driver.c
      f9ce7dad
  25. 22 3月, 2012 1 次提交
    • 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
  26. 23 2月, 2012 1 次提交
    • J
      qemu: Forbid migration with cache != none · d57485f7
      Jiri Denemark 提交于
      Migrating domains with disks using cache != none is unsafe unless the
      disk images are stored on coherent clustered filesystem. Thus we forbid
      migrating such domains unless VIR_MIGRATE_UNSAFE flags is used.
      d57485f7
  27. 15 10月, 2011 1 次提交
  28. 03 9月, 2011 1 次提交
    • E
      snapshot: prevent migration from stranding snapshot data · e2fb96d9
      Eric Blake 提交于
      Migration is another case of stranding metadata.  And since
      snapshot metadata is arbitrarily large, there's no way to
      shoehorn it into the migration cookie of migration v3.
      
      This patch consolidates two existing locations for migration
      validation into one helper function, then enhances that function
      to also do the new checks.  If we could always trust the source
      to validate migration, then the destination would not have to
      do anything; but since older servers that did not do checking
      can migrate to newer destinations, we have to repeat some of
      the same checks on the destination; meanwhile, we want to
      detect failures as soon as possible.  With migration v2, this
      means that validation will reject things at Prepare on the
      destination if the XML exposes the problem, otherwise at Perform
      on the source; with migration v3, this means that validation
      will reject things at Begin on the source, or if the source
      is old and the XML exposes the problem, then at Prepare on the
      destination.
      
      This patch is necessarily over-strict.  Once a later patch
      properly handles auto-cleanup of snapshot metadata on the
      death of a transient domain, then the only time we actually
      need snapshots to prevent migration is when using the
      --undefinesource flag on a persistent source domain.
      
      It is possible to recreate snapshot metadata on the destination
      with VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE and
      VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT.  But for now, that is limited,
      since if we delete the snapshot metadata prior to migration,
      then we won't know the name of the current snapshot to pass
      along; and if we delete the snapshot metadata after migration
      and use the v3 migration cookie to pass along the name of the
      current snapshot, then we need a way to bypass the fact that
      this patch refuses migration with snapshot metadata present.
      
      So eventually, we may have to introduce migration protocol v4
      that allows feature negotiation and an arbitrary number of
      handshake exchanges, so as to pass as many rpc calls as needed
      to transfer all the snapshot xml hierarchy.
      
      But all of that is thoughts for the future; for now, the best
      course of action is to quit early, rather than get into a
      funky state of stale metadata; then relax restrictions later.
      
      * src/qemu/qemu_migration.h (qemuMigrationIsAllowed): Make static.
      * src/qemu/qemu_migration.c (qemuMigrationIsAllowed): Alter
      signature, and allow checks for both outgoing and incoming.
      (qemuMigrationBegin, qemuMigrationPrepareAny)
      (qemuMigrationPerformJob): Update callers.
      e2fb96d9
  29. 02 9月, 2011 1 次提交
    • E
      qemu: refactor file opening · 449ae9c2
      Eric Blake 提交于
      In a SELinux or root-squashing NFS environment, libvirt has to go
      through some hoops to create a new file that qemu can then open()
      by name.  Snapshots are a case where we want to guarantee an empty
      file that qemu can open; also, reopening a save file to convert it
      from being marked partial to complete requires a reopen to avoid
      O_DIRECT headaches.  Refactor some existing code to make it easier
      to reuse in later patches.
      
      * src/qemu/qemu_migration.h (qemuMigrationToFile): Drop parameter.
      * src/qemu/qemu_migration.c (qemuMigrationToFile): Let cgroup do
      the stat, rather than asking caller to do it and pass info down.
      * src/qemu/qemu_driver.c (qemuOpenFile): New function, pulled from...
      (qemuDomainSaveInternal): ...here.
      (doCoreDump, qemuDomainSaveImageOpen): Use it here as well.
      449ae9c2
  30. 01 8月, 2011 1 次提交
    • E
      qemu: fix crash when mixing sync and async monitor jobs · 193cd0f3
      Eric Blake 提交于
      Currently, we attempt to run sync job and async job at the same time. It
      means that the monitor commands for two jobs can be run in any order.
      
      In the function qemuDomainObjEnterMonitorInternal():
          if (priv->job.active == QEMU_JOB_NONE && priv->job.asyncJob) {
              if (qemuDomainObjBeginNestedJob(driver, obj) < 0)
      We check whether the caller is an async job by priv->job.active and
      priv->job.asynJob. But when an async job is running, and a sync job is
      also running at the time of the check, then priv->job.active is not
      QEMU_JOB_NONE. So we cannot check whether the caller is an async job
      in the function qemuDomainObjEnterMonitorInternal(), and must instead
      put the burden on the caller to tell us when an async command wants
      to do a nested job.
      
      Once the burden is on the caller, then only async monitor enters need
      to worry about whether the VM is still running; for sync monitor enter,
      the internal return is always 0, so lots of ignore_value can be dropped.
      
      * src/qemu/THREADS.txt: Reflect new rules.
      * src/qemu/qemu_domain.h (qemuDomainObjEnterMonitorAsync): New
      prototype.
      * src/qemu/qemu_process.h (qemuProcessStartCPUs)
      (qemuProcessStopCPUs): Add parameter.
      * src/qemu/qemu_migration.h (qemuMigrationToFile): Likewise.
      (qemuMigrationWaitForCompletion): Make static.
      * src/qemu/qemu_domain.c (qemuDomainObjEnterMonitorInternal): Add
      parameter.
      (qemuDomainObjEnterMonitorAsync): New function.
      (qemuDomainObjEnterMonitor, qemuDomainObjEnterMonitorWithDriver):
      Update callers.
      * src/qemu/qemu_driver.c (qemuDomainSaveInternal)
      (qemudDomainCoreDump, doCoreDump, processWatchdogEvent)
      (qemudDomainSuspend, qemudDomainResume, qemuDomainSaveImageStartVM)
      (qemuDomainSnapshotCreateActive, qemuDomainRevertToSnapshot):
      Likewise.
      * src/qemu/qemu_process.c (qemuProcessStopCPUs)
      (qemuProcessFakeReboot, qemuProcessRecoverMigration)
      (qemuProcessRecoverJob, qemuProcessStart): Likewise.
      * src/qemu/qemu_migration.c (qemuMigrationToFile)
      (qemuMigrationWaitForCompletion, qemuMigrationUpdateJobStatus)
      (qemuMigrationJobStart, qemuDomainMigrateGraphicsRelocate)
      (doNativeMigrate, doTunnelMigrate, qemuMigrationPerformJob)
      (qemuMigrationPerformPhase, qemuMigrationFinish)
      (qemuMigrationConfirm): Likewise.
      * src/qemu/qemu_hotplug.c: Drop unneeded ignore_value.
      193cd0f3
  31. 27 7月, 2011 2 次提交
    • J
      qemu: Migration job on source daemon · d58e91a8
      Jiri Denemark 提交于
      Make MIGRATION_OUT use the new helper methods.
      
      This also introduces new protection to migration v3 process: the
      migration job is held from Begin to Confirm to avoid changes to a domain
      during migration (esp. between Begin and Perform phases). This change is
      automatically applied to p2p and tunneled migrations. For normal
      migration, this requires support from a client. In other words, if an
      old (pre 0.9.4) client starts normal migration of a domain, the domain
      will not be protected against changes between Begin and Perform steps.
      d58e91a8
    • J
      qemu: Implement migration job phases · 92713670
      Jiri Denemark 提交于
      This patch introduces several helper methods to deal with jobs and
      phases during migration in a simpler manner.
      92713670
  32. 16 7月, 2011 1 次提交
    • E
      flags: fix qemu migration regression · 8d733f4e
      Eric Blake 提交于
      Commit f548480b broke migration v3 on qemu, because the driver
      passed flags on through to qemu_migration even though
      qemu_migration wasn't using those flags.
      
      * src/qemu/qemu_migration.h (QEMU_MIGRATION_FLAGS): New define.
      * src/qemu/qemu_driver.c: Simplify all migration callbacks.
      * src/qemu/qemu_migration.c (qemuMigrationConfirm): Fix regression.
      8d733f4e