Posted on 2013-10-24 01:03
whspecial 阅读(1245)
评论(0) 编辑 收藏 引用 所属分类:
KFS分析
KFS的元数据持久化是依赖checkpoint和operation log结合来工作的,其中checkpoint顾名思义保存的是某个点内存的状态,operation log记录的是对元数据修改的操作日志。
使用checkpoint+log的设计
(1) 元数据信息必须要持久化,否则掉电或者人工重启之后该信息丢失
(2) 便于快速重启,可以从最近的一个cp中快速构建内存状态,加上该cp之后的log就可以完整地构建内存
读写checkpoint和log的过程
Metaserver启动时的内存构建:
在Startup.cc调用rebuild函数
(1) 如果之前已经有了checkpoint,从checkpoint里重建内存树,否则新建一棵内存树
(2) 在内存中replay该checkpoint之后的所有operation log
MetaServer运行时写入新的checkpoint:
logcompactor_main.cc的main函数调用,应该是以调用另一个进程的方式来执行,猜想是Metaserver进程会定时调用该进程
(1) 根据旧的checkpoint在内存中生成状态
(2) 在内存中replay之后的op log
(3) 将此时的内存状态写入新的checkpoint
MetaServer运行时写入新的log:
由logger.cc来写入新log,看了代码应该是每次修改了元信息的操作,都会将这条op log写入磁盘,虽然性能不高,但是比较可靠(之前也自己写过日志库,使用的是两个buffer交换写入,这样比较高效一些)