平成17年春ソフ開午後II

しばらく眺めていると問1のところがようやく分かりました。まず前提として、ログの書き込み→商品データの書き込み→買物かごデータの書き込みという順番で更新が行われています。そんで障害が発生した場合ですが、更新の順番からいくと、(1)商品データの書き込みが行われる前に起こった場合と、(2)買物かごデータの書き込みが行われた後に起こった場合は別にどうでもよいです。

(2)の場合は両方とも更新が終わってますし、(1)の場合は買物かごに入れたものがキャンセルされることになりますが、データの不整合は起きていないからです。データの不整合が起こる場合は、まさに商品データの更新と買物かごデータの更新の途中で障害が発生したときです。商品データだけ更新され、買物かごデータは更新されなかったという状態になります。これをふまえて、商品データと買物かごデータの内容を両方とも更新前に戻すか、あるいは両方とも更新後に修正する回復処理が必要になります。

商品データだけ更新されたと仮定します。方法1の更新前に合わせるという処理だと、商品データの内容を前に戻して、買物かごデータは何もしません(もともと更新されてないので)方法2の更新後に合わせるという処理だと、商品データの内容は何もせず、買物かごデータの内容を更新後のものに書き換えます。

方法1は商品データを書き換え、買物かごには何もしない
方法2は商品データには何もせず、買物かごを書き換える

ということで a と b はこれで分かりました。c, d, e, f はこれに基づいて等符号が合うように選択すれば大丈夫っぽいです。