[libvirt] [PATCH] Compressed save image format for Qemu.

Chris Lalancette clalance at redhat.com
Mon Aug 17 07:03:04 UTC 2009


Daniel P. Berrange wrote:
> On Thu, Aug 13, 2009 at 10:47:18AM +0200, Chris Lalancette wrote:
>> Implement a compressed save image format for qemu.  While ideally
>> we would have the choice between compressed/non-compressed
>> available to the libvirt API, unfortunately there is no "flags"
>> parameter to the virDomainSave() API.  Therefore, implement this
>> as a qemu.conf option.  Both gzip and bzip2 are implemented, and
>> it should be very easy to implement additional compression
>> methods.
>>
>> One open question is if/how we should detect the gzip and bzip2
>> binaries.  One way to do it is to do compile-time setting of the
>> paths (via configure.in), but that doesn't seem like a great thing
>> to do.  Another solution (my preferred solution) is not to detect
>> at all; when we go to run the commands that need them, if they
>> aren't available, or aren't available in one of the standard paths,
>> then we'll fail.  Maybe somebody else has another option or
>> opinion, though.
>>
>> In the future, we'll have a more robust (managed) save/restore API,
>> at which time we can expose this functionality properly in the API.
>>
>> V2: get rid of redundant dd command and just use >> to append data.
>> V3: Add back the missing pieces for the enum and bumping the save version.
>> V4: Make the compressed field in the save_header an int.
>>     Implement LZMA compression.
>>
>> Signed-off-by: Chris Lalancette <clalance at redhat.com>
> 
> ACK, this looks good now.  Bonus points if you do a follow-up
> patch to add the new param to libvirtd_qemu.aug and
> test_libvirtd_qemu.aug.

OK, thanks, committed.  I'll follow up with a patch to augeas.  Oh, and...

>>      /* Set the migration source and start it up. */
>>      ret = qemudStartVMDaemon(conn, driver, vm, "stdio", fd);
>> +    if (intermediate_pid != -1) {
>> +        /* Wait for intermediate process to exit */
>> +        while (waitpid(intermediate_pid, &childstat, 0) == -1 &&
>> +               errno == EINTR);
>> +    }
>> +    if (intermediatefd != -1)
>> +        close(intermediatefd);
>>      close(fd);
>>      fd = -1;
>>      if (ret < 0) {
> 
> Oh actually need a VIR_FREE(driver->save_image_format) in qemudShutdown()

To fix this minor leak.

-- 
Chris Lalancette




More information about the libvir-list mailing list