[libvirt] [PATCH 3/3] qemu: Clarify usage of DomainObjIsActive for SetTime

Ján Tomko jtomko at redhat.com
Tue Apr 19 14:30:22 UTC 2016


On Fri, Apr 15, 2016 at 10:00:14AM -0400, Cole Robinson wrote:
> This converts SetTime to the common obj->agent->isactive pattern
> (which adds a _third_ IsActive check), and documents the extra
> checks

I would not expect a commit with the summary 'Clarify usage' to change
job handling.


> ---
>  src/qemu/qemu_driver.c | 16 +++++++++++++---
>  1 file changed, 13 insertions(+), 3 deletions(-)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index f8dfa27..43f22f1 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -18725,9 +18725,9 @@ qemuDomainSetTime(virDomainPtr dom,
>  
>      priv = vm->privateData;
>  
> -    if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
> -        goto cleanup;
> -

This will let us report the capability error without even getting the
job.

> +    /* We also perform this check further down after grabbing the
> +       job lock, but do it here too so we can throw an error for
> +       an invalid config, before trying to talk to the guest agent */

s/trying to talk to the guest agent/acquiring the job/

>      if (!virDomainObjIsActive(vm)) {
>          virReportError(VIR_ERR_OPERATION_INVALID,
>                         "%s", _("domain is not running"));
> @@ -18746,9 +18746,18 @@ qemuDomainSetTime(virDomainPtr dom,
>          goto endjob;

This goto would end the job before it was even started.

>      }
>  
> +    if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
> +        goto cleanup;
> +
>      if (!qemuDomainAgentAvailable(vm, true))
>          goto endjob;
>  
> +    if (!virDomainObjIsActive(vm)) {
> +        virReportError(VIR_ERR_OPERATION_INVALID,
> +                       "%s", _("domain is not running"));
> +        goto endjob;
> +    }
> +
>      qemuDomainObjEnterAgent(vm);
>      rv = qemuAgentSetTime(priv->agent, seconds, nseconds, rtcSync);
>      qemuDomainObjExitAgent(vm);
> @@ -18756,6 +18765,7 @@ qemuDomainSetTime(virDomainPtr dom,
>      if (rv < 0)
>          goto endjob;
>  
> +    /* The VM may have shut down inbetween, check state again */

This pattern is so common that commenting it is pointless.
Maybe the IsActive check could be moved inside qemuDomainObjExitAgent
as I've done for qemuDomainObjExitMonitor.

Jan

>      if (!virDomainObjIsActive(vm)) {
>          virReportError(VIR_ERR_OPERATION_INVALID,
>                         "%s", _("domain is not running"));
> -- 
> 2.7.3
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list




More information about the libvir-list mailing list