Git Product home page Git Product logo

Comments (6)

ehds avatar ehds commented on August 28, 2024

重启后会先加载本地 snapshot (如果存在的话), 加载成功后会更新 LogManager 中的 _last_snapshot_id。
具体你看下具体的代码:

node 启动的时候初始化时,会调用 _snapshot_executor 的初始化。

return _snapshot_executor->init(opt);

会注册一个 FirstSnapshotLoadDone 的任务

FirstSnapshotLoadDone done(this, reader);
CHECK_EQ(0, _fsm_caller->on_snapshot_load(&done));

如果成功,则更新 _log_manager 的 _last_snapshot_id

_log_manager->set_snapshot(&_loading_snapshot_meta);

from braft.

cangfengzhs avatar cangfengzhs commented on August 28, 2024

我理解在加载完snapshot之后相关资源会被清理掉。那么第二次启动的时候并没有snapshot存在,这个时候怎么处理?

from braft.

ehds avatar ehds commented on August 28, 2024

我理解在加载完snapshot之后相关资源会被清理掉。

你指的 “相关资源清理掉” 的相关资源具体是指什么。 braft 节点会接收 leader 的快照,同时自身也会打快照。如果有快照产生,每个节点会保留至少一个最新的版本。

那么第二次启动的时候并没有snapshot存在,这个时候怎么处理?

如果之前产生过快照,每次重新启动都至少有一个快照存在本地,启动时会预先加载。除非用户自行强行删除,否则不存在产生了了快照,“那么第二次启动的时候并没有snapshot存在” 这种情况,否则会破坏 raft 协议的安全性要求。

from braft.

cangfengzhs avatar cangfengzhs commented on August 28, 2024

在测试,模拟一个副本数据完全丢失的情况。所以手动强行删除了一个副本上的所有数据

from braft.

ehds avatar ehds commented on August 28, 2024

模拟一个副本数据完全丢失

安全的做法是先从集群移除该节点(remove_peer), 清空该节点的持久化状态,重新 add_peer 进来 (最好是改变 peer_id 的 index,与原先区别)。

如果正确的话是不是意味着如果没有新增数据C每次重启时都要收一遍snapshot?

如果你这里的重启都是指的是删除所有数据,那么每次节点的状态都是空,是会做一遍 snapshot.

from braft.

cangfengzhs avatar cangfengzhs commented on August 28, 2024

模拟故障,所以不太好按照安全的做法处理。

只删一次数据,然后多次重启。

from braft.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.