RecoveryQueue包含三个集合:file_recover_queue(保存待进行recover操作的CInode集合)、file_recover_queue_front(保存优先待进行recover操作的CInode集合)、file_recovering(保存正在进行recover操作的CInode集合)。一个Filter类,该类用于执行实际的recover操作。
RecoveryQueue::prioritize()
|__待进行recover的CInode已经在file_recovering集合内
|__直接返回
|__待进行recover的CInode已经在file_recover_queue集合内
|__将CInode插入到file_recover_queue_front集合
RecoveryQueue::enqueue()
|__将待进行recover的CInode插入到file_recover_queue集合
RecoveryQueue::advance()
|__检查file_recovering集合的大小是否小雨mds_max_file_recover
|__从file_recover_queue_front集合获取待recover的CInode
|__RecoveryQueue::_start()
|__从file_recover_queue集合获取待recover的CInode
|__RecoveryQueue::_start()
RecoveryQueue::_start()
|__从CInode上获取projected inode信息
|__将CInode插入到file_recovering集合
|__创建C_MDC_Recover类对象,该类对象在finish()函数中执行RecoveryQueue::_recovered()回调函数
|__Filter::probe() 调用Filter的probe()函数执行实际的Recovery操作且执行完成后调用C_MDC_Recover::finish()函数
RecoveryQueue::_recovered()
|__将恢复完的CInode从file_recovering集合中删除
|__CInode::state_clear(STATE_RECOVERING)
|__RecoveryQueue::advance() 找到下一个待执行recovery的CInode