Skip to content

Commit

Permalink
migration: use switch at the end of migration
Browse files Browse the repository at this point in the history
It converts the old if clauses into switch, explicitly mentions the
possible migration states.  The old nested "if"s are not clear on what
we do on different states.

Signed-off-by: Peter Xu <[email protected]>
Reviewed-by: Juan Quintela <[email protected]>
Signed-off-by: Juan Quintela <[email protected]>
  • Loading branch information
xzpeter authored and Juan Quintela committed Jan 15, 2018
1 parent cf011f0 commit 39b9e17
Showing 1 changed file with 27 additions and 17 deletions.
44 changes: 27 additions & 17 deletions migration/migration.c
Original file line number Diff line number Diff line change
Expand Up @@ -2341,33 +2341,43 @@ static void *migration_thread(void *opaque)
cpu_throttle_stop();

qemu_mutex_lock_iothread();
if (s->state == MIGRATION_STATUS_COMPLETED) {
switch (s->state) {
case MIGRATION_STATUS_COMPLETED:
migration_calculate_complete(s);
runstate_set(RUN_STATE_POSTMIGRATE);
} else {
if (s->state == MIGRATION_STATUS_ACTIVE) {
/*
* We should really assert here, but since it's during
* migration, let's try to reduce the usage of assertions.
*/
if (!migrate_colo_enabled()) {
error_report("%s: critical error: calling COLO code without "
"COLO enabled", __func__);
}
migrate_start_colo_process(s);
/*
* Fixme: we will run VM in COLO no matter its old running state.
* After exited COLO, we will keep running.
*/
s->vm_was_running = true;
break;

case MIGRATION_STATUS_ACTIVE:
/*
* We should really assert here, but since it's during
* migration, let's try to reduce the usage of assertions.
*/
if (!migrate_colo_enabled()) {
error_report("%s: critical error: calling COLO code without "
"COLO enabled", __func__);
}
migrate_start_colo_process(s);
/*
* Fixme: we will run VM in COLO no matter its old running state.
* After exited COLO, we will keep running.
*/
s->vm_was_running = true;
/* Fallthrough */
case MIGRATION_STATUS_FAILED:
case MIGRATION_STATUS_CANCELLED:
if (s->vm_was_running) {
vm_start();
} else {
if (runstate_check(RUN_STATE_FINISH_MIGRATE)) {
runstate_set(RUN_STATE_POSTMIGRATE);
}
}
break;

default:
/* Should not reach here, but if so, forgive the VM. */
error_report("%s: Unknown ending state %d", __func__, s->state);
break;
}
qemu_bh_schedule(s->cleanup_bh);
qemu_mutex_unlock_iothread();
Expand Down

0 comments on commit 39b9e17

Please sign in to comment.