摘要: 1.概述 在rpc请求里,有了请求req就必然有回复resp。本文就来解析发送req的节点收到resp该怎么处理。 2.handle_peer_resp源码解析 void raft_server::handle_peer_resp(ptr<resp_msg>& resp, const ptr<rpc 阅读全文
posted @ 2024-11-26 09:09 TomGeller 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 1.概述 之前说过raft_server是cornerstone的核心,其中充满了很多req的发送,那么follower收到leader的req会怎么处理呢? 本文就是来解析cornerstone中处理req的源码。 2.process_req源码解析 ptr<resp_msg> raft_serv 阅读全文
posted @ 2024-11-25 14:36 TomGeller 阅读(83) 评论(0) 推荐(1) 编辑
摘要: 1.概述 cornerstone中核心即为raft_server的实现。 在raft里面有follower,leader,candidate三种角色,且角色身份还可以相互切换。 写三个类follower,leader,candidate显得没必要,因为三个类可以共享许多成员变量,如term,log_ 阅读全文
posted @ 2024-11-23 11:50 TomGeller 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 1.概述 delayed_task在cornerstone中充当一个base类,其延伸出的子类timer_task才是cornerstone用于实现定时器的类。 而scheduler是用于实现延时效果的调度器。 我们将按照delayed_task->timer_task->scheduler的顺序解 阅读全文
posted @ 2024-11-20 22:01 TomGeller 阅读(13) 评论(0) 推荐(0) 编辑
摘要: 1.概述 cornerstone中msg主要为resp_msg,req_msg类型。其中涉及到了oop中代码复用与封装、继承等优秀的设计思想,值得解析。 2.msg_base代码分析 class msg_base { private: ulong term_; msg_type type_; int 阅读全文
posted @ 2024-11-20 17:30 TomGeller 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 1.概述 asio_service是cornerstone中实现各种服务的工具,rpc通信属于其中的一部分,rpc通信主要由三个部分组成: asio_rpc_client,asio_rpc_listener,asio_rpc_session 。 cornerstone中的rpc并没有采用protob 阅读全文
posted @ 2024-10-31 17:23 TomGeller 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 1.概览: 谈到raft协议实现就绕不开网上流行的mit6.824,但其为go语言,官方没有lab的答案,框架也很晦涩难懂,且全网没有一个博客对其有清晰的解释,有的只是甩一堆名词然后直接贴没有任何注释的代码,非常不适合学习。 但是github上面的cornerstone是纯c++实现的一个非常优雅且 阅读全文
posted @ 2024-10-17 18:04 TomGeller 阅读(144) 评论(0) 推荐(1) 编辑