Patchwork [08/11] qmp: add interface query-snapshot

login
register
mail settings
Submitter Wayne Xia
Date Dec. 29, 2012, 8:45 a.m.
Message ID <1356770725-4804-9-git-send-email-xiawenc@linux.vnet.ibm.com>
Download mbox | patch
Permalink /patch/208635/
State New
Headers show

Comments

Wayne Xia - Dec. 29, 2012, 8:45 a.m.
This interface now return valid internal snapshots.

Signed-off-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
---
 block.c          |   32 ++++++++++++++++++++++++++++++++
 qapi-schema.json |   12 ++++++++++++
 2 files changed, 44 insertions(+), 0 deletions(-)
Eric Blake - Jan. 7, 2013, 9:21 p.m.
On 12/29/2012 01:45 AM, Wenchao Xia wrote:
>   This interface now return valid internal snapshots.
> 
> Signed-off-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
> ---
>  block.c          |   32 ++++++++++++++++++++++++++++++++
>  qapi-schema.json |   12 ++++++++++++
>  2 files changed, 44 insertions(+), 0 deletions(-)
> 

> +++ b/block.c
> @@ -2892,6 +2892,38 @@ SnapshotInfoList *bdrv_query_snapshot_infolist(BlockDriverState *bs,
>      return head;
>  }
>  
> +/* check if sn exist on all block devices, 0 means valid */

s/exist/exists/

> +++ b/qapi-schema.json
> @@ -731,6 +731,18 @@
>  { 'command': 'query-image', 'returns': ['ImageInfo'] }
>  
>  ##
> +# @query-snapshot:
> +#
> +# Get a list of valid Snapshots of virtual machine. Note that only valid
> +# internal snapshot will be returned now, inconsitent one will not be returned.

s/snapshot/snapshots/; s/ now//; s/inconsitent one/inconsistent ones/

> +#
> +# Returns: a list of @SnapshotInfo describing virtual machine snapshot.

s/describing virtual machine snapshot/describing all consistent virtual
machine snapshots/

> +#
> +# Since: 1.4
> +##
> +{ 'command': 'query-snapshot', 'returns': ['SnapshotInfo'] }
> +
Wayne Xia - Jan. 8, 2013, 2:29 a.m.
Sorry for bad spelling, will fix them in next version.

> On 12/29/2012 01:45 AM, Wenchao Xia wrote:
>>    This interface now return valid internal snapshots.
>>
>> Signed-off-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
>> ---
>>   block.c          |   32 ++++++++++++++++++++++++++++++++
>>   qapi-schema.json |   12 ++++++++++++
>>   2 files changed, 44 insertions(+), 0 deletions(-)
>>
>
>> +++ b/block.c
>> @@ -2892,6 +2892,38 @@ SnapshotInfoList *bdrv_query_snapshot_infolist(BlockDriverState *bs,
>>       return head;
>>   }
>>
>> +/* check if sn exist on all block devices, 0 means valid */
>
> s/exist/exists/
>
>> +++ b/qapi-schema.json
>> @@ -731,6 +731,18 @@
>>   { 'command': 'query-image', 'returns': ['ImageInfo'] }
>>
>>   ##
>> +# @query-snapshot:
>> +#
>> +# Get a list of valid Snapshots of virtual machine. Note that only valid
>> +# internal snapshot will be returned now, inconsitent one will not be returned.
>
> s/snapshot/snapshots/; s/ now//; s/inconsitent one/inconsistent ones/
>
>> +#
>> +# Returns: a list of @SnapshotInfo describing virtual machine snapshot.
>
> s/describing virtual machine snapshot/describing all consistent virtual
> machine snapshots/
>
>> +#
>> +# Since: 1.4
>> +##
>> +{ 'command': 'query-snapshot', 'returns': ['SnapshotInfo'] }
>> +
>

Patch

diff --git a/block.c b/block.c
index d7eb213..ad058f9 100644
--- a/block.c
+++ b/block.c
@@ -2892,6 +2892,38 @@  SnapshotInfoList *bdrv_query_snapshot_infolist(BlockDriverState *bs,
     return head;
 }
 
+/* check if sn exist on all block devices, 0 means valid */
+static int snapshot_filter_vm(const QEMUSnapshotInfo *sn, void *opaque)
+{
+    BlockDriverState *bs = (BlockDriverState *)opaque, *bs1 = NULL;
+    QEMUSnapshotInfo s, *sn_info = &s;
+    int ret = 0;
+
+    while ((bs1 = bdrv_next(bs1))) {
+        if (bdrv_can_snapshot(bs1) && bs1 != bs) {
+            ret = bdrv_snapshot_find(bs1, sn_info, sn->id_str);
+            if (ret < 0) {
+                ret = -1;
+                break;
+            }
+        }
+    }
+    return ret;
+}
+
+SnapshotInfoList *qmp_query_snapshot(Error **errp)
+{
+    BlockDriverState *bs;
+
+    bs = bdrv_snapshots();
+    if (!bs) {
+        error_setg(errp, "No available block device supports snapshots\n");
+        return NULL;
+    }
+
+    return bdrv_query_snapshot_infolist(bs, snapshot_filter_vm, bs, errp);
+}
+
 /* collect all internal snapshot info in a image for ImageInfo */
 static void collect_snapshots_info(BlockDriverState *bs,
                                    ImageInfo *info,
diff --git a/qapi-schema.json b/qapi-schema.json
index 40f96f3..2918817 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -731,6 +731,18 @@ 
 { 'command': 'query-image', 'returns': ['ImageInfo'] }
 
 ##
+# @query-snapshot:
+#
+# Get a list of valid Snapshots of virtual machine. Note that only valid
+# internal snapshot will be returned now, inconsitent one will not be returned.
+#
+# Returns: a list of @SnapshotInfo describing virtual machine snapshot.
+#
+# Since: 1.4
+##
+{ 'command': 'query-snapshot', 'returns': ['SnapshotInfo'] }
+
+##
 # @BlockDeviceStats:
 #
 # Statistics of a virtual block device or a block backing device.