On Thu, Jul 25, 2013 at 04:44:57PM +0200, Michal Privoznik wrote: > 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. Ah ok, ACK then. Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list