From: | "Glenn Wiorek" <gwiorek(at)jmlafferty(dot)com> |
---|---|
To: | "Christopher Browne" <cbbrowne(at)libertyrms(dot)info>, "Tom Lane" <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: [CORE] 7.4RC2 regression failur and not running stats collector process |
Date: | 2003-11-14 21:19:43 |
Message-ID: | 00b801c3aaf5$059f20d0$143264c8@jmlafferty.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hmm I know it's been a while since I used patch but I seem to be having
problems applying it. Perhaps my patch is outdated??
patch -b pgstat.c < patchfile
Looks like a new-style context diff.
Hunk#2failed at line 203.
Hunk#2failed at line 210.
Hunk#3failed at line 284.
3 out of 3 hunks ailed: saving reject to pgstat.c.rej
----- Original Message -----
From: "Tom Lane" <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "Christopher Browne" <cbbrowne(at)libertyrms(dot)info>
Cc: <pgsql-hackers(at)postgresql(dot)org>
Sent: Friday, November 14, 2003 2:42 PM
Subject: Re: [HACKERS] [CORE] 7.4RC2 regression failur and not running stats
collector process
> 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
>
From | Date | Subject | |
---|---|---|---|
Next Message | Andrew Sullivan | 2003-11-14 21:30:16 | Re: Help with count(*) |
Previous Message | Derek Morr | 2003-11-14 21:14:34 | Re: [CORE] 7.4RC2 regression failur and not running stats |