Add statistics_collector_listen_addresses to fix hard-coding of "localhost"

From: Robert Young <yayooo(at)gmail(dot)com>
To: pgsql-bugs(at)postgresql(dot)org
Subject: Add statistics_collector_listen_addresses to fix hard-coding of "localhost"
Date: 2011-10-27 10:38:02
Message-ID: CAJjz_Nhxdkr-0kx9F+VCTub1_kiXPyo5M-9v8Dn7N7y7PEPsXg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

What Would Happen if I got NO "localhost" entry in my /etc/hosts ?

statistics and autovacuum would be disabled:
# /usr/local/pgsql/bin/postgres -i -p 15432 -D data
LOG: could not resolve "localhost": no address associated with name
LOG: disabling statistics collector for lack of working socket
WARNING: autovacuum not started because of misconfiguration
HINT: Enable the "track_counts" option.
LOG: database system was shut down at 2011-10-27 09:42:14 GMT
LOG: database system is ready to accept connections

So let's fix it:
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index b468797..fc0f0e7 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -143,6 +143,7 @@ extern bool synchronize_seqscans;
extern bool fullPageWrites;
extern int ssl_renegotiation_limit;
extern char *SSLCipherSuites;
+extern char *StatisticsCollectorListenAddress;

#ifdef TRACE_SORT
extern bool trace_sort;
@@ -3052,6 +3053,16 @@ static struct config_string ConfigureNamesString[] =
},

