mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-10 23:07:44 +00:00
qemu: Add qemuDomainObjRestoreAsyncJob
The code for setting up a previously active backup job in qemuProcessRecoverJob is generalized into a dedicated function so that it can be later reused in other places. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
d6d1c4980d
commit
6637880b3c
@ -249,6 +249,41 @@ qemuDomainObjPreserveJob(virDomainObj *obj,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
qemuDomainObjRestoreAsyncJob(virDomainObj *vm,
|
||||||
|
virDomainAsyncJob asyncJob,
|
||||||
|
int phase,
|
||||||
|
virDomainJobOperation operation,
|
||||||
|
qemuDomainJobStatsType statsType,
|
||||||
|
virDomainJobStatus status,
|
||||||
|
unsigned long long allowedJobs)
|
||||||
|
{
|
||||||
|
qemuDomainObjPrivate *priv = vm->privateData;
|
||||||
|
qemuDomainJobObj *job = &priv->job;
|
||||||
|
unsigned long long now;
|
||||||
|
|
||||||
|
VIR_DEBUG("Restoring %s async job for domain %s",
|
||||||
|
virDomainAsyncJobTypeToString(asyncJob), vm->def->name);
|
||||||
|
|
||||||
|
ignore_value(virTimeMillisNow(&now));
|
||||||
|
|
||||||
|
job->jobsQueued++;
|
||||||
|
job->asyncJob = asyncJob;
|
||||||
|
job->phase = phase;
|
||||||
|
job->asyncOwnerAPI = g_strdup(virThreadJobGet());
|
||||||
|
job->asyncStarted = now;
|
||||||
|
|
||||||
|
qemuDomainObjSetAsyncJobMask(vm, allowedJobs);
|
||||||
|
|
||||||
|
job->current = virDomainJobDataInit(&qemuJobDataPrivateDataCallbacks);
|
||||||
|
qemuDomainJobSetStatsType(priv->job.current, statsType);
|
||||||
|
job->current->operation = operation;
|
||||||
|
job->current->status = status;
|
||||||
|
job->current->started = now;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
qemuDomainObjClearJob(qemuDomainJobObj *job)
|
qemuDomainObjClearJob(qemuDomainJobObj *job)
|
||||||
{
|
{
|
||||||
|
@ -160,6 +160,14 @@ void qemuDomainObjSetAsyncJobMask(virDomainObj *obj,
|
|||||||
unsigned long long allowedJobs);
|
unsigned long long allowedJobs);
|
||||||
int qemuDomainObjPreserveJob(virDomainObj *obj,
|
int qemuDomainObjPreserveJob(virDomainObj *obj,
|
||||||
qemuDomainJobObj *job);
|
qemuDomainJobObj *job);
|
||||||
|
void
|
||||||
|
qemuDomainObjRestoreAsyncJob(virDomainObj *vm,
|
||||||
|
virDomainAsyncJob asyncJob,
|
||||||
|
int phase,
|
||||||
|
virDomainJobOperation operation,
|
||||||
|
qemuDomainJobStatsType statsType,
|
||||||
|
virDomainJobStatus status,
|
||||||
|
unsigned long long allowedJobs);
|
||||||
void qemuDomainObjDiscardAsyncJob(virDomainObj *obj);
|
void qemuDomainObjDiscardAsyncJob(virDomainObj *obj);
|
||||||
void qemuDomainObjReleaseAsyncJob(virDomainObj *obj);
|
void qemuDomainObjReleaseAsyncJob(virDomainObj *obj);
|
||||||
|
|
||||||
|
@ -3557,7 +3557,6 @@ qemuProcessRecoverJob(virQEMUDriver *driver,
|
|||||||
qemuDomainObjPrivate *priv = vm->privateData;
|
qemuDomainObjPrivate *priv = vm->privateData;
|
||||||
virDomainState state;
|
virDomainState state;
|
||||||
int reason;
|
int reason;
|
||||||
unsigned long long now;
|
|
||||||
|
|
||||||
state = virDomainObjGetState(vm, &reason);
|
state = virDomainObjGetState(vm, &reason);
|
||||||
|
|
||||||
@ -3614,28 +3613,14 @@ qemuProcessRecoverJob(virQEMUDriver *driver,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_ASYNC_JOB_BACKUP:
|
case VIR_ASYNC_JOB_BACKUP:
|
||||||
ignore_value(virTimeMillisNow(&now));
|
|
||||||
|
|
||||||
/* Restore the config of the async job which is not persisted */
|
/* Restore the config of the async job which is not persisted */
|
||||||
priv->job.jobsQueued++;
|
qemuDomainObjRestoreAsyncJob(vm, VIR_ASYNC_JOB_BACKUP, 0,
|
||||||
priv->job.asyncJob = VIR_ASYNC_JOB_BACKUP;
|
VIR_DOMAIN_JOB_OPERATION_BACKUP,
|
||||||
priv->job.asyncOwnerAPI = g_strdup(virThreadJobGet());
|
QEMU_DOMAIN_JOB_STATS_TYPE_BACKUP,
|
||||||
priv->job.asyncStarted = now;
|
VIR_DOMAIN_JOB_STATUS_ACTIVE,
|
||||||
|
(VIR_JOB_DEFAULT_MASK |
|
||||||
qemuDomainObjSetAsyncJobMask(vm, (VIR_JOB_DEFAULT_MASK |
|
|
||||||
JOB_MASK(VIR_JOB_SUSPEND) |
|
JOB_MASK(VIR_JOB_SUSPEND) |
|
||||||
JOB_MASK(VIR_JOB_MODIFY)));
|
JOB_MASK(VIR_JOB_MODIFY)));
|
||||||
|
|
||||||
/* We reset the job parameters for backup so that the job will look
|
|
||||||
* active. This is possible because we are able to recover the state
|
|
||||||
* of blockjobs and also the backup job allows all sub-job types */
|
|
||||||
priv->job.current = virDomainJobDataInit(&qemuJobDataPrivateDataCallbacks);
|
|
||||||
|
|
||||||
qemuDomainJobSetStatsType(priv->job.current,
|
|
||||||
QEMU_DOMAIN_JOB_STATS_TYPE_BACKUP);
|
|
||||||
priv->job.current->operation = VIR_DOMAIN_JOB_OPERATION_BACKUP;
|
|
||||||
priv->job.current->status = VIR_DOMAIN_JOB_STATUS_ACTIVE;
|
|
||||||
priv->job.current->started = now;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_ASYNC_JOB_NONE:
|
case VIR_ASYNC_JOB_NONE:
|
||||||
|
Loading…
Reference in New Issue
Block a user