Store
2017-01-08 18:56:52 0 举报
AI智能生成
Store
作者其他创作
大纲/内容
timeout
Tick::Raft
Store::on_raft_base_tick
遍历region_peers
peer.get_store().is_applying
否
peer.raft_group.tick()
peer.check_stale_state
StaleState::Valid
当前region id插入pending_raft_groups
StaleState::ToValidate
PdTask::ValidatePeer
pd_worker.schedule
当前region id插入pending_raft_groups
是
Store::register_raft_base_tick
Tick::RaftLogGc
Store::on_raft_gc_log_tick
Store::register_raft_gc_log_tick
Tick::SplitRegionCheck
Store::on_split_region_check_tick
split_check_worker.is_busy
是
register_split_region_check_tick
否
遍历region_peers
当前peer是否是leader
是
SplitCheckTask
split_check_worker.schedule
否
Store::register_split_region_check_tick
Tick::CompactCheck
Store::on_compact_check_tick
Store::register_compact_check_tick
Tick::PdHeartbeat
Store::on_pd_heartbeat_tick
遍历region_peers
peer.check_peers
判断peer是否是leader
是
Store::heartbeat_pd
PdTask::Heartbeat
pd_worker.schedule
否
Store::register_pd_heartbeat_tick
Tick::PdStoreHeartbeat
Store::on_pd_store_heartbeat_tick
Store::store_heartbeat_pd
PdTask::StoreHeartbeat
pd_worker.schedule
Store::register_pd_store_heartbeat_tick
Tick::SnapGc
Store::on_snap_mgr_gc
Store::register_snap_mgr_gc_tick
Tick::CompactLockCf
Store::on_compact_lock_cf
Store::register_compact_lock_cf_tick
初始化
Store::new
Store::init,初始化store,扫描engine的startkey,endkey,加载所有的region,peers,必要时启动snapshot
解析RegionLocalState
PeerState::Tombstone ,判断状态是过期状态不执行下一步
Peer::create,创建Peer
PeerState::Applying,判断状态是否
peer启动schedule_applying_snapshot
region_ranges插入key范围
region_peers插入region_id,peer
Store::clean_up
tick
Store::on_raft_ready
遍历pending_raft_groups,根据id从region_peers查找peer
Peer::handle_raft_ready
handle_raft_ready
Store::on_ready_result
ReadyResult.apply_snap_result
Store::on_ready_apply_snapshot
region_ranges删除prev_region
region_ranges插入region
ReadyResult.exec_results
ExecResult::ChangePeer
Store::on_ready_change_peer
根据region_id从region_peers查找peer
判断is_leader,如果返回true
Store::heartbeat_pd
判断是否是ConfChangeType::RemoveNode,如果true
Store::destroy_peer
ExecResult::CompactLog
Store::on_ready_compact_log
ExecResult::SplitRegion
Store::on_ready_split_region
根据new_region_id从region_peers中查找,peer的store,判断is_initialized,如果true,panic,不执行下一步
Peer::create,right
region_peers,根据region_id查找原来的peer,如果是leader
region_peers,根据region_id查找peer,report_split_pd
Store::heartbeat_pd,left
Store::heartbeat_pd,right
PdTask::ReportSplit
pd_worker.schedule
region_ranges,插入left
region_ranges,插入right
region_peers,插入new_region_id,new_peer
pending_regions clear
notify
Msg::RaftMessage
Store::on_raft_message
Store::is_raft_msg_valid,判断执行结果,如果返回false,直接返回,不进行下一步
从msg中取出region_id、from、to
比较to的storeid和当前storeid是否相同,不相同返回false
判断msg中是否有region_epoch,没有返回false
Message::get_is_tombstone,判断返回值,如果返回true不执行下一步
Store::handle_gc_peer_msg
msg中提取region_id
根据region_id在region_peers,查找peer
msg提取region_epoch,以前从当前peer的store中取出region_epoch对比,相同的话,就是需要删除peer
上一步判断结果是true的话,Store::destroy_peer
region_peers,删除region_id
region_ranges,删除endkey
Store::is_msg_stale,判断返回值,如果返回true不执行下一步
msg中提取region_id、region_epoch、from_peer的id
根据region_id在region_peers中查找peer
找到
比较region_epoch
没有找到
Store::maybe_create_peer,判断返回返回值,返回false,不执行下一步
从region_peers根据region_id查找peer
找到
peer_id和target_peer_id比较大小
peer_id小
是否正在applying,取消applying,设置stale_peer
peer_id大
不合法的消息,忽略
没找到
判断stale_peer是否有指向,如果有,destroy_peer
没有peer,message type策略
region_ranges区间查找msg中的start_key,end_key
Peer::replicate
region_peers插入创建好的peer
Store::check_snapshot
insert_peer_cache from
insert_peer_cache to
从region_peers得到peer
peer.step
Msg::RaftCmd
Store::propose_raft_command
util::get_uuid_from_req
msg中has_status_request,如果有不执行下一步
Store::execute_status_command
cb.call_box
Store::validate_region,如果返回错误,不执行下一步,cb.call_box
msg中提取region_id、peer_id
在region_peers通过region_id查找peer,如果不存在,返回错误,不执行下一步
peer不是leader,返回错误,不执行下一步
peer的peer_id和msg中的peer_id比较,不相下一步等出错,不执行下一步
peer.check_epoch,
通过region_id在region_peers查找peer
PendingCmd
peer.propose
pending_raft_groups插入region_id
Msg::Quit
shutdown
Msg::SplitCheckResult
Store::on_split_check_result
在region_peers通过region_id查找peer,判断是否是leader,如果不是leader,不执行下一步
判断peer的region的region_epoch,如果version不相等,不执行下一步
PdTask::AskSplit
pd_worker.schedule
执行完之后,发送RaftCmd类型消息到channel,AdminRequest
Msg::ReportSnapshot
Store::on_report_snapshot
Msg::ReportUnreachable
Store::on_unreachable
Msg::SnapshotStats
Store::store_heartbeat_pd
Msg::SnapGenRes
Store::on_snap_gen_res
0 条评论
下一页