From: Marko Kreen Date: Mon, 31 Aug 2015 16:58:06 +0000 (+0300) Subject: server_reset_query_always X-Git-Tag: pgbouncer_1_7_rc1~14 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9c729257bd59d90dc729d001c55a29a11a4f1e7c;p=pgbouncer server_reset_query_always 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. --- diff --git a/doc/config.rst b/doc/config.rst index 07a13f7..5b15f6a 100644 --- a/doc/config.rst +++ b/doc/config.rst @@ -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 ------------------ diff --git a/etc/pgbouncer.ini b/etc/pgbouncer.ini index 8328897..8b43030 100644 --- a/etc/pgbouncer.ini +++ b/etc/pgbouncer.ini @@ -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 diff --git a/include/bouncer.h b/include/bouncer.h index 399d7bf..6114c18 100644 --- a/include/bouncer.h +++ b/include/bouncer.h @@ -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; diff --git a/src/main.c b/src/main.c index b6c2f28..46b50c4 100644 --- a/src/main.c +++ b/src/main.c @@ -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"), diff --git a/src/objects.c b/src/objects.c index 08f1a84..281c420 100644 --- a/src/objects.c +++ b/src/objects.c @@ -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) {