[pgsql-jp: 31457] Re: 7.4RC2 regression failur and not running stats collector process on Solaris
Kiyoshi Sawada
sawa @ nagoya2.jrc.or.jp
2003年 11月 14日 (金) 13:09:45 JST
沢田です。
慌ててうかつにも、下記(1)と(2)の両方とも行なってしまいました。
現在、(2)のみを行なってのテストを行なっております。
再度、結果報告いたします。
On Fri, 14 Nov 2003 12:24:13 +0900 Kiyoshi Sawada <sawa @ nagoya2.jrc.or.jp> wrote:
> 結果
> SunOS 5.8 sun4m sparc と SunOS 5.8 i386 i86pc のどちらも
> (1) src/backend/postmaster/pgstat.c の本田さんパッチ
> (2) /etc/inet/ipnodes で ::1 を削除
>
> On Fri, 14 Nov 2003 02:46:05 +0900 (JST) Shigehiro Honda <fwif0083 @ mb.infoweb.ne.jp> wrote:
>
> > 本田です。
> >
> > 手元のsolaris9 sparcでOK、solaris9 x86でNGという不可解な
> > 状態でしたので、少し見てみました。
> > From: Kiyoshi Sawada <sawa @ nagoya2.jrc.or.jp>
> > Subject: [pgsql-jp: 31442] Re: 7.4RC2 regression failur and not running stats collector process on Solaris
> > Date: Wed, 12 Nov 2003 20:31:31 +0900
> >
> > > 本家HACKERSからもアドバイスをいただき、
> > > src/backend/postmaster/pgstat.c の pgstat_init() を追っかけています。
> > (略)
> > > どうやら、bind()でエラーを出しているようです。
> >
> > postmasterにtrussをかけてみると、x86もsparcも
> > IPv6なUDP(正確な言い方かしら?)でbindしようとしていました。
> > sparcでは、
> > so_socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP, "", 1) = 5
> > bind(5, 0x003B6A90, 32, 3) = 0
> > とbindに成功し、一方、x86では
> > so_socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP, "", 1) = 4
> > bind(4, 0x083301B8, 32, 3) Err#126 EADDRNOTAVAIL
> > とbind()できませんでした。
> >
> > このフラグはlocalhostに付与されているはずのアドレスを見て決定してい
> > るようです。sparcの方にはIPv6を有効にしていたせいかlo0にIPv4とIPv6
> > が付与されていて、x86の方にはIPv4のみが付与されています。(後ろに両者
> > のifconfigの出力を付与します。)
> >
> > src/backend/postmaster/pgstat.cの上の方で、呼び出す関数
> > getaddrinfo_allから呼び出されるライブラリ関数getaddrinfo
> > の不具合なような気がします。
> >
> > 対策としては
> > (1) 不具合をコードで吸収する
> > こんな感じかなぁ。一応動作はする模様です。
> > santana% diff src/backend/postmaster/pgstat.c.DIST src/backend/postmaster/pgstat.c
> > 213,214c213,221
> > < if ((pgStatSock = socket(addr->ai_family, SOCK_DGRAM, 0)) >= 0)
> > < break;
> > ---
> > >
> > > if ((pgStatSock = socket(addr->ai_family, SOCK_DGRAM, 0)) >= 0) {
> > > if (bind(pgStatSock, addr->ai_addr, addr->ai_addrlen) < 0) {> pgStatSock = -1;
> > > } else {
> > > break;
> > > }
> > > }
> > >
> > 228a236
> > > /*
> > 235a244
> > > */
> >
> > (2) /etc/inet/ipnodesから::1から始まる行を削除する
> > #副作用は調べていません。
> > santana% more /etc/inet/ipnodes
> > #
> > # Internet host table
> > #
> > ::1 localhost
> > 127.0.0.1 localhost
> >
> > ifconfigの結果:
> > [sparcなホスト]
> > jb% /usr/sbin/ifconfig -a
> > lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
> > inet 127.0.0.1 netmask ff000000
> > hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
> > inet 10.0.0.109 netmask ffffff00 broadcast 10.0.0.255
> > lo0: flags=2000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6> mtu 8252 index 1
> > inet6 ::1/128
> > hme0: flags=2000841<UP,RUNNING,MULTICAST,IPv6> mtu 1500 index 2
> > inet6 fe80::a00:20ff:fea2:2359/10
> > [x86なホスト]
> > santana% /usr/sbin/ifconfig -a
> > lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
> > inet 127.0.0.1 netmask ff000000
> > pcn0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
> > inet 10.0.0.74 netmask ff000000 broadcast 10.255.255.255
pgsql-jp メーリングリストの案内