]> granicus.if.org Git - pgbouncer/commitdiff
min_pool_size (draft)
authorMarko Kreen <markokr@gmail.com>
Mon, 3 Oct 2011 19:59:49 +0000 (22:59 +0300)
committerMarko Kreen <markokr@gmail.com>
Mon, 3 Oct 2011 19:59:49 +0000 (22:59 +0300)
doc/config.txt
include/bouncer.h
src/janitor.c
src/main.c

index 20934282d4752efa9f07f080e480c6f18017de11..381e13bbe960e5606537b3df38edefe5c6a4b584 100644 (file)
@@ -145,6 +145,13 @@ the per-database configuration.
 
 Default: 20
 
+==== min_pool_size ====
+
+Minimal pool size.  PgBouncer will open this many connections to backend database
+after first client connect.  Optional, not recommended in most normal setups.
+
+Default: 0 (disabled)
+
 ==== reserve_pool_size ====
 
 How many additional connections to allow to a pool. 0 disables.
@@ -292,7 +299,8 @@ Default: 3600
 ==== server_idle_timeout ====
 
 If a server connection has been idle more than this many seconds, and there are 
-too many connections in the pool, this one can be dropped. [seconds]
+too many connections in the pool, this one can be dropped.
+If 0 then timeout is disabled.  [seconds]
 
 Default: 600
 
index 2773fc8fc78e096c2fd334ec659daf44a5056849..3ef0fa2ab708d826face6c3f409cc00d015ba28d 100644 (file)
@@ -342,6 +342,7 @@ extern int cf_listen_backlog;
 extern int cf_pool_mode;
 extern int cf_max_client_conn;
 extern int cf_default_pool_size;
+extern int cf_min_pool_size;
 extern int cf_res_pool_size;
 extern usec_t cf_res_pool_timeout;
 
index 327e39221dfa63ba192f968072aca44b68c2c46e..9a7baee3e0551d7f033bb0e7ad69df3a9a02d683 100644 (file)
@@ -430,6 +430,18 @@ static void check_pool_size(PgPool *pool)
                        break;
                disconnect_server(server, true, "too many servers in the pool");
                many--;
+               cur--;
+       }
+
+       /* launch extra connections to satisfy min_pool_size */
+       if (cur < cf_min_pool_size &&
+           cur < pool->db->pool_size &&
+           cf_pause_mode == P_NONE &&
+           cf_reboot == 0 &&
+           pool_client_count(pool) > 0)
+       {
+               log_debug("Launching new connection to satisfy min_pool_size");
+               launch_new_connection(pool);
        }
 }
 
index a372e434610ba49339b2f3ed9cee02a650abf952..25847cd77bb477b7e642d74a49efcf88875984cd 100644 (file)
@@ -87,6 +87,7 @@ char *cf_auth_file;
 
 int cf_max_client_conn;
 int cf_default_pool_size;
+int cf_min_pool_size;
 int cf_res_pool_size;
 usec_t cf_res_pool_timeout;
 
@@ -170,6 +171,7 @@ CF_ABS("auth_file", CF_STR, cf_auth_file, 0, "unconfigured_file"),
 CF_ABS("pool_mode", CF_LOOKUP(pool_mode_map), cf_pool_mode, 0, "session"),
 CF_ABS("max_client_conn", CF_INT, cf_max_client_conn, 0, "100"),
 CF_ABS("default_pool_size", CF_INT, cf_default_pool_size, 0, "20"),
+CF_ABS("min_pool_size", CF_INT, cf_min_pool_size, 0, "0"),
 CF_ABS("reserve_pool_size", CF_INT, cf_res_pool_size, 0, "0"),
 CF_ABS("reserve_pool_timeout", CF_INT, cf_res_pool_timeout, 0, "5"),
 CF_ABS("syslog", CF_INT, cf_syslog, 0, "0"),