Browse Source

fix(raft_server_stats.go) protect raft stats by a lock

Xiang Li 11 years ago
parent
commit
6d08976cbe
1 changed files with 9 additions and 0 deletions
  1. 9 0
      server/raft_server_stats.go

+ 9 - 0
server/raft_server_stats.go

@@ -1,6 +1,7 @@
 package server
 package server
 
 
 import (
 import (
+	"sync"
 	"time"
 	"time"
 
 
 	"github.com/coreos/etcd/third_party/github.com/goraft/raft"
 	"github.com/coreos/etcd/third_party/github.com/goraft/raft"
@@ -27,6 +28,8 @@ type raftServerStats struct {
 
 
 	sendRateQueue *statsQueue
 	sendRateQueue *statsQueue
 	recvRateQueue *statsQueue
 	recvRateQueue *statsQueue
+
+	sync.Mutex
 }
 }
 
 
 func NewRaftServerStats(name string) *raftServerStats {
 func NewRaftServerStats(name string) *raftServerStats {
@@ -43,6 +46,9 @@ func NewRaftServerStats(name string) *raftServerStats {
 }
 }
 
 
 func (ss *raftServerStats) RecvAppendReq(leaderName string, pkgSize int) {
 func (ss *raftServerStats) RecvAppendReq(leaderName string, pkgSize int) {
+	ss.Lock()
+	defer ss.Unlock()
+
 	ss.State = raft.Follower
 	ss.State = raft.Follower
 	if leaderName != ss.LeaderInfo.Name {
 	if leaderName != ss.LeaderInfo.Name {
 		ss.LeaderInfo.Name = leaderName
 		ss.LeaderInfo.Name = leaderName
@@ -54,6 +60,9 @@ func (ss *raftServerStats) RecvAppendReq(leaderName string, pkgSize int) {
 }
 }
 
 
 func (ss *raftServerStats) SendAppendReq(pkgSize int) {
 func (ss *raftServerStats) SendAppendReq(pkgSize int) {
+	ss.Lock()
+	defer ss.Unlock()
+
 	now := time.Now()
 	now := time.Now()
 
 
 	if ss.State != raft.Leader {
 	if ss.State != raft.Leader {