From: Jeff Cody <jcody@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: kwolf@redhat.com, pbonzini@redhat.com, stefanha@gmail.com,
qemu-devel@nongnu.org, supriyak@linux.vnet.ibm.com
Subject: Re: [Qemu-devel] [PATCH 6/8] QAPI: add command for live block commit, 'block-commit'
Date: Fri, 14 Sep 2012 22:42:15 -0400 [thread overview]
Message-ID: <5053EB07.2040708@redhat.com> (raw)
In-Reply-To: <5053D473.9030803@redhat.com>
On 09/14/2012 09:05 PM, Eric Blake wrote:
> On 09/14/2012 07:41 AM, Jeff Cody wrote:
>> The command for live block commit is added, which has the following
>> arguments:
>>
>> device: the block device to perform the commit on (mandatory)
>> base: the base image to commit into; optional (if not specified,
>> it is the underlying original image)
>> top: the top image of the commit - all data from inside top down
>> to base will be committed into base. optional (if not specified,
>> it is the active image) - see note below
>> speed: maximum speed, in bytes/sec
>> on_error: action to take on error (optional - default is report)
>
> Shouldn't this be on-error, with a dash? Also, this doesn't match the
> actual commit, since you pulled it while waiting to rebase on Paolo's
> patches.
>
Yes, thanks, I need to update the commit message.
>>
>> note: eventually this will support merging down the active layer,
>> but that code is not yet complete. If the active layer is passed
>> in currently as top, or top is left to the default, then the error
>> QERR_TOP_NOT_FOUND will be returned.
>
> I don't think we need a new error category for this particular failure
> (and in 4/8, you labeled the error as generic); so it is sufficient to
> state that 'an error will be returned'.
>
Yes, QERR_TOP_NOT_FOUND will be a generic error, so I will just note that
an error will be returned, as you suggest.
>>
>> The is done as a block job, so upon completion a BLOCK_JOB_COMPLETED will
>> be emitted.
>>
>
>> +++ b/blockdev.c
>> @@ -825,7 +825,6 @@ exit:
>> return;
>> }
>>
>> -
>> static void eject_device(BlockDriverState *bs, int force, Error **errp)
>
> Spurious whitespace change.
>
Thanks
>
>> +void qmp_block_commit(const char *device,
>> + bool has_base, const char *base,
>> + bool has_top, const char *top,
>> + bool has_speed, int64_t speed,
>> + Error **errp)
>> +{
>> + BlockDriverState *bs;
>> + BlockDriverState *base_bs, *top_bs;
>> + Error *local_err = NULL;
>> + /* This will be part of the QMP command, if/when the
>> + * BlockdevOnError change for blkmirror makes it in
>> + */
>> + BlockErrorAction on_error = BLOCK_ERR_REPORT;
>> +
>> + /* drain all i/o before commits */
>> + bdrv_drain_all();
>
> Is this technically necessary for now? Since you are forbidding actions
> on the active image for now, and changing the active image (via snapshot
> or pull) already drains all I/O, there should be nothing remaining to
> drain for any of the backing files. Obviously, it will be necessary in
> the future when you do add support for committing the active layer.
>
Technically, it is not needed for the current iteration, but since this
is the command handler that will be the same as when we add the active
layer, and I know we will eventually support it, I went ahead and added
it now. It shouldn't hurt anything.
>> +++ b/qapi-schema.json
>> @@ -1404,6 +1404,41 @@
>> 'returns': 'str' }
>>
>> ##
>> +# @block-commit
>> +#
>> +# Live commit of data from child image nodes into parent nodes - i.e.,
>> +# writes data between 'top' and 'base' into 'base'.
>> +#
>> +# @device: the name of the device
>> +#
>> +# @base: #optional The file name of the parent image of the device to write
>> +# data into. If not specified, this is the original parent
>> +# image.
>
> I though we wanted to fix the terminology to avoid 'parent'; how about:
>
> The file name of the backing image to write data into. If not
> specified, this is the deepest backing image.
>
OK, sounds good.
>> +#
>> +# @top: #optional The file name of the child image, above which data will
>> +# not be committed down. If not specified, this is one
>> +# layer below the active layer (i.e. active->backing_hd).
>
> Again, how about:
>
> The file name of the backing image within the chain which contains the
> data to be committed down. If not specified...
>
Hmm, how about a slight tweak:
The file name of the backing image within the image chain, which
contains the topmost data to be committed down. If not specified...
Since it doesn't necessarily have _the_ data to commit down, but
indicates the upper bounds of the data to commit down.
>> +#
>> +# If top == base, that is an error.
>> +#
>> +#
>> +# @speed: #optional the maximum speed, in bytes per second
>> +#
>> +# Returns: Nothing on success
>> +# If commit or stream is already active on this device, DeviceInUse
>> +# If @device does not exist, DeviceNotFound
>> +# If image commit is not supported by this device, NotSupported
>> +# If @base does not exist, BaseNotFound
>> +# If @top does not exist, TopNotFound
>
> BaseNotFound is a generic error, and I'm arguing that TopNotFound should
> be likewise.
>
Agree - both TopNotFound and BaseNotFound are of type ERROR_CLASS_GENERIC_ERROR
next prev parent reply other threads:[~2012-09-15 2:42 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-14 13:41 [Qemu-devel] [PATCH 0/8] Live block commit Jeff Cody
2012-09-14 13:41 ` [Qemu-devel] [PATCH 1/8] block: add support functions for live commit, to find and delete images Jeff Cody
2012-09-14 15:23 ` Eric Blake
2012-09-14 15:39 ` Jeff Cody
2012-09-14 13:41 ` [Qemu-devel] [PATCH 2/8] block: add live block commit functionality Jeff Cody
2012-09-14 15:45 ` Eric Blake
2012-09-14 16:07 ` Jeff Cody
2012-09-14 18:23 ` Eric Blake
2012-09-14 20:29 ` Jeff Cody
2012-09-14 13:41 ` [Qemu-devel] [PATCH 3/8] blockdev: rename block_stream_cb to a generic block_job_cb Jeff Cody
2012-09-14 13:41 ` [Qemu-devel] [PATCH 4/8] qerror: new error for live block commit, QERR_TOP_NOT_FOUND Jeff Cody
2012-09-14 16:01 ` Eric Blake
2012-09-14 13:41 ` [Qemu-devel] [PATCH 5/8] block: helper function, to find the base image of a chain Jeff Cody
2012-09-14 13:41 ` [Qemu-devel] [PATCH 6/8] QAPI: add command for live block commit, 'block-commit' Jeff Cody
2012-09-15 1:05 ` Eric Blake
2012-09-15 2:42 ` Jeff Cody [this message]
2012-09-14 13:41 ` [Qemu-devel] [PATCH 7/8] qemu-iotests: add initial tests for live block commit Jeff Cody
2012-09-14 13:41 ` [Qemu-devel] [PATCH 8/8] block: after creating a live snapshot, make old image read-only Jeff Cody
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5053EB07.2040708@redhat.com \
--to=jcody@redhat.com \
--cc=eblake@redhat.com \
--cc=kwolf@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
--cc=supriyak@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.