[pgsql-jp: 34122] Re: pgpool 2.2 on FreeBSDでレプリケーションに失敗する

Tatsuo Ishii t-ishii @ sra.co.jp
2004年 10月 16日 (土) 13:41:48 JST


石井です.

# 新潟に向かう新幹線の中でこのメール書いています.

> で、pgpoolとそれぞれのPostgreSQLを起動してpsqlでpgpool経由で接続しよう
> とすると
> 
> psql: kind mismatch between backends
> 
> とエラーが出ました。pgpoolを-ndをつけて起動しログを見ると、
> 
> DEBUG: pid 43811: pool_process_query: waiting for secondary for data ready
> ERROR: pid 43811: pool_check_fd: select() failed. reason Invalid argument
> ERROR: pid 43811: pool_process_query: secondary data is not ready at synchronous
>  point. abort this session
> ERROR: pid 43811: pool_process_query: kind does not match between backends maste
> r(C) secondary(^@)
> LOG: pid 43811: do_child: exits with status 1 due to error
> 
> となってました。
> pool_process_query.cの292行目で
> 
> if (pool_check_fd(SECONDARY(backend), 0))
> 
> とpool_check_fd()を呼んだ際に、selectで失敗しているのですが、さらに調
> べたところどうもFreeBSDではselectの第5引数に渡すtimevalで、
> timeval.tv_usecが1000000(1秒)を越えているとselectがEINVALを返している
> ようです。
> 
> そのため、pgpool.confでreplication_timeoutを1000未満の値にすると動きま
> すし、timevalをセットする部分を以下のように修正すると動きました。
> 
> timeout.tv_sec = pool_config.replication_timeout / 1000;
> timeout.tv_usec = pool_config.replication_timeout - (timeout.tv_sec * 1000);
> 
> 
> おなじpgpool-2.2でも、RedHat Linux AS 3.0ではこの現象は起こらず普通に
> 動いていますので、FreeBSD固有の問題ではないかと思っています。他に
> FreeBSDで運用されてる方はいかがでしょうか?

うう,アホなコーディングで申し訳ありません.早速修正してバージョンアッ
プします.ご指摘,どうもありがとうございました.
--
Tatsuo Ishii



pgsql-jp メーリングリストの案内