[pgcluster: 432] 107av10をリリースしました
mitani
mitani @ sraw.co.jp
2004年 8月 2日 (月) 15:05:17 JST
三谷@広島です.
oguroさんから報告いただきました,下記の不具合について修正しました.
「インデックスの制約でロック競合が発生し,ロック発生元をロールバックさせ
た場合,マスタDBにデータが重複して登録される」
いつものようにlast_nightからダウンロードできます.
http://hiroshima.sraw.co.jp/people/mitani/jpug/pgcluster/current/last_night.html
PostgreSQLの内部で,ロックの競合は
(1)ストアドプロシジャ
(2)トリガ
(3)データ
(4)インデックス
の順に検知していきます.
この不具合は
(4)インデックスのロック競合を検知した段階で,
既に(3)データ登録が終わっているため,
ロック競合を回避してリトライする毎にデータが重複して登録されてしまう
ために発生したものでした.
これまでのロック回避処理は
<バックエンド> <レプリケーションサーバ>
-----------------------------------------------------------------------
(1)クエリーを受け付ける
(2)ロックを検知する
(3)バックエンドのループを抜ける
(4)レプリケーションサーバにロック検知を通知する
(5)ロック開放待ちに登録し,順番を待つ
(6)順番が来れば再度クエリーを投げる
を繰り返していましたが,
今回の変更では
<バックエンド> <レプリケーションサーバ>
-----------------------------------------------------------------------
(1)クエリーを受け付ける
(2)ロックを検知する
(3)レプリケーションサーバにロック検知を通知する
(4)ロック開放待ちに登録し,順番を待つ
(5)順番がくればリトライ通知を返す
(6)ロックを取得できるか,リトライする
という感じに変更しました.
個人的には
・ロック競合回避のループが小さくなった
・パッチの箇所が減った
というメリットが嬉しいです.
まずは,お試しください.
=============================
三谷 篤<mitani @ sraw.co.jp>
=============================
pgcluster メーリングリストの案内