[pgsql-jp: 31458] Re: 7.4RC2 regression failur and not running stats collector process on Solaris

Kiyoshi Sawada sawa @ nagoya2.jrc.or.jp
2003年 11月 14日 (金) 13:44:18 JST


沢田です。

On Fri, 14 Nov 2003 13:09:45 +0900  Kiyoshi Sawada <sawa @ nagoya2.jrc.or.jp> wrote:

> 沢田です。
> 
> 慌ててうかつにも、下記(1)と(2)の両方とも行なってしまいました。
> 現在、(2)のみを行なってのテストを行なっております。
> 
> 再度、結果報告いたします。
> 

とりあえず、SunOS 5.8 i386 i86pc だけですが
(1) ----  pass
(2) /etc/inet/ipnodes  で ::1 を削除
(3) make cheke
======================
All 93 tests passed.
======================
(4) pg_ctl start
    ps -ef | grep postma
postgres  5463  5462  0 13:33:57 pts/2    0:00 /usr/local/pgsql/bin/postmaster
postgres  5460     1  0 13:33:56 pts/2    0:00 /usr/local/pgsql/bin/postmaster
postgres  5462  5460  0 13:33:57 pts/2    0:00 /usr/local/pgsql/bin/postmaster
(5) バックエンドの PID と現在の問い合わせを表示
SELECT pg_stat_get_backend_pid(S.backendid) AS procpid,
pg_stat_get_backend_activity(S.backendid) AS current_query
FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS S;
 procpid | current_query
---------+---------------
    5482 |
(1 row)

IPv4のみの環境ならば、(2)のみの方法が、ソースをいじる必要が
無いので、スッキリしていますね。
# こんなに簡単だったとは.... トホホ

教訓その2:しっかりIPv6のお勉強をしなければ。


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