PostgreSQL日記

アクセスカウンタ

zoom RSS pgpool-II

<<   作成日時 : 2009/09/26 20:42   >>

ブログ気持玉 0 / トラックバック 1 / コメント 0

ものすごい久しぶりにBiglobeのWebにアクセスしてみたら、うるさい広告が表示されています。
31日以上記事を書かないと表示されてしまうらしい...
それで、というわけではないのですが、pgpool-IIの開発メモを少し書いてみることにしました。
本当は手書きのHTMLを書いていく方が制約がなくて良いのですが、識者のコメントをいただいたりしたいので、ブログに書きます。

pgpool-IIのマスタースレーブモードの動作はかなりややこしいのですが、拡張プロトコルとなるとなおさら。
コードを追っていくと、結構怪しいところがあります。たとえば今日見つけたのは、SETコマンドなど、特定のコマンドはマスタでもスレーブでもどちらでも実行されるのですが、前後関係でそうならないことがあります。
たとえば、

connection.setAutoCommit(false);
pstmt = connection.prepareStatement("SET enable_seqscan to ON");
pstmt.executeUpdate();

を実行すると、本来はSETがマスタとスレーブの両方で実行されるはずが、マスタでしか実行されません。
これは、ProcessFrontendResponseという関数の中で、

if (MASTER_SLAVE &&
(TSTATE(backend) != 'I' || receive_extended_begin))
{
master_slave_was_enabled = 1;
MASTER_SLAVE = 0;
master_slave_dml = 1;
}

ということをやっているからなのです。グローバル変数の設定だらけでわけわからない状態になっていますが(本当はこのあたりもすっきりリファクタリングしたい)、要はマスタスレーブモードを一時的に止めてあたかもマスタだけで動いているように見せているのです。このコードは、Bindメッセージが送られると実行され、次のExecuteメッセージでは、SETがマスタだけで実行されてしまう、というわけです。

うーん、このコードは自分で書いたのだろうか?もはや思い出せません:-)

...というような悩みをいだいて日夜悩んでいるわけですが、これからもメモがわりに書き綴っていきます。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(1件)

タイトル (本文) ブログ名/日時
pgpool-II: master/slaveモードでの一時テーブル問題解決
以前のエントリにも書いた、pgpool-IIのmaster/slaveモードで一時テーブルが使えない件ですが、解決しました。 ...続きを見る
PostgreSQL日記
2009/11/03 20:33

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
pgpool-II PostgreSQL日記/BIGLOBEウェブリブログ
文字サイズ:       閉じる