{
+ {"statistics_collector_listen_address", PGC_POSTMASTER, QUERY_TUNING_OTHER,
+ gettext_noop("Sets the host name or IP address for statistics
collector listen to."),
+ NULL
+ },
+ &StatisticsCollectorListenAddress,
+ "localhost",
+ NULL, NULL, NULL
+ },
+
+ {
{"custom_variable_classes", PGC_SIGHUP, CUSTOM_OPTIONS,
gettext_noop("Sets the list of known custom variable classes."),
NULL,
diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c
index 1d80c31..13ac5a9 100644
--- a/src/backend/postmaster/pgstat.c
+++ b/src/backend/postmaster/pgstat.c
@@ -117,6 +117,7 @@ int pgstat_track_activity_query_size = 1024;
* Built from GUC parameter
* ----------
*/
+char *StatisticsCollectorListenAddress = NULL;
char *pgstat_stat_filename = NULL;
char *pgstat_stat_tmpname = NULL;

@@ -323,12 +324,12 @@ pgstat_init(void)
hints.ai_addr = NULL;
hints.ai_canonname = NULL;
hints.ai_next = NULL;
- ret = pg_getaddrinfo_all("localhost", NULL, &hints, &addrs);
+ ret = pg_getaddrinfo_all(StatisticsCollectorListenAddress, NULL,
&hints, &addrs);
if (ret || !addrs)
{
ereport(LOG,
- (errmsg("could not resolve \"localhost\": %s",
- gai_strerror(ret))));
+ (errmsg("could not resolve \"%s\": %s",
+ StatisticsCollectorListenAddress,gai_strerror(ret))));
goto startup_failed;
}

@@ -371,7 +372,7 @@ pgstat_init(void)
{
ereport(LOG,
(errcode_for_socket_access(),
- errmsg("could not bind socket for statistics collector: %m")));
+ errmsg("could not bind socket for
statistics_collector_listen_address(%s):
%m",StatisticsCollectorListenAddress)));
closesocket(pgStatSock);
pgStatSock = PGINVALID_SOCKET;
continue;
diff --git a/src/backend/utils/misc/postgresql.conf.sample
b/src/backend/utils/misc/postgresql.conf.sample
index 0f1745f..630b8fd 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -259,6 +259,7 @@

# - Other Planner Options -

+#statistics_collector_listen_address = 'localhost' # should bind to
loopback interface
#default_statistics_target = 100 # range 1-10000
#constraint_exclusion = partition # on, off, or partition
#cursor_tuple_fraction = 0.1 # range 0.0-1.0

Tests:

1.NO localhost entry:
# grep localhost /etc/hosts
# grep statistics_collector_listen_address data/postgresql.conf
#statistics_collector_listen_address = 'localhost' # should bind to
loopback interface
# /usr/local/pgsql/bin/postgres -i -p 5432 -D data
LOG: could not resolve "localhost": no address associated with name
LOG: disabling statistics collector for lack of working socket
WARNING: autovacuum not started because of misconfiguration
HINT: Enable the "track_counts" option.
LOG: database system was shut down at 2011-10-27 09:43:18 GMT
LOG: database system is ready to accept connections

2.Normal circumstance:
# echo 127.0.0.1 localhost > /etc/hosts
# grep localhost /etc/hosts
127.0.0.1 localhost
# grep statistics_collector_listen_address data/postgresql.conf
#statistics_collector_listen_address = 'localhost' # should bind to
loopback interface
# /usr/local/pgsql/bin/postgres -i -p 5432 -D data
LOG: database system was shut down at 2011-10-27 09:48:32 GMT
LOG: database system is ready to accept connections
LOG: autovacuum launcher started

3./etc/hosts misconfigurated:
# echo 127.0.0.44 localhost > /etc/hosts
# grep localhost /etc/hosts
127.0.0.44 localhost
# grep statistics_collector_listen_address data/postgresql.conf
#statistics_collector_listen_address = 'localhost' # should bind to
loopback interface
# /usr/local/pgsql/bin/postgres -i -p 5432 -D data
LOG: could not bind socket for
statistics_collector_listen_address(localhost): Can't assign requested
address
LOG: disabling statistics collector for lack of working socket
WARNING: autovacuum not started because of misconfiguration
HINT: Enable the "track_counts" option.
LOG: database system was shut down at 2011-10-27 09:52:10 GMT
LOG: database system is ready to accept connections

4.statistics_collector_listen_address set to IP address:
# grep localhost /etc/hosts
127.0.0.44 localhost
# grep statistics_collector_listen_address data/postgresql.conf
statistics_collector_listen_address = '127.0.0.1' # should bind to
loopback interface
# /usr/local/pgsql/bin/postgres -i -p 5432 -D data
LOG: database system was shut down at 2011-10-27 10:03:56 GMT
LOG: database system is ready to accept connections
LOG: autovacuum launcher started

5.statistics_collector_listen_address misconfigurated:
# grep statistics_collector_listen_address data/postgresql.conf
statistics_collector_listen_address = '127.0.0.W' # should bind to
loopback interface
# /usr/local/pgsql/bin/postgres -i -p 5432 -D data
LOG: could not resolve "127.0.0.W": no address associated with name
LOG: disabling statistics collector for lack of working socket
WARNING: autovacuum not started because of misconfiguration
HINT: Enable the "track_counts" option.
LOG: database system was shut down at 2011-10-27 10:10:12 GMT
LOG: database system is ready to accept connections

6.NO such address:
# grep statistics_collector_listen_address data/postgresql.conf
statistics_collector_listen_address = '127.0.0.77' # should bind to
loopback interface
# /usr/local/pgsql/bin/postgres -i -p 5432 -D data
LOG: could not bind socket for
statistics_collector_listen_address(127.0.0.77): Can't assign
requested address
LOG: disabling statistics collector for lack of working socket
WARNING: autovacuum not started because of misconfiguration
HINT: Enable the "track_counts" option.
LOG: database system was shut down at 2011-10-27 10:11:34 GMT
LOG: database system is ready to accept connections

All Tests Passed.

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Andres Freund 2011-10-27 12:12:02 Re: Add statistics_collector_listen_addresses to fix hard-coding of "localhost"
Previous Message Josh Berkus 2011-10-27 00:09:29 Re: BUG #5944: COPY FROM doesn't work with international characters