/cxxraft

一个raft C++17实现

Primary LanguageC++Mozilla Public License 2.0MPL-2.0

简单的raft C++实现

cxxraft实现的特性有:
* 选举和心跳
* 日志副本
* 基于WAL的持久化
* batch RPC
* 快速恢复
* 协程并发
* 不可靠网络模拟(目前仅供config debug使用)

测试部分是从MIT6.824中test_test.go文件适配过来的,详见test目录
你可以从中了解如何使用和改造raft,以及哪些需要注意的case

具体实现已经集成了我自己写的其它轮子,作为基础组件:
* [json库](https://github.com/Caturra000/vsJSON)
* [日志库](https://github.com/Caturra000/dLog)
* [协程库](https://github.com/Caturra000/co)
* [RPC库](https://github.com/Caturra000/tRPC)

只能运行在Linux x86-64环境,且编译要求gcc全家桶,C++17以上标准

要打log的话需要添加编译选项`-DCXXRAFT_FLAG_DLOG_ENABLE`

头文件目录默认`-Icxxraft`

TODO & 吐槽
* 简化代码:注释和log比算法实现本身占比还要多了,以及一些私有接口是写得相当繁琐
* tRPC调整:在超时管理上RPC仍然是不够灵活处理,需要修改,但我还没想好怎么改
* 找bug:你知道port一堆go测试文件有多累多耗费时间吗(要是能对着抄就好了,然而并不能),难免有些地方存在疏漏