Просмотр исходного кода

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

Xiang Li 11 лет назад
Родитель
Сommit
6d08976cbe
1 измененных файлов с 9 добавлено и 0 удалено
  1. 9 0
      server/raft_server_stats.go

+ 9 - 0
server/raft_server_stats.go

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