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(a)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