qemu_migration: Refactor qemuMigrationSrcRestoreDomainState

None of the callers really care about the return value so we can drop it
and simplify the code a bit.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Jiri Denemark 2025-01-15 15:59:22 +01:00
parent 899bf2746a
commit e46e64be50

View File

@ -219,57 +219,49 @@ qemuMigrationSrcStoreDomainState(virDomainObj *vm)
priv->preMigrationState, vm); priv->preMigrationState, vm);
} }
/* Returns true if the domain was resumed, false otherwise */
static bool static void
qemuMigrationSrcRestoreDomainState(virQEMUDriver *driver, virDomainObj *vm) qemuMigrationSrcRestoreDomainState(virQEMUDriver *driver, virDomainObj *vm)
{ {
qemuDomainObjPrivate *priv = vm->privateData; qemuDomainObjPrivate *priv = vm->privateData;
virDomainState preMigrationState = priv->preMigrationState;
int reason; int reason;
virDomainState state = virDomainObjGetState(vm, &reason); virDomainState state = virDomainObjGetState(vm, &reason);
bool ret = false;
priv->preMigrationState = VIR_DOMAIN_NOSTATE;
VIR_DEBUG("driver=%p, vm=%p, pre-mig-state=%s, state=%s, reason=%s", VIR_DEBUG("driver=%p, vm=%p, pre-mig-state=%s, state=%s, reason=%s",
driver, vm, driver, vm,
virDomainStateTypeToString(priv->preMigrationState), virDomainStateTypeToString(preMigrationState),
virDomainStateTypeToString(state), virDomainStateTypeToString(state),
virDomainStateReasonToString(state, reason)); virDomainStateReasonToString(state, reason));
if (state != VIR_DOMAIN_PAUSED || if (preMigrationState != VIR_DOMAIN_RUNNING ||
state != VIR_DOMAIN_PAUSED ||
reason == VIR_DOMAIN_PAUSED_POSTCOPY_FAILED) reason == VIR_DOMAIN_PAUSED_POSTCOPY_FAILED)
goto cleanup; return;
if (priv->preMigrationState == VIR_DOMAIN_RUNNING) { VIR_DEBUG("Restoring pre-migration state due to migration error");
/* This is basically the only restore possibility that's safe
* and we should attempt to do */
VIR_DEBUG("Restoring pre-migration state due to migration error"); /* we got here through some sort of failure; start the domain again */
if (qemuProcessStartCPUs(driver, vm,
VIR_DOMAIN_RUNNING_MIGRATION_CANCELED,
VIR_ASYNC_JOB_MIGRATION_OUT) < 0) {
/* Hm, we already know we are in error here. We don't want to
* overwrite the previous error, though, so we just throw something
* to the logs and hope for the best */
VIR_ERROR(_("Failed to resume guest %1$s after failure"), vm->def->name);
if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_PAUSED) {
virObjectEvent *event;
/* we got here through some sort of failure; start the domain again */ virDomainObjSetState(vm, VIR_DOMAIN_PAUSED,
if (qemuProcessStartCPUs(driver, vm, VIR_DOMAIN_PAUSED_API_ERROR);
VIR_DOMAIN_RUNNING_MIGRATION_CANCELED, event = virDomainEventLifecycleNewFromObj(vm,
VIR_ASYNC_JOB_MIGRATION_OUT) < 0) { VIR_DOMAIN_EVENT_SUSPENDED,
/* Hm, we already know we are in error here. We don't want to VIR_DOMAIN_EVENT_SUSPENDED_API_ERROR);
* overwrite the previous error, though, so we just throw something virObjectEventStateQueue(driver->domainEventState, event);
* to the logs and hope for the best */
VIR_ERROR(_("Failed to resume guest %1$s after failure"), vm->def->name);
if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_PAUSED) {
virObjectEvent *event;
virDomainObjSetState(vm, VIR_DOMAIN_PAUSED,
VIR_DOMAIN_PAUSED_API_ERROR);
event = virDomainEventLifecycleNewFromObj(vm,
VIR_DOMAIN_EVENT_SUSPENDED,
VIR_DOMAIN_EVENT_SUSPENDED_API_ERROR);
virObjectEventStateQueue(driver->domainEventState, event);
}
goto cleanup;
} }
ret = true;
} }
cleanup:
priv->preMigrationState = VIR_DOMAIN_NOSTATE;
return ret;
} }