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