Browse Source

fix: sync/atomic bug, fix #1804 (#1805)


Co-authored-by: tanghuafa <tanghuafa@bytedance.com>
Tank 5 years ago
parent
commit
228e225f84
3 changed files with 18 additions and 17 deletions
  1. 5 5
      models/metrics/mem/server.go
  2. 1 0
      tests/util/util.go
  3. 12 12
      utils/metric/counter.go

+ 5 - 5
models/metrics/mem/server.go

@@ -177,12 +177,12 @@ func (m *serverMetrics) GetServer() *ServerStats {
 	s := &ServerStats{
 		TotalTrafficIn:  m.info.TotalTrafficIn.TodayCount(),
 		TotalTrafficOut: m.info.TotalTrafficOut.TodayCount(),
-		CurConns:        m.info.CurConns.Count(),
-		ClientCounts:    m.info.ClientCounts.Count(),
+		CurConns:        int64(m.info.CurConns.Count()),
+		ClientCounts:    int64(m.info.ClientCounts.Count()),
 		ProxyTypeCounts: make(map[string]int64),
 	}
 	for k, v := range m.info.ProxyTypeCounts {
-		s.ProxyTypeCounts[k] = v.Count()
+		s.ProxyTypeCounts[k] = int64(v.Count())
 	}
 	return s
 }
@@ -202,7 +202,7 @@ func (m *serverMetrics) GetProxiesByType(proxyType string) []*ProxyStats {
 			Type:            proxyStats.ProxyType,
 			TodayTrafficIn:  proxyStats.TrafficIn.TodayCount(),
 			TodayTrafficOut: proxyStats.TrafficOut.TodayCount(),
-			CurConns:        proxyStats.CurConns.Count(),
+			CurConns:        int64(proxyStats.CurConns.Count()),
 		}
 		if !proxyStats.LastStartTime.IsZero() {
 			ps.LastStartTime = proxyStats.LastStartTime.Format("01-02 15:04:05")
@@ -233,7 +233,7 @@ func (m *serverMetrics) GetProxiesByTypeAndName(proxyType string, proxyName stri
 			Type:            proxyStats.ProxyType,
 			TodayTrafficIn:  proxyStats.TrafficIn.TodayCount(),
 			TodayTrafficOut: proxyStats.TrafficOut.TodayCount(),
-			CurConns:        proxyStats.CurConns.Count(),
+			CurConns:        int64(proxyStats.CurConns.Count()),
 		}
 		if !proxyStats.LastStartTime.IsZero() {
 			res.LastStartTime = proxyStats.LastStartTime.Format("01-02 15:04:05")

+ 1 - 0
tests/util/util.go

@@ -143,6 +143,7 @@ func SendUdpMsg(addr string, msg string) (res string, err error) {
 		return
 	}
 
+	conn.SetReadDeadline(time.Now().Add(10 * time.Second))
 	buf := make([]byte, 2048)
 	n, errRet := conn.Read(buf)
 	if errRet != nil {

+ 12 - 12
utils/metric/counter.go

@@ -19,9 +19,9 @@ import (
 )
 
 type Counter interface {
-	Count() int64
-	Inc(int64)
-	Dec(int64)
+	Count() int32
+	Inc(int32)
+	Dec(int32)
 	Snapshot() Counter
 	Clear()
 }
@@ -33,28 +33,28 @@ func NewCounter() Counter {
 }
 
 type StandardCounter struct {
-	count int64
+	count int32
 }
 
-func (c *StandardCounter) Count() int64 {
-	return atomic.LoadInt64(&c.count)
+func (c *StandardCounter) Count() int32 {
+	return atomic.LoadInt32(&c.count)
 }
 
-func (c *StandardCounter) Inc(count int64) {
-	atomic.AddInt64(&c.count, count)
+func (c *StandardCounter) Inc(count int32) {
+	atomic.AddInt32(&c.count, count)
 }
 
-func (c *StandardCounter) Dec(count int64) {
-	atomic.AddInt64(&c.count, -count)
+func (c *StandardCounter) Dec(count int32) {
+	atomic.AddInt32(&c.count, -count)
 }
 
 func (c *StandardCounter) Snapshot() Counter {
 	tmp := &StandardCounter{
-		count: atomic.LoadInt64(&c.count),
+		count: atomic.LoadInt32(&c.count),
 	}
 	return tmp
 }
 
 func (c *StandardCounter) Clear() {
-	atomic.StoreInt64(&c.count, 0)
+	atomic.StoreInt32(&c.count, 0)
 }