Re: Stats Collector Won't Start

Поиск
Список
Период
Сортировка
От Chris Browne
Тема Re: Stats Collector Won't Start
Дата
Msg-id 60y7rc5kw0.fsf@dba2.int.libertyrms.com
обсуждение исходный текст
Ответ на Stats Collector Won't Start  (Brad Nicholson <bnichols@ca.afilias.info>)
Ответы Re: Stats Collector Won't Start  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general
tgl@sss.pgh.pa.us (Tom Lane) writes:
> Chris Browne <cbbrowne@acm.org> writes:
>> tgl@sss.pgh.pa.us (Tom Lane) writes:
>>> Chris Browne <cbbrowne@acm.org> writes:
>>>> (gdb) print addr->ai_addr->sa_data
>>>> $18 = "\000\001\177\000\000\001\000\000\000\000\000\000\000"
>>>
>>> Hmm, that looks a bit odd --- what's the full declaration of structs
>>> sockaddr and sockaddr_in on that machine?
>
>> struct sockaddr {
>>         uchar_t         sa_len;         /* total length */
>>         sa_family_t     sa_family;      /* address family */
>>         char            sa_data[14];    /* actually longer; address value */
>> };
>
>> struct sockaddr_in {
>>         uchar_t        sin_len;
>>         sa_family_t    sin_family;
>>         in_port_t      sin_port;
>>         struct in_addr sin_addr;
>>         uchar_t        sin_zero[8];
>> };
>
> So you've got sin_port = 1, which explains the permission-denied
> message.  Next question is why getaddrinfo is setting it that way
> rather than to zero.  Is it possible that getaddrinfo is failing
> to initialize the field at all, and we're just getting bit by
> random pre-existing memory contents?


Ok, modifying to force the port value to 0...

                /*
                 * Create the socket.
                 */
                if ((pgStatSock = socket(addr->ai_family, SOCK_DGRAM, 0)) < 0)
                {
                        ereport(LOG,
                                        (errcode_for_socket_access(),
                        errmsg("could not create socket for statistics collector: %m")));
                        continue;
                }
                addr->ai_addr->sa_data[0] = 0;   /* cbbrowne: 2006-10-19 */
                addr->ai_addr->sa_data[1] = 0;   /* cbbrowne: 2006-10-19 */
                /*
                 * Bind it to a kernel assigned port on localhost and get the assigned
                 * port via getsockname().
                 */
                if (bind(pgStatSock, addr->ai_addr, addr->ai_addrlen) < 0)
                {
                        ereport(LOG,
                                        (errcode_for_socket_access(),
                          errmsg("could not bind socket for statistics collector: %m")));
                        closesocket(pgStatSock);
                        pgStatSock = -1;
                        continue;
                }


Bad, old binary:

pgrt@ydb1.int.libertyrms.com:/opt/rg/data_rt/scratch $
/opt/dbs/pgsql813-plTcl-slony115-AIX53-64bit-2006-02-14/bin/pg_ctl-D . start 
postmaster starting
pgrt@ydb1.int.libertyrms.com:/opt/rg/data_rt/scratch $ LOG:  could not bind socket for statistics collector: Permission
denied
LOG:  disabling statistics collector for lack of working socket
LOG:  database system was shut down at 2006-10-19 16:18:13 UTC
LOG:  checkpoint record is at 0/38D3D0
LOG:  redo record is at 0/38D3D0; undo record is at 0/0; shutdown TRUE
LOG:  next transaction ID: 565; next OID: 10794
LOG:  next MultiXactId: 1; next MultiXactOffset: 0
LOG:  database system is ready
LOG:  transaction ID wrap limit is 2147484146, limited by database "postgres"
pgrt@ydb1.int.libertyrms.com:/opt/rg/data_rt/scratch $
/opt/dbs/pgsql813-plTcl-slony115-AIX53-64bit-2006-02-14/bin/pg_ctl-D . stop 
waiting for postmaster to shut down....LOG:  received smart shutdown request
LOG:  shutting down
LOG:  database system is shut down
 done
pgrt@ydb1.int.libertyrms.com:/opt/rg/data_rt/scratch $ /opt/dbs/pgsql815-AIX5300-05-02-64bit-TEST_BUILD/bin/pg_ctl  -D
.start 
postmaster starting
pgrt@ydb1.int.libertyrms.com:/opt/rg/data_rt/scratch $ LOG:  could not bind IPv4 socket: Address already in use
HINT:  Is another postmaster already running on port 9732? If not, wait a few seconds and retry.
WARNING:  could not create listen socket for "127.0.0.1"
LOG:  database system was shut down at 2006-10-19 16:25:11 UTC
LOG:  checkpoint record is at 0/38D470
LOG:  redo record is at 0/38D470; undo record is at 0/0; shutdown TRUE
LOG:  next transaction ID: 565; next OID: 10794
LOG:  next MultiXactId: 1; next MultiXactOffset: 0
LOG:  database system is ready
LOG:  transaction ID wrap limit is 2147484146, limited by database "postgres"
pgrt@ydb1.int.libertyrms.com:/opt/rg/data_rt/scratch $ psql -h localhost -p 9732 postgres
Welcome to psql 7.4.12, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

postgres=# begin;
BEGIN
postgres=# select * from pg_stat_activity ;
 datid | datname  | procpid | usesysid | usename |        current_query         | query_start |         backend_start
     | client_addr | client_port  

-------+----------+---------+----------+---------+------------------------------+-------------+-------------------------------+-------------+-------------
 10793 | postgres |  352498 |       10 | pgrt    | <command string not enabled> |             | 2006-10-19
16:25:57.179199+00| 127.0.0.1   |       34178 
(1 row)

Something's a bit amok with the listen socket issue, but the stats
collector is clearly running:

pgrt@ydb1.int.libertyrms.com:/opt/rg/data_rt/scratch $ ps auxww | egrep '([p]ostmaster|[p]ostgres:)'
pgrt      373030  0.0  0.0 3480 24996  pts/0 A    16:25:35  0:00
/opt/dbs/pgsql815-AIX5300-05-02-64bit-TEST_BUILD/bin/postmaster-D .  
pgrt      283052  0.0  0.0 3536 25052  pts/0 A    16:25:35  0:00 postgres: writer process
pgrt     1081804  0.0  0.0 3756 25268  pts/0 A    16:25:35  0:00 postgres: stats collector process
pgrt     1441812  0.0  0.0 3496 25008  pts/0 A    16:25:35  0:00 postgres: stats buffer process

Is there a more elegant way of setting the requested port to 0 than my
2-liner?  I expect so...
--
let name="cbbrowne" and tld="linuxdatabases.info" in String.concat "@" [name;tld];;
http://cbbrowne.com/info/
Thank you for onlining with ITS --
Be sure to patronize us again for your next fix.

В списке pgsql-general по дате отправления:

Предыдущее
От: Bob Pawley
Дата:
Сообщение: Re: PostGIS
Следующее
От: Bob Pawley
Дата:
Сообщение: Re: PostGIS