Patchwork [10/11] hmp: add interface hmp_snapshot_internal_blkdev

login
register
mail settings
Submitter Wayne Xia
Date June 8, 2013, 6:58 a.m.
Message ID <1370674687-13849-11-git-send-email-xiawenc@linux.vnet.ibm.com>
Download mbox | patch
Permalink /patch/249930/
State New
Headers show

Comments

Wayne Xia - June 8, 2013, 6:58 a.m.
Signed-off-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
---
 hmp-commands.hx |   24 ++++++++++++++++++++++--
 hmp.c           |   10 ++++++++++
 hmp.h           |    1 +
 3 files changed, 33 insertions(+), 2 deletions(-)
Fam Zheng - June 8, 2013, 8:21 a.m.
On Sat, 06/08 14:58, Wenchao Xia wrote:
> Signed-off-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
> ---
>  hmp-commands.hx |   24 ++++++++++++++++++++++--
>  hmp.c           |   10 ++++++++++
>  hmp.h           |    1 +
>  3 files changed, 33 insertions(+), 2 deletions(-)
> 
> diff --git a/hmp-commands.hx b/hmp-commands.hx
> index 396691a..65fb94d 100644
> --- a/hmp-commands.hx
> +++ b/hmp-commands.hx
> @@ -1025,8 +1025,7 @@ ETEXI
>                        "of device. If a new image file is specified, the\n\t\t\t"
>                        "new image file will become the new root image.\n\t\t\t"
>                        "If format is specified, the snapshot file will\n\t\t\t"
> -                      "be created in that format. Otherwise the\n\t\t\t"
> -                      "snapshot will be internal! (currently unsupported).\n\t\t\t"
> +                      "be created in that format.\n\t\t\t"
>                        "The default format is qcow2.  The -n flag requests QEMU\n\t\t\t"
>                        "to reuse the image found in new-image-file, instead of\n\t\t\t"
>                        "recreating it from scratch.",
> @@ -1040,6 +1039,27 @@ Snapshot device, using snapshot file as target if provided
>  ETEXI
>  
>      {
> +        .name       = "snapshot_internal_blkdev",
Hmm, Just a boring naming question:

snapshot_blkdev reads like a verb-object phrase "snapshot the block
device", but snapshot_internal_blkdev is becoming awkward: "snapshot a
internal block device"?

> +        .args_type  = "device:B,name:s?",
> +        .params     = "device [name]",
> +        .help       = "take an internal snapshot of device.\n\t\t\t"
> +                      "Name is the snapshot's name, if not specified\n\t\t\t"
> +                      "qemu will generate one according to time.\n\t\t\t"
> +                      "If any internal snapshot matching name already\n\t\t\t"
> +                      "exist, or the name is an numeric string,\n\t\t\t"
> +                      "the operation will fail.\n\t\t\t"
> +                      "The format of the image used by device must\n\t\t\t"
> +                      "support it, such as qcow2.\n\t\t\t",
> +        .mhandler.cmd = hmp_snapshot_internal_blkdev,
> +    },
> +
> +STEXI
> +@item snapshot_internal_blkdev
> +@findex snapshot_internal_blkdev
> +Take an internal snapshot on device if it support
> +ETEXI
> +
> +    {
>          .name       = "drive_mirror",
>          .args_type  = "reuse:-n,full:-f,device:B,target:s,format:s?",
>          .params     = "[-n] [-f] device target [format]",
> diff --git a/hmp.c b/hmp.c
> index 494a9aa..810e4c5 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -912,6 +912,16 @@ void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict)
>      hmp_handle_error(mon, &errp);
>  }
>  
> +void hmp_snapshot_internal_blkdev(Monitor *mon, const QDict *qdict)
> +{
> +    const char *device = qdict_get_str(qdict, "device");
> +    const char *name = qdict_get_try_str(qdict, "name");
> +    Error *errp = NULL;
> +
> +    qmp_blockdev_snapshot_internal_sync(device, !!name, name, &errp);
> +    hmp_handle_error(mon, &errp);
> +}
> +
>  void hmp_migrate_cancel(Monitor *mon, const QDict *qdict)
>  {
>      qmp_migrate_cancel(NULL);
> diff --git a/hmp.h b/hmp.h
> index 56d2e92..e7593e9 100644
> --- a/hmp.h
> +++ b/hmp.h
> @@ -54,6 +54,7 @@ void hmp_block_passwd(Monitor *mon, const QDict *qdict);
>  void hmp_balloon(Monitor *mon, const QDict *qdict);
>  void hmp_block_resize(Monitor *mon, const QDict *qdict);
>  void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict);
> +void hmp_snapshot_internal_blkdev(Monitor *mon, const QDict *qdict);
>  void hmp_drive_mirror(Monitor *mon, const QDict *qdict);
>  void hmp_migrate_cancel(Monitor *mon, const QDict *qdict);
>  void hmp_migrate_set_downtime(Monitor *mon, const QDict *qdict);
> -- 
> 1.7.1
> 
> 
>
Wayne Xia - June 9, 2013, 2:39 a.m.
于 2013-6-8 16:21, Fam Zheng 写道:
> On Sat, 06/08 14:58, Wenchao Xia wrote:
>> Signed-off-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
>> ---
>>   hmp-commands.hx |   24 ++++++++++++++++++++++--
>>   hmp.c           |   10 ++++++++++
>>   hmp.h           |    1 +
>>   3 files changed, 33 insertions(+), 2 deletions(-)
>>
>> diff --git a/hmp-commands.hx b/hmp-commands.hx
>> index 396691a..65fb94d 100644
>> --- a/hmp-commands.hx
>> +++ b/hmp-commands.hx
>> @@ -1025,8 +1025,7 @@ ETEXI
>>                         "of device. If a new image file is specified, the\n\t\t\t"
>>                         "new image file will become the new root image.\n\t\t\t"
>>                         "If format is specified, the snapshot file will\n\t\t\t"
>> -                      "be created in that format. Otherwise the\n\t\t\t"
>> -                      "snapshot will be internal! (currently unsupported).\n\t\t\t"
>> +                      "be created in that format.\n\t\t\t"
>>                         "The default format is qcow2.  The -n flag requests QEMU\n\t\t\t"
>>                         "to reuse the image found in new-image-file, instead of\n\t\t\t"
>>                         "recreating it from scratch.",
>> @@ -1040,6 +1039,27 @@ Snapshot device, using snapshot file as target if provided
>>   ETEXI
>>
>>       {
>> +        .name       = "snapshot_internal_blkdev",
> Hmm, Just a boring naming question:
>
> snapshot_blkdev reads like a verb-object phrase "snapshot the block
> device", but snapshot_internal_blkdev is becoming awkward: "snapshot a
> internal block device"?
   Actually in my draft it is named as snapshot_blkdev_internal, but
seems not so good also. I am short of English words, how about
snapshot_internally_blkdev?


>
>> +        .args_type  = "device:B,name:s?",
>> +        .params     = "device [name]",
>> +        .help       = "take an internal snapshot of device.\n\t\t\t"
>> +                      "Name is the snapshot's name, if not specified\n\t\t\t"
>> +                      "qemu will generate one according to time.\n\t\t\t"
>> +                      "If any internal snapshot matching name already\n\t\t\t"
>> +                      "exist, or the name is an numeric string,\n\t\t\t"
>> +                      "the operation will fail.\n\t\t\t"
>> +                      "The format of the image used by device must\n\t\t\t"
>> +                      "support it, such as qcow2.\n\t\t\t",
>> +        .mhandler.cmd = hmp_snapshot_internal_blkdev,
>> +    },
>> +
>> +STEXI
>> +@item snapshot_internal_blkdev
>> +@findex snapshot_internal_blkdev
>> +Take an internal snapshot on device if it support
>> +ETEXI
>> +
>> +    {
>>           .name       = "drive_mirror",
>>           .args_type  = "reuse:-n,full:-f,device:B,target:s,format:s?",
>>           .params     = "[-n] [-f] device target [format]",
>> diff --git a/hmp.c b/hmp.c
>> index 494a9aa..810e4c5 100644
>> --- a/hmp.c
>> +++ b/hmp.c
>> @@ -912,6 +912,16 @@ void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict)
>>       hmp_handle_error(mon, &errp);
>>   }
>>
>> +void hmp_snapshot_internal_blkdev(Monitor *mon, const QDict *qdict)
>> +{
>> +    const char *device = qdict_get_str(qdict, "device");
>> +    const char *name = qdict_get_try_str(qdict, "name");
>> +    Error *errp = NULL;
>> +
>> +    qmp_blockdev_snapshot_internal_sync(device, !!name, name, &errp);
>> +    hmp_handle_error(mon, &errp);
>> +}
>> +
>>   void hmp_migrate_cancel(Monitor *mon, const QDict *qdict)
>>   {
>>       qmp_migrate_cancel(NULL);
>> diff --git a/hmp.h b/hmp.h
>> index 56d2e92..e7593e9 100644
>> --- a/hmp.h
>> +++ b/hmp.h
>> @@ -54,6 +54,7 @@ void hmp_block_passwd(Monitor *mon, const QDict *qdict);
>>   void hmp_balloon(Monitor *mon, const QDict *qdict);
>>   void hmp_block_resize(Monitor *mon, const QDict *qdict);
>>   void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict);
>> +void hmp_snapshot_internal_blkdev(Monitor *mon, const QDict *qdict);
>>   void hmp_drive_mirror(Monitor *mon, const QDict *qdict);
>>   void hmp_migrate_cancel(Monitor *mon, const QDict *qdict);
>>   void hmp_migrate_set_downtime(Monitor *mon, const QDict *qdict);
>> --
>> 1.7.1
>>
>>
>>
>
Fam Zheng - June 9, 2013, 3:01 a.m.
On Sun, 06/09 10:39, Wenchao Xia wrote:
> 于 2013-6-8 16:21, Fam Zheng 写道:
> >On Sat, 06/08 14:58, Wenchao Xia wrote:
> >>Signed-off-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
> >>---
> >>  hmp-commands.hx |   24 ++++++++++++++++++++++--
> >>  hmp.c           |   10 ++++++++++
> >>  hmp.h           |    1 +
> >>  3 files changed, 33 insertions(+), 2 deletions(-)
> >>
> >>diff --git a/hmp-commands.hx b/hmp-commands.hx
> >>index 396691a..65fb94d 100644
> >>--- a/hmp-commands.hx
> >>+++ b/hmp-commands.hx
> >>@@ -1025,8 +1025,7 @@ ETEXI
> >>                        "of device. If a new image file is specified, the\n\t\t\t"
> >>                        "new image file will become the new root image.\n\t\t\t"
> >>                        "If format is specified, the snapshot file will\n\t\t\t"
> >>-                      "be created in that format. Otherwise the\n\t\t\t"
> >>-                      "snapshot will be internal! (currently unsupported).\n\t\t\t"
> >>+                      "be created in that format.\n\t\t\t"
> >>                        "The default format is qcow2.  The -n flag requests QEMU\n\t\t\t"
> >>                        "to reuse the image found in new-image-file, instead of\n\t\t\t"
> >>                        "recreating it from scratch.",
> >>@@ -1040,6 +1039,27 @@ Snapshot device, using snapshot file as target if provided
> >>  ETEXI
> >>
> >>      {
> >>+        .name       = "snapshot_internal_blkdev",
> >Hmm, Just a boring naming question:
> >
> >snapshot_blkdev reads like a verb-object phrase "snapshot the block
> >device", but snapshot_internal_blkdev is becoming awkward: "snapshot a
> >internal block device"?
>   Actually in my draft it is named as snapshot_blkdev_internal, but
> seems not so good also. I am short of English words, how about
> snapshot_internally_blkdev?
> 

I prefer snapshot_blkdev_internal, personally.

Patch

diff --git a/hmp-commands.hx b/hmp-commands.hx
index 396691a..65fb94d 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -1025,8 +1025,7 @@  ETEXI
                       "of device. If a new image file is specified, the\n\t\t\t"
                       "new image file will become the new root image.\n\t\t\t"
                       "If format is specified, the snapshot file will\n\t\t\t"
-                      "be created in that format. Otherwise the\n\t\t\t"
-                      "snapshot will be internal! (currently unsupported).\n\t\t\t"
+                      "be created in that format.\n\t\t\t"
                       "The default format is qcow2.  The -n flag requests QEMU\n\t\t\t"
                       "to reuse the image found in new-image-file, instead of\n\t\t\t"
                       "recreating it from scratch.",
@@ -1040,6 +1039,27 @@  Snapshot device, using snapshot file as target if provided
 ETEXI
 
     {
+        .name       = "snapshot_internal_blkdev",
+        .args_type  = "device:B,name:s?",
+        .params     = "device [name]",
+        .help       = "take an internal snapshot of device.\n\t\t\t"
+                      "Name is the snapshot's name, if not specified\n\t\t\t"
+                      "qemu will generate one according to time.\n\t\t\t"
+                      "If any internal snapshot matching name already\n\t\t\t"
+                      "exist, or the name is an numeric string,\n\t\t\t"
+                      "the operation will fail.\n\t\t\t"
+                      "The format of the image used by device must\n\t\t\t"
+                      "support it, such as qcow2.\n\t\t\t",
+        .mhandler.cmd = hmp_snapshot_internal_blkdev,
+    },
+
+STEXI
+@item snapshot_internal_blkdev
+@findex snapshot_internal_blkdev
+Take an internal snapshot on device if it support
+ETEXI
+
+    {
         .name       = "drive_mirror",
         .args_type  = "reuse:-n,full:-f,device:B,target:s,format:s?",
         .params     = "[-n] [-f] device target [format]",
diff --git a/hmp.c b/hmp.c
index 494a9aa..810e4c5 100644
--- a/hmp.c
+++ b/hmp.c
@@ -912,6 +912,16 @@  void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict)
     hmp_handle_error(mon, &errp);
 }
 
