Invalidate raft member by fetching from leader

pull/3372/head
Jason Wilder 2015-07-22 16:13:22 -06:00
parent 47b8de7ce8
commit e9044166d6
1 changed files with 30 additions and 1 deletions

View File

@ -42,8 +42,37 @@ type localRaft struct {
raftLayer *raftLayer
}
func (r *localRaft) updateMetaData(ms *Data) {
if ms == nil {
return
}
updated := false
r.store.mu.RLock()
if ms.Index > r.store.data.Index {
updated = true
}
r.store.mu.RUnlock()
if updated {
r.store.Logger.Printf("Updating metastore to term=%v index=%v", ms.Term, ms.Index)
r.store.mu.Lock()
r.store.data = ms
r.store.mu.Unlock()
}
}
func (r *localRaft) invalidate() error {
time.Sleep(time.Second)
if r.store.IsLeader() {
return nil
}
ms, err := r.store.rpc.fetchMetaData(false)
if err != nil {
return err
}
r.updateMetaData(ms)
return nil
}