etcdserver: copy stats instead of marshaling with lock

release-2.0
Jonathan Boulle 2014-10-16 19:49:35 -07:00
parent c28907ba95
commit 233e940410
1 changed files with 6 additions and 5 deletions

View File

@ -40,11 +40,12 @@ type ServerStats struct {
func (ss *ServerStats) JSON() []byte {
ss.Lock()
defer ss.Unlock()
ss.LeaderInfo.Uptime = time.Now().Sub(ss.LeaderInfo.StartTime).String()
ss.SendingPkgRate, ss.SendingBandwidthRate = ss.SendRates()
ss.RecvingPkgRate, ss.RecvingBandwidthRate = ss.RecvRates()
b, err := json.Marshal(ss)
stats := *ss
ss.Unlock()
stats.LeaderInfo.Uptime = time.Now().Sub(stats.LeaderInfo.StartTime).String()
stats.SendingPkgRate, stats.SendingBandwidthRate = stats.SendRates()
stats.RecvingPkgRate, stats.RecvingBandwidthRate = stats.RecvRates()
b, err := json.Marshal(stats)
// TODO(jonboulle): appropriate error handling?
if err != nil {
log.Printf("error marshalling server stats: %v", err)