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

Ensure locking of `Server`'s `remoteConsuls`.
pull/1566/head
James Phillips 9 years ago committed by GitHub
commit 09cfda47ed

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

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

Loading…
Cancel
Save