From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58272) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UlVUF-0003Ee-0R for qemu-devel@nongnu.org; Sat, 08 Jun 2013 22:36:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UlVUD-0006fk-Gf for qemu-devel@nongnu.org; Sat, 08 Jun 2013 22:36:06 -0400 Received: from e23smtp03.au.ibm.com ([202.81.31.145]:42014) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UlVUC-0006el-Nv for qemu-devel@nongnu.org; Sat, 08 Jun 2013 22:36:05 -0400 Received: from /spool/local by e23smtp03.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Sun, 9 Jun 2013 12:27:03 +1000 Received: from d23relay04.au.ibm.com (d23relay04.au.ibm.com [9.190.234.120]) by d23dlp02.au.ibm.com (Postfix) with ESMTP id 2311A2BB0050 for ; Sun, 9 Jun 2013 12:36:00 +1000 (EST) Received: from d23av01.au.ibm.com (d23av01.au.ibm.com [9.190.234.96]) by d23relay04.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r592LUqN655622 for ; Sun, 9 Jun 2013 12:21:30 +1000 Received: from d23av01.au.ibm.com (loopback [127.0.0.1]) by d23av01.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r592ZxI4015187 for ; Sun, 9 Jun 2013 12:35:59 +1000 Message-ID: <51B3E9FE.2010709@linux.vnet.ibm.com> Date: Sun, 09 Jun 2013 10:35:42 +0800 From: Wenchao Xia MIME-Version: 1.0 References: <1370674687-13849-1-git-send-email-xiawenc@linux.vnet.ibm.com> <1370674687-13849-9-git-send-email-xiawenc@linux.vnet.ibm.com> <20130608080556.GC9648@localhost.nay.redhat.com> In-Reply-To: <20130608080556.GC9648@localhost.nay.redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH 08/11] qmp: add interface blockdev-snapshot-internal-sync List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, kwolf@redhat.com, phrdina@redhat.com, armbru@redhat.com, lcapitulino@redhat.com, stefanha@redhat.com, pbonzini@redhat.com, dietmar@proxmox.com 于 2013-6-8 16:05, Fam Zheng 写道: > On Sat, 06/08 14:58, Wenchao Xia wrote: >> This interface can generate snapshot name automatically if it is not >> specified, since it is a single opertion. >> >> Snapshot ID can't be specified in this interface. >> >> Signed-off-by: Wenchao Xia >> --- >> blockdev.c | 25 +++++++++++++++++++++++++ >> qapi-schema.json | 21 +++++++++++++++++++++ >> qmp-commands.hx | 31 +++++++++++++++++++++++++++++++ >> 3 files changed, 77 insertions(+), 0 deletions(-) >> >> diff --git a/blockdev.c b/blockdev.c >> index aaeb0e8..6a952cd 100644 >> --- a/blockdev.c >> +++ b/blockdev.c >> @@ -777,6 +777,31 @@ void qmp_blockdev_snapshot_sync(const char *device, const char *snapshot_file, >> &snapshot, errp); >> } >> >> +void qmp_blockdev_snapshot_internal_sync(const char *device, >> + bool has_name, const char *name, >> + Error **errp) >> +{ >> + qemu_timeval tv; >> + struct tm tm; >> + char name1[128]; >> + >> + BlockdevSnapshotInternal snapshot = { >> + .device = (char *) device, >> + }; >> + >> + if (has_name) { >> + snapshot.name = (char *) name; >> + } else { >> + qemu_gettimeofday(&tv); >> + localtime_r((const time_t *)&tv.tv_sec, &tm); >> + strftime(name1, sizeof(name1), "vm-%Y%m%d%H%M%S", &tm); >> + snapshot.name = name1; >> + } >> + >> + blockdev_do_action(TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_INTERNAL_SYNC, >> + &snapshot, errp); >> +} >> + >> >> /* New and old BlockDriverState structs for group snapshots */ >> >> diff --git a/qapi-schema.json b/qapi-schema.json >> index 9e143a8..fd2f8ce 100644 >> --- a/qapi-schema.json >> +++ b/qapi-schema.json >> @@ -1689,6 +1689,27 @@ >> '*mode': 'NewImageMode'} } >> >> ## >> +# @blockdev-snapshot-internal-sync >> +# >> +# Generates a synchronous internal snapshot of a block device, when the format >> +# of the image used support it. > Confusing to say synchronous internal snapshot, "Synchronously take an > internal snapshot" from below is better. And s/support/supports/. Maybe > document the return value for unsupported format too? OK, will change it. >> +# >> +# @device: the name of the device to generate the snapshot from >> +# >> +# @name: #optional the new snapshot name. If not specified, a name will be >> +# generated according to time by qemu >> +# >> +# Returns: nothing on success >> +# If @device is not a valid block device, DeviceNotFound >> +# If any snapshot matching @name exist, or the name is a numeric which >> +# may mess up with snapshot ID, generic error will be returned >> +# >> +# Since 1.6 >> +## >> +{ 'command': 'blockdev-snapshot-internal-sync', >> + 'data': { 'device': 'str', '*name': 'str'} } >> + >> +## >> # @human-monitor-command: >> # >> # Execute a command on the human monitor and return the output. >> diff --git a/qmp-commands.hx b/qmp-commands.hx >> index d31f518..e41e98a 100644 >> --- a/qmp-commands.hx >> +++ b/qmp-commands.hx >> @@ -1044,6 +1044,37 @@ Example: >> EQMP >> >> { >> + .name = "blockdev-snapshot-internal-sync", >> + .args_type = "device:B,name:s?", >> + .mhandler.cmd_new = qmp_marshal_input_blockdev_snapshot_internal_sync, >> + }, >> + >> +SQMP >> +blockdev-snapshot-internal-sync >> +------------------------------- >> + >> +Synchronously take an internal snapshot of a block device when the format of >> +image used support it. If name is not specified, it will be automatically > I meant here: This is easier to understand. > s/support/supports/ >> +generated by qemu according to host time. If the name is a numeric string >> +which may mess up with ID, such as "19", the operation will fail. If a >> +snapshot with name already exist, the operation will fail. > s/exist/exists/ Will change it, thanks for examination. >> + >> +Arguments: >> + >> +- "device": device name to snapshot (json-string) >> +- "name": name of the new snapshot (json-string, optional) >> + >> +Example: >> + >> +-> { "execute": "blockdev-snapshot-internal-sync", >> + "arguments": { "device": "ide-hd0", >> + "name": "snapshot0" } >> + } >> +<- { "return": {} } >> + >> +EQMP >> + >> + { >> .name = "drive-mirror", >> .args_type = "sync:s,device:B,target:s,speed:i?,mode:s?,format:s?," >> "on-source-error:s?,on-target-error:s?," >> -- >> 1.7.1 >> >> >> > -- Best Regards Wenchao Xia