On 25.07.2013 16:34, Daniel P. Berrange wrote:
On Thu, Jul 25, 2013 at 04:23:33PM +0200, Michal Privoznik wrote:
> This configuration knob lets user to set the length of queue of
> connection requests waiting to be accept()-ed by the daemon. IOW, it
> just controls the @backlog passed to listen:
>
> int listen(int sockfd, int backlog);
> ---
> daemon/libvirtd-config.c | 1 +
> daemon/libvirtd-config.h | 1 +
> daemon/libvirtd.aug | 1 +
> daemon/libvirtd.c | 4 ++++
> daemon/libvirtd.conf | 6 ++++++
> src/locking/lock_daemon.c | 2 +-
> src/lxc/lxc_controller.c | 1 +
> src/rpc/virnetserverservice.c | 6 ++++--
> src/rpc/virnetserverservice.h | 2 ++
> 9 files changed, 21 insertions(+), 3 deletions(-)
>
> diff --git a/daemon/libvirtd-config.c b/daemon/libvirtd-config.c
> index 107a9cf..c816fda 100644
> --- a/daemon/libvirtd-config.c
> +++ b/daemon/libvirtd-config.c
> @@ -414,6 +414,7 @@ daemonConfigLoadOptions(struct daemonConfig *data,
> GET_CONF_INT(conf, filename, min_workers);
> GET_CONF_INT(conf, filename, max_workers);
> GET_CONF_INT(conf, filename, max_clients);
> + GET_CONF_INT(conf, filename, max_queued_clients);
>
> GET_CONF_INT(conf, filename, prio_workers);
>
> diff --git a/daemon/libvirtd-config.h b/daemon/libvirtd-config.h
> index 973e0ea..a24d5d2 100644
> --- a/daemon/libvirtd-config.h
> +++ b/daemon/libvirtd-config.h
> @@ -63,6 +63,7 @@ struct daemonConfig {
> int min_workers;
> int max_workers;
> int max_clients;
> + int max_queued_clients;
>
> int prio_workers;
>
> diff --git a/daemon/libvirtd.aug b/daemon/libvirtd.aug
> index 7c56a41..70fce5c 100644
> --- a/daemon/libvirtd.aug
> +++ b/daemon/libvirtd.aug
> @@ -56,6 +56,7 @@ module Libvirtd =
> let processing_entry = int_entry "min_workers"
> | int_entry "max_workers"
> | int_entry "max_clients"
> + | int_entry "max_queued_clients"
> | int_entry "max_requests"
> | int_entry "max_client_requests"
> | int_entry "prio_workers"
> diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
> index 9f7fd8a..402b494 100644
> --- a/daemon/libvirtd.c
> +++ b/daemon/libvirtd.c
> @@ -485,6 +485,7 @@ static int daemonSetupNetworking(virNetServerPtr srv,
> NULL,
> #endif
> false,
> + config->max_queued_clients,
> config->max_client_requests)))
> goto error;
> if (sock_path_ro) {
> @@ -497,6 +498,7 @@ static int daemonSetupNetworking(virNetServerPtr srv,
> NULL,
> #endif
> true,
> + config->max_queued_clients,
> config->max_client_requests)))
> goto error;
> }
> @@ -522,6 +524,7 @@ static int daemonSetupNetworking(virNetServerPtr srv,
> NULL,
> #endif
> false,
> + config->max_queued_clients,
>
config->max_client_requests)))
> goto error;
>
> @@ -562,6 +565,7 @@ static int daemonSetupNetworking(virNetServerPtr srv,
> config->auth_tls,
> ctxt,
> false,
> + config->max_queued_clients,
> config->max_client_requests))) {
> virObjectUnref(ctxt);
> goto error;
> diff --git a/daemon/libvirtd.conf b/daemon/libvirtd.conf
> index af4493e..5353927 100644
> --- a/daemon/libvirtd.conf
> +++ b/daemon/libvirtd.conf
> @@ -257,6 +257,12 @@
> # over all sockets combined.
> #max_clients = 20
>
> +# The maximum length of queue of connections waiting to be
> +# accepted by the daemon. Note, that some protocols supporting
> +# retransmission may obey this so that a later reattempt at
> +# connection succeeds.
> +#max_queued_clients = 1000
> +
>
> # The minimum limit sets the number of workers to start up
> # initially. If the number of active clients exceeds this,
> diff --git a/src/locking/lock_daemon.c b/src/locking/lock_daemon.c
> index c4c1727..c45f45c 100644
> --- a/src/locking/lock_daemon.c
> +++ b/src/locking/lock_daemon.c
> @@ -671,7 +671,7 @@ virLockDaemonSetupNetworkingNative(virNetServerPtr srv, const
char *sock_path)
> #if WITH_GNUTLS
> NULL,
> #endif
> - false, 1)))
> + false, 0, 1)))
> return -1;
>
> if (virNetServerAddService(srv, svc, NULL) < 0) {
I think we probably want to have a non-zero backlog for virtlockd, otherwise
we could get ECONNREFUSED errors when multiple VMs start in parallel, since
each one will trigger a connect(). Probably worth making it a config file
parameter too, while you're at it.
In fact, 0 gets translated in virNetSocketListen to 30.
Michal