We already do it for regular databases, but autodb
needs different approach.
Reported-by: Maxim Boguk
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));
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;
}
sk->close_needed = 1;
}
-
void tag_database_dirty(PgDatabase *db)
{
struct List *item;
}
}
+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;