diff options
| author | LHHDZ <shichanglin5@qq.com> | 2024-09-25 14:04:18 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-24 23:04:18 -0700 |
| commit | 4dc33cc143375387e1bb118aa99e929eaa2f8288 (patch) | |
| tree | e569fa98f6dbee62d48d8de9bbc973d5a3d42cf1 /weed/storage | |
| parent | d056c0ddf2b7e34a5c7e8fdfe829e5c74e65a068 (diff) | |
| download | seaweedfs-4dc33cc143375387e1bb118aa99e929eaa2f8288.tar.xz seaweedfs-4dc33cc143375387e1bb118aa99e929eaa2f8288.zip | |
fix unclaimed spaces calculation when volumePreallocate is enabled (#6063)
the calculation of `unclaimedSpaces` only needs to subtract `unusedSpace` when `preallocate` is not enabled.
Signed-off-by: LHHDZ <shichanglin5@qq.com>
Diffstat (limited to 'weed/storage')
| -rw-r--r-- | weed/storage/store.go | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/weed/storage/store.go b/weed/storage/store.go index e2cf5d692..e34f0d79a 100644 --- a/weed/storage/store.go +++ b/weed/storage/store.go @@ -57,7 +57,8 @@ type ReadOption struct { type Store struct { MasterAddress pb.ServerAddress grpcDialOption grpc.DialOption - volumeSizeLimit uint64 // read from the master + volumeSizeLimit uint64 // read from the master + preallocate atomic.Bool // read from the master Ip string Port int GrpcPort int @@ -609,6 +610,14 @@ func (s *Store) GetVolumeSizeLimit() uint64 { return atomic.LoadUint64(&s.volumeSizeLimit) } +func (s *Store) SetPreallocate(x bool) { + s.preallocate.Store(x) +} + +func (s *Store) GetPreallocate() bool { + return s.preallocate.Load() +} + func (s *Store) MaybeAdjustVolumeMax() (hasChanges bool) { volumeSizeLimit := s.GetVolumeSizeLimit() if volumeSizeLimit == 0 { @@ -619,8 +628,12 @@ func (s *Store) MaybeAdjustVolumeMax() (hasChanges bool) { if diskLocation.OriginalMaxVolumeCount == 0 { currentMaxVolumeCount := atomic.LoadInt32(&diskLocation.MaxVolumeCount) diskStatus := stats.NewDiskStatus(diskLocation.Directory) - unusedSpace := diskLocation.UnUsedSpace(volumeSizeLimit) - unclaimedSpaces := int64(diskStatus.Free) - int64(unusedSpace) + var unusedSpace uint64 = 0 + unclaimedSpaces := int64(diskStatus.Free) + if !s.GetPreallocate() { + unusedSpace = diskLocation.UnUsedSpace(volumeSizeLimit) + unclaimedSpaces -= int64(unusedSpace) + } volCount := diskLocation.VolumesLen() ecShardCount := diskLocation.EcShardCount() maxVolumeCount := int32(volCount) + int32((ecShardCount+erasure_coding.DataShardsCount)/erasure_coding.DataShardsCount) |
