[pgcluster: 620] トランザクション中にレプリケーションサーバが落ちると、クライアントが固まる

kazunari takahashi kazunari.takahashi @ ctc-g.co.jp
2004年 12月 14日 (火) 18:44:53 JST


三谷様

高橋です.
現在、障害テストを行っております.
perl+DBI+DBDでロードバランサ経由でPgClusterにアクセスし、
SQLを実行中にレプリケーションサーバのpgreplicateを落とすと、
クライアントプログラムが固まり、プロンプトが返ってきません.
DBD,DBIの問題なのか、PgCluster側の問題なのか切り分けがつかず、
投稿いたしました.
申し訳ございません.

####################################
#環境
####################################
pgcluster-1.0.8rc5

pglb × 2 (solaris8 sparc)
clusterDB ×2 (solaris8 sparc)(serverA,serverB)
rgrp × 2 (solaris8 sparc)

####################################
#検証方法
#####################################

1. 下記のスクリプトをロードバランサ上で流す.

$ ./test.pl
$ cat test.pl
#!/usr/bin/perl

        use DBI();
        $DB_CON = DBI->connect("DBI:Pg:dbname=test;host=localhost;",
                               "test", "test",
                               {'RaiseError' => 0, AutoCommit => 0});
        if($!){
        }
        if ($DBI::err){
                print FH "Cannot connect DB!\n\n";
                $tmp=$DBI::errstr;
                print FH "[DATE:${date}]err_str:${tmp}\n\n";
                exit(0);
        }
        $sql = '適当にデータ量のあるINSERT文'
        $sth = $DB_CON->prepare($sql);

        # SQL 文実行
        $sth->execute();

        if ($sth->err ne '') {
                print "Error dazo\n";
                exit(0);
        }

        # メモリ解放
        $sth->finish();

        # commit
        $DB_CON->commit();

}

2. レプリケーションサーバ上でsnoopしながら、pgreplicateをstopする.

####################################
#検証方法
#####################################

% ./test.pl
Error dazo
DBD::Pg::st execute failed: ERROR:  replication server should be down, transacti
on aborted. at ./test.pl 

このまま固まってます.
netstat でみても、セッションがestablishされています.

以上 宜しくお願いいたします.
高橋 一成 <kazunari.takahashi @ ctc-g.co.jp>




pgcluster メーリングリストの案内