Browse Source

avoid data race on calc freeVolumeSlotCount (#3594)

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

8
weed/topology/node.go

@ -10,6 +10,7 @@ import (
"math/rand"
"strings"
"sync"
"sync/atomic"
)
type NodeId string
@ -139,9 +140,10 @@ func (n *NodeImpl) getOrCreateDisk(diskType types.DiskType) *DiskUsageCounts {
}
func (n *NodeImpl) AvailableSpaceFor(option *VolumeGrowOption) int64 {
t := n.getOrCreateDisk(option.DiskType)
freeVolumeSlotCount := t.maxVolumeCount + t.remoteVolumeCount - t.volumeCount
if t.ecShardCount > 0 {
freeVolumeSlotCount = freeVolumeSlotCount - t.ecShardCount/erasure_coding.DataShardsCount - 1
freeVolumeSlotCount := atomic.LoadInt64(&t.maxVolumeCount) + atomic.LoadInt64(&t.remoteVolumeCount) - atomic.LoadInt64(&t.volumeCount)
ecShardCount := atomic.LoadInt64(&t.ecShardCount)
if ecShardCount > 0 {
freeVolumeSlotCount = freeVolumeSlotCount - ecShardCount/erasure_coding.DataShardsCount - 1
}
return freeVolumeSlotCount
}

Loading…
Cancel
Save