是否能获得索引
文件segment_N
的文件名?
索引目录中
是否还有未处理
的索引文件?
索引文件是否
满足要求?
取出一个索引文件
初始化索引文件的
计数引用
索引文件是否为segments_N?
否
否
开始
SegmentInfos
是
是
是否出现异常?
处理异常
根据segments_N获取一个新的SegmentInfos
两个SegmentInfos
的generation是否相同?
根据新的SegmentInfos
获取CommitPoint
添加CommitPoint到CommitPoint集合commits中
增加新的SegmentInfos对应的索引文件的计数
是
否
另CommitPoint为当前提交点currentCommitPoint
是否获得StandardDirectoryReader?
执行检查点(checkPoint)工作
对commits集合进行排序
更新SegmentInfos的metaData
删除计数为0的索引文件
执行索引删除策略
执行检查点(checkPoint)工作
执行CommitPoint的删除工作
结束
否
是
是
否
是
否
是
否