]> xenbits.xensource.com Git - people/dariof/libvirt.git/commitdiff
Introduce max_queued_clients
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 25 Jul 2013 12:45:38 +0000 (14:45 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 5 Aug 2013 09:03:01 +0000 (11:03 +0200)
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
daemon/libvirtd-config.h
daemon/libvirtd.aug
daemon/libvirtd.c
daemon/libvirtd.conf
src/locking/lock_daemon.c
src/lxc/lxc_controller.c
src/rpc/virnetserverservice.c
src/rpc/virnetserverservice.h

index 107a9cf7a6ecc3ef6e5e253746ea1b52e60d405a..c816fda64cf3db9dbcc9ad6f2d28b515a88205e7 100644 (file)
@@ -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);
 
index 973e0eab7445d8c9cac4fa41de450b16b817cad1..a24d5d2737f0d9786711456dadd6c51db62679d8 100644 (file)
@@ -63,6 +63,7 @@ struct daemonConfig {
     int min_workers;
     int max_workers;
     int max_clients;
+    int max_queued_clients;
 
     int prio_workers;
 
index 7c56a4111279a942c6151b09de85f466b623e8ae..70fce5c08912829fe3c06c5fadc4800d9e8e1764 100644 (file)
@@ -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"
index 9f7fd8a271296be4f37ad522f790101a176717a6..402b494bce888a13cab3ce31f1f79ae4496d1f48 100644 (file)
@@ -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;
index af4493e633e33d5587c381a0887a02a5d89edd46..53539275f55d11c6bcd0c520e3c59b2fb40b77c9 100644 (file)
 # 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,
index c4c1727f35bd1e7edea6de7d993a14550ff819b0..c45f45ce5fb7a674d263ef2b69ac613499a6376e 100644 (file)
@@ -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) {
index 124ab192844ccf690e8cfe0a9e7811066c697d45..ed73ab0ac7d778650bb8fe6742f50910293620f3 100644 (file)
@@ -745,6 +745,7 @@ static int virLXCControllerSetupServer(virLXCControllerPtr ctrl)
                                            NULL,
 #endif
                                            false,
+                                           0,
                                            5)))
         goto error;
 
index 632f03d39f26b9828ed84e8f85a86f3ada1bf30b..4113ec988e0d29357e6f61c7c2c64683f945f309 100644 (file)
@@ -97,6 +97,7 @@ virNetServerServicePtr virNetServerServiceNewTCP(const char *nodename,
                                                  virNetTLSContextPtr tls,
 #endif
                                                  bool readonly,
+                                                 size_t max_queued_clients,
                                                  size_t nrequests_client_max)
 {
     virNetServerServicePtr svc;
@@ -122,7 +123,7 @@ virNetServerServicePtr virNetServerServiceNewTCP(const char *nodename,
         goto error;
 
     for (i = 0; i < svc->nsocks; i++) {
-        if (virNetSocketListen(svc->socks[i], 0) < 0)
+        if (virNetSocketListen(svc->socks[i], max_queued_clients) < 0)
             goto error;
 
         /* IO callback is initially disabled, until we're ready
@@ -155,6 +156,7 @@ virNetServerServicePtr virNetServerServiceNewUNIX(const char *path,
                                                   virNetTLSContextPtr tls,
 #endif
                                                   bool readonly,
+                                                  size_t max_queued_clients,
                                                   size_t nrequests_client_max)
 {
     virNetServerServicePtr svc;
@@ -185,7 +187,7 @@ virNetServerServicePtr virNetServerServiceNewUNIX(const char *path,
         goto error;
 
     for (i = 0; i < svc->nsocks; i++) {
-        if (virNetSocketListen(svc->socks[i], 0) < 0)
+        if (virNetSocketListen(svc->socks[i], max_queued_clients) < 0)
             goto error;
 
         /* IO callback is initially disabled, until we're ready
index 1ece50350b2c12c3273052438fdbeccfe704cac8..eb31abfb0f0d348ef0ea3985d92c450ce1eaa6d2 100644 (file)
@@ -44,6 +44,7 @@ virNetServerServicePtr virNetServerServiceNewTCP(const char *nodename,
                                                  virNetTLSContextPtr tls,
 # endif
                                                  bool readonly,
+                                                 size_t max_queued_clients,
                                                  size_t nrequests_client_max);
 virNetServerServicePtr virNetServerServiceNewUNIX(const char *path,
                                                   mode_t mask,
@@ -53,6 +54,7 @@ virNetServerServicePtr virNetServerServiceNewUNIX(const char *path,
                                                   virNetTLSContextPtr tls,
 # endif
                                                   bool readonly,
+                                                  size_t max_queued_clients,
                                                   size_t nrequests_client_max);
 virNetServerServicePtr virNetServerServiceNewFD(int fd,
                                                 int auth,