]> granicus.if.org Git - pgbouncer/commitdiff
server_reset_query_always
authorMarko Kreen <markokr@gmail.com>
Mon, 31 Aug 2015 16:58:06 +0000 (19:58 +0300)
committerMarko Kreen <markokr@gmail.com>
Mon, 31 Aug 2015 16:58:06 +0000 (19:58 +0300)
Do not use server_reset_query for non-session pools.

New setting `server_reset_query_always` to restore
old behaviour.  1.6 will also have this setting
but with different default perhaps.

doc/config.rst
etc/pgbouncer.ini
include/bouncer.h
src/main.c
src/objects.c

index 07a13f70448c9b4e1f75e3491a52f25554e1bce3..5b15f6ad567f423806b529a2a44583d90fd51be0 100644 (file)
@@ -403,6 +403,16 @@ that next query will be run on same connection.
 
 Default: DISCARD ALL
 
+server_reset_query_always
+-------------------------
+
+Whether `server_reset_query`_ should be run in all pooling modes.  When this
+setting is off (default), the `server_reset_query`_ will be run only in pools
+that are in sessions-pooling mode.  Connections in transaction-pooling mode
+should not have any need for reset query.
+
+Default: 0
+
 server_check_delay
 ------------------
 
index 8328897062bc41d40bb50380a3ebf2f3063a6fb7..8b43030ddfe59378d07f2830ccf6a34edf84f108 100644 (file)
@@ -93,6 +93,11 @@ pool_mode = session
 ;
 server_reset_query = DISCARD ALL
 
+
+; Whether server_reset_query should run in all pooling modes.
+; If it is off, server_reset_query is used only for session-pooling.
+;server_reset_query_always = 0
+
 ;
 ; Comma-separated list of parameters to ignore when given
 ; in startup packet.  Newer JDBC versions require the
index 399d7bfa5733efdaa41e2251be2040cb11b4560a..6114c184cb500ad00af81f295ed9941ff6a6d117 100644 (file)
@@ -412,6 +412,7 @@ extern usec_t cf_suspend_timeout;
 extern usec_t cf_server_lifetime;
 extern usec_t cf_server_idle_timeout;
 extern char * cf_server_reset_query;
+extern int cf_server_reset_query_always;
 extern char * cf_server_check_query;
 extern usec_t cf_server_check_delay;
 extern usec_t cf_server_connect_timeout;
index b6c2f2838de6fe0f146a16a963b916f36bccf774..46b50c4152a8f2a561bf0a64cc223d037e55afd1 100644 (file)
@@ -100,6 +100,7 @@ int cf_max_db_connections;
 int cf_max_user_connections;
 
 char *cf_server_reset_query;
+int cf_server_reset_query_always;
 char *cf_server_check_query;
 usec_t cf_server_check_delay;
 int cf_server_round_robin;
@@ -228,6 +229,7 @@ CF_ABS("user", CF_STR, cf_username, CF_NO_RELOAD, NULL),
 CF_ABS("autodb_idle_timeout", CF_TIME_USEC, cf_autodb_idle_timeout, 0, "3600"),
 
 CF_ABS("server_reset_query", CF_STR, cf_server_reset_query, 0, "DISCARD ALL"),
+CF_ABS("server_reset_query_always", CF_INT, cf_server_reset_query_always, 0, "0");
 CF_ABS("server_check_query", CF_STR, cf_server_check_query, 0, "select 1"),
 CF_ABS("server_check_delay", CF_TIME_USEC, cf_server_check_delay, 0, "30"),
 CF_ABS("query_timeout", CF_TIME_USEC, cf_query_timeout, 0, "0"),
index 08f1a848652571f8b3087a02e722069bf8d5fbdb..281c4207718986fd73a82807a0028bbbe80651cc 100644 (file)
@@ -697,7 +697,9 @@ bool release_server(PgSocket *server)
                server->link->link = NULL;
                server->link = NULL;
 
-               if (*cf_server_reset_query) {
+               if (*cf_server_reset_query && (cf_server_reset_query_always ||
+                                              pool_pool_mode(pool) == POOL_SESSION))
+               {
                        /* notify reset is required */
                        newstate = SV_TESTED;
                } else if (cf_server_check_delay == 0 && *cf_server_check_query) {