From 3187a2fbc1466e6e6fe87bfa056fb95bfa135660 Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Fri, 15 Nov 2013 18:18:44 +0200 Subject: [PATCH] Proper invalidation for autodbs As autodb database entries are generated on the fly, old invalidation code skipped them, so new config was ignored. This will hopefully fix it. Reported-by: Moshe Jacobson --- src/loader.c | 11 +++++++---- src/objects.c | 19 ++++++++++++++++++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/loader.c b/src/loader.c index 870ddf8..7f0ef21 100644 --- a/src/loader.c +++ b/src/loader.c @@ -159,16 +159,19 @@ static void set_connect_query(PgDatabase *db, const char *new) static void set_autodb(const char *connstr) { char *tmp = strdup(connstr); + char *old = cf_autodb_connstr; + if (!tmp) { log_warning("no mem to change autodb_connstr"); return; } - if (cf_autodb_connstr) { - if (strcmp(connstr, cf_autodb_connstr) != 0) + + cf_autodb_connstr = tmp; + if (old) { + if (strcmp(connstr, old) != 0) tag_autodb_dirty(); - free(cf_autodb_connstr); + free(old); } - cf_autodb_connstr = tmp; } /* fill PgDatabase from connstr */ diff --git a/src/objects.c b/src/objects.c index b48f774..eca926b 100644 --- a/src/objects.c +++ b/src/objects.c @@ -1347,9 +1347,26 @@ void tag_database_dirty(PgDatabase *db) void tag_autodb_dirty(void) { - struct List *item; + struct List *item, *tmp; + PgDatabase *db; PgPool *pool; + /* + * reload databases. + */ + statlist_for_each(item, &database_list) { + db = container_of(item, PgDatabase, head); + if (db->db_auto) + register_auto_database(db->name); + } + statlist_for_each_safe(item, &autodatabase_idle_list, tmp) { + db = container_of(item, PgDatabase, head); + if (db->db_auto) + register_auto_database(db->name); + } + /* + * reload pools + */ statlist_for_each(item, &pool_list) { pool = container_of(item, PgPool, head); if (pool->db->db_auto) -- 2.40.0