[libvirt PATCH v3 09/10] capabilities: report full external snapshot support

Pavel Hrdina posted 10 patches 8 months, 1 week ago
[libvirt PATCH v3 09/10] capabilities: report full external snapshot support
Posted by Pavel Hrdina 8 months, 1 week ago
Now that deleting and reverting external snapshots is implemented we can
report that in capabilities so management applications can use that
information and start using external snapshots.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
---
 docs/formatcaps.rst                            | 7 +++++++
 src/conf/capabilities.c                        | 1 +
 src/conf/capabilities.h                        | 1 +
 src/conf/schemas/capability.rng                | 5 +++++
 src/qemu/qemu_capabilities.c                   | 1 +
 tests/qemucaps2xmloutdata/caps.aarch64+hvf.xml | 1 +
 tests/qemucaps2xmloutdata/caps.aarch64.xml     | 1 +
 tests/qemucaps2xmloutdata/caps.ppc.xml         | 1 +
 tests/qemucaps2xmloutdata/caps.ppc64.xml       | 1 +
 tests/qemucaps2xmloutdata/caps.riscv64.xml     | 1 +
 tests/qemucaps2xmloutdata/caps.s390x.xml       | 1 +
 tests/qemucaps2xmloutdata/caps.sparc.xml       | 1 +
 tests/qemucaps2xmloutdata/caps.x86_64+hvf.xml  | 1 +
 tests/qemucaps2xmloutdata/caps.x86_64.xml      | 1 +
 14 files changed, 24 insertions(+)

diff --git a/docs/formatcaps.rst b/docs/formatcaps.rst
index bb8bc663d2..95502c511f 100644
--- a/docs/formatcaps.rst
+++ b/docs/formatcaps.rst
@@ -134,6 +134,12 @@ The ``<guest/>`` element will typically wrap up the following elements:
       creating external disk snapshots is supported. If absent, creating external
       snapshots may still be supported, but it requires attempting the API and
       checking for an error to find out for sure. :since:`Since 1.2.3`
+   ``externalSnapshot``
+      If this element is present, the hypervisor supports deleting and
+      reverting external snapshots including memory state. Support for creation
+      of external snapshots is reported via the ``disksnapshot`` feature flag.
+      Management applications can now switch from internal snapshots to external
+      snapshots. :since:`Since 9.7.0`
 
 Examples
 ~~~~~~~~
@@ -318,6 +324,7 @@ capabilities enabled in the chip and BIOS you will see:
         <cpuselection/>
         <deviceboot/>
         <disksnapshot default='on' toggle='no'/>
+        <externalSnapshot/>
       </features>
     </guest>
 
diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
index 56768ce6e0..34f04cb7d3 100644
--- a/src/conf/capabilities.c
+++ b/src/conf/capabilities.c
@@ -508,6 +508,7 @@ static const struct virCapsGuestFeatureInfo virCapsGuestFeatureInfos[VIR_CAPS_GU
     [VIR_CAPS_GUEST_FEATURE_TYPE_DEVICEBOOT] = { "deviceboot", false },
     [VIR_CAPS_GUEST_FEATURE_TYPE_DISKSNAPSHOT] = { "disksnapshot", true },
     [VIR_CAPS_GUEST_FEATURE_TYPE_HAP] = { "hap", true },
+    [VIR_CAPS_GUEST_FEATURE_TYPE_EXTERNAL_SNAPSHOT] = { "externalSnapshot", false },
 };
 
 
diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h
index c78e3e52fa..9eaf6e2807 100644
--- a/src/conf/capabilities.h
+++ b/src/conf/capabilities.h
@@ -40,6 +40,7 @@ typedef enum {
     VIR_CAPS_GUEST_FEATURE_TYPE_DEVICEBOOT,
     VIR_CAPS_GUEST_FEATURE_TYPE_DISKSNAPSHOT,
     VIR_CAPS_GUEST_FEATURE_TYPE_HAP,
+    VIR_CAPS_GUEST_FEATURE_TYPE_EXTERNAL_SNAPSHOT,
 
     VIR_CAPS_GUEST_FEATURE_TYPE_LAST
 } virCapsGuestFeatureType;
diff --git a/src/conf/schemas/capability.rng b/src/conf/schemas/capability.rng
index 83b414961a..b1968df258 100644
--- a/src/conf/schemas/capability.rng
+++ b/src/conf/schemas/capability.rng
@@ -493,6 +493,11 @@
             <empty/>
           </element>
         </optional>
+        <optional>
+          <element name="externalSnapshot">
+            <empty/>
+          </element>
+        </optional>
       </interleave>
     </element>
   </define>
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 3a1bfbf74d..83119e871a 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -1122,6 +1122,7 @@ virQEMUCapsInitGuestFromBinary(virCaps *caps,
     virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_DEVICEBOOT);
     virCapabilitiesAddGuestFeatureWithToggle(guest, VIR_CAPS_GUEST_FEATURE_TYPE_DISKSNAPSHOT,
                                              true, false);
