Comments (4)
So the problem seems to be in raft.runFSM(), the lastIndex & lastTerm variables are local to the func, are only set when there's a commit or a restore called for, but the initial load of the snapshot at startup is done outside of that via restoreSnapshot(). so if the first request that runFSM() sees is to create a snapshot, it hasn't set lastIndex & lastTerm yet.
from raft.
@superfell This is an interesting one. I'm not sure what the correct behavior is in this case. The snapshot really is capturing nothing if there is no commits or restores prior to this, so that part is correct. We should be calling restoreSnapshot()
before returning the Raft
instance, so I'm not even sure how this is possible.
from raft.
From what i could tell, the initial snapshot load at startup doesn't go through the FSM goroutine.
It seems like either it should spot this and return an error for the snapshot attempt (as there's nothing new that would require a snapshot), or the FSM goroutine should initialize it index/term local vars from the Raft instance. I'd be happy to code up either solution if you have a prefernce [i mostly lean towards having the snapshot attempt return an error]
from raft.
@superfell Agreed, it is strange to snapshot when there is no data. Lets go with the error return.
from raft.
Related Issues (20)
- raft.GetConfiguration() - runtime error: invalid memory address or nil pointer dereference HOT 5
- How to bootstrap a raft cluster with a fixed node setting? HOT 15
- Using node heartbeats in business logic HOT 1
- New node not receiving raft.Configuration after leader calls AddVoter HOT 3
- Cluster unable to elect a leader after restarting a follower and stopping the leader while the follower is down HOT 2
- How to costumize the Logger Name HOT 2
- Is there a way to make Snapshotting optional? HOT 2
- Your repo doesn't have documentation!
- Enhancement: persist commit index in LogStore to accelerate recovery HOT 4
- Test failed on latest branch: TestRaft_LeadershipTransferToBehindServer HOT 1
- Why the subsequent nodes not join the cluster HOT 2
- Why after calling RemoveServer for a node does it still continue to heartbeat it? HOT 2
- getting notified on losing follower heartbeat HOT 5
- Push to the notify channel and shutdown sign arriving,it is pick one of two but actually nobody know which one HOT 5
- Panic split-brain in appendEntries call HOT 2
- How to observe on follower connecting to cluster ? HOT 1
- How to bootstrap a raft cluster with a single node? HOT 2
- Use pebbledb as raft logstore & stablestore, restart raft cluster nodes all pebbledb data will be lost? HOT 13
- Ability for peers to denote others/themselves as too laggy to accept requests HOT 8
- Inconsistent Raft Latency on Different Infrastructures HOT 8
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 raft.