Browse Source

avoid data race on currentDiskUsage.maxVolumeCount (#3592)

https://github.com/seaweedfs/seaweedfs/issues/3590
pull/3523/merge
Konstantin Lebedev 2 years ago
committed by GitHub
parent
commit
695e3a909c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      weed/topology/data_node.go

6
weed/topology/data_node.go

@ -9,6 +9,7 @@ import (
"github.com/seaweedfs/seaweedfs/weed/storage/needle" "github.com/seaweedfs/seaweedfs/weed/storage/needle"
"github.com/seaweedfs/seaweedfs/weed/storage/types" "github.com/seaweedfs/seaweedfs/weed/storage/types"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
"sync/atomic"
) )
type DataNode struct { type DataNode struct {
@ -141,12 +142,13 @@ func (dn *DataNode) AdjustMaxVolumeCounts(maxVolumeCounts map[string]uint32) {
} }
dt := types.ToDiskType(diskType) dt := types.ToDiskType(diskType)
currentDiskUsage := dn.diskUsages.getOrCreateDisk(dt) currentDiskUsage := dn.diskUsages.getOrCreateDisk(dt)
if currentDiskUsage.maxVolumeCount == int64(maxVolumeCount) {
currentDiskUsageMaxVolumeCount := atomic.LoadInt64(&currentDiskUsage.maxVolumeCount)
if currentDiskUsageMaxVolumeCount == int64(maxVolumeCount) {
continue continue
} }
disk := dn.getOrCreateDisk(dt.String()) disk := dn.getOrCreateDisk(dt.String())
deltaDiskUsage := deltaDiskUsages.getOrCreateDisk(dt) deltaDiskUsage := deltaDiskUsages.getOrCreateDisk(dt)
deltaDiskUsage.maxVolumeCount = int64(maxVolumeCount) - currentDiskUsage.maxVolumeCount
deltaDiskUsage.maxVolumeCount = int64(maxVolumeCount) - currentDiskUsageMaxVolumeCount
disk.UpAdjustDiskUsageDelta(deltaDiskUsages) disk.UpAdjustDiskUsageDelta(deltaDiskUsages)
} }
} }

Loading…
Cancel
Save