关于cache tier刷盘的问题

L版本,cache tier在flush时,某些情况下要删除后端pool上的对象数据,代码在PrimaryLogPg.cc中的start_flush函数,不知道原因是什么。貌似那一大段注释("In general, we need to send a delete and a copyfrom......")解释了原因,但是看不懂,有大牛知道是怎么回事么?
2017-12-06 14:23 添加评论 分享
已邀请:
0

messagezsl - IT Man

赞同来自:

我也有同样的问题啊!

请各位大牛指导下吧!
0

jacky_yeah - 一句话介绍

赞同来自:

如代码start_flush,貌似其原理是这样的:
比如现在tier中有6[6,5,4]{6[6,5],4[4]},也就是存在head,clone6[6,5],clone4[4],同时后端pool没有任何对象
当刷clone4时,snapc=3[],dsnapc=0[],0<3,这时候就需要下发一个delete到后端(删除的都是head对象)
但如果刷clone6时,snapc=4[4],dsnapc=4[4],4=4,就不需要delete。(这里如果删除了快照5,则snapc=5[4],dsnapc=4[4],4<5,就需要delete)
刷head对象也不需要delete。

从代码看总结就是:如果待刷clone(或head)的下一个clone之前的那个快照存在(没有被删除),则不需要发delete,否则需要

但是原因是什么呢?感觉完全没有必要delete的

要回复问题请先登录注册

退出全屏模式 全屏模式 回复