From: | "Joshua D(dot) Drake" <jd(at)commandprompt(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Christopher Browne <cbbrowne(at)libertyrms(dot)info>, pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: [CORE] 7.4RC2 regression failur and not running stats |
Date: | 2003-11-14 20:55:47 |
Message-ID: | 3FB54153.8090101@commandprompt.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
I can fire up our solaris machine and let you have access to it if you
want to do some destructive testing.
Tom Lane wrote:
>Christopher Browne <cbbrowne(at)libertyrms(dot)info> writes:
>
>
>>For what it's worth, I have been running regression on Solaris with
>>numerous of the betas, and RC1 and [just now] RC2, with NO problems.
>>
>>
>
>It seems clear that some Solaris installations are affected and some
>are not. Presumably there is some version difference or some local
>configuration difference ... but since we don't know what the critical
>factor is, we have no basis for guessing what fraction of Solaris
>installations will see the problem.
>
>
>
>>(And in that case, I would be quick to test the patch to ensure it
>>causes no adverse side-effects.)
>>
>>
>
>Here is the proposed patch --- please test it ASAP if you can.
>This is against RC2.
>
> regards, tom lane
>
>
>
>------------------------------------------------------------------------
>
>*** src/backend/postmaster/pgstat.c.orig Fri Nov 7 16:55:50 2003
>--- src/backend/postmaster/pgstat.c Fri Nov 14 15:02:14 2003
>***************
>*** 203,208 ****
>--- 203,216 ----
> goto startup_failed;
> }
>
>+ /*
>+ * On some platforms, getaddrinfo_all() may return multiple addresses
>+ * only one of which will actually work (eg, both IPv6 and IPv4 addresses
>+ * when kernel will reject IPv6). Worse, the failure may occur at the
>+ * bind() or perhaps even connect() stage. So we must loop through the
>+ * results till we find a working combination. We will generate LOG
>+ * messages, but no error, for bogus combinations.
>+ */
> for (addr = addrs; addr; addr = addr->ai_next)
> {
> #ifdef HAVE_UNIX_SOCKETS
>***************
>*** 210,262 ****
> if (addr->ai_family == AF_UNIX)
> continue;
> #endif
>! if ((pgStatSock = socket(addr->ai_family, SOCK_DGRAM, 0)) >= 0)
>! break;
>! }
>
>! if (!addr || pgStatSock < 0)
>! {
>! ereport(LOG,
>! (errcode_for_socket_access(),
>! errmsg("could not create socket for statistics collector: %m")));
>! goto startup_failed;
>! }
>
>! /*
>! * 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")));
>! goto startup_failed;
>! }
>
>! freeaddrinfo_all(hints.ai_family, addrs);
>! addrs = NULL;
>
>! alen = sizeof(pgStatAddr);
>! if (getsockname(pgStatSock, (struct sockaddr *) & pgStatAddr, &alen) < 0)
>! {
>! ereport(LOG,
>! (errcode_for_socket_access(),
>! errmsg("could not get address of socket for statistics collector: %m")));
>! goto startup_failed;
> }
>
>! /*
>! * Connect the socket to its own address. This saves a few cycles by
>! * not having to respecify the target address on every send. This also
>! * provides a kernel-level check that only packets from this same
>! * address will be received.
>! */
>! if (connect(pgStatSock, (struct sockaddr *) & pgStatAddr, alen) < 0)
> {
> ereport(LOG,
> (errcode_for_socket_access(),
>! errmsg("could not connect socket for statistics collector: %m")));
> goto startup_failed;
> }
>
>--- 218,285 ----
> if (addr->ai_family == AF_UNIX)
> continue;
> #endif
>! /*
>! * 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;
>! }
>
>! /*
>! * 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;
>! }
>
>! alen = sizeof(pgStatAddr);
>! if (getsockname(pgStatSock, (struct sockaddr *) &pgStatAddr, &alen) < 0)
>! {
>! ereport(LOG,
>! (errcode_for_socket_access(),
>! errmsg("could not get address of socket for statistics collector: %m")));
>! closesocket(pgStatSock);
>! pgStatSock = -1;
>! continue;
>! }
>
>! /*
>! * Connect the socket to its own address. This saves a few cycles by
>! * not having to respecify the target address on every send. This also
>! * provides a kernel-level check that only packets from this same
>! * address will be received.
>! */
>! if (connect(pgStatSock, (struct sockaddr *) &pgStatAddr, alen) < 0)
>! {
>! ereport(LOG,
>! (errcode_for_socket_access(),
>! errmsg("could not connect socket for statistics collector: %m")));
>! closesocket(pgStatSock);
>! pgStatSock = -1;
>! continue;
>! }
>
>! /* If we get here, we have a working socket */
>! break;
> }
>
>! /* Did we find a working address? */
>! if (!addr || pgStatSock < 0)
> {
> ereport(LOG,
> (errcode_for_socket_access(),
>! errmsg("disabling statistics collector for lack of working socket")));
> goto startup_failed;
> }
>
>***************
>*** 284,289 ****
>--- 307,314 ----
> errmsg("could not create pipe for statistics collector: %m")));
> goto startup_failed;
> }
>+
>+ freeaddrinfo_all(hints.ai_family, addrs);
>
> return;
>
>
>
>------------------------------------------------------------------------
>
>
>---------------------------(end of broadcast)---------------------------
>TIP 7: don't forget to increase your free space map settings
>
>
--
Command Prompt, Inc., home of Mammoth PostgreSQL - S/ODBC and S/JDBC
Postgresql support, programming shared hosting and dedicated hosting.
+1-503-222-2783 - jd(at)commandprompt(dot)com - http://www.commandprompt.com
Editor-N-Chief - PostgreSQl.Org - http://www.postgresql.org
From | Date | Subject | |
---|---|---|---|
Next Message | Derek Morr | 2003-11-14 21:14:34 | Re: [CORE] 7.4RC2 regression failur and not running stats |
Previous Message | Tom Lane | 2003-11-14 20:42:49 | Re: [CORE] 7.4RC2 regression failur and not running stats collector process |