From 9803c2816adb0e681d6e3a08c992dbf483dca877 Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Fri, 19 May 2023 14:58:30 +0300 Subject: [PATCH] [#74] pool: move to sync/atomic Signed-off-by: Evgenii Stratonikov --- go.mod | 2 +- go.sum | 4 ---- pool/cache.go | 8 ++++---- pool/pool.go | 9 ++++++--- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index b3a13da..ba5b5b7 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,6 @@ require ( github.com/mr-tron/base58 v1.2.0 github.com/nspcc-dev/neo-go v0.100.1 github.com/stretchr/testify v1.8.2 - go.uber.org/atomic v1.10.0 go.uber.org/zap v1.24.0 ) @@ -42,6 +41,7 @@ require ( go.opentelemetry.io/otel/sdk v1.14.0 // indirect go.opentelemetry.io/otel/trace v1.14.0 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect + go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.9.0 // indirect golang.org/x/crypto v0.4.0 // indirect golang.org/x/exp v0.0.0-20221227203929-1b447090c38c // indirect diff --git a/go.sum b/go.sum index 0928962..c158159 100644 --- a/go.sum +++ b/go.sum @@ -31,10 +31,6 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.0 h1:oZ0/KiaFeveXRLi5VVEpuLSHczeFyWx4HDl9wTJUtsE= -git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.0/go.mod h1:sPyITTmQT662ZI38ud2aoE1SUCAr1mO5xV8P4nzLkKI= -git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.1-0.20230413090614-b3ccd0166f50 h1:wt7ywk0w2y2scTt7LtlObV2tWUDbme5Gm3a3Llf0C14= -git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.1-0.20230413090614-b3ccd0166f50/go.mod h1:sPyITTmQT662ZI38ud2aoE1SUCAr1mO5xV8P4nzLkKI= git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.1-0.20230418080822-bd44a3f47b85 h1:77lvdk0kMhnUgtnmqEcAPXPQaGlt24goMPu2+E5WRTk= git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.1-0.20230418080822-bd44a3f47b85/go.mod h1:sPyITTmQT662ZI38ud2aoE1SUCAr1mO5xV8P4nzLkKI= git.frostfs.info/TrueCloudLab/frostfs-contract v0.0.0-20230307110621-19a8ef2d02fb h1:S/TrbOOu9qEXZRZ9/Ddw7crnxbBUQLo68PSzQWYrc9M= diff --git a/pool/cache.go b/pool/cache.go index d86a8a7..1614e8a 100644 --- a/pool/cache.go +++ b/pool/cache.go @@ -10,7 +10,7 @@ import ( type sessionCache struct { cache *lru.Cache[string, *cacheValue] - currentEpoch uint64 + currentEpoch atomic.Uint64 } type cacheValue struct { @@ -58,14 +58,14 @@ func (c *sessionCache) DeleteByPrefix(prefix string) { } func (c *sessionCache) updateEpoch(newEpoch uint64) { - epoch := atomic.LoadUint64(&c.currentEpoch) + epoch := c.currentEpoch.Load() if newEpoch > epoch { - atomic.StoreUint64(&c.currentEpoch, newEpoch) + c.currentEpoch.Store(newEpoch) } } func (c *sessionCache) expired(val *cacheValue) bool { - epoch := atomic.LoadUint64(&c.currentEpoch) + epoch := c.currentEpoch.Load() // use epoch+1 (clear cache beforehand) to prevent 'expired session token' error right after epoch tick return val.token.ExpiredAt(epoch + 1) } diff --git a/pool/pool.go b/pool/pool.go index f7abf4c..7f4515d 100644 --- a/pool/pool.go +++ b/pool/pool.go @@ -11,6 +11,7 @@ import ( "math/rand" "sort" "sync" + "sync/atomic" "time" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/accounting" @@ -29,7 +30,6 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user" "github.com/google/uuid" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" - "go.uber.org/atomic" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) @@ -194,10 +194,13 @@ func newClientStatusMonitor(logger *zap.Logger, addr string, errorThreshold uint methods[i] = &methodStatus{name: i.String()} } + healthy := new(atomic.Bool) + healthy.Store(true) + return clientStatusMonitor{ logger: logger, addr: addr, - healthy: atomic.NewBool(true), + healthy: healthy, errorThreshold: errorThreshold, methods: methods, } @@ -1796,7 +1799,7 @@ func (p *Pool) updateInnerNodesHealth(ctx context.Context, i int, bufferWeights pool := p.innerPools[i] options := p.rebalanceParams - healthyChanged := atomic.NewBool(false) + healthyChanged := new(atomic.Bool) wg := sync.WaitGroup{} for j, cli := range pool.clients {