From 72e2e1a6f2a78d0042e6813f29a8ff983bfa668a Mon Sep 17 00:00:00 2001 From: Jason Wilder Date: Fri, 17 Jul 2015 12:09:07 -0600 Subject: [PATCH] Move addPeer to raft state --- meta/state.go | 24 ++++++++++++++++++++++++ meta/store.go | 14 +------------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/meta/state.go b/meta/state.go index c8ca64e521..2a3679311f 100644 --- a/meta/state.go +++ b/meta/state.go @@ -24,6 +24,7 @@ type raftState interface { raftEnabled() bool sync(index uint64, timeout time.Duration) error setPeers(addrs []string) error + addPeer(addr string) error invalidate() error close() error } @@ -157,6 +158,24 @@ func (r *localRaft) sync(index uint64, timeout time.Duration) error { } } +// addPeer adds addr to the list of peers in the cluster. +func (r *localRaft) addPeer(addr string) error { + s := r.store + peers, err := s.peerStore.Peers() + if err != nil { + return err + } + + if len(peers) >= 3 { + return nil + } + + if fut := s.raft.AddPeer(addr); fut.Error() != nil { + return fut.Error() + } + return nil +} + // setPeers sets a list of peers in the cluster. func (r *localRaft) setPeers(addrs []string) error { a := make([]string, len(addrs)) @@ -228,6 +247,11 @@ func (r *remoteRaft) setPeers(addrs []string) error { return nil } +// addPeer adds addr to the list of peers in the cluster. +func (r *remoteRaft) addPeer(addr string) error { + return fmt.Errorf("cannot add peer using remote raft") +} + func (r *remoteRaft) openRaft() error { go func() { for { diff --git a/meta/store.go b/meta/store.go index 46a0049b74..1c83742c95 100644 --- a/meta/store.go +++ b/meta/store.go @@ -447,19 +447,7 @@ func (s *Store) SetPeers(addrs []string) error { // AddPeer adds addr to the list of peers in the cluster. func (s *Store) AddPeer(addr string) error { - peers, err := s.peerStore.Peers() - if err != nil { - return err - } - - if len(peers) >= 3 { - return nil - } - - if fut := s.raft.AddPeer(addr); fut.Error() != nil { - return fut.Error() - } - return nil + return s.raftState.addPeer(addr) } // Peers returns the list of peers in the cluster.