Peer
2017-01-08 10:38:33 4 举报
AI智能生成
peer
作者其他创作
大纲/内容
Peer
handle_raft_ready
raft_group.has_ready,返回true,继续执行下一步
raft_group.ready,得到Ready
Storage::handle_raft_ready
PeerStorage::handle_raft_ready,Ready
如果是snapshot
PeerStorage::apply_snapshot,上下文InvokeContext
PeerStorage::schedule_applying_snapshot
如果是entries
Ready中的hardstate保存到ctx.raft_state
ctx.raft_state和当前storage的raft_state不相等,表示需要将上次的raft_state持久化
InvokeContext::save_raft
ctx.apply_state和当前storage的apply_state不相等,表示需要将上次的apply_state持久化
InvokeContext::save_apply
如果是正在snapshot,需要删除Ready中的Commit index,防止在异步执行snapshot过程中,更新Commit Index
当前不处于snapshot状态Peer::handle_raft_commit_entries
遍历committed_entries
EntryType::EntryNormal
Peer::handle_raft_entry_normal
反序列化成RaftCmdRequest
Peer::process_raft_cmd
Peer::find_cb根据uuid找到回调函数,最后执行,
Peer::apply_raft_cmd
ExecContext
Peer::exec_raft_cmd
admin req
Peer::exec_admin_cmd
AdminCmdType::ChangePeer
Peer::exec_change_peer
AdminCmdType::Split
Peer::exec_split
AdminCmdType::CompactLog
Peer::exec_compact_log
AdminCmdType::TransferLeader
AdminCmdType::InvalidAdmin
RaftCmdResponse
非admin req
Peer::exec_write_cmd
CmdType::Get
Peer::do_get
有cf
snapshot.get_value_cf
无cf
snapshot.get_value
CmdType::Put
Peer::do_put
get_cf_handle.put_cf
put
CmdType::Delete
Peer::do_delete
get_cf_handle,delete_cf
delete
CmdType::Snap
Peer::do_snap
CmdType::Invalid
判断exec_result类型
ExecResult::ChangePeer
更新region
ExecResult::CompactLog
ExecResult::SplitRegion
EntryType::EntryConfChange
Peer::handle_raft_entry_conf_change
Raft.apply_conf_change
raft_group.advance
销毁
destroy
创建
create,bootstrap/split/merge等调用,region信息需要在store中存储
Peer::new
replicate,创建时候,只需要知道region_id和peer_id,applying snapshot之后元信息自动存储
PeerStorage::new
raft::Config
RawNode::new
peer.raft_group.campaign
Peer::propose
pending_cmds根据uuid查找,如果找到就不执行下一步
Peer::is_local_read,返回true
span style=\
raft_group.raft.in_lease
request 长度为0
store.applied_index_term和raft_group.raft.term不相等
遍历requests,不等于CmdType::Snap并且不等于CmdType::Get
Peer::check_epoch
has_admin_request
AdminCmdType::ChangePeer
ConfChangeType::AddNode
ConfChangeType::RemoveNode
AdminCmdType::Split
Err
get_transfer_leader_cmd,判断返回值,返回不为空,需要执行下一步
req.has_admin_request,没有返回None
Peer::transfer_leader
raft_group.transfer_leader
get_change_peer_cmd,判断返回值,返回不为空,需要执行下一步
req.has_change_peer,没有返回None
Peer::propose_conf_change
eraftpb::ConfChange::new
set_node_id
set_context
Peer::propose_normal
raft_group.propose
pending_cmds.append_normal
send
MessageType::MsgAppend
MessageType::MsgAppendResponse
MessageType::MsgRequestVote
MessageType::MsgRequestVoteResponse
MessageType::MsgSnapshot
MessageType::MsgHeartbeat
MessageType::MsgHeartbeatResponse
MessageType::MsgTransferLeader
MessageType::MsgTimeoutNow
Peer::send_raft_message
RaftMessage::new
set_region_id
set_region_epoch
set_from_peer
set_to_peer
0 条评论
回复 删除
下一页