qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] Re: [patch 2/3] Add support for live block copy


From: Anthony Liguori
Subject: [Qemu-devel] Re: [patch 2/3] Add support for live block copy
Date: Tue, 22 Feb 2011 15:11:06 -0600
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.15) Gecko/20101027 Lightning/1.0b1 Thunderbird/3.0.10

On 02/22/2011 03:07 PM, Marcelo Tosatti wrote:
On Tue, Feb 22, 2011 at 02:50:09PM -0600, Anthony Liguori wrote:
+static int write_commit_file(BdrvCopyState *s)
+{
+    char commit_msg[1400];
+    const char *buf = commit_msg;
+    int len, ret;
+
+    sprintf(commit_msg, "commit QEMU block_copy %s ->   %s\n", 
s->src_device_name,
+                        s->dst_filename);
+
+    len = strlen(commit_msg);
+    while (len>   0) {
+        ret = write(s->commit_fd, buf, len);
+        if (ret == -1&&   errno == EINTR) {
+            continue;
+        }
+        if (ret<= 0) {
+            return -errno;
+        }
+        buf += ret;
+        len -= ret;
+    }
+
+    if (fsync(s->commit_fd) == -1) {
+        return -errno;
+    }

This is more or less black magic.  What is this commit file used for
and why aren't we using something like a QMP event?
The commit file is considered reliable storage for the result of image
switch operation. Think of the following scenario:

- mgmt app requests live copy of guests ide1-hd0
from /a/image.img to /b/image.img.
- mgmt app dies.
- guest switches to /b/image.img, /a/image.img is outdated.
- guest dies.

Notifying the switch via QMP would not be reliable in this case.

But this is true of any number of operations in QEMU such as hotplug where if a management tool dies after requesting hotplug and then the guest dies before the management tool reconnects, it's never known whether it's truly connected or not.

The only way to robustly solve this is for QEMU to maintain a stateful config file. A one-off for this particular command doesn't seem wise to me.

Regards,

Anthony Liguori

Will add this as a comment in the code.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]