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 17:03:43 +0000 (20:03 +0300)
Do not use server_reset_query for non-session pools.

New setting `server_reset_query_always` to restore
old behaviour.  It is set in 1.6, but off in 1.7.

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

index 564b4369dbce45c70939450fe5589fb9e5c36023..1ff9efd0a16298a6710e54e8cca17d32c7c323e4 100644 (file)
@@ -356,6 +356,17 @@ 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.
+
+It is set by default in 1.6, the default will change to "off" in 1.7.
+
+Default: 1
+
 ==== server_check_delay ====
 
 How long to keep released connections available for immediate re-use, without running
index 8328897062bc41d40bb50380a3ebf2f3063a6fb7..4e999e85e4c3fb5f64ed390701f7dc49006a2939 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 = 1
+
 ;
 ; Comma-separated list of parameters to ignore when given
 ; in startup packet.  Newer JDBC versions require the
index e2dedaa88c1d11ef379cc60bfed252cf3e502c80..51ce55dcff4f2826605fe373df4815c257bb141a 100644 (file)
@@ -385,6 +385,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 f194eb1506f2544d068b58c54d12c4f42dc8431b..587b7ae51330b3288403462e16f094fa1d1d7414 100644 (file)
@@ -97,6 +97,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;
@@ -199,6 +200,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, "1");
 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) {