[libvirt] [PATCH v5 21/36] qemu_process: Use unique directories for QMP processes

Jiri Denemark jdenemar at redhat.com
Thu Jan 3 15:56:01 UTC 2019


On Sun, Dec 02, 2018 at 23:10:15 -0600, Chris Venteicher wrote:
> Multiple QEMU processes for QMP commands can operate concurrently.
> 
> Use a unique directory under libDir for each QEMU processes
> to avoid pidfile and unix socket collision between processes.
> 
> The pid file name is changed from "capabilities.pidfile" to "qmp.pid"
> because we no longer need to avoid a possible clash with a qemu domain
> called "capabilities" now that the processes artifacts are stored in
> their own unique temporary directories.
> 
> "Capabilities" was changed to "qmp" in the pid file name because these
> processes are no longer specific to the capabilities usecase and are
> more generic in terms of being used for any general purpose QMP message
> exchanges with a QEMU process that is not associated with a domain.
> 
> Signed-off-by: Chris Venteicher <cventeic at redhat.com>
> ---
>  src/qemu/qemu_process.c | 24 ++++++++++++++----------
>  src/qemu/qemu_process.h |  1 +
>  2 files changed, 15 insertions(+), 10 deletions(-)
> 
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index 80b938cc0b..26ba59143d 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -8119,6 +8119,7 @@ qemuProcessQmpFree(qemuProcessQmpPtr proc)
>  
>      VIR_FREE(proc->binary);
>      VIR_FREE(proc->libDir);
> +    VIR_FREE(proc->uniqDir);
>      VIR_FREE(proc->monpath);
>      VIR_FREE(proc->monarg);
>      VIR_FREE(proc->pidfile);
> @@ -8181,33 +8182,33 @@ qemuProcessQmpNew(const char *binary,
>  static int
>  qemuProcessQmpInit(qemuProcessQmpPtr proc)
>  {
> +    char *template = NULL;
>      int ret = -1;
>  
>      VIR_DEBUG("Beginning VM startup process"
>                " proc=%p, emulator=%s",
>                proc, proc->binary);
>  
> -    /* the ".sock" sufix is important to avoid a possible clash with a qemu
> -     * domain called "capabilities"
> -     */
> -    if (virAsprintf(&proc->monpath, "%s/%s", proc->libDir,
> -                    "capabilities.monitor.sock") < 0)
> +    if (virAsprintf(&template, "%s/qemu.XXXXXX", proc->libDir) < 0)

Directories for domains are called "domain-%s" so maybe we could call
directories for QMP processes as "qmp-%s" rather than "qemu.%s".

> +        goto cleanup;
> +
> +    proc->uniqDir = mkdtemp(template);

mkdtemp returns NULL on error and you need to handle it here.

> +
> +    if (virAsprintf(&proc->monpath, "%s/%s", proc->uniqDir,
> +                    "qmp.monitor") < 0)
>          goto cleanup;
...

Jirka




More information about the libvir-list mailing list