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