+void hmp_snapshot_internal_blkdev(Monitor *mon, const QDict *qdict)
+{
+    const char *device = qdict_get_str(qdict, "device");
+    const char *name = qdict_get_try_str(qdict, "name");
+    Error *errp = NULL;
+
+    qmp_blockdev_snapshot_internal_sync(device, !!name, name, &errp);
+    hmp_handle_error(mon, &errp);
+}
+
 void hmp_migrate_cancel(Monitor *mon, const QDict *qdict)
 {
     qmp_migrate_cancel(NULL);
diff --git a/hmp.h b/hmp.h
index 56d2e92..e7593e9 100644
--- a/hmp.h
+++ b/hmp.h
@@ -54,6 +54,7 @@  void hmp_block_passwd(Monitor *mon, const QDict *qdict);
 void hmp_balloon(Monitor *mon, const QDict *qdict);
 void hmp_block_resize(Monitor *mon, const QDict *qdict);
 void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict);
+void hmp_snapshot_internal_blkdev(Monitor *mon, const QDict *qdict);
 void hmp_drive_mirror(Monitor *mon, const QDict *qdict);
 void hmp_migrate_cancel(Monitor *mon, const QDict *qdict);
 void hmp_migrate_set_downtime(Monitor *mon, const QDict *qdict);