From: Marko Kreen Date: Wed, 11 Apr 2007 11:15:14 +0000 (+0000) Subject: version 1.0.5 - "enough for today" X-Git-Tag: pgbouncer_1_0_5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=23da9827f88ce81d7834dd221ca82ced5848f812;p=pgbouncer version 1.0.5 - "enough for today" * Fix online-restart bugs: - Set ->ready for idle servers. - Remove obsolete code from use_client_socket() - Disable maintenance during the takeover. --- diff --git a/NEWS b/NEWS index af20ea5..5a2980a 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,11 @@ +2007-04-11 - PgBouncer 1.0.5 - "Enough for today" + + * Fix online-restart bugs: + - Set ->ready for idle servers. + - Remove obsolete code from use_client_socket() + - Disable maintenance during the takeover. + 2007-04-11 - PgBouncer 1.0.4 - "Last 'last' bug" * Notice from idle server tagged server dirty. diff --git a/configure.ac b/configure.ac index aab76a7..48ee1a6 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT(pgbouncer, 1.0.4) +AC_INIT(pgbouncer, 1.0.5) AC_CONFIG_SRCDIR(src/bouncer.h) AC_CONFIG_HEADER(config.h) diff --git a/debian/changelog b/debian/changelog index e26397a..97162fb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +pgbouncer (1.0.5-1) unstable; urgency=low + + * fix online restart bugs. + + -- Marko Kreen Wed, 11 Apr 2007 13:50:50 +0300 + pgbouncer (1.0.4-1) unstable; urgency=low * last bug, honestly. diff --git a/src/janitor.c b/src/janitor.c index 8caf30b..4dda5d0 100644 --- a/src/janitor.c +++ b/src/janitor.c @@ -237,6 +237,10 @@ void per_loop_maint(void) PgPool *pool; int active = 0; + /* dont touch anything if takeover is in progress */ + if (cf_reboot) + return; + statlist_for_each(item, &pool_list) { pool = container_of(item, PgPool, head); if (pool->admin) @@ -430,6 +434,10 @@ static void do_full_maint(int sock, short flags, void *arg) List *item; PgPool *pool; + /* dont touch anything if takeover is in progress */ + if (cf_reboot) + return; + statlist_for_each(item, &pool_list) { pool = container_of(item, PgPool, head); if (pool->admin) diff --git a/src/main.c b/src/main.c index 15095a8..952ac99 100644 --- a/src/main.c +++ b/src/main.c @@ -244,6 +244,8 @@ static void handle_sigterm(int sock, short flags, void *arg) static void handle_sigint(int sock, short flags, void *arg) { log_info("Got SIGINT, shutting down"); + if (cf_reboot) + fatal("Takeover was in progress, going down immidiately"); cf_pause_mode = P_PAUSE; cf_shutdown = 1; } diff --git a/src/objects.c b/src/objects.c index 666e00c..c371a13 100644 --- a/src/objects.c +++ b/src/objects.c @@ -869,15 +869,9 @@ bool use_client_socket(int fd, PgAddr *addr, const char *dbname, const char *username, uint64 ckey, int oldfd, int linkfd) { - PgDatabase *db = find_database(dbname); - PgUser *user = find_user(username); - PgPool *pool = get_pool(db, user); PgSocket *client; PktBuf tmp; - if (!pool) - return false; - client = accept_client(fd, NULL, addr->is_unix); client->addr = *addr; client->suspended = 1; @@ -929,10 +923,13 @@ bool use_server_socket(int fd, PgAddr *addr, server->connect_time = server->request_time = get_cached_time(); server->query_start = 0; - if (linkfd) + if (linkfd) { + server->ready = 0; change_server_state(server, SV_ACTIVE); - else + } else { + server->ready = 1; change_server_state(server, SV_IDLE); + } /* store old cancel key */ pktbuf_static(&tmp, server->cancel_key, 8);