From ba59bb2c2b852f2d519221680b434a35f31b00a4 Mon Sep 17 00:00:00 2001 From: disksing Date: Wed, 11 Apr 2018 21:37:09 +0800 Subject: [PATCH 1/2] etcdserver/stats: fix stats data race. --- etcdserver/stats/server.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/etcdserver/stats/server.go b/etcdserver/stats/server.go index 0278e885cf9..5106671d802 100644 --- a/etcdserver/stats/server.go +++ b/etcdserver/stats/server.go @@ -74,10 +74,10 @@ type serverStats struct { func (ss *ServerStats) JSON() []byte { ss.Lock() stats := ss.serverStats - ss.Unlock() - stats.LeaderInfo.Uptime = time.Since(stats.LeaderInfo.StartTime).String() stats.SendingPkgRate, stats.SendingBandwidthRate = stats.sendRateQueue.Rate() stats.RecvingPkgRate, stats.RecvingBandwidthRate = stats.recvRateQueue.Rate() + ss.Unlock() + stats.LeaderInfo.Uptime = time.Since(stats.LeaderInfo.StartTime).String() b, err := json.Marshal(stats) // TODO(jonboulle): appropriate error handling? if err != nil { From 10bf0283be6f22022e6303322d9b0936d26c722d Mon Sep 17 00:00:00 2001 From: disksing Date: Thu, 12 Apr 2018 10:43:11 +0800 Subject: [PATCH 2/2] etcdserver/stats: make all fields guarded by mutex. --- etcdserver/stats/server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etcdserver/stats/server.go b/etcdserver/stats/server.go index 5106671d802..b026e4480f6 100644 --- a/etcdserver/stats/server.go +++ b/etcdserver/stats/server.go @@ -76,8 +76,8 @@ func (ss *ServerStats) JSON() []byte { stats := ss.serverStats stats.SendingPkgRate, stats.SendingBandwidthRate = stats.sendRateQueue.Rate() stats.RecvingPkgRate, stats.RecvingBandwidthRate = stats.recvRateQueue.Rate() - ss.Unlock() stats.LeaderInfo.Uptime = time.Since(stats.LeaderInfo.StartTime).String() + ss.Unlock() b, err := json.Marshal(stats) // TODO(jonboulle): appropriate error handling? if err != nil {