diff options
| author | Konstantin Lebedev <9497591+kmlebedev@users.noreply.github.com> | 2022-09-07 21:51:15 +0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-07 09:51:15 -0700 |
| commit | 695e3a909c43be623228a4b5a9c9c7cd371f6752 (patch) | |
| tree | a3a5a0223fcc417170b0ac07f917a98619989503 | |
| parent | cca45b02a25efd17c99cb656103d9f0140d6a248 (diff) | |
| download | seaweedfs-695e3a909c43be623228a4b5a9c9c7cd371f6752.tar.xz seaweedfs-695e3a909c43be623228a4b5a9c9c7cd371f6752.zip | |
avoid data race on currentDiskUsage.maxVolumeCount (#3592)
https://github.com/seaweedfs/seaweedfs/issues/3590
| -rw-r--r-- | weed/topology/data_node.go | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/weed/topology/data_node.go b/weed/topology/data_node.go index 760f14ded..0ce6fdbee 100644 --- a/weed/topology/data_node.go +++ b/weed/topology/data_node.go @@ -9,6 +9,7 @@ import ( "github.com/seaweedfs/seaweedfs/weed/storage/needle" "github.com/seaweedfs/seaweedfs/weed/storage/types" "github.com/seaweedfs/seaweedfs/weed/util" + "sync/atomic" ) type DataNode struct { @@ -141,12 +142,13 @@ func (dn *DataNode) AdjustMaxVolumeCounts(maxVolumeCounts map[string]uint32) { } dt := types.ToDiskType(diskType) currentDiskUsage := dn.diskUsages.getOrCreateDisk(dt) - if currentDiskUsage.maxVolumeCount == int64(maxVolumeCount) { + currentDiskUsageMaxVolumeCount := atomic.LoadInt64(¤tDiskUsage.maxVolumeCount) + if currentDiskUsageMaxVolumeCount == int64(maxVolumeCount) { continue } disk := dn.getOrCreateDisk(dt.String()) deltaDiskUsage := deltaDiskUsages.getOrCreateDisk(dt) - deltaDiskUsage.maxVolumeCount = int64(maxVolumeCount) - currentDiskUsage.maxVolumeCount + deltaDiskUsage.maxVolumeCount = int64(maxVolumeCount) - currentDiskUsageMaxVolumeCount disk.UpAdjustDiskUsageDelta(deltaDiskUsages) } } |
