Re: [CORE] 7.4RC2 regression failur and not running stats
От | Joshua D. Drake |
---|---|
Тема | Re: [CORE] 7.4RC2 regression failur and not running stats |
Дата | |
Msg-id | 3FB54153.8090101@commandprompt.com обсуждение исходный текст |
Ответ на | Re: [CORE] 7.4RC2 regression failur and not running stats collector process (Tom Lane <tgl@sss.pgh.pa.us>) |
Список | 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@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 > > -- 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@commandprompt.com - http://www.commandprompt.com Editor-N-Chief - PostgreSQl.Org - http://www.postgresql.org
В списке pgsql-hackers по дате отправления:
Предыдущее
От: Tom LaneДата:
Сообщение: Re: [CORE] 7.4RC2 regression failur and not running stats collector process
Следующее
От: "Glenn Wiorek"Дата:
Сообщение: Re: [CORE] 7.4RC2 regression failur and not running stats collector process