2

论文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>

还是会以某种方式损害安全性或性能?

4

0 回答 0