[libvirt] [PATCH 5/5] rpc: switch virtlockd and virtlogd to use single-threaded dispatch

Jim Fehlig jfehlig at suse.com
Wed Mar 7 15:53:48 UTC 2018


On 03/06/2018 10:58 AM, Daniel P. Berrangé wrote:
> Currently both virtlogd and virtlockd use a single worker thread for
> dispatching RPC messages. Even this is overkill and their RPC message
> handling callbacks all run in short, finite time and so blocking the
> main loop is not an issue like you'd see in libvirtd with long running
> QEMU commands.
> 
> By setting max_workers==0, we can turn off the worker thread and run
> these daemons single threaded. This in turn fixes a serious problem in
> the virtlockd daemon whereby it looses all fcntl() locks at re-exec due
> to multiple threads existing. fcntl() locks only get preserved if the
> process is single threaded at time of exec().
> 
> Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> ---
>   src/locking/lock_daemon.c | 4 ++--
>   src/logging/log_daemon.c  | 4 ++--
>   2 files changed, 4 insertions(+), 4 deletions(-)

Given the outcome of discussions

Reviewed-by: Jim Fehlig <jfehlig at suse.com>

Regards,
Jim

> 
> diff --git a/src/locking/lock_daemon.c b/src/locking/lock_daemon.c
> index 79ab90fc91..7afff42246 100644
> --- a/src/locking/lock_daemon.c
> +++ b/src/locking/lock_daemon.c
> @@ -165,7 +165,7 @@ virLockDaemonNew(virLockDaemonConfigPtr config, bool privileged)
>           goto error;
>   
>       if (!(srv = virNetServerNew("virtlockd", 1,
> -                                1, 1, 0, config->max_clients,
> +                                0, 0, 0, config->max_clients,
>                                   config->max_clients, -1, 0,
>                                   NULL,
>                                   virLockDaemonClientNew,
> @@ -180,7 +180,7 @@ virLockDaemonNew(virLockDaemonConfigPtr config, bool privileged)
>       srv = NULL;
>   
>       if (!(srv = virNetServerNew("admin", 1,
> -                                1, 1, 0, config->admin_max_clients,
> +                                0, 0, 0, config->admin_max_clients,
>                                   config->admin_max_clients, -1, 0,
>                                   NULL,
>                                   remoteAdmClientNew,
> diff --git a/src/logging/log_daemon.c b/src/logging/log_daemon.c
> index d54d26ab9d..35d7ebb6d2 100644
> --- a/src/logging/log_daemon.c
> +++ b/src/logging/log_daemon.c
> @@ -154,7 +154,7 @@ virLogDaemonNew(virLogDaemonConfigPtr config, bool privileged)
>           goto error;
>   
>       if (!(srv = virNetServerNew("virtlogd", 1,
> -                                1, 1, 0, config->max_clients,
> +                                0, 0, 0, config->max_clients,
>                                   config->max_clients, -1, 0,
>                                   NULL,
>                                   virLogDaemonClientNew,
> @@ -169,7 +169,7 @@ virLogDaemonNew(virLogDaemonConfigPtr config, bool privileged)
>       srv = NULL;
>   
>       if (!(srv = virNetServerNew("admin", 1,
> -                                1, 1, 0, config->admin_max_clients,
> +                                0, 0, 0, config->admin_max_clients,
>                                   config->admin_max_clients, -1, 0,
>                                   NULL,
>                                   remoteAdmClientNew,
> 




More information about the libvir-list mailing list