mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #3637 from yichengq/run-snapshot
etcdserver: get existing snapshot instead of requesting one
This commit is contained in:
@@ -120,6 +120,7 @@ type raftNode struct {
|
||||
// TODO: Ideally raftNode should get rid of the passed in server structure.
|
||||
func (r *raftNode) start(s *EtcdServer) {
|
||||
r.s = s
|
||||
r.raftStorage.raftStarted = true
|
||||
r.applyc = make(chan apply)
|
||||
r.stopped = make(chan struct{})
|
||||
r.done = make(chan struct{})
|
||||
|
||||
@@ -24,6 +24,9 @@ type raftStorage struct {
|
||||
// snapStore is the place to request snapshot when v3demo is enabled.
|
||||
// If snapStore is nil, it uses the snapshot saved in MemoryStorage.
|
||||
snapStore *snapshotStore
|
||||
// raftStarted indicates whether raft starts to function. If not, it cannot
|
||||
// request snapshot, and should get snapshot from MemoryStorage.
|
||||
raftStarted bool
|
||||
}
|
||||
|
||||
func newRaftStorage() *raftStorage {
|
||||
@@ -46,11 +49,11 @@ func (rs *raftStorage) raftsnap() chan<- raftpb.Snapshot {
|
||||
return rs.snapStore.raftsnapc
|
||||
}
|
||||
|
||||
// Snapshot returns raft snapshot. If snapStore is nil, this method
|
||||
// returns snapshot saved in MemoryStorage. If snapStore exists, this method
|
||||
// Snapshot returns raft snapshot. If snapStore is nil or raft is not started, this method
|
||||
// returns snapshot saved in MemoryStorage. Otherwise, this method
|
||||
// returns snapshot from snapStore.
|
||||
func (rs *raftStorage) Snapshot() (raftpb.Snapshot, error) {
|
||||
if rs.snapStore == nil {
|
||||
if rs.snapStore == nil || !rs.raftStarted {
|
||||
return rs.MemoryStorage.Snapshot()
|
||||
}
|
||||
snap, err := rs.snapStore.getSnap()
|
||||
|
||||
Reference in New Issue
Block a user