aboutsummaryrefslogtreecommitdiff
path: root/weed
diff options
context:
space:
mode:
authorKonstantin Lebedev <9497591+kmlebedev@users.noreply.github.com>2022-09-01 21:01:47 +0500
committerGitHub <noreply@github.com>2022-09-01 09:01:47 -0700
commit803ca3c9589ce11d1799ded47bce25c58f179d85 (patch)
treec91aa23f79b82ed84ea92279b9e7d58ba169a8de /weed
parent9c76896e2d5ca45b92a7bbf7f1212b8444fb67a0 (diff)
downloadseaweedfs-803ca3c9589ce11d1799ded47bce25c58f179d85.tar.xz
seaweedfs-803ca3c9589ce11d1799ded47bce25c58f179d85.zip
avoid data race on doSubscribeToOneFiler/ma.filer.UniqueFilerEpoch (#3566)
https://github.com/seaweedfs/seaweedfs/issues/3565
Diffstat (limited to 'weed')
-rw-r--r--weed/filer/meta_aggregator.go5
1 files changed, 3 insertions, 2 deletions
diff --git a/weed/filer/meta_aggregator.go b/weed/filer/meta_aggregator.go
index d384c2c38..fbc163442 100644
--- a/weed/filer/meta_aggregator.go
+++ b/weed/filer/meta_aggregator.go
@@ -9,6 +9,7 @@ import (
"io"
"strings"
"sync"
+ "sync/atomic"
"time"
"google.golang.org/grpc"
@@ -194,13 +195,13 @@ func (ma *MetaAggregator) doSubscribeToOneFiler(f *Filer, self pb.ServerAddress,
err = pb.WithFilerClient(true, peer, ma.grpcDialOption, func(client filer_pb.SeaweedFilerClient) error {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
- ma.filer.UniqueFilerEpoch++
+ atomic.AddInt32(&ma.filer.UniqueFilerEpoch, 1)
stream, err := client.SubscribeLocalMetadata(ctx, &filer_pb.SubscribeMetadataRequest{
ClientName: "filer:" + string(self),
PathPrefix: "/",
SinceNs: lastTsNs,
ClientId: ma.filer.UniqueFilerId,
- ClientEpoch: ma.filer.UniqueFilerEpoch,
+ ClientEpoch: atomic.LoadInt32(&ma.filer.UniqueFilerEpoch),
})
if err != nil {
return fmt.Errorf("subscribe: %v", err)