[pgsql-jp: 34010] pgpool-2.1においてコミット時にセカンダリがダウンした際の不具合?について

Yoichi ISOZAKI iso @ mindgame.net
2004年 9月 21日 (火) 08:57:19 JST


磯崎と申します。
お世話になっております。

現在pgpool-2.1において幾つか動作検証を行っていたのですが、
一点ほど次のような不具合(?)が発見されました。

トランザクションのコミット時にセカンダリ側のPostgreSQLデータベースが
システムダウンになると、COMMIT文の実行結果はエラーとなるが、
マスタ側のPostgreSQLデータベースではコミットされている。

以下、psqlによる実行例です。
----------------------------------------------------------------------
test=> SELECT * FROM test;
 col1 | col2 |            col3            
------+------+----------------------------
 a    |    1 | 2004-09-21 07:06:49.814556
 b    |    2 | 2004-09-21 07:07:24.377272
 b    |    2 | 2004-09-21 07:07:35.818297
 c    |    3 | 2004-09-21 07:07:40.694961
 d    |    4 | 2004-09-21 07:50:48.540224
(5 rows)

test=> BEGIN;
BEGIN
test=> INSERT INTO test (col1, col2, col3) VALUES ('e', 5, '_now()');
INSERT 17163 1

※この時点でセカンダリ側がシステムダウンすると…

test=> COMMIT;
ERROR:  kind mismatch between backends
HINT:  check data consistency between master and secondary
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.
!> \c test test
Password: 
You are now connected to database "test" as user "test".
test=> SELECT * FROM test;
 col1 | col2 |            col3            
------+------+----------------------------
 a    |    1 | 2004-09-21 07:06:49.814556
 b    |    2 | 2004-09-21 07:07:24.377272
 b    |    2 | 2004-09-21 07:07:35.818297
 c    |    3 | 2004-09-21 07:07:40.694961
 d    |    4 | 2004-09-21 07:50:48.540224
 e    |    5 | 2004-09-21 08:16:53.036509
(6 rows)
----------------------------------------------------------------------

なお、セカンダリの代わりにマスタ側がダウンした場合においては、
セカンダリ側もコミットされていないので問題無いようです。

もし運悪くこのような障害が発生してしまうことを想定しますと、
コミット時にエラーが検出されたトランザクションを再試行する際には、
既にコミットされたか否かをアプリケーション側で判別する処理が
必要になってくるものと考えています。

現時点での最新版であるpgpool-2.1では、2フェーズコミットなどの機能は
実装されていないと認識すればよろしいのでしょうか?

ご助言いただければ幸いです。

Yo[u]ichi ISOZAKI
E-Mail:iso @ mindgame.net




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