【ふぇんしんぐとーくん】
フェンシングトークン とは?
公開:
💡 古い担当者の書き込みを、保存先で止める
ロックやリーダーの取得ごとに増える番号を操作に付け、保存先で古い担当者の操作を拒む仕組み。番号の発行だけでなく、操作先での検査が欠かせない。
📌 このページのポイント
- 新しい取得には以前より大きな番号を発行する。必ず1ずつ増える必要はない
- 保存先は受理済みの最大番号を記録し、それより小さい番号の操作を拒む
- 番号の検査・最大値の更新・書き込みを競合に対して一体として行う必要がある
- ロックの有効期限検査や操作の重複排除とは別。保存先が検査しなければ防御にならない
ロックを取れば、同時に書かれる心配はないんじゃないの?
期限付きロックでは、処理が長く止まっている間に期限が切れることがあるよ。別の担当者がロックを取ったあと、古い担当者が再開して書こうとする。手元で期限を確認しても、その直後に停止する可能性が残るんだ。
古い担当者をどうやって見分けるの?
取得ごとに単調に増えるフェンシングトークンを渡すんだ。古い担当者が33、新しい担当者が34という具合だよ。番号に飛びがあってもよく、同じ取得の操作には同じ番号を付けられる。
番号を付けるだけで止められるの?
保存先の協力が必要だよ。保存先が34の操作を受理したあとに33が来たら拒否する。検査と記録と書き込みの間に別の操作が割り込んで矛盾しないように、ひとまとまりの処理として実装するんだ。
34がまだ保存先に届いていなくても、33は拒否されるの?
最大番号だけを検査する方式なら、必ず拒否されるとは限らないよ。この方式は「新しい番号を受理したあとに古い番号へ戻らない」ことを守る。保存先がロックの期限を知る仕組みとは区別してね。
同じ34の操作が2回届いた場合は?
同じ取得で複数回書けるよう、同じ番号を許可する設計もある。だからフェンシングだけで二重処理は防げないよ。必要なら操作IDによる重複排除も用意し、番号が再起動や再作成で巻き戻らない設計にするんだ。
まとめ:ざっくりこれだけ覚えればOK!
「フェンシングトークン」は「古い担当者の書き込みを、保存先で止める」と押さえておこう!
📖 おまけ:英語の意味
「fencing token」 = 古い操作を締め出すための識別子
💬 fencing tokenは「古い操作を締め出すための識別子」という意味の表現だよ。