Re: [CORE] 7.4RC2 regression failur and not running stats collector process - Mailing list pgsql-hackers
From | Glenn Wiorek |
---|---|
Subject | Re: [CORE] 7.4RC2 regression failur and not running stats collector process |
Date | |
Msg-id | 00b801c3aaf5$059f20d0$143264c8@jmlafferty.com Whole thread Raw |
In response to | Re: 7.4RC2 regression failur and not running stats collector process (Derek Morr <dvm105@psu.edu>) |
Responses |
Re: [CORE] 7.4RC2 regression failur and not running stats
|
List | 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@sss.pgh.pa.us> To: "Christopher Browne" <cbbrowne@libertyrms.info> Cc: <pgsql-hackers@postgresql.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@libertyrms.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 >
pgsql-hackers by date: