[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH 20/23] Modify tcp_accept_incoming_migration() to
From: |
Yoshiaki Tamura |
Subject: |
[Qemu-devel] [RFC PATCH 20/23] Modify tcp_accept_incoming_migration() to handle ft_mode, and add a hack not to close fd when ft_mode is enabled. |
Date: |
Tue, 25 May 2010 17:37:01 +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 767a2f1..a5d9b6d 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
@@ -55,7 +56,8 @@ static int socket_read(FdMigrationState *s, const void * buf,
size_t size)
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;
}
@@ -181,6 +183,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 00/23] Kemari for KVM v0.1.1, Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 14/23] Call init handler of event-tap at main()., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 15/23] Insert event_tap_ioport() to ioport_write()., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 16/23] Insert event_tap_mmio() to cpu_physical_memory_rw()., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 10/23] Introduce util functions to control ft_transaction from savevm layer., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 19/23] Introduce ft_tranx_ready(), and modify migrate_fd_put_ready() when ft_mode is on., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 22/23] Introduce -k option to enable FT migration mode (Kemari)., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 21/23] virtio-blk: Modify save/load handler to handle inuse varialble., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 08/23] Introduce some socket util functions., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 04/23] Use cpu_physical_memory_get_dirty_range() to check multiple dirty pages., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 20/23] 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 23/23] Add a parser to accept FT migration incoming mode., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 07/23] Introduce skip_header parameter to qemu_loadvm_state()., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 12/23] Insent event-tap callbacks to net/block layer., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 03/23] Use cpu_physical_memory_set_dirty_range() to update phys_ram_dirty., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 06/23] Introduce read() to FdMigrationState., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 18/23] Call event_tap_replay() at vm_start()., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 11/23] Introduce qemu_savevm_state_all()., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 13/23] Introduce event-tap., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 17/23] Skip assert() when event_tap_state weren't EVENT_TAP_OFF., Yoshiaki Tamura, 2010/05/25
- [Qemu-devel] [RFC PATCH 05/23] Make QEMUFile buf expandable, and introduce qemu_realloc_buffer() and qemu_clear_buffer()., Yoshiaki Tamura, 2010/05/25