[PATCHv3 3/5] snapshot: Add flag VIR_DOMAIN_SNAPSHOT_REVERT_STOPPED

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The current snapshot reverting api supported changing the state of the
machine after the snapshot was reverted to either started or paused.

This patch adds the ability to revert the state but to stopped state.
---
- fixed libvirt.c and virsh.pod docs.
---
 include/libvirt/libvirt.h.in |  1 +
 src/libvirt.c                | 31 ++++++++++++++++---------------
 tools/virsh-snapshot.c       |  3 +++
 tools/virsh.pod              | 15 +++++++++------
 4 files changed, 29 insertions(+), 21 deletions(-)

diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index bf584a0..f5bbc89 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -3873,6 +3873,7 @@ typedef enum {
     VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING = 1 << 0, /* Run after revert */
     VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED  = 1 << 1, /* Pause after revert */
     VIR_DOMAIN_SNAPSHOT_REVERT_FORCE   = 1 << 2, /* Allow risky reverts */
+    VIR_DOMAIN_SNAPSHOT_REVERT_STOPPED = 1 << 3, /* Revert into stopped state */
 } virDomainSnapshotRevertFlags;

 /* Revert the domain to a point-in-time snapshot.  The
diff --git a/src/libvirt.c b/src/libvirt.c
index bdb1dc6..b6b885c 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -18638,17 +18638,17 @@ error:
  *
  * Revert the domain to a given snapshot.
  *
- * Normally, the domain will revert to the same state the domain was
- * in while the snapshot was taken (whether inactive, running, or
- * paused), except that disk snapshots default to reverting to
- * inactive state.  Including VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING in
- * @flags overrides the snapshot state to guarantee a running domain
- * after the revert; or including VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED in
- * @flags guarantees a paused domain after the revert.  These two
- * flags are mutually exclusive.  While a persistent domain does not
- * need either flag, it is not possible to revert a transient domain
- * into an inactive state, so transient domains require the use of one
- * of these two flags.
+ * Normally, the domain will revert to the same state the domain was in while
+ * the snapshot was taken (whether inactive, running, or paused), except that
+ * disk snapshots default to reverting to inactive state.  Including
+ * VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING in @flags overrides the snapshot state to
+ * guarantee a running domain after the revert; or including
+ * VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED in @flags guarantees a paused domain after
+ * the revert. With VIR_DOMAIN_SNAPSHOT_REVERT_STOPPED contained in the flags
+ * the domain's memory state is not restored. These three flags are mutually
+ * exclusive.  While a persistent domain does not need either flag, it is not
+ * possible to revert a transient domain into an inactive state, so transient
+ * domains require the use of one of these two flags.
  *
  * Reverting to any snapshot discards all configuration changes made since
  * the last snapshot.  Additionally, reverting to a snapshot from a running
@@ -18697,11 +18697,12 @@ virDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
         goto error;
     }

-    if ((flags & VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING) &&
-        (flags & VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED)) {
+    if ((!!(flags & VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING) +
+         !!(flags & VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED)  +
+         !!(flags & VIR_DOMAIN_SNAPSHOT_REVERT_STOPPED)) > 1) {
         virReportInvalidArg(flags,
-                            _("running and paused flags in %s are mutually exclusive"),
-                            __FUNCTION__);
+                            _("running, paused and stopped flags in %s are "
+                              "mutually exclusive"), __FUNCTION__);
         goto error;
     }

diff --git a/tools/virsh-snapshot.c b/tools/virsh-snapshot.c
index 4281109..952dec5 100644
--- a/tools/virsh-snapshot.c
+++ b/tools/virsh-snapshot.c
@@ -1517,6 +1517,7 @@ static const vshCmdOptDef opts_snapshot_revert[] = {
     {"current", VSH_OT_BOOL, 0, N_("revert to current snapshot")},
     {"running", VSH_OT_BOOL, 0, N_("after reverting, change state to running")},
     {"paused", VSH_OT_BOOL, 0, N_("after reverting, change state to paused")},
+    {"stopped", VSH_OT_BOOL, 0, N_("after reverting, change state to stopped")},
     {"force", VSH_OT_BOOL, 0, N_("try harder on risky reverts")},
     {NULL, 0, 0, NULL}
 };
@@ -1536,6 +1537,8 @@ cmdDomainSnapshotRevert(vshControl *ctl, const vshCmd *cmd)
         flags |= VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING;
     if (vshCommandOptBool(cmd, "paused"))
         flags |= VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED;
+    if (vshCommandOptBool(cmd, "stopped"))
+        flags |= VIR_DOMAIN_SNAPSHOT_REVERT_STOPPED;
     /* We want virsh snapshot-revert --force to work even when talking
      * to older servers that did the unsafe revert by default but
      * reject the flag, so we probe without the flag, and only use it
diff --git a/tools/virsh.pod b/tools/virsh.pod
index 0984e6e..ce5d010 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -2822,7 +2822,7 @@ Output the name of the parent snapshot, if any, for the given
 I<snapshot>, or for the current snapshot with I<--current>.

 =item B<snapshot-revert> I<domain> {I<snapshot> | I<--current>}
-[{I<--running> | I<--paused>}] [I<--force>]
+[{I<--running> | I<--paused> | I<--stopped>}] [I<--force>]

 Revert the given domain to the snapshot specified by I<snapshot>, or to
 the current snapshot with I<--current>.  Be aware
@@ -2833,11 +2833,14 @@ the original snapshot was taken.

 Normally, reverting to a snapshot leaves the domain in the state it was
 at the time the snapshot was created, except that a disk snapshot with
-no vm state leaves the domain in an inactive state.  Passing either the
-I<--running> or I<--paused> flag will perform additional state changes
-(such as booting an inactive domain, or pausing a running domain).  Since
-transient domains cannot be inactive, it is required to use one of these
-flags when reverting to a disk snapshot of a transient domain.
+no vm state leaves the domain in an inactive state.  Passing one of the
+I<--running>, I<--paused> or I<--stopped> flag will perform additional
+state changes such as booting an inactive domain, pausing a running domain
+or shutting the domain down after the snapshot is reverted.  Since
+transient domains cannot be inactive, it is required to use one of
+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.

 There are two cases where a snapshot revert involves extra risk, which
 requires the use of I<--force> to proceed.  One is the case of a
-- 
1.8.0

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list


[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]