[libvirt] [PATCH 2/8] systemd: don't report an error if the guest is already terminated

Michal Privoznik mprivozn at redhat.com
Thu Jan 22 15:22:36 UTC 2015


On 16.01.2015 18:36, Daniel P. Berrange wrote:
> In many cases where we invoke virSystemdTerminateMachine the
> process(es) will have already gone away on their own accord.
> In these cases we log an error message that the machine does
> not exist. We should catch this particular error and simply
> ignore it, so we don't pollute the logs.
> ---
>  src/util/virsystemd.c | 25 ++++++++++++++++++++-----
>  1 file changed, 20 insertions(+), 5 deletions(-)
> 
> diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c
> index 3eea5c2..29a2e63 100644
> --- a/src/util/virsystemd.c
> +++ b/src/util/virsystemd.c
> @@ -340,18 +340,22 @@ int virSystemdTerminateMachine(const char *name,
>      int ret;
>      DBusConnection *conn;
>      char *machinename = NULL;
> +    DBusError error;
> +
> +    dbus_error_init(&error);

This will suffer the same issue we already have in the code in
virSystemdCreateMachine if libvirt is built without DBUS.

>  
>      ret = virDBusIsServiceEnabled("org.freedesktop.machine1");
>      if (ret < 0)
> -        return ret;
> +        goto cleanup;
>  
>      if ((ret = virDBusIsServiceRegistered("org.freedesktop.systemd1")) < 0)
> -        return ret;
> +        goto cleanup;
> +
> +    ret = -1;
>  
>      if (!(conn = virDBusGetSystemBus()))
> -        return -1;
> +        goto cleanup;
>  
> -    ret = -1;
>      if (!(machinename = virSystemdMakeMachineName(name, drivername, privileged)))
>          goto cleanup;
>  
> @@ -368,7 +372,7 @@ int virSystemdTerminateMachine(const char *name,
>      VIR_DEBUG("Attempting to terminate machine via systemd");
>      if (virDBusCallMethod(conn,
>                            NULL,
> -                          NULL,
> +                          &error,
>                            "org.freedesktop.machine1",
>                            "/org/freedesktop/machine1",
>                            "org.freedesktop.machine1.Manager",
> @@ -377,9 +381,20 @@ int virSystemdTerminateMachine(const char *name,
>                            machinename) < 0)
>          goto cleanup;
>  
> +    if (dbus_error_is_set(&error) &&
> +        !STREQ_NULLABLE("org.freedesktop.machine1.NoSuchMachine",
> +                        error.name)) {
> +        virReportError(VIR_ERR_DBUS_SERVICE,
> +                       _("TerminateMachine: %s"),
> +                       error.message ? error.message : _("unknown error"));
> +        goto cleanup;
> +    }
> +
>      ret = 0;
>  
>   cleanup:
> +    dbus_error_free(&error);
> +
>      VIR_FREE(machinename);
>      return ret;
>  }
> 

Michal




More information about the libvir-list mailing list