[libvirt] [PATCH] qemuProcessReconnect: Fill in pid file path

Jiri Denemark jdenemar at redhat.com
Tue Mar 3 11:03:28 UTC 2015


On Tue, Mar 03, 2015 at 11:56:37 +0100, Michal Privoznik wrote:
> https://bugzilla.redhat.com/show_bug.cgi?id=1197600
> 
> So, libvirt uses pid file to track pid of started qemus. Whenever
> a domain is started, its pid is put into corresponding pid file.
> The pid file path is generated based on domain name and stored
> into domain object internals. However, it's not stored in the
> status XML and therefore lost on daemon restarts. Hence, later,
> when domain is being shut down, the daemon does not know which
> pid file to unlink, and the correct pid file is left behind. To
> avoid this, lets generate the pid file path again in
> qemuProcessReconnect().

Right, this is what I wanted to suggest after seeing the original patch.

> 
> Reported-by: Luyao Huang <lhuang at redhat.com>
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  src/qemu/qemu_process.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index 7ce6115..e77616a 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -3762,6 +3762,13 @@ qemuProcessReconnect(void *opaque)
>      cfg = virQEMUDriverGetConfig(driver);
>      priv = obj->privateData;
>  
> +    /* XXX If we ever gonna change pid file pattern, come up with
> +     * some intelligence here to deal with old paths. */
> +    if (!(priv->pidfile = virPidFileBuildPath(cfg->stateDir, obj->def->name))) {
> +        virReportSystemError(errno, "%s", _("Failed to build pidfile path."));

Just remove this line. virPidFileBuildPath already reports the error.

> +        goto killvm;
> +    }
> +
>      if (qemuDomainObjBeginJob(driver, obj, QEMU_JOB_MODIFY) < 0)
>          goto killvm;

ACK

Jirka




More information about the libvir-list mailing list