From: Marko Kreen Date: Tue, 13 Mar 2012 10:04:15 +0000 (+0200) Subject: autodb: drop old connections on config change X-Git-Tag: pgbouncer_1_5_1_rc1~6 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=46e70172f5fc9ed9f316c152e2af529dcdd66b20;p=pgbouncer autodb: drop old connections on config change We already do it for regular databases, but autodb needs different approach. Reported-by: Maxim Boguk --- diff --git a/include/objects.h b/include/objects.h index 92e46f2..218244b 100644 --- a/include/objects.h +++ b/include/objects.h @@ -67,6 +67,7 @@ int get_active_client_count(void); int get_active_server_count(void); void tag_database_dirty(PgDatabase *db); +void tag_autodb_dirty(void); void tag_host_addr_dirty(const char *host, const struct sockaddr *sa); void for_each_server(PgPool *pool, void (*func)(PgSocket *sk)); diff --git a/src/loader.c b/src/loader.c index 6b19d1e..9b914a6 100644 --- a/src/loader.c +++ b/src/loader.c @@ -163,8 +163,11 @@ static void set_autodb(const char *connstr) log_warning("no mem to change autodb_connstr"); return; } - if (cf_autodb_connstr) + if (cf_autodb_connstr) { + if (strcmp(connstr, cf_autodb_connstr) != 0) + tag_autodb_dirty(); free(cf_autodb_connstr); + } cf_autodb_connstr = tmp; } diff --git a/src/objects.c b/src/objects.c index 04ca32a..098e5d8 100644 --- a/src/objects.c +++ b/src/objects.c @@ -1297,7 +1297,6 @@ static void tag_dirty(PgSocket *sk) sk->close_needed = 1; } - void tag_database_dirty(PgDatabase *db) { struct List *item; @@ -1310,6 +1309,18 @@ void tag_database_dirty(PgDatabase *db) } } +void tag_autodb_dirty(void) +{ + struct List *item; + PgPool *pool; + + statlist_for_each(item, &pool_list) { + pool = container_of(item, PgPool, head); + if (pool->db->db_auto) + for_each_server(pool, tag_dirty); + } +} + static bool server_remote_addr_filter(PgSocket *sk, void *arg) { PgAddr *addr = arg;