Browse Source

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
parent
commit
09cfda47ed
  1. 6
      consul/rpc.go
  2. 5
      consul/server.go

6
consul/rpc.go

@ -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 {

5
consul/server.go

@ -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…
Cancel
Save