Merge pull request #2127 from hashicorp/b-remote-consuls-locking

Ensure locking of `Server`'s `remoteConsuls`.
This commit is contained in:
James Phillips 2016-06-21 10:00:04 -07:00 committed by GitHub
commit 8358df599d
2 changed files with 10 additions and 1 deletions

View File

@ -260,7 +260,13 @@ func (s *Server) globalRPC(method string, args interface{},
respCh := make(chan interface{})
// Make a new request into each datacenter
s.remoteLock.RLock()
dcs := make([]string, 0, len(s.remoteConsuls))
for dc, _ := range s.remoteConsuls {
dcs = append(dcs, dc)
}
s.remoteLock.RUnlock()
for _, dc := range dcs {
go func(dc string) {
rr := reply.New()
if err := s.forwardDC(method, dc, args, &rr); err != nil {

View File

@ -731,13 +731,16 @@ func (s *Server) Stats() map[string]map[string]string {
toString := func(v uint64) string {
return strconv.FormatUint(v, 10)
}
s.remoteLock.RLock()
numKnownDCs := len(s.remoteConsuls)
s.remoteLock.RUnlock()
stats := map[string]map[string]string{
"consul": map[string]string{
"server": "true",
"leader": fmt.Sprintf("%v", s.IsLeader()),
"leader_addr": s.raft.Leader(),
"bootstrap": fmt.Sprintf("%v", s.config.Bootstrap),
"known_datacenters": toString(uint64(len(s.remoteConsuls))),
"known_datacenters": toString(uint64(numKnownDCs)),
},
"raft": s.raft.Stats(),
"serf_lan": s.serfLAN.Stats(),