On 11/19/2012 09:06 AM, Peter Krempa wrote:
Some hypervisors require a respawn of the hypervisor to allow
reverting
to some snapshot states. This patch adds flag to remove the default
safe approach to not allow this. When this flag is specified the
hypervisor driver should re-emit events to allow management apps to
reconnect.
This flag is meant as a lesser way to enforce the restart of the
hypervisor, that is a fairly common possibility compared to other
meanings that the existing force flag has.
---
Force now selects this flag and this flag can be used with internal snapshots too.
---
@@ -12129,7 +12129,11 @@ static int
qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
virCheckFlags(VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING |
VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED |
- VIR_DOMAIN_SNAPSHOT_REVERT_FORCE, -1);
+ VIR_DOMAIN_SNAPSHOT_REVERT_FORCE |
+ VIR_DOMAIN_SNAPSHOT_REVERT_RESPAWN, -1);
+
+ if (flags & VIR_DOMAIN_SNAPSHOT_REVERT_FORCE)
+ flags |= VIR_DOMAIN_SNAPSHOT_REVERT_RESPAWN;
Up to here looks fine.
/* We have the following transitions, which create the following events:
* 1. inactive -> inactive: none
@@ -12249,7 +12253,7 @@ static int qemuDomainRevertToSnapshot(virDomainSnapshotPtr
snapshot,
Hmm, this is incomplete. Earlier, inside a
VIR_DOMAIN_SNAPSHOT_REVERT_FORCE check, we have:
if (virDomainObjIsActive(vm) &&
!(snap->def->state == VIR_DOMAIN_RUNNING
|| snap->def->state == VIR_DOMAIN_PAUSED) &&
(flags & (VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING |
VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED))) {
virReportError(VIR_ERR_SNAPSHOT_REVERT_RISKY, "%s",
_("must respawn qemu to start inactive
snapshot"));
goto cleanup;
which should be converted to the new flag.
if (config &&
!virDomainDefCheckABIStability(vm->def, config)) {
virErrorPtr err = virGetLastError();
- if (!(flags & VIR_DOMAIN_SNAPSHOT_REVERT_FORCE)) {
+ if (!(flags & VIR_DOMAIN_SNAPSHOT_REVERT_RESPAWN)) {
/* Re-spawn error using correct category. */
I think this one is correct, though.
@@ -2830,6 +2830,10 @@ I<--running> or I<--paused> flags
when reverting to a disk snapshot of a
transient domain. The I<--stopped> flag cannot be used on snapshots
of transient domains.
+Some snapshot revert approaches may require a respawn of the hypervisor
+process. This is not allowed by default. You may specify I<--allow-respawn>
+to override this limit.
It might be worth mentioning that --force implies --allow-respawn (that
is, --force is a supserset of --allow-respawn, in that it can force
situations that --allow-respawn will not).
--
Eric Blake eblake(a)redhat.com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org