ペーパーCORFU: A Distributed Shared Logは、削除メッセージを検証しない疑似コードでプロトコルを提示します。論文を引用するには:
Upon <delete,addr> request:
mark addr deleted
respond ack
これは、まだ書き込まれていないページを削除できることを意味します。また、クライアントが古いクラスター構成を使用してページを削除できることも意味します。これは、論文で提示されているプロトコルが削除を失う可能性があることを意味しませんか?
論文によると、CORFU はメモリ空間の最適化として、削除されたアドレスの最高水準点を維持します。削除を失う可能性がある場合、そのハイ ウォーターマークは移動せず、メモリが出血します。
ステート マシンのレプリケーションに CORFU を使用すると、ステート マシンのスナップショットを作成し、スナップショットまでのログを削除できます。削除を失う可能性がある場合、ログは実際には永遠に大きくなります。
検証なしで単に削除を適用するのではなく、実装で単純に削除を冪等にするだけでなく、次のように検証します。
Upon <delete,epoch,addr> request:
if epoch != s.epoch respond err_sealed
else respond according to addr status:
if written mark addr deleted, <ack>
if available, <err_unwritten>
if deleted, <ack>
それとも、何らかの形で安全性やパフォーマンスを損なうでしょうか?