使用Translog 来恢复 fileSystem cache丢失的数据
索引的恢复分为以下几种:
1. EXISTING_STORE : 主分片从本地恢复
1.1 启动一个新的线程池,执行主分片的恢复。调用recoverFromStore
1.2 先判断canRecover: 索引的分片不能是closed,当前不能是主分片,必须是副分片
1.3 然后就是从该shard的store中恢复数据,读取最后一次提交的分段信息,获取其中的版本号,更新当前索引版本
1.4 verify index : 检查索引是否损坏
1.5 调用 indexShard.performTranslogRecovery(indexShouldExists); 从transLog中恢复索引数据
根据最后一次提交的信息作为快照,来确定事务日志中有哪些数据需要重放,然后调用flush方法把索引数据刷入磁盘。
1.6 进入Finalize,把缓冲也就是index Buffer的数据,写入到文件缓存 fileSystem cache,但是不刷盘
1.7 最后再次执行refresh,把分片状态更新为DONE
2.PEER :副分片从远程主分片恢复
恢复流程图如下:
3.SNAPSHOT : 从快照恢复
4.LOCAL_SHARDS:从本节点的其他分片恢复 (shrink情况)