KFS代码分析2(meta元数据持久化)

KFS的元数据持久化是依赖checkpoint和operation log结合来工作的,其中checkpoint顾名思义保存的是某个点内存的状态,operation log记录的是对元数据修改的操作日志。

使用checkpoint+log的设计
(1)    元数据信息必须要持久化,否则掉电或者人工重启之后该信息丢失
(2)    便于快速重启,可以从最近的一个cp中快速构建内存状态,加上该cp之后的log就可以完整地构建内存

读写checkpointlog的过程

Metaserver启动时的内存构建:

Startup.cc调用rebuild函数

(1)       如果之前已经有了checkpoint,从checkpoint里重建内存树,否则新建一棵内存树

(2)       在内存中replaycheckpoint之后的所有operation log

MetaServer运行时写入新的checkpoint

logcompactor_main.ccmain函数调用,应该是以调用另一个进程的方式来执行,猜想是Metaserver进程会定时调用该进程

(1)       根据旧的checkpoint在内存中生成状态

(2)       在内存中replay之后的op log

(3)       将此时的内存状态写入新的checkpoint

MetaServer运行时写入新的log

logger.cc来写入新log,看了代码应该是每次修改了元信息的操作,都会将这条op log写入磁盘,虽然性能不高,但是比较可靠(之前也自己写过日志库,使用的是两个buffer交换写入,这样比较高效一些)

你可能感兴趣的:(KFS代码分析2(meta元数据持久化))