panlei-coder
panlei-coder
1.方案: (1)如果数据库正常关闭,理论上是不需要进行日志回放的,因为数据库在关闭是会将内存数据刷盘,并将日志截断到最新的位置,这样就可以保证正常关闭下的节点启动是no-op的。那么在数据库非正常关闭时,节点启动如果加载了快照,只会是一个多余的操作,因为快照本身就是空的,只有snapshot_meta数据。所以,在节点启动的时候,第一次调用on_snapshot_load接口理论上是不需要进行快照的加载,需要对第一个启动和正常快照安装进行区分。但是有一点需要注意,节点在刚加入集群且没有数据时,它在初始化之后是不会加载本地的快照(因为快照文件夹是空的),所以在安装来自 leader 的快照时需要 LoadDBFromCheckpoint 过程。 (2)节点在启动的时候,它是按照快照中 snapshot_meta 记录的 last_applied_index 作为日志回放点,那么在故障重启时,节点需要过滤掉一些日志,这无疑是影响效率的。我们可以在节点调用 on_load_snapshot 开始位置就设置这个日志回放点的位置,根据 DB 中最小 flush-index 来设置(这里的逻辑需要进一步的完善)。 (3)braft 的 pr : https://github.com/pikiwidb/braft/pull/4 2.测试 因为获取 DB 中最小的 flush-index 目前还没有完善,所以在测试的时候将一个 DB 下...
将release和debug模式下生成的编译文件放到不同的文件夹下,方便进行编译模式的切换和重复编译
Finish README.MD and related technical documents according to the latest progress of the project.
1、命令: 主从 master:master init slave:slaveof ip port (learner) (如果检测到自己是followr,则先移除集群,再以learner的方式加入) slaveof no one 解除主从关系 braft leader:raft.cluster init follower:raft.cluster join ip:port (如果检测到自己是learner,则先解除主从关系,再重新加入集群) raft.cluster remove idx
优先合并:https://github.com/pikiwidb/braft/pull/8 braft 1、解决在真正生成快照时,snapshot meta 保存的成员配置信息和实际的快照数据不一致问题,可能导致新加入的节点跳过成员变更日志,出现配置信息不一致的问题。https://github.com/OpenAtomFoundation/pikiwidb/issues/385 2、修改 set_self_replay_point 接口为 set_last_applied_index_and_term。 ## Summary by CodeRabbit ## Summary by CodeRabbit - **新特性** - 在`PRaft`类中新增了一个用于根据索引获取配置的公共方法`GetConfigurationByIndex`,提升了配置条目的动态访问能力。 - 改进了快照元数据更新过程,以更准确地反映当前配置状态,包括活动和学习者节点。 - 更新了`braft`库的版本标签至`v1.1.2.1`,以确保使用更稳定的库版本。 - **样式** - 对`pikiwidb.conf`文件中的`raft-port-offset`和`use-raft`设置进行了微小的空格调整,确保配置一致性。 -...
### Description `class PConfig { public: PConfig(); ~PConfig() = default; bool LoadFromFile(const std::string& file_name); const std::string& ConfigFileName() const { return config_file_name_; } void Get(const std::string&, std::vector*) const; Status Set(std::string, const...