case MIGRATION_STATUS_DEVICE:
case MIGRATION_STATUS_WAIT_UNPLUG:
case MIGRATION_STATUS_CANCELLING:
+ case MIGRATION_STATUS_FAILING:
case MIGRATION_STATUS_COLO:
return true;
default:
case MIGRATION_STATUS_POSTCOPY_PAUSED:
case MIGRATION_STATUS_POSTCOPY_RECOVER_SETUP:
case MIGRATION_STATUS_POSTCOPY_RECOVER:
+ case MIGRATION_STATUS_FAILING:
/* TODO add some postcopy stats */
populate_time_info(info, s);
populate_ram_info(info, s);
case MIGRATION_STATUS_POSTCOPY_PAUSED:
case MIGRATION_STATUS_POSTCOPY_RECOVER:
case MIGRATION_STATUS_FAILED:
+ case MIGRATION_STATUS_FAILING:
case MIGRATION_STATUS_COLO:
info->has_status = true;
break;
if (s->state == MIGRATION_STATUS_CANCELLING) {
migrate_set_state(&s->state, MIGRATION_STATUS_CANCELLING,
MIGRATION_STATUS_CANCELLED);
+ } else if (s->state == MIGRATION_STATUS_FAILING) {
+ migrate_set_state(&s->state, MIGRATION_STATUS_FAILING,
+ MIGRATION_STATUS_FAILED);
}
/*
switch (current) {
case MIGRATION_STATUS_SETUP:
- next = MIGRATION_STATUS_FAILED;
+ next = MIGRATION_STATUS_FAILING;
break;
case MIGRATION_STATUS_POSTCOPY_PAUSED:
break;
case MIGRATION_STATUS_CANCELLING:
+ case MIGRATION_STATUS_FAILING:
/*
- * Don't move out of CANCELLING, the only valid transition is to
- * CANCELLED, at migration_cleanup().
+ * Keep the current state, next transition is to be done
+ * in migration_cleanup().
*/
break;
{
return (s->state == MIGRATION_STATUS_CANCELLING ||
s->state == MIGRATION_STATUS_CANCELLED ||
+ s->state == MIGRATION_STATUS_FAILING ||
s->state == MIGRATION_STATUS_FAILED);
}
if (postcopy_preempt_establish_channel(ms)) {
if (ms->state != MIGRATION_STATUS_CANCELLING) {
migrate_set_state(&ms->state, ms->state,
- MIGRATION_STATUS_FAILED);
+ MIGRATION_STATUS_FAILING);
}
error_setg(errp, "%s: Failed to establish preempt channel",
__func__);
qemu_fclose(fb);
fail:
if (ms->state != MIGRATION_STATUS_CANCELLING) {
- migrate_set_state(&ms->state, ms->state, MIGRATION_STATUS_FAILED);
+ migrate_set_state(&ms->state, ms->state, MIGRATION_STATUS_FAILING);
}
bql_unlock();
return -1;
}
if (s->state != MIGRATION_STATUS_CANCELLING) {
- migrate_set_state(&s->state, s->state, MIGRATION_STATUS_FAILED);
+ migrate_set_state(&s->state, s->state, MIGRATION_STATUS_FAILING);
}
}
fail:
migrate_set_state(&s->state, current_active_state,
- MIGRATION_STATUS_FAILED);
+ MIGRATION_STATUS_FAILING);
}
typedef enum MigThrError {
* For precopy (or postcopy with error outside IO, or before dest
* starts), we fail with no time.
*/
- migrate_set_state(&s->state, state, MIGRATION_STATUS_FAILED);
+ migrate_set_state(&s->state, state, MIGRATION_STATUS_FAILING);
trace_migration_thread_file_err();
/* Time to stop the migration, now. */
migrate_start_colo_process(s);
s->vm_old_state = RUN_STATE_RUNNING;
/* Fallthrough */
- case MIGRATION_STATUS_FAILED:
+ case MIGRATION_STATUS_FAILING:
case MIGRATION_STATUS_CANCELLED:
case MIGRATION_STATUS_CANCELLING:
if (!migration_block_activate(&local_err)) {
switch (s->state) {
case MIGRATION_STATUS_COMPLETED:
case MIGRATION_STATUS_ACTIVE:
- case MIGRATION_STATUS_FAILED:
+ case MIGRATION_STATUS_FAILING:
case MIGRATION_STATUS_CANCELLED:
case MIGRATION_STATUS_CANCELLING:
break;
if (ret) {
migrate_error_propagate(s, local_err);
migrate_set_state(&s->state, MIGRATION_STATUS_ACTIVE,
- MIGRATION_STATUS_FAILED);
+ MIGRATION_STATUS_FAILING);
goto out;
}
/* local_err is guaranteed to be set when reaching here */
migrate_error_propagate(s, local_err);
migrate_set_state(&s->state, MIGRATION_STATUS_ACTIVE,
- MIGRATION_STATUS_FAILED);
+ MIGRATION_STATUS_FAILING);
done:
bg_migration_iteration_finish(s);
#
# @completed: migration is finished.
#
-# @failed: some error occurred during migration process.
+# @failing: error occurred during migration, clean-up underway.
+# (since 11.0)
+#
+# @failed: error occurred during migration, clean-up done.
#
# @colo: VM is in the process of fault tolerance, VM can not get into
# this state unless colo capability is enabled for migration.
'data': [ 'none', 'setup', 'cancelling', 'cancelled',
'active', 'postcopy-device', 'postcopy-active',
'postcopy-paused', 'postcopy-recover-setup',
- 'postcopy-recover', 'completed', 'failed', 'colo',
- 'pre-switchover', 'device', 'wait-unplug' ] }
+ 'postcopy-recover', 'completed', 'failing', 'failed',
+ 'colo', 'pre-switchover', 'device', 'wait-unplug' ] }
##
# @VfioStats: