Comments (6)
重启后会先加载本地 snapshot (如果存在的话), 加载成功后会更新 LogManager 中的 _last_snapshot_id。
具体你看下具体的代码:
node 启动的时候初始化时,会调用 _snapshot_executor 的初始化。
Line 270 in bc9fb05
会注册一个 FirstSnapshotLoadDone
的任务
braft/src/braft/snapshot_executor.cpp
Lines 391 to 392 in bc9fb05
如果成功,则更新 _log_manager 的 _last_snapshot_id
braft/src/braft/snapshot_executor.cpp
Line 256 in bc9fb05
from braft.
我理解在加载完snapshot之后相关资源会被清理掉。那么第二次启动的时候并没有snapshot存在,这个时候怎么处理?
from braft.
我理解在加载完snapshot之后相关资源会被清理掉。
你指的 “相关资源清理掉” 的相关资源具体是指什么。 braft 节点会接收 leader 的快照,同时自身也会打快照。如果有快照产生,每个节点会保留至少一个最新的版本。
那么第二次启动的时候并没有snapshot存在,这个时候怎么处理?
如果之前产生过快照,每次重新启动都至少有一个快照存在本地,启动时会预先加载。除非用户自行强行删除,否则不存在产生了了快照,“那么第二次启动的时候并没有snapshot存在” 这种情况,否则会破坏 raft 协议的安全性要求。
from braft.
在测试,模拟一个副本数据完全丢失的情况。所以手动强行删除了一个副本上的所有数据
from braft.
模拟一个副本数据完全丢失
安全的做法是先从集群移除该节点(remove_peer), 清空该节点的持久化状态,重新 add_peer 进来 (最好是改变 peer_id 的 index,与原先区别)。
如果正确的话是不是意味着如果没有新增数据C每次重启时都要收一遍snapshot?
如果你这里的重启都是指的是删除所有数据,那么每次节点的状态都是空,是会做一遍 snapshot.
from braft.
模拟故障,所以不太好按照安全的做法处理。
只删一次数据,然后多次重启。
from braft.
Related Issues (20)
- prevote/vote中获取last_log_id()时,为什么需要去触发一下log flush呢,有什么考虑吗?是不是没有必要去做flush呢?
- iter->set_error_and_rollback()框架内不应该调用当前entry的done->Run(),应该由业务方统一处理(成功、失败都调用done->Run())
- Append entries cache 有设计文档吗
- 定制 snapshotReader 问题。 HOT 2
- braft 节点如何高性能判断是否是 leader 且在 lease 内? HOT 4
- check follower's log gap before transfer leader to it
- Unittest NodeTest.LeaderFailWithWitness is not stable. HOT 1
- 为什么不发布新tag了?最新的tag还是2021年的
- 在leader已经异常退出的时候, 如何快速选出新leader HOT 8
- Potential memory leak?
- NodeImpl::_mutex死锁 HOT 2
- NodeImpl重构
- 快照逻辑在极端场景下存在数据无法正常恢复的风险 HOT 1
- _leader_lease should also be considered when handling vote
- election timeout should be randomized again if campaign fails HOT 1
- election timer should be restarted after step down by term change
- _append_entries_in_fly的一些困惑 HOT 3
- leader can still accept read requests when transferring leader
- 数据同步失败
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from braft.