Skip to content

Commit 6abc0fc

Browse files
committed
fix: 流量统计异常
1 parent b1d77a1 commit 6abc0fc

File tree

5 files changed

+13
-2
lines changed

5 files changed

+13
-2
lines changed

cmd/dashboard/controller/member_api.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"net/http"
88
"strconv"
99
"strings"
10+
"sync"
1011
"time"
1112

1213
"github.com/gin-gonic/gin"
@@ -384,6 +385,7 @@ func (ma *memberAPI) addOrEditServer(c *gin.Context) {
384385
} else {
385386
s.Host = &model.Host{}
386387
s.State = &model.HostState{}
388+
s.TaskCloseLock = new(sync.Mutex)
387389
singleton.ServerLock.Lock()
388390
singleton.SecretToID[s.Secret] = s.ID
389391
singleton.ServerList[s.ID] = &s

model/server.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package model
33
import (
44
"fmt"
55
"html/template"
6+
"sync"
67
"time"
78

89
"github.com/naiba/nezha/pkg/utils"
@@ -27,8 +28,9 @@ type Server struct {
2728
State *HostState `gorm:"-"`
2829
LastActive time.Time `gorm:"-"`
2930

30-
TaskClose chan error `gorm:"-" json:"-"`
31-
TaskStream pb.NezhaService_RequestTaskServer `gorm:"-" json:"-"`
31+
TaskClose chan error `gorm:"-" json:"-"`
32+
TaskCloseLock *sync.Mutex `gorm:"-" json:"-"`
33+
TaskStream pb.NezhaService_RequestTaskServer `gorm:"-" json:"-"`
3234

3335
PrevTransferInSnapshot int64 `gorm:"-" json:"-"` // 上次数据点时的入站使用量
3436
PrevTransferOutSnapshot int64 `gorm:"-" json:"-"` // 上次数据点时的出站使用量
@@ -39,6 +41,7 @@ func (s *Server) CopyFromRunningServer(old *Server) {
3941
s.State = old.State
4042
s.LastActive = old.LastActive
4143
s.TaskClose = old.TaskClose
44+
s.TaskCloseLock = old.TaskCloseLock
4245
s.TaskStream = old.TaskStream
4346
s.PrevTransferInSnapshot = old.PrevTransferInSnapshot
4447
s.PrevTransferOutSnapshot = old.PrevTransferOutSnapshot

pkg/utils/utils.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,5 +81,8 @@ func Uint64SubInt64(a uint64, b int64) uint64 {
8181
if b < 0 {
8282
return a + uint64(-b)
8383
}
84+
if a < uint64(b) {
85+
return 0
86+
}
8487
return a - uint64(b)
8588
}

service/rpc/nezha.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,14 @@ func (s *NezhaHandler) RequestTask(h *pb.Host, stream pb.NezhaService_RequestTas
9090
}
9191
closeCh := make(chan error)
9292
singleton.ServerLock.RLock()
93+
singleton.ServerList[clientID].TaskCloseLock.Lock()
9394
// 修复不断的请求 task 但是没有 return 导致内存泄漏
9495
if singleton.ServerList[clientID].TaskClose != nil {
9596
close(singleton.ServerList[clientID].TaskClose)
9697
}
9798
singleton.ServerList[clientID].TaskStream = stream
9899
singleton.ServerList[clientID].TaskClose = closeCh
100+
singleton.ServerList[clientID].TaskCloseLock.Unlock()
99101
singleton.ServerLock.RUnlock()
100102
return <-closeCh
101103
}

service/singleton/server.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ func loadServers() {
3434
innerS := s
3535
innerS.Host = &model.Host{}
3636
innerS.State = &model.HostState{}
37+
innerS.TaskCloseLock = new(sync.Mutex)
3738
ServerList[innerS.ID] = &innerS
3839
SecretToID[innerS.Secret] = innerS.ID
3940
ServerTagToIDList[innerS.Tag] = append(ServerTagToIDList[innerS.Tag], innerS.ID)

0 commit comments

Comments
 (0)