Peer
2017-01-08 10:38:33 5 举报
AI智能生成
peer
作者其他创作
大纲/内容
handle_raft_ready
Storage.check_applying_snap,如果正在applying snapshot,不继续下一步
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
PeerStorage::append,上下文InvokeContext
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
有cf
get_cf_handle.put_cf
无cf
put
CmdType::Delete
Peer::do_delete
有cf
get_cf_handle,delete_cf
无cf
delete
CmdType::Snap
Peer::do_snap
CmdType::Invalid
RaftCmdResponse
保存PeerStorage.apply_state,PeerStorage.applied_index_term
判断exec_result类型
ExecResult::ChangePeer
更新region
ExecResult::CompactLog
ExecResult::SplitRegion
更新region
EntryType::EntryConfChange
Peer::handle_raft_entry_conf_change
Peer::process_raft_cmd
Raft.apply_conf_change
raft_group.advance
销毁
destroy
创建
create,bootstrap/split/merge等调用,region信息需要在store中存储
Peer::new
replicate,创建时候,只需要知道region_id和peer_id,applying snapshot之后元信息自动存储
Peer::new
Peer::new
PeerStorage::new
raft::Config
RawNode::new
peer.raft_group.campaign
Peer::propose
pending_cmds根据uuid查找,如果找到就不执行下一步
Peer::is_local_read,返回true
request header中read_quorum设置
raft_group.raft.in_lease
request 长度为0
store.applied_index_term和raft_group.raft.term不相等
遍历requests,不等于CmdType::Snap并且不等于CmdType::Get
Peer::exec_raft_cmd
Peer::check_epoch
has_admin_request
Peer::exec_admin_cmd
AdminCmdType::ChangePeer
Peer::exec_change_peer
ConfChangeType::AddNode
ConfChangeType::RemoveNode
AdminCmdType::Split
Peer::exec_split
AdminCmdType::CompactLog
Peer::exec_compact_log
AdminCmdType::TransferLeader
Err
AdminCmdType::InvalidAdmin
Err
Peer::exec_write_cmd
CmdType::Get
Peer::do_get
CmdType::Put
Peer::do_put
CmdType::Delete
Peer::do_delete
CmdType::Snap
Peer::do_snap
CmdType::Invalid
Err
get_transfer_leader_cmd,判断返回值,返回不为空,需要执行下一步
req.has_admin_request,没有返回None
req.has_transfer_leader,没有返回Node
req.get_transfer_leader,返回结果
Peer::is_tranfer_leader_allowed,返回true才执行后续
Peer::transfer_leader
raft_group.transfer_leader
get_change_peer_cmd,判断返回值,返回不为空,需要执行下一步
req.has_admin_request,没有返回None
req.has_change_peer,没有返回None
req.get_change_peer,返回结果
Peer::propose_conf_change
eraftpb::ConfChange::new
set_change_type,
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 条评论
下一页