From e9044166d6822fc015afb4ce804eb97d8ced844d Mon Sep 17 00:00:00 2001 From: Jason Wilder Date: Wed, 22 Jul 2015 16:13:22 -0600 Subject: [PATCH] Invalidate raft member by fetching from leader --- meta/state.go | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/meta/state.go b/meta/state.go index 164f76702d..be7647ce48 100644 --- a/meta/state.go +++ b/meta/state.go @@ -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 }