Ensure locking of `Server`'s `remoteConsuls`.
This commit is contained in:
parent
37d642e018
commit
ebdb72ce0a
|
@ -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 {
|
||||
|
|
|
@ -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(),
|
||||
|
|
Loading…
Reference in New Issue