[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH 18/20] Modify tcp_accept_incoming_migration() to
From: |
Yoshiaki Tamura |
Subject: |
[Qemu-devel] [RFC PATCH 18/20] Modify tcp_accept_incoming_migration() to handle ft_mode, and add a hack not to close fd when ft_mode is enabled. |
Date: |
Wed, 21 Apr 2010 14:57:23 +0900 |
When ft_mode is set in the header, tcp_accept_incoming_migration()
receives ft_transaction iteratively. We also need a hack no to close
fd before moving to ft_transaction mode, so that we can reuse the fd
for it.
Signed-off-by: Yoshiaki Tamura <address@hidden>
---
migration-tcp.c | 36 +++++++++++++++++++++++++++++++++++-
1 files changed, 35 insertions(+), 1 deletions(-)
diff --git a/migration-tcp.c b/migration-tcp.c
index 94a1a03..e018ed1 100644
--- a/migration-tcp.c
+++ b/migration-tcp.c
@@ -18,6 +18,7 @@
#include "sysemu.h"
#include "buffered_file.h"
#include "block.h"
+#include "ft_transaction.h"
//#define DEBUG_MIGRATION_TCP
@@ -60,7 +61,8 @@ static int socket_writev(FdMigrationState *s, const struct
iovec *v, int count)
static int tcp_close(FdMigrationState *s)
{
DPRINTF("tcp_close\n");
- if (s->fd != -1) {
+ /* FIX ME: accessing ft_mode here isn't clean */
+ if (s->fd != -1 && ft_mode != FT_INIT) {
close(s->fd);
s->fd = -1;
}
@@ -187,6 +189,38 @@ static void tcp_accept_incoming_migration(void *opaque)
fprintf(stderr, "load of migration failed\n");
goto out_fopen;
}
+
+ /* ft_mode is set by qemu_loadvm_state(). */
+ if (ft_mode == FT_INIT) {
+ /* close normal QEMUFile first before reusing connection. */
+ qemu_fclose(f);
+ socket_set_nodelay(c);
+ socket_set_timeout(c, 5);
+ /* don't autostart to avoid split brain. */
+ autostart = 0;
+
+ f = qemu_fopen_transaction(c);
+ if (f == NULL) {
+ fprintf(stderr, "could not qemu_fopen transaction\n");
+ goto out;
+ }
+
+ /* need to wait sender to setup. */
+ if (qemu_transaction_begin(f) < 0) {
+ goto out_fopen;
+ }
+
+ /* loop until transaction breaks */
+ while ((ft_mode != FT_OFF) && (ret == 0)) {
+ ret = qemu_loadvm_state(f, 1);
+ }
+
+ /* if migrate_cancel was called at the sender */
+ if (ft_mode == FT_OFF) {
+ goto out_fopen;
+ }
+ }
+
qemu_announce_self();
DPRINTF("successfully loaded vm state\n");
--
1.7.0.31.g1df487
- [Qemu-devel] [RFC PATCH 20/20] Introduce -k option to enable FT migration mode (Kemari)., (continued)
- [Qemu-devel] [RFC PATCH 20/20] Introduce -k option to enable FT migration mode (Kemari)., Yoshiaki Tamura, 2010/04/21
- [Qemu-devel] [RFC PATCH 03/20] Use cpu_physical_memory_set_dirty_range() to update phys_ram_dirty., Yoshiaki Tamura, 2010/04/21
- [Qemu-devel] [RFC PATCH 13/20] Introduce util functions to control ft_transaction from savevm layer., Yoshiaki Tamura, 2010/04/21
- [Qemu-devel] [RFC PATCH 14/20] Upgrade QEMU_FILE_VERSION from 3 to 4, and introduce qemu_savevm_state_all()., Yoshiaki Tamura, 2010/04/21
- [Qemu-devel] [RFC PATCH 12/20] Introduce fault tolerant VM transaction QEMUFile and ft_mode., Yoshiaki Tamura, 2010/04/21
- [Qemu-devel] [RFC PATCH 17/20] Modify migrate_fd_put_ready() when ft_mode is on., Yoshiaki Tamura, 2010/04/21
- [Qemu-devel] [RFC PATCH 06/20] Introduce iovec util functions, qemu_iovec_to_vector() and qemu_iovec_to_size()., Yoshiaki Tamura, 2010/04/21
- [Qemu-devel] [RFC PATCH 02/20] Introduce cpu_physical_memory_get_dirty_range()., Yoshiaki Tamura, 2010/04/21
- [Qemu-devel] [RFC PATCH 18/20] Modify tcp_accept_incoming_migration() to handle ft_mode, and add a hack not to close fd when ft_mode is enabled.,
Yoshiaki Tamura <=
- [Qemu-devel] [RFC PATCH 05/20] Introduce put_vector() and get_vector to QEMUFile and qemu_fopen_ops()., Yoshiaki Tamura, 2010/04/21
[Qemu-devel] [RFC PATCH 15/20] Introduce FT mode support to configure., Yoshiaki Tamura, 2010/04/21
[Qemu-devel] [RFC PATCH 11/20] Introduce some socket util functions., Yoshiaki Tamura, 2010/04/21