[pgpool-general-jp: 728] Re: pgpool_remote_start() の返り値

Tatsuo Ishii ishii @ sraoss.co.jp
2010年 2月 15日 (月) 17:14:26 JST


石井です。

>  リカバリー対象の postgresql の起動が失敗する状況になったのですが(こ
> のこと自体は今回は問題外)、その際に pcp_recovery_node が終わらないこと
> があるようです。
>
>  ちょっと追ってみたところ、pgpool_remote_start スクリプトは失敗を返し
> ているのですが、pgpool-recovery.c の pgpool_remote_start() 関数で
> system() の返り値がどうであれ PG_RETURN_BOOL(true); で戻っているため、
> check_postmaster_started() でずーっと待ってしまうことになっているよう
> です。
>  pgpool_remote_start() が偽を返してくれればいいような気もするのですが、
> この辺詳しくないのでなにか理由があってこうなっているのかがわかりません
> でした。
> 
>  ここは true である方がいいのでしょうか?

以下の部分ですが、

	r = system(recovery_script);

	if (r != 0)
	{
		elog(ERROR, "pgpool_remote_start failed");
	}

	PG_RETURN_BOOL(true);

systemがエラーを返すと、elog(ERROR...)が実行されます。この場合、
PostgreSQLはelogの中でlongjumpしてエラー処理を行い、トランザクションを
アボートします。なので、実際には、

	PG_RETURN_BOOL(true);

は実行されていないと思われます。
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese: http://www.sraoss.co.jp


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