Skip to content

Commit

Permalink
migration: Add state records for migration incoming
Browse files Browse the repository at this point in the history
For migration destination, we also need to know its state,
we will use it in COLO.

Here we add a new member 'state' for MigrationIncomingState,
and also use migrate_set_state() to modify its value.

Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>

dgilbert: Fixed early free of MigraitonIncomingState
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Amit Shah <amit.shah@redhat.com>
Message-Id: <1450266458-3178-3-git-send-email-dgilbert@redhat.com>
Signed-off-by: Amit Shah <amit.shah@redhat.com>
  • Loading branch information
colo-ft authored and Amit Shah committed Jan 13, 2016
1 parent 48781e5 commit 93d7af6
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 6 deletions.
1 change: 1 addition & 0 deletions include/migration/migration.h
Expand Up @@ -105,6 +105,7 @@ struct MigrationIncomingState {
QemuMutex rp_mutex; /* We send replies from multiple threads */
void *postcopy_tmp_page;

int state;
/* See savevm.c */
LoadStateEntry_Head loadvm_handlers;
};
Expand Down
16 changes: 10 additions & 6 deletions migration/migration.c
Expand Up @@ -111,6 +111,7 @@ MigrationIncomingState *migration_incoming_state_new(QEMUFile* f)
{
mis_current = g_new0(MigrationIncomingState, 1);
mis_current->from_src_file = f;
mis_current->state = MIGRATION_STATUS_NONE;
QLIST_INIT(&mis_current->loadvm_handlers);
qemu_mutex_init(&mis_current->rp_mutex);
qemu_event_init(&mis_current->main_thread_load_event, false);
Expand Down Expand Up @@ -331,8 +332,8 @@ static void process_incoming_migration_co(void *opaque)

mis = migration_incoming_state_new(f);
postcopy_state_set(POSTCOPY_INCOMING_NONE);
migrate_generate_event(MIGRATION_STATUS_ACTIVE);

migrate_set_state(&mis->state, MIGRATION_STATUS_NONE,
MIGRATION_STATUS_ACTIVE);
ret = qemu_loadvm_state(f);

ps = postcopy_state_get();
Expand All @@ -358,10 +359,10 @@ static void process_incoming_migration_co(void *opaque)

qemu_fclose(f);
free_xbzrle_decoded_buf();
migration_incoming_state_destroy();

if (ret < 0) {
migrate_generate_event(MIGRATION_STATUS_FAILED);
migrate_set_state(&mis->state, MIGRATION_STATUS_ACTIVE,
MIGRATION_STATUS_FAILED);
error_report("load of migration failed: %s", strerror(-ret));
migrate_decompress_threads_join();
exit(EXIT_FAILURE);
Expand All @@ -370,7 +371,8 @@ static void process_incoming_migration_co(void *opaque)
/* Make sure all file formats flush their mutable metadata */
bdrv_invalidate_cache_all(&local_err);
if (local_err) {
migrate_generate_event(MIGRATION_STATUS_FAILED);
migrate_set_state(&mis->state, MIGRATION_STATUS_ACTIVE,
MIGRATION_STATUS_FAILED);
error_report_err(local_err);
migrate_decompress_threads_join();
exit(EXIT_FAILURE);
Expand Down Expand Up @@ -402,7 +404,9 @@ static void process_incoming_migration_co(void *opaque)
* observer sees this event they might start to prod at the VM assuming
* it's ready to use.
*/
migrate_generate_event(MIGRATION_STATUS_COMPLETED);
migrate_set_state(&mis->state, MIGRATION_STATUS_ACTIVE,
MIGRATION_STATUS_COMPLETED);
migration_incoming_state_destroy();
}

void process_incoming_migration(QEMUFile *f)
Expand Down

0 comments on commit 93d7af6

Please sign in to comment.