[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 メーリングリストの案内