int maxpar = 0;
int npar = 0;
+ if (virTypedParamsAddInt(&par, &npar, &maxpar,
+ VIR_DOMAIN_JOB_OPERATION,
+ jobInfo->operation) < 0)
+ goto error;
+
if (virTypedParamsAddULLong(&par, &npar, &maxpar,
VIR_DOMAIN_JOB_TIME_ELAPSED,
jobInfo->timeElapsed) < 0)
int qemuDomainObjBeginAsyncJob(virQEMUDriverPtr driver,
virDomainObjPtr obj,
- qemuDomainAsyncJob asyncJob)
+ qemuDomainAsyncJob asyncJob,
+ virDomainJobOperation operation)
{
+ qemuDomainObjPrivatePtr priv;
+
if (qemuDomainObjBeginJobInternal(driver, obj, QEMU_JOB_ASYNC,
asyncJob) < 0)
return -1;
- else
- return 0;
+
+ priv = obj->privateData;
+ priv->job.current->operation = operation;
+ return 0;
}
int
virResetLastError();
if (vm->autostart &&
!virDomainObjIsActive(vm)) {
- if (qemuProcessBeginJob(data->driver, vm) < 0) {
+ if (qemuProcessBeginJob(data->driver, vm,
+ VIR_DOMAIN_JOB_OPERATION_START) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Failed to start job on VM '%s': %s"),
vm->def->name, virGetLastErrorMessage());
virObjectRef(vm);
def = NULL;
- if (qemuProcessBeginJob(driver, vm) < 0) {
+ if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_START) < 0) {
qemuDomainRemoveInactive(driver, vm);
goto cleanup;
}
if (!qemuMigrationIsAllowed(driver, vm, false, 0))
goto cleanup;
- if (qemuDomainObjBeginAsyncJob(driver, vm, QEMU_ASYNC_JOB_SAVE) < 0)
+ if (qemuDomainObjBeginAsyncJob(driver, vm, QEMU_ASYNC_JOB_SAVE,
+ VIR_DOMAIN_JOB_OPERATION_SAVE) < 0)
goto cleanup;
if (!virDomainObjIsActive(vm)) {
goto cleanup;
if (qemuDomainObjBeginAsyncJob(driver, vm,
- QEMU_ASYNC_JOB_DUMP) < 0)
+ QEMU_ASYNC_JOB_DUMP,
+ VIR_DOMAIN_JOB_OPERATION_DUMP) < 0)
goto cleanup;
if (!virDomainObjIsActive(vm)) {
switch (action) {
case VIR_DOMAIN_WATCHDOG_ACTION_DUMP:
if (qemuDomainObjBeginAsyncJob(driver, vm,
- QEMU_ASYNC_JOB_DUMP) < 0) {
+ QEMU_ASYNC_JOB_DUMP,
+ VIR_DOMAIN_JOB_OPERATION_DUMP) < 0) {
goto cleanup;
}
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
bool removeInactive = false;
- if (qemuDomainObjBeginAsyncJob(driver, vm, QEMU_ASYNC_JOB_DUMP) < 0)
+ if (qemuDomainObjBeginAsyncJob(driver, vm, QEMU_ASYNC_JOB_DUMP,
+ VIR_DOMAIN_JOB_OPERATION_DUMP) < 0)
goto cleanup;
if (!virDomainObjIsActive(vm)) {
priv->hookRun = true;
}
- if (qemuProcessBeginJob(driver, vm) < 0)
+ if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_RESTORE) < 0)
goto cleanup;
ret = qemuDomainSaveImageStartVM(conn, driver, vm, &fd, &header, path,
bool bypass_cache = (flags & VIR_DOMAIN_START_BYPASS_CACHE) != 0;
bool force_boot = (flags & VIR_DOMAIN_START_FORCE_BOOT) != 0;
unsigned int start_flags = VIR_QEMU_PROCESS_START_COLD;
+ qemuDomainObjPrivatePtr priv = vm->privateData;
start_flags |= start_paused ? VIR_QEMU_PROCESS_START_PAUSED : 0;
start_flags |= autodestroy ? VIR_QEMU_PROCESS_START_AUTODESTROY : 0;
}
vm->hasManagedSave = false;
} else {
+ virDomainJobOperation op = priv->job.current->operation;
+ priv->job.current->operation = VIR_DOMAIN_JOB_OPERATION_RESTORE;
+
ret = qemuDomainObjRestore(conn, driver, vm, managed_save,
start_paused, bypass_cache, asyncJob);
goto cleanup;
} else {
VIR_WARN("Ignoring incomplete managed state %s", managed_save);
+ priv->job.current->operation = op;
}
}
}
if (virDomainCreateWithFlagsEnsureACL(dom->conn, vm->def) < 0)
goto cleanup;
- if (qemuProcessBeginJob(driver, vm) < 0)
+ if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_START) < 0)
goto cleanup;
if (virDomainObjIsActive(vm)) {
* a regular job, so we need to set the job mask to disallow query as
* 'savevm' blocks the monitor. External snapshot will then modify the
* job mask appropriately. */
- if (qemuDomainObjBeginAsyncJob(driver, vm, QEMU_ASYNC_JOB_SNAPSHOT) < 0)
+ if (qemuDomainObjBeginAsyncJob(driver, vm, QEMU_ASYNC_JOB_SNAPSHOT,
+ VIR_DOMAIN_JOB_OPERATION_SNAPSHOT) < 0)
goto cleanup;
qemuDomainObjSetAsyncJobMask(vm, QEMU_JOB_NONE);
goto cleanup;
}
- if (qemuProcessBeginJob(driver, vm) < 0)
+ if (qemuProcessBeginJob(driver, vm,
+ VIR_DOMAIN_JOB_OPERATION_SNAPSHOT_REVERT) < 0)
goto cleanup;
if (!(snap = qemuSnapObjFromSnapshot(vm, snapshot)))
qemuDomainAsyncJob job)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
-
- if (qemuDomainObjBeginAsyncJob(driver, vm, job) < 0)
- return -1;
+ virDomainJobOperation op;
+ unsigned long long mask;
if (job == QEMU_ASYNC_JOB_MIGRATION_IN) {
- qemuDomainObjSetAsyncJobMask(vm, QEMU_JOB_NONE);
+ op = VIR_DOMAIN_JOB_OPERATION_MIGRATION_IN;
+ mask = QEMU_JOB_NONE;
} else {
- qemuDomainObjSetAsyncJobMask(vm, (QEMU_JOB_DEFAULT_MASK |
- JOB_MASK(QEMU_JOB_SUSPEND) |
- JOB_MASK(QEMU_JOB_MIGRATION_OP)));
+ op = VIR_DOMAIN_JOB_OPERATION_MIGRATION_OUT;
+ mask = QEMU_JOB_DEFAULT_MASK |
+ JOB_MASK(QEMU_JOB_SUSPEND) |
+ JOB_MASK(QEMU_JOB_MIGRATION_OP);
}
+ if (qemuDomainObjBeginAsyncJob(driver, vm, job, op) < 0)
+ return -1;
+
+ qemuDomainObjSetAsyncJobMask(vm, mask);
priv->job.current->type = VIR_DOMAIN_JOB_UNBOUNDED;
return 0;