fix data race

This commit is contained in:
yusing
2025-02-24 19:24:46 +08:00
parent 135c79d2ad
commit 0d388a396c
8 changed files with 29 additions and 20 deletions

View File

@@ -12,6 +12,7 @@ import (
"github.com/yusing/go-proxy/internal/gperr"
"github.com/yusing/go-proxy/internal/logging"
"github.com/yusing/go-proxy/internal/task"
"github.com/yusing/go-proxy/internal/utils/atomic"
)
type (
@@ -24,7 +25,7 @@ type (
aggregate AggregateFunc[T, AggregateT]
resultFilter FilterFunc[T]
period *Period[T]
lastResult *T
lastResult atomic.Value[*T]
errs []pollErr
}
pollErr struct {
@@ -119,13 +120,13 @@ func (p *Poller[T, AggregateT]) clearErrs() {
func (p *Poller[T, AggregateT]) pollWithTimeout(ctx context.Context) {
ctx, cancel := context.WithTimeout(ctx, pollInterval)
defer cancel()
data, err := p.poll(ctx, p.lastResult)
data, err := p.poll(ctx, p.lastResult.Load())
if err != nil {
p.appendErr(err)
return
}
p.period.Add(data)
p.lastResult = data
p.lastResult.Store(data)
}
func (p *Poller[T, AggregateT]) Start() {
@@ -184,5 +185,5 @@ func (p *Poller[T, AggregateT]) Get(filter Filter) ([]*T, bool) {
}
func (p *Poller[T, AggregateT]) GetLastResult() *T {
return p.lastResult
return p.lastResult.Load()
}

View File

@@ -31,10 +31,6 @@ type (
var Poller = period.NewPoller("uptime", getStatuses, aggregateStatuses)
func init() {
Poller.Start()
}
func getStatuses(ctx context.Context, _ *StatusByAlias) (*StatusByAlias, error) {
return &StatusByAlias{
Map: routequery.HealthInfo(),