s3-prefork: Allow better management of allowed_clients
authorSimo Sorce <idra@samba.org>
Fri, 12 Aug 2011 16:24:13 +0000 (12:24 -0400)
committerSimo Sorce <idra@samba.org>
Sun, 21 Aug 2011 13:05:04 +0000 (09:05 -0400)
Signed-off-by: Andreas Schneider <asn@samba.org>
Signed-off-by: Simo Sorce <idra@samba.org>
source3/lib/server_prefork.c
source3/lib/server_prefork.h

index a584df7a711d41eed1a95563676f43de3441e125..2df6adea9f81ab6971df1941331121e6ba694950 100644 (file)
@@ -345,6 +345,23 @@ static void prefork_cleanup_loop(struct prefork_pool *pfp)
 
 }
 
+int prefork_count_allowed_connections(struct prefork_pool *pfp)
+{
+       int c;
+       int i;
+
+       c = 0;
+       for (i = 0; i < pfp->pool_size; i++) {
+               if (pfp->pool[i].status == PF_WORKER_NONE) {
+                       continue;
+               }
+
+               c += pfp->pool[i].allowed_clients - pfp->pool[i].num_clients;
+       }
+
+       return c;
+}
+
 void prefork_increase_allowed_clients(struct prefork_pool *pfp, int max)
 {
        int i;
@@ -360,6 +377,21 @@ void prefork_increase_allowed_clients(struct prefork_pool *pfp, int max)
        }
 }
 
+void prefork_decrease_allowed_clients(struct prefork_pool *pfp)
+{
+       int i;
+
+       for (i = 0; i < pfp->pool_size; i++) {
+               if (pfp->pool[i].status == PF_WORKER_NONE) {
+                       continue;
+               }
+
+               if (pfp->pool[i].allowed_clients > 1) {
+                       pfp->pool[i].allowed_clients--;
+               }
+       }
+}
+
 void prefork_reset_allowed_clients(struct prefork_pool *pfp)
 {
        int i;
index 4874359e0b2a3ed1962881f96ec01fac6f13c9e8..a861993c7aa0987aff31579fd674f08af011e2e8 100644 (file)
@@ -181,16 +181,33 @@ int prefork_retire_children(struct prefork_pool *pfp,
 int prefork_count_active_children(struct prefork_pool *pfp, int *total);
 
 /**
-* @brief Inform all children that they are allowed to accept 'max' clients
-*       now. Use this when all children are already busy and more clients
-*       are trying to connect. It will allow each child to handle more than
-*       one client at a time, up to 'max'.
+* @brief Count the number of actual connections currently allowed
+*
+* @param pfp           The pool.
+*
+* @return The number of connections that can still be opened by clients
+*        with the current pool of children.
+*/
+int prefork_count_allowed_connections(struct prefork_pool *pfp);
+
+/**
+* @brief Increase the amount of clients each child is allowed to handle
+*       simultaneaously. It will allow each child to handle more than
+*       one client at a time, up to 'max' (currently set to 100).
 *
 * @param pfp   The pool.
-* @param max   Max number of clients per child.
+* @param max   Max number of allowed connections per child
 */
 void prefork_increase_allowed_clients(struct prefork_pool *pfp, int max);
 
+/**
+* @brief Decrease the amount of clients each child is allowed to handle.
+*       Min is 1.
+*
+* @param pfp   The pool.
+*/
+void prefork_decrease_allowed_clients(struct prefork_pool *pfp);
+
 /**
 * @brief Reset the maximum allowd clients per child to 1.
 *       Does not reduce the number of clients actually beeing served by