Merge pull request #3637 from yichengq/run-snapshot

etcdserver: get existing snapshot instead of requesting one
This commit is contained in:
Yicheng Qin
2015-10-05 14:57:03 -07:00
2 changed files with 7 additions and 3 deletions

View File

@@ -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{})

View File

@@ -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()