hypervisor: domain_job: add maxQueuedJobs

This patch adds a new variable maxQueuedJobs into the job object
as it is the last hypervisor-based part of the begin job. Since
this patch, it will not be necessary to propagate driver
structure into the job functions.

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Kristina Hanicova 2022-08-10 14:57:01 +02:00 committed by Ján Tomko
parent 6ba0ead714
commit fe3df84a9c
3 changed files with 9 additions and 6 deletions

View File

@ -155,6 +155,7 @@ struct _virDomainJobObj {
virCond cond; /* Use to coordinate jobs */ virCond cond; /* Use to coordinate jobs */
int jobsQueued; int jobsQueued;
unsigned int maxQueuedJobs;
/* The following members are for VIR_JOB_* */ /* The following members are for VIR_JOB_* */
virDomainJob active; /* currently running job */ virDomainJob active; /* currently running job */

View File

@ -1758,6 +1758,7 @@ static void *
qemuDomainObjPrivateAlloc(void *opaque) qemuDomainObjPrivateAlloc(void *opaque)
{ {
g_autoptr(qemuDomainObjPrivate) priv = g_new0(qemuDomainObjPrivate, 1); g_autoptr(qemuDomainObjPrivate) priv = g_new0(qemuDomainObjPrivate, 1);
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(opaque);
if (virDomainObjInitJob(&priv->job, &qemuPrivateJobCallbacks) < 0) { if (virDomainObjInitJob(&priv->job, &qemuPrivateJobCallbacks) < 0) {
virReportSystemError(errno, "%s", virReportSystemError(errno, "%s",
@ -1770,6 +1771,8 @@ qemuDomainObjPrivateAlloc(void *opaque)
priv->blockjobs = virHashNew(virObjectUnref); priv->blockjobs = virHashNew(virObjectUnref);
priv->job.maxQueuedJobs = cfg->maxQueuedJobs;
/* agent commands block by default, user can choose different behavior */ /* agent commands block by default, user can choose different behavior */
priv->agentTimeout = VIR_DOMAIN_AGENT_RESPONSE_TIMEOUT_BLOCK; priv->agentTimeout = VIR_DOMAIN_AGENT_RESPONSE_TIMEOUT_BLOCK;
priv->migMaxBandwidth = QEMU_DOMAIN_MIG_BANDWIDTH_MAX; priv->migMaxBandwidth = QEMU_DOMAIN_MIG_BANDWIDTH_MAX;

View File

@ -723,7 +723,7 @@ qemuDomainObjReleaseAsyncJob(virDomainObj *obj)
* -1 otherwise. * -1 otherwise.
*/ */
static int ATTRIBUTE_NONNULL(1) static int ATTRIBUTE_NONNULL(1)
qemuDomainObjBeginJobInternal(virQEMUDriver *driver, qemuDomainObjBeginJobInternal(virQEMUDriver *driver G_GNUC_UNUSED,
virDomainObj *obj, virDomainObj *obj,
virDomainJob job, virDomainJob job,
virDomainAgentJob agentJob, virDomainAgentJob agentJob,
@ -734,7 +734,6 @@ qemuDomainObjBeginJobInternal(virQEMUDriver *driver,
unsigned long long now; unsigned long long now;
unsigned long long then; unsigned long long then;
bool nested = job == VIR_JOB_ASYNC_NESTED; bool nested = job == VIR_JOB_ASYNC_NESTED;
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
const char *blocker = NULL; const char *blocker = NULL;
const char *agentBlocker = NULL; const char *agentBlocker = NULL;
int ret = -1; int ret = -1;
@ -763,8 +762,8 @@ qemuDomainObjBeginJobInternal(virQEMUDriver *driver,
retry: retry:
if (job != VIR_JOB_ASYNC && if (job != VIR_JOB_ASYNC &&
job != VIR_JOB_DESTROY && job != VIR_JOB_DESTROY &&
cfg->maxQueuedJobs && priv->job.maxQueuedJobs &&
priv->job.jobsQueued > cfg->maxQueuedJobs) { priv->job.jobsQueued > priv->job.maxQueuedJobs) {
goto error; goto error;
} }
@ -907,8 +906,8 @@ qemuDomainObjBeginJobInternal(virQEMUDriver *driver,
_("cannot acquire state change lock")); _("cannot acquire state change lock"));
} }
ret = -2; ret = -2;
} else if (cfg->maxQueuedJobs && } else if (priv->job.maxQueuedJobs &&
priv->job.jobsQueued > cfg->maxQueuedJobs) { priv->job.jobsQueued > priv->job.maxQueuedJobs) {
if (blocker && agentBlocker) { if (blocker && agentBlocker) {
virReportError(VIR_ERR_OPERATION_FAILED, virReportError(VIR_ERR_OPERATION_FAILED,
_("cannot acquire state change " _("cannot acquire state change "