aboutsummaryrefslogtreecommitdiff
path: root/weed/topology/disk_ec.go
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2024-10-10 10:00:30 -0700
committerchrislu <chris.lu@gmail.com>2024-10-10 10:00:30 -0700
commit35fd1e1c9af62df7ca50324a0db2983ac4af4176 (patch)
treedd0be4f5fb6799ec522094a82e37daf91525d015 /weed/topology/disk_ec.go
parentb28b1a34025a2f2ed80883e245250d00783bfea7 (diff)
downloadseaweedfs-35fd1e1c9af62df7ca50324a0db2983ac4af4176.tar.xz
seaweedfs-35fd1e1c9af62df7ca50324a0db2983ac4af4176.zip
optimize memory usage for large number of volumes
1. unwrap the map to avoid extra map object creation 2. fix ec shard counting in UpdateEcShards
Diffstat (limited to 'weed/topology/disk_ec.go')
-rw-r--r--weed/topology/disk_ec.go19
1 files changed, 11 insertions, 8 deletions
diff --git a/weed/topology/disk_ec.go b/weed/topology/disk_ec.go
index 4f950025f..1fea29272 100644
--- a/weed/topology/disk_ec.go
+++ b/weed/topology/disk_ec.go
@@ -29,10 +29,12 @@ func (d *Disk) AddOrUpdateEcShard(s *erasure_coding.EcVolumeInfo) {
delta = existing.ShardBits.ShardIdCount() - oldCount
}
- deltaDiskUsages := newDiskUsages()
- deltaDiskUsage := deltaDiskUsages.getOrCreateDisk(types.ToDiskType(string(d.Id())))
- deltaDiskUsage.ecShardCount = int64(delta)
- d.UpAdjustDiskUsageDelta(deltaDiskUsages)
+ if delta == 0 {
+ return
+ }
+ d.UpAdjustDiskUsageDelta(types.ToDiskType(string(d.Id())), &DiskUsageCounts{
+ ecShardCount: int64(delta),
+ })
}
@@ -45,10 +47,11 @@ func (d *Disk) DeleteEcShard(s *erasure_coding.EcVolumeInfo) {
existing.ShardBits = existing.ShardBits.Minus(s.ShardBits)
delta := existing.ShardBits.ShardIdCount() - oldCount
- deltaDiskUsages := newDiskUsages()
- deltaDiskUsage := deltaDiskUsages.getOrCreateDisk(types.ToDiskType(string(d.Id())))
- deltaDiskUsage.ecShardCount = int64(delta)
- d.UpAdjustDiskUsageDelta(deltaDiskUsages)
+ if delta != 0 {
+ d.UpAdjustDiskUsageDelta(types.ToDiskType(string(d.Id())), &DiskUsageCounts{
+ ecShardCount: int64(delta),
+ })
+ }
if existing.ShardBits.ShardIdCount() == 0 {
delete(d.ecShards, s.VolumeId)