[libvirt] [PATCH 3/3] block rebase: initial qemu implementation
Eric Blake
eblake at redhat.com
Wed Feb 1 22:35:57 UTC 2012
On 02/01/2012 12:53 PM, Laine Stump wrote:
> On 02/01/2012 12:06 AM, Eric Blake wrote:
>> This is a trivial implementation, which works with the current
>> released qemu 1.0 with backports of preliminary block pull but
>> no partial rebase. Future patches will update the monitor handling
>> to support an optional parameter for partial rebase; but as qemu
>> 1.1 is unreleased, it can be in later patches, designed to be
>> backported on top of the supported API.
>>
>> * src/qemu/qemu_driver.c (qemuDomainBlockJobImpl): Add parameter,
>> @@ -11328,16 +11328,18 @@ qemuDomainBlockJobImpl(virDomainPtr dom,
>> const char *path,
>> goto cleanup;
>> }
>>
>> - if (!virDomainObjIsActive(vm)) {
>> - qemuReportError(VIR_ERR_OPERATION_INVALID,
>> - "%s", _("domain is not running"));
>> - goto cleanup;
>> - }
>> -
>
> For all the existing virDomainBlockxxx() APIs I think this is a change
> in behavior, right? THey used to fial for inactive domains, and now they
> may succeed. Could this create any problems?
No. This was a case of redundant code - we checked for isactive, then
obtained the job, then re-checked for isactive (since obtaining the job
involves dropping lock, so the domain could have quit in the meantime).
The post-job check is mandatory (we've had bugs before where libvirtd
locks up if we forget the post-job check), and the pre-job check can be
safely be eliminated since the post-job check will always do the right
thing; the only difference in eliminating the pre-job check is that the
API might take a bit longer due to trying to obtain the job on an
inactive domain compared to where it used to error out without even
trying to get the job.
>
> If not, then ACK. This is all pretty mechanical.
I think I answered your question, and thus I'm pushing the series.
>
>> device = qemuDiskPathToAlias(vm, path);
>> if (!device) {
>> goto cleanup;
>> }
>> + /* XXX - add a qemu capability check; if qemu 1.1 or newer, then
>> + * validate and convert non-NULL base into something that can
>> + * be passed as optional base argument. */
>> + if (base) {
>> + qemuReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
>> + _("partial block pull is not supported with
>> this QEMU binary"));
>> + goto cleanup;
>> + }
>
> So the API is in, and the actual functionality missing until qemu that
> supports it is available.
And I'm in the process of writing/testing that as well, it's just that
it's a bit lower on my priority queue :)
--
Eric Blake eblake at redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120201/da61e13f/attachment-0001.sig>
More information about the libvir-list
mailing list