Results 39 comments of Dongsheng He

> 应该依旧会带来空间的浪费吧 我们之前的做法是在 SaveSnapshot 的时候通过 RocksDB 的 snapshot 拿到当时的状态,然后遍历 DBIter 写到 SSTFile。这中做法虽然能保证snapshot的正确性,但是会有你提到的空间浪费,数据的大小最坏的情况可能占有实际 数据量3倍(2个快照+1个数据库文件)。而且 Iter 也会有很大的读开销。 后面我们使用的是 RocksDB 提供的 CheckPoint 功能,也就是你说的硬链接的方式。这种方式的好处是 快照里面的数据文件 和此时数据库的数据文件 有相同 FileNumber 的是共享的。只有不同的文件(即 snapshot 之后新增/删除 也就是 由 Flush/Compaction...

这种实现有个问题是 rocksdb 的 wal 压力会比较大,相当于每次写都要把当前 applyindex 写一次到wal。

> https://github.com/sofastack/sofa-jraft/blob/19ed179e02ee9108adc0bbf66badb47f62c62af8/jraft-core/src/main/java/com/alipay/sofa/jraft/core/NodeImpl.java#L1291 > > 在JRaft的stepdown中有更新updateLastLeaderTimestamp,保证了之后的handleElectionTimeout在尝试选举前检查lastLeaderTimestamp间隔小于选举间隔。 > > 在Braft中起到类似作用的应该是FollowerLease,但是在step_down函数中,并没有调用_follower_lease.renew()。 > > 是有其他机制来避免我上面说的问题吗 从目前实现来看,当`raft_enable_leader_lease` 开启时,的确可能发生上述现象。即节点刚投票成功后,等待 leader 的心跳前,如果此时 `election_timer` 超时, 或者已经超时,只不过在等待锁。那么该节点可以成功发起 `PrevVote`, 从而触发下一个 term 的选举, 而上一个 term 的 leader 却还在 lease有效期内。 但是在实际情况中,该问题不会导致严重的后果。因为当 leader...

https://github.com/apache/brpc/pull/2139 https://github.com/apache/brpc/pull/1560 brpc 应该已经支持了。

Why template branch includes homework?

We should unify code style, for examlpe [google-cpp-style](https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/), [google-python-style](https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/contents/).

> 没开-faligned-new还用new来动态分配__attribute__((aligned()))标记的类, 真是aligned了个寂寞 > 是的,这里还有另外一个隐含的问题。 如果 brpc 作为第三方库,编译时未加 -faligned-new, 但项目中使用了其头文件中的声明的某个类(cache line alignment),并且项目编译使用了 aligned_new, 而该类的析构函数(在 brpc 三方库中定义)调用 delete 释放对象空间时也不会调用 ```c++ void operator delete ( void* ptr, std::size_t sz, std::align_val_t al )...

> > I met the same problem. I compile my project in C++17, while the compilation option for BRPC is C++11, so ASAN detects the dismatch between new and delete....

try https://github.com/apache/brpc/pull/2732