mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 14:15:28 +00:00
qemu: Add pause-before-switchover migration capability
This new capability enables a pause before device state serialization so that we can finish all block jobs without racing with the end of the migration. The pause is indicated by "pre-switchover" state. Once we're done QEMU enters "device" migration state. This patch just defines the new capability and QEMU migration states and their mapping to our job states. Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
parent
b5ec33b832
commit
6addde24be
@ -423,6 +423,7 @@ qemuDomainJobStatusToType(qemuDomainJobStatus status)
|
||||
case QEMU_DOMAIN_JOB_STATUS_MIGRATING:
|
||||
case QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLETED:
|
||||
case QEMU_DOMAIN_JOB_STATUS_POSTCOPY:
|
||||
case QEMU_DOMAIN_JOB_STATUS_PAUSED:
|
||||
return VIR_DOMAIN_JOB_UNBOUNDED;
|
||||
|
||||
case QEMU_DOMAIN_JOB_STATUS_COMPLETED:
|
||||
|
@ -103,6 +103,7 @@ typedef enum {
|
||||
QEMU_DOMAIN_JOB_STATUS_ACTIVE,
|
||||
QEMU_DOMAIN_JOB_STATUS_MIGRATING,
|
||||
QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLETED,
|
||||
QEMU_DOMAIN_JOB_STATUS_PAUSED,
|
||||
QEMU_DOMAIN_JOB_STATUS_POSTCOPY,
|
||||
QEMU_DOMAIN_JOB_STATUS_COMPLETED,
|
||||
QEMU_DOMAIN_JOB_STATUS_FAILED,
|
||||
|
@ -1366,6 +1366,14 @@ qemuMigrationUpdateJobType(qemuDomainJobInfoPtr jobInfo)
|
||||
jobInfo->status = QEMU_DOMAIN_JOB_STATUS_CANCELED;
|
||||
break;
|
||||
|
||||
case QEMU_MONITOR_MIGRATION_STATUS_PRE_SWITCHOVER:
|
||||
jobInfo->status = QEMU_DOMAIN_JOB_STATUS_PAUSED;
|
||||
break;
|
||||
|
||||
case QEMU_MONITOR_MIGRATION_STATUS_DEVICE:
|
||||
jobInfo->status = QEMU_DOMAIN_JOB_STATUS_MIGRATING;
|
||||
break;
|
||||
|
||||
case QEMU_MONITOR_MIGRATION_STATUS_SETUP:
|
||||
case QEMU_MONITOR_MIGRATION_STATUS_ACTIVE:
|
||||
case QEMU_MONITOR_MIGRATION_STATUS_CANCELLING:
|
||||
@ -1459,6 +1467,7 @@ qemuMigrationCheckJobStatus(virQEMUDriverPtr driver,
|
||||
case QEMU_DOMAIN_JOB_STATUS_MIGRATING:
|
||||
case QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLETED:
|
||||
case QEMU_DOMAIN_JOB_STATUS_POSTCOPY:
|
||||
case QEMU_DOMAIN_JOB_STATUS_PAUSED:
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1474,6 +1483,7 @@ enum qemuMigrationCompletedFlags {
|
||||
QEMU_MIGRATION_COMPLETED_ABORT_ON_ERROR = (1 << 0),
|
||||
QEMU_MIGRATION_COMPLETED_CHECK_STORAGE = (1 << 1),
|
||||
QEMU_MIGRATION_COMPLETED_POSTCOPY = (1 << 2),
|
||||
QEMU_MIGRATION_COMPLETED_PRE_SWITCHOVER = (1 << 3),
|
||||
};
|
||||
|
||||
|
||||
@ -1534,6 +1544,7 @@ qemuMigrationCompleted(virQEMUDriverPtr driver,
|
||||
switch (jobInfo->status) {
|
||||
case QEMU_DOMAIN_JOB_STATUS_MIGRATING:
|
||||
case QEMU_DOMAIN_JOB_STATUS_POSTCOPY:
|
||||
case QEMU_DOMAIN_JOB_STATUS_PAUSED:
|
||||
/* The migration was aborted by us rather than QEMU itself. */
|
||||
jobInfo->status = QEMU_DOMAIN_JOB_STATUS_FAILED;
|
||||
return -2;
|
||||
|
@ -172,14 +172,15 @@ VIR_ONCE_GLOBAL_INIT(qemuMonitor)
|
||||
VIR_ENUM_IMPL(qemuMonitorMigrationStatus,
|
||||
QEMU_MONITOR_MIGRATION_STATUS_LAST,
|
||||
"inactive", "setup",
|
||||
"active", "postcopy-active",
|
||||
"active", "pre-switchover",
|
||||
"device", "postcopy-active",
|
||||
"completed", "failed",
|
||||
"cancelling", "cancelled")
|
||||
|
||||
VIR_ENUM_IMPL(qemuMonitorMigrationCaps,
|
||||
QEMU_MONITOR_MIGRATION_CAPS_LAST,
|
||||
"xbzrle", "auto-converge", "rdma-pin-all", "events",
|
||||
"postcopy-ram", "compress")
|
||||
"postcopy-ram", "compress", "pause-before-switchover")
|
||||
|
||||
VIR_ENUM_IMPL(qemuMonitorVMStatus,
|
||||
QEMU_MONITOR_VM_STATUS_LAST,
|
||||
|
@ -641,6 +641,8 @@ typedef enum {
|
||||
QEMU_MONITOR_MIGRATION_STATUS_INACTIVE,
|
||||
QEMU_MONITOR_MIGRATION_STATUS_SETUP,
|
||||
QEMU_MONITOR_MIGRATION_STATUS_ACTIVE,
|
||||
QEMU_MONITOR_MIGRATION_STATUS_PRE_SWITCHOVER,
|
||||
QEMU_MONITOR_MIGRATION_STATUS_DEVICE,
|
||||
QEMU_MONITOR_MIGRATION_STATUS_POSTCOPY,
|
||||
QEMU_MONITOR_MIGRATION_STATUS_COMPLETED,
|
||||
QEMU_MONITOR_MIGRATION_STATUS_ERROR,
|
||||
@ -706,6 +708,7 @@ typedef enum {
|
||||
QEMU_MONITOR_MIGRATION_CAPS_EVENTS,
|
||||
QEMU_MONITOR_MIGRATION_CAPS_POSTCOPY,
|
||||
QEMU_MONITOR_MIGRATION_CAPS_COMPRESS,
|
||||
QEMU_MONITOR_MIGRATION_CAPS_PAUSE_BEFORE_SWITCHOVER,
|
||||
|
||||
QEMU_MONITOR_MIGRATION_CAPS_LAST
|
||||
} qemuMonitorMigrationCaps;
|
||||
|
@ -2846,6 +2846,8 @@ qemuMonitorJSONGetMigrationStatsReply(virJSONValuePtr reply,
|
||||
case QEMU_MONITOR_MIGRATION_STATUS_POSTCOPY:
|
||||
case QEMU_MONITOR_MIGRATION_STATUS_COMPLETED:
|
||||
case QEMU_MONITOR_MIGRATION_STATUS_CANCELLING:
|
||||
case QEMU_MONITOR_MIGRATION_STATUS_PRE_SWITCHOVER:
|
||||
case QEMU_MONITOR_MIGRATION_STATUS_DEVICE:
|
||||
ram = virJSONValueObjectGetObject(ret, "ram");
|
||||
if (!ram) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
|
Loading…
Reference in New Issue
Block a user