+    virCapabilitiesAddGuestFeature(guest, VIR_CAPS_GUEST_FEATURE_TYPE_EXTERNAL_SNAPSHOT);
 
     if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_TCG)) {
         virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_QEMU,
diff --git a/tests/qemucaps2xmloutdata/caps.aarch64+hvf.xml b/tests/qemucaps2xmloutdata/caps.aarch64+hvf.xml
index b53a886b90..b9a5b5a1d6 100644
--- a/tests/qemucaps2xmloutdata/caps.aarch64+hvf.xml
+++ b/tests/qemucaps2xmloutdata/caps.aarch64+hvf.xml
@@ -21,6 +21,7 @@
       <cpuselection/>
       <deviceboot/>
       <disksnapshot default='on' toggle='no'/>
+      <externalSnapshot/>
     </features>
   </guest>
 
diff --git a/tests/qemucaps2xmloutdata/caps.aarch64.xml b/tests/qemucaps2xmloutdata/caps.aarch64.xml
index 5dca6d3102..61512ed740 100644
--- a/tests/qemucaps2xmloutdata/caps.aarch64.xml
+++ b/tests/qemucaps2xmloutdata/caps.aarch64.xml
@@ -21,6 +21,7 @@
       <cpuselection/>
       <deviceboot/>
       <disksnapshot default='on' toggle='no'/>
+      <externalSnapshot/>
     </features>
   </guest>
 
diff --git a/tests/qemucaps2xmloutdata/caps.ppc.xml b/tests/qemucaps2xmloutdata/caps.ppc.xml
index e7ba391795..86d6b85ae0 100644
--- a/tests/qemucaps2xmloutdata/caps.ppc.xml
+++ b/tests/qemucaps2xmloutdata/caps.ppc.xml
@@ -19,6 +19,7 @@
       <cpuselection/>
       <deviceboot/>
       <disksnapshot default='on' toggle='no'/>
+      <externalSnapshot/>
     </features>
   </guest>
 
diff --git a/tests/qemucaps2xmloutdata/caps.ppc64.xml b/tests/qemucaps2xmloutdata/caps.ppc64.xml
index 85623f3980..90859f9594 100644
--- a/tests/qemucaps2xmloutdata/caps.ppc64.xml
+++ b/tests/qemucaps2xmloutdata/caps.ppc64.xml
@@ -20,6 +20,7 @@
       <cpuselection/>
       <deviceboot/>
       <disksnapshot default='on' toggle='no'/>
+      <externalSnapshot/>
     </features>
   </guest>
 
diff --git a/tests/qemucaps2xmloutdata/caps.riscv64.xml b/tests/qemucaps2xmloutdata/caps.riscv64.xml
index 09b7eb7f2f..c6fa950211 100644
--- a/tests/qemucaps2xmloutdata/caps.riscv64.xml
+++ b/tests/qemucaps2xmloutdata/caps.riscv64.xml
@@ -19,6 +19,7 @@
       <cpuselection/>
       <deviceboot/>
       <disksnapshot default='on' toggle='no'/>
+      <externalSnapshot/>
     </features>
   </guest>
 
diff --git a/tests/qemucaps2xmloutdata/caps.s390x.xml b/tests/qemucaps2xmloutdata/caps.s390x.xml
index bb82a15040..6379ab73e6 100644
--- a/tests/qemucaps2xmloutdata/caps.s390x.xml
+++ b/tests/qemucaps2xmloutdata/caps.s390x.xml
@@ -20,6 +20,7 @@
       <cpuselection/>
       <deviceboot/>
       <disksnapshot default='on' toggle='no'/>
+      <externalSnapshot/>
     </features>
   </guest>
 
diff --git a/tests/qemucaps2xmloutdata/caps.sparc.xml b/tests/qemucaps2xmloutdata/caps.sparc.xml
index 9d977c4102..b5b158e430 100644
--- a/tests/qemucaps2xmloutdata/caps.sparc.xml
+++ b/tests/qemucaps2xmloutdata/caps.sparc.xml
@@ -19,6 +19,7 @@
       <cpuselection/>
       <deviceboot/>
       <disksnapshot default='on' toggle='no'/>
+      <externalSnapshot/>
     </features>
   </guest>
 
diff --git a/tests/qemucaps2xmloutdata/caps.x86_64+hvf.xml b/tests/qemucaps2xmloutdata/caps.x86_64+hvf.xml
index 356819a6c6..f5e49ba4db 100644
--- a/tests/qemucaps2xmloutdata/caps.x86_64+hvf.xml
+++ b/tests/qemucaps2xmloutdata/caps.x86_64+hvf.xml
@@ -22,6 +22,7 @@
       <cpuselection/>
       <deviceboot/>
       <disksnapshot default='on' toggle='no'/>
+      <externalSnapshot/>
     </features>
   </guest>
 
diff --git a/tests/qemucaps2xmloutdata/caps.x86_64.xml b/tests/qemucaps2xmloutdata/caps.x86_64.xml
index 35359780c4..8dd1439a80 100644
--- a/tests/qemucaps2xmloutdata/caps.x86_64.xml
+++ b/tests/qemucaps2xmloutdata/caps.x86_64.xml
@@ -22,6 +22,7 @@
       <cpuselection/>
       <deviceboot/>
       <disksnapshot default='on' toggle='no'/>
+      <externalSnapshot/>
     </features>
   </guest>
 
-- 
2.41.0